當前位置:
首頁 > 知識 > 如何從數據挖掘比賽中脫穎而出?快來 get 阿里媽媽廣告演算法賽亞軍套路吧!

如何從數據挖掘比賽中脫穎而出?快來 get 阿里媽媽廣告演算法賽亞軍套路吧!

雷鋒網 AI 研習社按,本文為 IJCAI-18 阿里媽媽搜索廣告演算法大賽亞軍解決方案。本文由作者發在其 GitHub 主頁,雷鋒網(公眾號:雷鋒網) AI 研習社獲其授權轉載。


一、隊員介紹

隊長:BRYAN

數據挖掘從業者,國內數據挖掘競賽名將,天池數據科學家,IJCAI-17 冠軍獲得者。曾多次在國內外著名賽事中取得名次。

隊員:桑楡

數據挖掘從業者,國內數據挖掘競賽名將,天池數據大師,IJCAI-17 冠軍獲得者。曾多次在國內外著名賽事中取得名次。

隊員:李困困

數據挖掘從業者,國內數據挖掘競賽名將。曾取得 CCF-螞蟻金服-商場定位賽冠軍等多項國內外著名賽事的名次。


二、賽題背景分析及理解

本賽題為搜索廣告轉化預估問題,一條樣本包含廣告點擊相關的用戶(user)、廣告商品(ad)、檢索詞(query)、上下文內容(context)、商店(shop)等信息的條件下預測廣告產生購買行為的概率(pCVR),形式化定義為:pCVR=P(conversion=1 | query, user, ad, context, shop)。可以將問題抽象為二分類問題,重點對用戶,商品,檢索詞,上下文,商店進行特徵刻畫,來訓練模型。


三、核心思路

(1) 數據分析

通過數據分析我們發現,訓練數據的前 7 天轉化率維持在 1% 左右,但是在 6 號轉化率偏低,在預測當天 7 號的上午轉化率超過 4%,所以這是一個對特定促銷日進行預測的問題。重點需要刻畫用戶,商品,店鋪,檢索詞等關鍵信息在預測日前面 7 天的行為,預測日前一天的行為,預測日當天的行為。

另外 7 號的樣本量遠遠超過前面每天的樣本量均值,是我們重點需要關注的時間區間。主模型是基於 7 號上午的樣本進行訓練,前面 7 天的數據輔助訓練。由於預估時間為 7 號下午,時間相關的特徵沒法在上午訓練,為了彌補 7 號上午訓練帶來是數據和信息損失,我們隊伍採用了兩種方式:,一種採用前面 7 天訓練模型預估 7 號得到概率作為新的特徵,一種是訓練 7 號之前以及 7 號上午訓練全量模型進行加權。

(2) 用戶分析

從下圖可以看到大部分用戶的點擊次數集中在 5 次以下,8 天的時間內點擊 5 次,說明這是一個低頻訴求的場景。

在下圖中可以看到,大部分用戶都沒有購買行為,少量用戶購買了一次,本次競賽的目標預測用戶是否購買,少量的購買行為構成了數據的長尾分布形勢。

下圖是用戶點擊次數和購買次數的關係,橫軸點擊數,縱軸購買數。可以看到數據是呈左下角分布的趨勢,也就是說購買行為發生在少量點擊次數的情況下,說明這是一個即時興趣,目標明確的場景。我們需要重點刻畫用戶當前狀態。

從用戶分析中,我們發現,點擊一次的用戶佔據較大的比例,這部分無法通過歷史行為的特徵刻畫表徵,因此提供的 query 信息是表徵這部分用戶的關鍵;同時,絕大部分用戶沒有發生購買行為,因此,負樣本中包含了大量的信息,另外評估指標是 logloss,需要精確預測購買概率,所以並未對負樣本進行採樣,避免破壞正負樣本分布。

(3) 預處理

缺失值填充:id 類特徵使用眾值填充,數值特徵均值填充

挖掘隱藏信息:針對 item_property_list 列,統計 property 出現次數,保留出現次數的 top1~top10 作為新的 id 特徵;針對predict_category_property 列,直接按順序保留 top1~top10 的類別作為新的 id 特徵。針對 item_category_list 列,因為第一個大類都相同,取第二個類別作為新的 id 類特徵。

(4) 線下劃分

由於線上提交的次數有限,因此,建立穩定的線下是取勝的關鍵。為提升我們優化演算法的效率,減少線上成績的運氣性成分,同時避免我們的演算法過度依賴於線上數據集,我們認真地進行了線下測試,分別採取 7 日上午最後兩個小時,7 日上午隨機 15%的數據進行驗證,只有兩者在線下均有提升,我們才進行線上提交。因此,我們始終確保我們在線上驗證的優化在線下均有顯著的提升。

(5) 模型設計

我們採用了 3 種數據劃分方式訓練模型,主模型使用 7 號上午的數據作為訓練樣本,對 31-5 號,6 號,7 號的數據提取特徵。全局數據模型使用全部帶標籤的樣本作為訓練樣本,使用全部數據提取特徵。時間信息模型使用 31-6 號的數據作為訓練樣本,對 31-6 數據提取特徵。訓練的時間信息模型對 7 號全天的樣本進行預測,將預測結果(攜帶了時間信息)作為新的特徵添加到前面的模型中,來彌補前面模型對時間刻畫的缺失。

(6) 特徵工程

特徵工程是模型提分的關鍵,我們從簡單到複雜建立了基礎特徵群,轉化率特徵群,排名特徵群,比例特徵群,類特徵群,競爭特徵群,業務特徵群等多種特徵群,對用戶及行為進行了細緻的刻畫。

在原始特徵的基礎上的一些簡單擴充與統計,由於用戶的行為過於稀疏,提取用戶轉化率的時候做了平滑,另外對用戶購買點擊行為做編碼。在 query 交互,用戶交互,競爭特徵群中,計算量較大,採用並行的方式提取,提升效率。

為了提高效率,我們採用分批測試特徵群的方式進行線下驗證。其中紫色特徵群是過擬合的特徵群,線下表現突出,在線上表現平平。究其原因是因為,這些特徵都是對當天上午的數據進行統計,即使我們使用交叉的方式提取,盡量避免數據穿越,由於上午下午數據分布有差異,所以依然沒能很好的克服過擬合。

(7) 模型融合

不同模型好而不同是融合提升的關鍵,我們隊伍隊員分別做了三個高分模型,每個模型在樣本與特徵上均有差異,因此,通過融合進一步提升了成績。最好的單模型依然能保持 top2 的成績。


四、工程優化

為了使模型更具業務實用性,我們對代碼進行了優化,主要包括下面四個方面:

1)id 類特徵重編碼,直接當作特徵,樹模型深度設置-1,避免了onehot 大量佔用內存空間,實際效果和 onehot 相當。

2)數據並行,主模型 2 小時提取完全部特徵。由於 python 的多進程中,子進程會拷貝父進程狀態,如果直接把數據分塊然後使用多進程會導致內存暴漲,所以我們的解決方案是先將數據分塊存為磁碟文件,然後在多進程任務中分別讀取各自數據提取特徵,最後合併特徵,有效的減少了內存佔用。

3)數據合併,訓練預測數據一起提取特徵。直接使用 day,hour 等欄位在提取特徵完畢之後劃分訓練,驗證,測試集。提高了特徵提取,線下測試,線上預測的流程效率。

4)特徵分批測試,提高效率。由於複賽數據量比較大,如果使用warper類的特徵選擇方法會浪費大量時間,所以我們直接按特徵群分批測試,使用原始特徵+測試特徵群的方式進行線下驗證,少量的特徵得以快速迭代驗證。

5)並行特徵提取的關鍵代碼

數據分塊存儲

特徵提取

特徵合併


五、比賽經驗總結

(1)深刻的賽題理解

對賽題進行認真而理性的分析和全面而深入的思考,對不了解之處做相應的調研。

(2)細緻的數據分析

從各個維度對數據進行細緻的觀察和分析,從中挖掘出重要的規律。

(3)海量的特徵

多角度地提取有效特徵,構造廣闊而高質量的特徵海洋,確保沒有遺漏有用的信息。

(4)強力的模型

訓練多組不同採樣方式、不同特徵的強力模型,並將它們融合成威力巨大的終極模型。

(5)未完成的思考

賽題背景是搜索轉化預估,可以直接使用的數據是用戶已經點擊過的數據,實際上我們還可以拿到用戶看到過,但是沒點擊的數據來輔助訓練。一個 query 會出多個商品,用戶可能只點擊了其中一個,如何獲取用戶看到的其他商品呢?關鍵還是在 query 上,如果有其他用戶用同樣的 query 進行了搜索並且點擊了不同的商品,那麼這個商品可能就是被其他沒有點擊的用戶看到過的。

(6)比賽與實際業務的差距

在本次比賽中,我們使用了大量的特徵以及模型融合,其中存在兩個需要討論的問題。首先是特徵,我們使用了部分用戶當前狀態的特徵,比如距離上一次點擊時間間隔,距離下一次點擊時間間隔。第一個特徵在實際業務中,需要實時提取,如何設計實時特徵的計算框架,性能能否跟上都是需要考慮的問題。第二個特徵距離下一次點擊時間間隔,這個特徵甚至在實際業務中根本提取不到,屬於未來的信息,但是在比賽中卻可以利用到。如果把預測時間段的用戶數據調整為一個用戶只出現一次,那麼這個問題就可以得到很好的解決。

隨之而來的另一個問題是,用戶只出現一次,就無法統計到用戶當前狀態的其他未利用到未來信息的特徵,像商品店鋪的統計信息也不完全,會引起一個信息缺失的問題。所以如何在比賽與實際業務中平衡數據的利用程度是一個需要考慮到的問題。另外一個是模型設計的問題,實際業務中幾乎不太可能會用到 stack 之類的模型融合方案,模型複雜度帶來的計算代價和線上預估時間的代價可能會超過模型融合性能提升帶來的收益,實際業務簡單加權融合可能會成為多數時候的選擇。

本次比賽我們選擇了 LightGBM 模型,因為數據量少,訓練快,可以在線下快速迭代。在實際業務中,使用的更多的模型可能是 LR,FFM,DNN 之類的模型,實際業務的數據是海量的,這些模型更能學習到穩定魯棒的參數,並且預估速度更快。由於正負樣本比例懸殊,如果考慮訓練效率的話,其實也可以對負樣本進行採樣後訓練,比如 LR 模型訓練之後通過對截距項的修正,依然可以保持預估的數據符合實際分布。


六、 團隊亮點

(1)強大的陣容

聚集三位優秀的數據挖掘競賽選手。

(2)一致的目標

隊員們對本次比賽的目標一致而明確(雖然最終並未達成)。

(3)良好的溝通

隊員們頻繁地對賽題進行討論,及時地同步各自的進展。

(4)完美的配合

隊員們分別訓練不同的模型,彼此的模型差異極大,特別適合進行

融合。

(完)

代碼 + 數據鏈接:

https://github.com/YouChouNoBB/ijcai-18-top2-single-mole-solution

CCF-GAIR 2018 在即,

AI 研習社送福利了!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

Databricks 開源 MLflow 平台,解決機器學習開發四大難點

TAG:AI研習社 |