【乾貨】Kaggle 資料探勘比賽經驗分享(mark 專業的資料建模過程)

李博Garvin發表於2017-05-12

簡介

Kaggle 於 2010 年創立,專注資料科學,機器學習競賽的舉辦,是全球最大的資料科學社群和資料競賽平臺。筆者從 2013 年開始,陸續參加了多場 Kaggle上面舉辦的比賽,相繼獲得了 CrowdFlower 搜尋相關性比賽第一名(1326支隊伍)和 HomeDepot 商品搜尋相關性比賽第三名(2125支隊伍),曾在 Kaggle 資料科學家排行榜排名全球第十,國內第一。筆者目前在騰訊社交與效果廣告部任職資料探勘工程師,負責 Lookalike 相似人群擴充套件相關工作。此文分享筆者在參加資料探勘比賽過程中的一點心得體會。

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:用於課堂專案作業或者考試。

大資料

圖1. Kaggle 比賽型別

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

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

從資料載體劃分:包含文字,語音,影象和時序序列等。

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

1.4 比賽流程

一個資料探勘比賽的基本流程如下圖2所示,具體的模組我將在下一章進行展開陳述。

大資料

圖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 這樣的設定,也在提醒參賽者,我們建模的目標是要獲得一個在未知資料上表現良好的模型,而並非僅僅是在已知資料上效果好。

大資料

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

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 銷量預估競賽第三名的獲獎方案,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

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

  2. 按照一定的方法進行引數搜尋。常用的引數搜尋方法有,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)圖所示的情況。

大資料

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

2.5 模型整合

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

2.5.1 Averaging 和 Voting

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

2.5.2 Stacking

大資料

圖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,地址:ChenglongChen/Kaggle_CrowdFlower。

其主要包含以下部分:

  1. 模組化特徵工程

a) 介面統一,只需寫少量的程式碼就能夠生成新的特徵;

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

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

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

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

  1. 自動化模型整合

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,而且用的非常溜。方案連結:Classifying plankton with deep neural networks

● 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 隊伍都會使用。方案連結:National Data Science Bowl

● 17th place:Realtime data augmentation + BN + PReLU。方案連結:ChenglongChen/caffe-windows

3.1.4 常用工具

▲ Theano: Welcome – Theano 0.9.0 documentation

▲ Keras: Keras Documentation

▲ Cuda-convnet2: akrizhevsky/cuda-convnet2

▲ Caffe: Caffe | Deep Learning Framework

▲ CXXNET: dmlc/cxxnet

▲ MXNet: dmlc/mxnet

▲ PaddlePaddle: PaddlePaddle —- PArallel Distributed Deep LEarning

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 包。方案連結:Walmart Recruiting – Store Sales Forecasting

● 2nd place:Time series forecasting + ML: arima + RF + LR + PCR。時序序列的統計方法+傳統機器學習方法的混合;方案連結:Walmart Recruiting – Store Sales Forecasting

● 16th place:Feature engineering + GBM。方案連結: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。對原始文字資料進行清洗後,提取了屬性特徵,距離特徵和基於分組的統計特徵等大量的特徵,使用了不同的目標函式訓練不同的模型(迴歸,分類,排序等),最後使用模型整合的方法對不同模型的預測結果進行融合。方案連結:ChenglongChen/Kaggle_CrowdFlower

● 2nd place:A Similar Workflow

● 3rd place: A Similar Workflow

3.3.4 常用工具

▲ NLTK: Natural Language Toolkit

▲ Gensim: gensim: topic modelling for humans

▲ XGBoost: dmlc/xgboost

▲ RGF: 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) 中進行建模。方案連結:Display Advertising Challenge | Kaggle

● 3rd place:Quadratic Feature Generation + FTRL。傳統特徵工程和 FTRL 線性模型的結合。方案連結:Display Advertising Challenge | Kaggle

● 4th place:Feature Engineering + Sparse DNN

3.4.4 常用工具

▲ Vowpal Wabbit: JohnLangford/vowpal_wabbit

▲ XGBoost: dmlc/xgboost

▲ LIBFFM: LIBFFM: A Library for Field-aware Factorization Machines

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 進行整合。方案連結:Click-Through Rate Prediction | Kaggle

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

3.5.4 常用工具

▲ LIBFFM: LIBFFM: A Library for Field-aware Factorization Machines

▲ XGBoost: 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隊伍還能獲得校招綠色通道,你要不要來試試?

via:知乎

End.

相關文章