數據挖掘系列篇(27):Kaggle 數據挖掘比賽經驗分享

作者:陳成龍

1.

Kaggle 基本介紹

Kaggle 於 2010 年創立,專注數據科學,機器學習競賽的舉辦,是全球最大的數據科學社區和數據競賽平臺。在 Kaggle 上,企業或者研究機構發佈商業和科研難題,懸賞吸引全球的數據科學家,通過眾包的方式解決建模問題。而參賽者可以接觸到豐富的真實數據,解決實際問題,角逐名次,贏取獎金。諸如 Google,Facebook,Microsoft 等知名科技公司均在 Kaggle 上面舉辦過數據挖掘比賽。2017年3月,Kaggle 被 Google CloudNext 收購。

1.1 參賽方式

可以以個人或者組隊的形式參加比賽。組隊人數一般沒有限制,但需要在 Merger Deadline 前完成組隊。為了能參與到比賽中,需要在 Entry Deadline 前進行至少一次有效提交。最簡單地,可以直接提交官方提供的 Sample Submission。關於組隊,建議先單獨個人進行數據探索和模型構建,以個人身份進行比賽,在比賽後期(譬如離比賽結束還有 2~3 周)再進行組隊,以充分發揮組隊的效果(類似於模型集成,模型差異性越大,越有可能有助於效果的提升,超越單模型的效果)。當然也可以一開始就組好隊,方便分工協作,討論問題和碰撞火花。

Kaggle 對比賽的公正性相當重視。在比賽中,每個人只允許使用一個賬號進行提交。在比賽結束後 1~2 周內,Kaggle 會對使用多賬號提交的 Cheater 進行剔除(一般會對 Top 100 的隊伍進行 Cheater Detection)。在被剔除者的 Kaggle 個人頁面上,該比賽的成績也會被刪除,相當於該選手從沒參加過這個比賽。此外,隊伍之間也不能私自分享代碼或者數據,除非在論壇上面公開發布。

比賽一般只提交測試集的預測結果,無需提交代碼。每人(或每個隊伍)每天有提交次數的限制,一般為2次或者5次,在 Submission 頁面會有提示。

1.2 比賽獲獎

Kaggle 比賽獎金豐厚,一般前三名均可以獲得獎金。在最近落幕的第二屆 National Data Science Bowl 中,總獎金池高達 100W 美刀,其中第一名可以獲得 50W 美刀的獎勵,即使是第十名也能收穫 2.5W 美刀的獎金。

獲獎的隊伍需要在比賽結束後 1~2 周內,準備好可執行的代碼以及 README,算法說明文檔等提交給 Kaggle 來進行獲獎資格的審核。Kaggle 會邀請獲獎隊伍在 Kaggle Blog 中發表 Interview,來分享比賽故事和經驗心得。對於某些比賽,Kaggle 或者主辦方會邀請獲獎隊伍進行電話/視頻會議,獲獎隊伍進行 Presentation,並與主辦方團隊進行交流。

1.3 比賽類型

從 Kaggle 提供的官方分類來看,可以劃分為以下類型(如下圖1所示):

◆ Featured:商業或科研難題,獎金一般較為豐厚;

◆ Recruitment:比賽的獎勵為面試機會;

◆ Research:科研和學術性較強的比賽,也會有一定的獎金,一般需要較強的領域和專業知識;

◆ Playground:提供一些公開的數據集用於嘗試模型和算法;

◆ Getting Started:提供一些簡單的任務用於熟悉平臺和比賽;

◆ In Class:用於課堂項目作業或者考試。

數據挖掘系列篇(27):Kaggle 數據挖掘比賽經驗分享

圖1. Kaggle 比賽類型

從領域歸屬劃分:包含搜索相關性,廣告點擊率預估,銷量預估,貸款違約判定,癌症檢測等。

從任務目標劃分:包含迴歸,分類(二分類,多分類,多標籤),排序,混合體(分類+迴歸)等。

從數據載體劃分:包含文本,語音,圖像和時序序列等。

從特徵形式劃分:包含原始數據,明文特徵,脫敏特徵(特徵的含義不清楚)等。

1.4 比賽流程

一個數據挖掘比賽的基本流程如下圖2所示,具體的模塊我將在下一章進行展開陳述。

數據挖掘系列篇(27):Kaggle 數據挖掘比賽經驗分享

圖2. 數據挖掘比賽基本流程

這裡想特別強調的一點是,Kaggle 在計算得分的時候,有Public Leaderboard (LB)和 Private LB 之分。具體而言,參賽選手提交整個測試集的預測結果,Kaggle 使用測試集的一部分計算得分和排名,實時顯示在 Public LB上,用於給選手提供及時的反饋和動態展示比賽的進行情況;測試集的剩餘部分用於計算參賽選手的最終得分和排名,此即為 Private LB,在比賽結束後會揭曉。用於計算 Public LB 和 Private LB 的數據有不同的劃分方式,具體視比賽和數據的類型而定,一般有隨機劃分,按時間劃分或者按一定規則劃分。

這個過程可以概括如下圖3所示,其目的是避免模型過擬合,以得到泛化能力好的模型。如果不設置 Private LB(即所有的測試數據都用於計算 Public LB),選手不斷地從 Public LB(即測試集)中獲得反饋,進而調整或篩選模型。這種情況下,測試集實際上是作為驗證集參與到模型的構建和調優中來。Public LB上面的效果並非是在真實未知數據上面的效果,不能可靠地反映模型的效果。劃分 Public LB 和 Private LB 這樣的設置,也在提醒參賽者,我們建模的目標是要獲得一個在未知數據上表現良好的模型,而並非僅僅是在已知數據上效果好。

數據挖掘系列篇(27):Kaggle 數據挖掘比賽經驗分享

圖3. 劃分 Public LB 和 Private LB的目的

(圖參考 Owenzhang 的分享 [1])

2.

數據挖掘比賽基本流程

從上面圖2可以看到,做一個數據挖掘比賽,主要包含了數據分析,數據清洗,特徵工程,模型訓練和驗證等四個大的模塊,以下來一一對其進行介紹。

2.1 數據分析

數據分析可能涉及以下方面:

◆ 分析特徵變量的分佈

◇ 特徵變量為連續值:如果為長尾分佈並且考慮使用線性模型,可以對變量進行冪變換或者對數變換。

◇ 特徵變量為離散值:觀察每個離散值的頻率分佈,對於頻次較低的特徵,可以考慮統一編碼為“其他”類別。

◆ 分析目標變量的分佈

◇ 目標變量為連續值:查看其值域範圍是否較大,如果較大,可以考慮對其進行對數變換,並以變換後的值作為新的目標變量進行建模(在這種情況下,需要對預測結果進行逆變換)。一般情況下,可以對連續變量進行Box-Cox變換。通過變換可以使得模型更好的優化,通常也會帶來效果上的提升。

◇ 目標變量為離散值:如果數據分佈不平衡,考慮是否需要上採樣/下采樣;如果目標變量在某個ID上面分佈不平衡,在劃分本地訓練集和驗證集的時候,需要考慮分層採樣(Stratified Sampling)。

◆ 分析變量之間兩兩的分佈和相關度

◇ 可以用於發現高相關和共線性的特徵。

通過對數據進行探索性分析(甚至有些情況下需要肉眼觀察樣本),還可以有助於啟發數據清洗和特徵抽取,譬如缺失值和異常值的處理,文本數據是否需要進行拼寫糾正等。

2.2 數據清洗

數據清洗是指對提供的原始數據進行一定的加工,使得其方便後續的特徵抽取。其與特徵抽取的界限有時也沒有那麼明確。常用的數據清洗一般包括:

◆ 數據的拼接

◇ 提供的數據散落在多個文件,需要根據相應的鍵值進行數據的拼接。

◆ 特徵缺失值的處理

◇ 特徵值為連續值:按不同的分佈類型對缺失值進行補全:偏正態分佈,使用均值代替,可以保持數據的均值;偏長尾分佈,使用中值代替,避免受 outlier 的影響;

◇ 特徵值為離散值:使用眾數代替。

◆ 文本數據的清洗

◇ 在比賽當中,如果數據包含文本,往往需要進行大量的數據清洗工作。如去除HTML 標籤,分詞,拼寫糾正, 同義詞替換,去除停詞,抽詞幹,數字和單位格式統一等。

2.3 特徵工程

有一種說法是,特徵決定了效果的上限,而不同模型只是以不同的方式或不同的程度來逼近這個上限。這樣來看,好的特徵輸入對於模型的效果至關重要,正所謂”Garbage in, garbage out”。要做好特徵工程,往往跟領域知識和對問題的理解程度有很大的關係,也跟一個人的經驗相關。特徵工程的做法也是Case by Case,以下就一些點,談談自己的一些看法。

2.3.1 特徵變換

主要針對一些長尾分佈的特徵,需要進行冪變換或者對數變換,使得模型(LR或者DNN)能更好的優化。需要注意的是,Random Forest 和 GBDT 等模型對單調的函數變換不敏感。其原因在於樹模型在求解分裂點的時候,只考慮排序分位點。

2.3.2 特徵編碼

對於離散的類別特徵,往往需要進行必要的特徵轉換/編碼才能將其作為特徵輸入到模型中。常用的編碼方式有 LabelEncoder,OneHotEncoder(sklearn裡面的接口)。譬如對於”性別”這個特徵(取值為男性和女性),使用這兩種方式可以分別編碼為{0,1}和{[1,0], [0,1]}。

對於取值較多(如幾十萬)的類別特徵(ID特徵),直接進行OneHotEncoder編碼會導致特徵矩陣非常巨大,影響模型效果。可以使用如下的方式進行處理:

◆ 統計每個取值在樣本中出現的頻率,取 Top N 的取值進行 One-hot 編碼,剩下的類別分到“其他“類目下,其中 N 需要根據模型效果進行調優;

◆ 統計每個 ID 特徵的一些統計量(譬如歷史平均點擊率,歷史平均瀏覽率)等代替該 ID 取值作為特徵,具體可以參考 Avazu 點擊率預估比賽第二名的獲獎方案;

◆ 參考 word2vec 的方式,將每個類別特徵的取值映射到一個連續的向量,對這個向量進行初始化,跟模型一起訓練。訓練結束後,可以同時得到每個ID的Embedding。具體的使用方式,可以參考 Rossmann 銷量預估競賽第三名的獲獎方案,https://github.com/entron/entity-embedding-rossmann。

對於 Random Forest 和 GBDT 等模型,如果類別特徵存在較多的取值,可以直接使用 LabelEncoder 後的結果作為特徵。

2.4 模型訓練和驗證

2.4.1 模型選擇

在處理好特徵後,我們可以進行模型的訓練和驗證。

◆ 對於稀疏型特徵(如文本特徵,One-hot的ID類特徵),我們一般使用線性模型,譬如 Linear Regression 或者 Logistic Regression。Random Forest 和 GBDT 等樹模型不太適用於稀疏的特徵,但可以先對特徵進行降維(如PCA,SVD/LSA等),再使用這些特徵。稀疏特徵直接輸入 DNN 會導致網絡 weight 較多,不利於優化,也可以考慮先降維,或者對 ID 類特徵使用 Embedding 的方式;

◆ 對於稠密型特徵,推薦使用 XGBoost 進行建模,簡單易用效果好;

◆ 數據中既有稀疏特徵,又有稠密特徵,可以考慮使用線性模型對稀疏特徵進行建模,將其輸出與稠密特徵一起再輸入 XGBoost/DNN 建模,具體可以參考2.5.2節 Stacking 部分。

2.4.2 調參和模型驗證

對於選定的特徵和模型,我們往往還需要對模型進行超參數的調優,才能獲得比較理想的效果。調參一般可以概括為以下三個步驟:

1. 訓練集和驗證集的劃分。根據比賽提供的訓練集和測試集,模擬其劃分方式對訓練集進行劃分為本地訓練集和本地驗證集。劃分的方式視具體比賽和數據而定,常用的方式有:

a) 隨機劃分:譬如隨機採樣 70% 作為訓練集,剩餘的 30% 作為測試集。在這種情況下,本地可以採用 KFold 或者 Stratified KFold 的方法來構造訓練集和驗證集。

b) 按時間劃分:一般對應於時序序列數據,譬如取前 7 天數據作為訓練集,後 1 天數據作為測試集。這種情況下,劃分本地訓練集和驗證集也需要按時間先後劃分。常見的錯誤方式是隨機劃分,這種劃分方式可能會導致模型效果被高估。

c) 按某些規則劃分:在 HomeDepot 搜索相關性比賽中,訓練集和測試集中的 Query 集合並非完全重合,兩者只有部分交集。而在另外一個相似的比賽中(CrowdFlower 搜索相關性比賽),訓練集和測試集具有完全一致的 Query 集合。對於 HomeDepot 這個比賽中,訓練集和驗證集數據的劃分,需要考慮 Query 集合並非完全重合這個情況,其中的一種方法可以參考第三名的獲獎方案,https://github.com/ChenglongChen/Kaggle_HomeDepot。

2. 指定參數空間。在指定參數空間的時候,需要對模型參數以及其如何影響模型的效果有一定的瞭解,才能指定出合理的參數空間。譬如DNN或者XGBoost中學習率這個參數,一般就選 0.01 左右就 OK 了(太大可能會導致優化算法錯過最優化點,太小導致優化收斂過慢)。再如 Random Forest,一般設定樹的棵數範圍為 100~200 就能有不錯的效果,當然也有人固定數棵數為 500,然後只調整其他的超參數。

3. 按照一定的方法進行參數搜索。常用的參數搜索方法有,Grid Search,Random Search以及一些自動化的方法(如 Hyperopt)。其中,Hyperopt 的方法,根據歷史已經評估過的參數組合的效果,來推測本次評估使用哪個參數組合更有可能獲得更好的效果。有關這些方法的介紹和對比,可以參考文獻 [2]。

2.4.3 適當利用 Public LB 的反饋

在2.4.2節中我們提到本地驗證(Local Validation)結果,當將預測結果提交到 Kaggle 上時,我們還會接收到 Public LB 的反饋結果。如果這兩個結果的變化趨勢是一致的,如 Local Validation 有提升,Public LB 也有提升,我們可以藉助 Local Validation 的變化來感知模型的演進情況,而無需靠大量的 Submission。如果兩者的變化趨勢不一致,需要考慮2.4.2節中提及的本地訓練集和驗證集的劃分方式,是否跟訓練集和測試集的劃分方式一致。

另外,在以下一些情況下,往往 Public LB 反饋亦會提供有用信息,適當地使用這些反饋也許會給你帶來優勢。如圖4所示,(a)和(b)表示數據與時間沒有明顯的關係(如圖像分類),(c)和(d)表示數據隨時間變化(如銷量預估中的時序序列)。(a)和(b)的區別在於,訓練集樣本數相對於 Public LB 的量級大小,其中(a)中訓練集樣本數遠超於 Public LB 的樣本數,這種情況下基於訓練集的 Local Validation 更可靠;而(b)中,訓練集數目與 Public LB 相當,這種情況下,可以結合 Public LB 的反饋來指導模型的選擇。一種融合的方式是根據 Local Validation 和 Public LB 的樣本數目,按比例進行加權。譬如評估標準為正確率,Local Validation 的樣本數為 N_l,正確率為 A_l;Public LB 的樣本數為 N_p,正確率為 A_p。則可以使用融合後的指標:(N_l * A_l + N_p * A_p)/(N_l + N_p),來進行模型的篩選。對於(c)和(d),由於數據分佈跟時間相關,很有必要使用 Public LB 的反饋來進行模型的選擇,尤其對於(c)圖所示的情況。

數據挖掘系列篇(27):Kaggle 數據挖掘比賽經驗分享

圖4. 適當利用 Public LB 的反饋

(圖參考 Owenzhang 的分享 [1])

2.5 模型集成

如果想在比賽中獲得名次,幾乎都要進行模型集成(組隊也是一種模型集成)。關於模型集成的介紹,已經有比較好的博文了,可以參考 [3]。在這裡,我簡單介紹下常用的方法,以及個人的一些經驗。

2.5.1 Averaging 和 Voting

直接對多個模型的預測結果求平均或者投票。對於目標變量為連續值的任務,使用平均;對於目標變量為離散值的任務,使用投票的方式。

2.5.2 Stacking

數據挖掘系列篇(27):Kaggle 數據挖掘比賽經驗分享

圖5. 5-Fold Stacking

(圖參考 Jeong-Yoon Lee 的分享 [4])

圖5展示了使用 5-Fold 進行一次 Stacking 的過程(當然在其上可以再疊加 Stage 2, Stage 3 等)。其主要的步驟如下:

1. 數據集劃分。將訓練數據按照5-Fold進行劃分(如果數據跟時間有關,需要按時間劃分,更一般的劃分方式請參考3.4.2節,這裡不再贅述);

2. 基礎模型訓練 I(如圖5第一行左半部分所示)。按照交叉驗證(Cross Validation)的方法,在訓練集(Training Fold)上面訓練模型(如圖灰色部分所示),並在驗證集(Validation Fold)上面做預測,得到預測結果(如圖黃色部分所示)。最後綜合得到整個訓練集上面的預測結果(如圖第一個黃色部分的CV Prediction所示)。

3. 基礎模型訓練 II(如圖5第二和三行左半部分所示)。在全量的訓練集上訓練模型(如圖第二行灰色部分所示),並在測試集上面做預測,得到預測結果(如圖第三行虛線後綠色部分所示)。

4. Stage 1 模型集成訓練 I(如圖5第一行右半部分所示)。將步驟 2 中得到的 CV Prediction 當作新的訓練集,按照步驟 2 可以得到 Stage 1模型集成的 CV Prediction。

5. Stage 1 模型集成訓練 II(如圖5第二和三行右半部分所示)。將步驟 2 中得到的 CV Prediction 當作新的訓練集和步驟 3 中得到的 Prediction 當作新的測試集,按照步驟 3 可以得到 Stage 1 模型集成的測試集 Prediction。此為 Stage 1 的輸出,可以提交至 Kaggle 驗證其效果。

在圖5中,基礎模型只展示了一個,而實際應用中,基礎模型可以多種多樣,如SVM,DNN,XGBoost 等。也可以相同的模型,不同的參數,或者不同的樣本權重。重複4和5兩個步驟,可以相繼疊加 Stage 2, Stage 3 等模型。

2.5.3 Blending

Blending 與 Stacking 類似,但單獨留出一部分數據(如 20%)用於訓練 Stage X 模型。

2.5.4 Bagging Ensemble Selection

Bagging Ensemble Selection [5] 是我在 CrowdFlower 搜索相關性比賽中使用的方法,其主要的優點在於可以以優化任意的指標來進行模型集成。這些指標可以是可導的(如 LogLoss 等)和不可導的(如正確率,AUC,Quadratic Weighted Kappa等)。它是一個前向貪婪算法,存在過擬合的可能性,作者在文獻 [5] 中提出了一系列的方法(如 Bagging)來降低這種風險,穩定集成模型的性能。使用這個方法,需要有成百上千的基礎模型。為此,在 CrowdFlower 的比賽中,我把在調參過程中所有的中間模型以及相應的預測結果保留下來,作為基礎模型。這樣做的好處是,不僅僅能夠找到最優的單模型(Best Single Model),而且所有的中間模型還可以參與模型集成,進一步提升效果。

2.6 自動化框架

從上面的介紹可以看到,做一個數據挖掘比賽涉及到的模塊非常多,若有一個較自動化的框架會使得整個過程更加的高效。在 CrowdFlower 比賽較前期,我對整一個項目的代碼架構進行了重構,抽象出來特徵工程,模型調參和驗證,以及模型集成等三大模塊,極大的提高了嘗試新特徵,新模型的效率,也是我最終能斬獲名次的一個有利因素。這份代碼開源在 Github 上面,目前是 Github 有關 Kaggle 競賽解決方案的 Most Stars,地址:https://github.com/ChenglongChen/Kaggle_CrowdFlower。

其主要包含以下部分:

1. 模塊化特徵工程

a) 接口統一,只需寫少量的代碼就能夠生成新的特徵;

b) 自動將單獨的特徵拼接成特徵矩陣。

2. 自動化模型調參和驗證

a) 自定義訓練集和驗證集的劃分方法;

b) 使用 Grid Search / Hyperopt 等方法,對特定的模型在指定的參數空間進行調優,並記錄最佳的模型參數以及相應的性能。

3. 自動化模型集成

a) 對於指定的基礎模型,按照一定的方法(如Averaging/Stacking/Blending 等)生成集成模型。

3.

Kaggle競賽方案盤點

到目前為止,Kaggle 平臺上面已經舉辦了大大小小不同的賽事,覆蓋圖像分類,銷量預估,搜索相關性,點擊率預估等應用場景。在不少的比賽中,獲勝者都會把自己的方案開源出來,並且非常樂於分享比賽經驗和技巧心得。這些開源方案和經驗分享對於廣大的新手和老手來說,是入門和進階非常好的參考資料。以下筆者結合自身的背景和興趣,對不同場景的競賽開源方案作一個簡單的盤點,總結其常用的方法和工具,以期啟發思路。

3.1 圖像分類

3.1.1 任務名稱

National Data Science Bowl

3.1.2 任務詳情

隨著深度學習在視覺圖像領域獲得巨大成功,Kaggle 上面出現了越來越多跟視覺圖像相關的比賽。這些比賽的發佈吸引了眾多參賽選手,探索基於深度學習的方法來解決垂直領域的圖像問題。NDSB就是其中一個比較早期的圖像分類相關的比賽。這個比賽的目標是利用提供的大量的海洋浮游生物的二值圖像,通過構建模型,從而實現自動分類。

3.1.3 獲獎方案

● 1st place:Cyclic Pooling + Rolling Feature Maps + Unsupervised and Semi-Supervised Approaches。值得一提的是,這個隊伍的主力隊員也是Galaxy Zoo行星圖像分類比賽的第一名,其也是Theano中基於FFT的Fast Conv的開發者。在兩次比賽中,使用的都是 Theano,而且用的非常溜。方案鏈接:http://benanne.github.io/2015/03/17/plankton.html

● 2nd place:Deep CNN designing theory + VGG-like model + RReLU。這個隊伍陣容也相當強大,有前MSRA 的研究員Xudong Cao,還有大神Tianqi Chen,Naiyan Wang,Bing XU等。Tianqi 等大神當時使用的是 CXXNet(MXNet 的前身),也在這個比賽中進行了推廣。Tianqi 大神另外一個大名鼎鼎的作品就是 XGBoost,現在 Kaggle 上面幾乎每場比賽的 Top 10 隊伍都會使用。方案鏈接:https://www.kaggle.com/c/datasciencebowl/discussion/13166

● 17th place:Realtime data augmentation + BN + PReLU。方案鏈接:https://github.com/ChenglongChen/caffe-windows

3.1.4 常用工具

▲ Theano: http://deeplearning.net/software/theano/

▲ Keras: https://keras.io/

▲ Cuda-convnet2: https://github.com/akrizhevsky/cuda-convnet2

▲ Caffe: http://caffe.berkeleyvision.org/

▲ CXXNET: https://github.com/dmlc/cxxnet

▲ MXNet: https://github.com/dmlc/mxnet

▲ PaddlePaddle: http://www.paddlepaddle.org/cn/index.html

3.2 銷量預估

3.2.1 任務名稱

Walmart Recruiting - Store Sales Forecasting

3.2.2 任務詳情

Walmart 提供 2010-02-05 到 2012-11-01 期間的周銷售記錄作為訓練數據,需要參賽選手建立模型預測 2012-11-02 到 2013-07-26 周銷售量。比賽提供的特徵數據包含:Store ID, Department ID, CPI,氣溫,汽油價格,失業率,是否節假日等。

3.2.3 獲獎方案

● 1st place:Time series forecasting method: stlf + arima + ets。主要是基於時序序列的統計方法,大量使用了 Rob J Hyndman 的 forecast R 包。方案鏈接:https://www.kaggle.com/c/walmart-recruiting-store-sales-forecasting/discussion/8125

● 2nd place:Time series forecasting + ML: arima + RF + LR + PCR。時序序列的統計方法+傳統機器學習方法的混合;方案鏈接:https://www.kaggle.com/c/walmart-recruiting-store-sales-forecasting/discussion/8023

● 16th place:Feature engineering + GBM。方案鏈接:https://github.com/ChenglongChen/Kaggle_Walmart-Recruiting-Store-Sales-Forecasting

3.2.4 常用工具

▲ R forecast package: https://cran.r-project.org/web/packages/forecast/index.html

▲ R GBM package: https://cran.r-project.org/web/packages/gbm/index.html

3.3 搜索相關性

3.3.1 任務名稱

CrowdFlower Search Results Relevance

3.3.2 任務詳情

比賽要求選手利用約幾萬個 (query, title, description) 元組的數據作為訓練樣本,構建模型預測其相關性打分 {1, 2, 3, 4}。比賽提供了 query, title和description的原始文本數據。比賽使用 Quadratic Weighted Kappa 作為評估標準,使得該任務有別於常見的迴歸和分類任務。

3.3.3 獲獎方案

● 1st place:Data Cleaning + Feature Engineering + Base Model + Ensemble。對原始文本數據進行清洗後,提取了屬性特徵,距離特徵和基於分組的統計特徵等大量的特徵,使用了不同的目標函數訓練不同的模型(迴歸,分類,排序等),最後使用模型集成的方法對不同模型的預測結果進行融合。方案鏈接:https://github.com/ChenglongChen/Kaggle_CrowdFlower

● 2nd place:A Similar Workflow

● 3rd place: A Similar Workflow

3.3.4 常用工具

▲ NLTK: http://www.nltk.org/

▲ Gensim: https://radimrehurek.com/gensim/

▲ XGBoost: https://github.com/dmlc/xgboost

▲ RGF: https://github.com/baidu/fast_rgf

3.4 點擊率預估 I

3.4.1 任務名稱

Criteo Display Advertising Challenge

3.4.2 任務詳情

經典的點擊率預估比賽。該比賽中提供了7天的訓練數據,1 天的測試數據。其中有13 個整數特徵,26 個類別特徵,均脫敏,因此無法知道具體特徵含義。

3.4.3 獲獎方案

● 1st place:GBDT 特徵編碼 + FFM。臺大的隊伍,借鑑了Facebook的方案 [6],使用 GBDT 對特徵進行編碼,然後將編碼後的特徵以及其他特徵輸入到 Field-aware Factorization Machine(FFM) 中進行建模。方案鏈接:https://www.kaggle.com/c/criteo-display-ad-challenge/discussion/10555

● 3rd place:Quadratic Feature Generation + FTRL。傳統特徵工程和 FTRL 線性模型的結合。方案鏈接:https://www.kaggle.com/c/criteo-display-ad-challenge/discussion/10534

● 4th place:Feature Engineering + Sparse DNN

3.4.4 常用工具

▲ Vowpal Wabbit: https://github.com/JohnLangford/vowpal_wabbit

▲ XGBoost: https://github.com/dmlc/xgboost

▲ LIBFFM: http://www.csie.ntu.edu.tw/~r01922136/libffm/

3.5 點擊率預估 II

3.5.1 任務名稱

Avazu Click-Through Rate Prediction

3.5.2 任務詳情

點擊率預估比賽。提供了 10 天的訓練數據,1 天的測試數據,並且提供時間,banner 位置,site, app, device 特徵等,8個脫敏類別特徵。

3.5.3 獲獎方案

● 1st place:Feature Engineering + FFM + Ensemble。還是臺大的隊伍,這次比賽,他們大量使用了 FFM,並只基於 FFM 進行集成。方案鏈接:https://www.kaggle.com/c/avazu-ctr-prediction/discussion/12608

● 2nd place:Feature Engineering + GBDT 特徵編碼 + FFM + Blending。Owenzhang(曾經長時間雄霸 Kaggle 排行榜第一)的競賽方案。Owenzhang 的特徵工程做得非常有參考價值。方案鏈接:https://github.com/owenzhang/kaggle-avazu

3.5.4 常用工具

▲ LIBFFM: http://www.csie.ntu.edu.tw/~r01922136/libffm/

▲ XGBoost: https://github.com/dmlc/xgboost

4.

參考資料

[1] Owenzhang 的分享: Tips for Data Science Competitions

[2] Algorithms for Hyper-Parameter Optimization

[3] MLWave博客:Kaggle Ensembling Guide

[4] Jeong-Yoon Lee 的分享:Winning Data Science Competitions

[5] Ensemble Selection from Libraries of Models

[6] Practical Lessons from Predicting Clicks on Ads at Facebook

5.

結語

作為曾經的學生黨,十分感激和慶幸有 Kaggle 這樣的平臺,提供了不同領域極具挑戰的任務以及豐富多樣的數據。讓我這種空有滿(yi)腔(xie)理(wai)論(li)的數據挖掘小白,可以在真實的問題場景和業務數據中進行實操練手,提升自己的數據挖掘技能,一不小心,還能拿名次,贏獎金。如果你也躍躍欲試,不妨選一個合適的任務,開啟數據挖掘之旅吧。哦,對了,我們部門今年舉辦了“騰訊社交廣告高校算法大賽”,做移動 App 廣告轉化率預估,有大量的真實數據,豐厚的獎品和獎金,Top 20隊伍還能獲得校招綠色通道,你要不要來試試?傳送門:http://algo.tpai.qq.com

—END—

公眾號:datafa

新書鏈接:

【數據分析俠 《人人都會數據分析》20萬字書籍】http://m.tb.cn/h.AJEkoq 點擊鏈接,再選擇瀏覽器打開;或複製這條信息¥fSnh09F0Vpy¥後打開 手淘


分享到:


相關文章: