機器學習初學者:如何用黑科技做出 Kaggle 前 15 的成績 ?

第四正規化發表於2017-06-30

特別提醒:以下的工作都是建模學習,而不是嚴格的比賽對比。

一個機器學習小菜雞,如何通過最新的機器學習技術,在一個大神聚集的 Kaggle 比賽中做出前 15 的成績?

Part 1

大家好,我叫小王,第四正規化的運營,機器學習的小菜雞。 

今天老闆給了我一個任務,公司花了幾千萬研發出先知機器學習平臺,7 月就對外開放了,拿出去用用吧! 

怎麼用呢?旁邊的同事小澄是資料科學家,他每天都有很多業務做,據說國內好多知名的網際網路公司,背後的個性化推薦系統都出自他的手筆。只是平時小澄比較低調,大家都不知道。

但作為一個運營,我是既沒有資料,也沒有場景,我該怎麼辦? 

對了,去 Kaggle 吧! 

Kaggle 是一個資料科學家的社群,裡面有非常多的比賽案例,尤其是很多經典比賽,那是大神雲集,其中也產出了很多對工業界有深遠影響的演算法和工程實現方式。 

抱著花了幾千萬研發出來的寶貝,選個最經典的比賽吧,就 Criteo Labs 舉辦的 Display Advertising Challenge 好了。 

這個比賽是關於點選率預估的比賽,它在很多機器學習的場景,例如計算廣告、內容分發、電商推薦等都是非常有用的。而這個比賽的舉辦方也是誠意十足,資料都是脫敏的,總共有 4500 萬行,特徵包括 13 個數值特徵、26 個類別特徵,評估指標是 Logloss。 

所以它可以說是點選率預估問題上,最知名的一次比賽了。該比賽總的引數隊伍有 700 多支,KDD Cup 的一些歷屆冠軍也來參加了。 

當然,KDD Cup 的冠軍們幾乎拿下了前 15 名,《計算廣告》的作者之一王超對排名給出了說明。(注:下圖的本人是指王超)

機器學習初學者:如何用黑科技做出 Kaggle 前 15 的成績 ?

那麼多大神的比賽,作為小菜雞的我,能做好嗎?

Part 2

不管了,試試吧! 

Step 1:上傳資料

首先我開啟了先知平臺,把比賽資料(criteoKaggle 是我們內部對資料的命名)拖了進去,大小是 2.03 GB。 

上傳時間很快,不到 10 分鐘就都上去了。 

Step 2:瞭解資料

看一眼資料,果然是脫敏的!反正我任何套路都看不出來。 

機器學習初學者:如何用黑科技做出 Kaggle 前 15 的成績 ?

對於資料的解釋,Kaggle 很是輕描淡寫: 

  • Label,1 代表點選,0 代表沒有點選; 

  • I1 到 I13 是數值特徵; 

  • C1 到 C26 是類別特徵,已經做了雜湊化;

  • 當資料缺失的時候,以 empty 代替。

Step 3:資料拆分 

由於不知道怎麼對資料拆分,我用了 IJCAI 2017 的論文,DeepFM: A Factorization-Machine based Neural Network for CTR Prediction 中對該比賽資料的處理方式,按照 9:1 的比例,隨機拆分成訓練資料和測試資料。 

Step 4:特徵工程 

我想既然 Kaggle 那麼輕描淡寫的解釋資料,那我也輕描淡寫的做特徵工程吧!

I1 到 I13 是數值特徵,都連續化就好了,類似這樣:

f_col_10 = continuous(col_10) 

C1-C26 是分類特徵,離散化吧,類似這樣:

f_col_38 = discrete(col_38) 

然後把 Label 填上,特徵工程搞定! 

label = label(col_1) 

Step 5:模型調參 

這是個二分類問題,所以要選擇分類演算法。由於完全不懂資料什麼意思,人工特徵的方法幾乎無效。 

而如果要提取並使用多層次特徵,就需要靠機器了,所以我從演算法庫中拖出了“線性分形分類器”,也叫 LFC。

機器學習初學者:如何用黑科技做出 Kaggle 前 15 的成績 ?

然後是設定引數,經過兩三次實驗,我把引數設定如下: 

  • 步長 = 0.05 

  • L1 = 0 

  • L2 = 2.5 

  • 輪數 = 4 輪 

  • 速度優先 

Step 6:模型評估 

20 分鐘後結果出來了,Logloss = 0.4546629606398476,AUC =0.796。 

看了下排名,大概是 33 名。 

機器學習初學者:如何用黑科技做出 Kaggle 前 15 的成績 ?

Part 3

可是,花了幾千萬研發出來的先知平臺,就做出這樣的成果? 

畢竟,我是機器學習小菜雞,但先知平臺可不是呀! 

不行,再調調… 

首先把所有的連續值,取個 log 加入特徵,類似於這樣 

f_col_2_log = continuous(log(col_2)) 

由於線性分形分類器並沒有做特徵組合,所以要想擬合非線性的資料,還得自己做特徵組合。 

可是既然看不懂資料,怎麼做呢?用 FeatureGo 吧! 

FeatureGo 也是第四正規化自主研發出來的演算法,能夠自動計算出最佳的特徵組合。

通過 FeatureGo 算了一下,最佳的特徵組合做出來了,如下: 

f_combine_18_28=discrete(combine(col_18,col_28)) 

f_combine_20_37=discrete(combine(col_20,col_37)) 

f_combine_18_28_34=discrete(combine(col_18,col_28,col_34)) 

f_combine_20_31=discrete(combine(col_20,col_31)) 

f_combine_29_40=discrete(combine(col_29,col_40)) 

f_combine_18_20_28=discrete(combine(col_18,col_20,col_28)) 

由於多加了特徵,所以正則項設定大一點,L2 =5,其他引數和上面的一樣,又一個 20 分鐘,結果好多了,Logloss = 0.45010290821784604,AUC = 0.801。 

再看一下排名,到第 15 名啦!

機器學習初學者:如何用黑科技做出 Kaggle 前 15 的成績 ?

順手看一看論文的結果,比它的 Logloss 小一點,加上 AUC 高一點,心滿意足了!

機器學習初學者:如何用黑科技做出 Kaggle 前 15 的成績 ?

Part 4

模型算是建完了,看起來很輕鬆,當然實際操作起來更輕鬆,但是背後的技術可是非常牛的。 

以至於,像我這樣的機器學習小菜雞,也可以做出這麼牛的模型來。 

所以我們得到了這樣的公式: 

我(機器學習小菜雞) + LFC + FeatureGo + 一個週末 ≈ 世界 15 名(注:大神雲集的比賽~) 

還是很激動人心的! 

順便提下,剛才我用到的線性分形分類器(LFC)和 FeatureGo,是以第四正規化的機器學習工程師羅遠飛為主研發的。那個花了幾千萬研發經費的先知機器學習平臺,背後有 3 名 ACM-ICPC 世界冠軍,2 名 KDD Cup 世界冠軍得主,這些人後面做了百度鳳巢,搭建了今日頭條的推薦系統,終於憋了個大招做出了先知機器學習平臺。 

現在好訊息是,先知平臺對外開放啦! 

我們也是很有誠意的,剛才的實現過程已經放到了我們的平臺。當然,每個人過來跑 4500 萬的資料,對我們的伺服器壓力實在是太大太大太大了...... 

所以 4500 萬的資料,我們隨機抽取了 300 萬放到平臺中,其中 270 萬作為訓練,30 萬作為測試。 

當然效果肯定是會差很多,跑了一下 Logloss = 0.45988947376760886,名次是 73 名。

機器學習初學者:如何用黑科技做出 Kaggle 前 15 的成績 ?

好吧,還是可以拿個銅牌。 

如果你對我們感興趣,請在這裡申請先知平臺https://prophet.4paradigm.com

注:以上的工作都是建模學習,而不是嚴格的比賽對比。

參考論文:https://arxiv.org/pdf/1703.04247.pdf

相關文章