參賽3年,斬獲6金3銀2銅:Kaggle Grandmaster親授實戰經驗

機器之心發佈

這是Kaggle 你問我答 (AMA) 第五期活動。本期的嘉賓是詹金,現就職於 DataRobot Japan 擔任 data scientist。

kaggle profile:https://www.kaggle.com/senkin13

參賽3年,斬獲6金3銀2銅:Kaggle Grandmaster親授實戰經驗

他 3 年前開始參加 kaggle 競賽,曾多次取的前十名的成績。截至目前共斬獲 6 金 3 銀 2 銅,kaggle 最高排名全球第 91。

以下是本期活動的問答集錦:

Q1: 首先來個自我介紹?

A1: 大家好,我是 senkin13,參加 kaggle 比賽接近 3 年了,本職工作是 Data Scientist,很榮幸和大家分享 kaggle 的經驗。

Q2: 如何平衡工作、比賽和生活之間的時間精力分配?

A2: 平衡是幾乎不可能的(笑),只能想辦法更高效地利用工作,生活以外的碎片時間,比如通勤電車,午休時候可以多看看 kaggle 論壇,思考些新點子,多準備幾臺機器並行作業,醒著的時間多做快速迭代的實驗,睡覺的時候跑耗時的實驗。到了比賽衝刺階段,減少些睡眠時間,把精力轉移到比賽也是必要的,但儘量不去影響到健康工作家庭吧。

Q3: 如何高效地取得比賽金牌?

A3: 想要高效拿金牌,首先要選擇比賽,最好是自己喜歡的比賽類型,有些經驗,shake 不會那麼大。常規手段大家都會,多花時間找到非常規的 trick 是關鍵。集中精力做一個也比做幾個成功率更高。team 也是比 solo 高效多了,團隊裡有比你更勤奮,更有經驗,更多技巧的隊友那就走運了。終極武器是打出名氣後可以在最後階段搭金牌區的順風車(笑)。

Q4: keras 患者。keras 還沒用紮實。學 pytorch 沒動力,但到處都是 pytorch,如何建立這種學習動力?更別說 tensorflow 了。

A4: 我也是 keras 重度用戶,不到必須要用 pytorch 的時候不會去學的。學新東西還得靠外部驅動,像在 kaggle 打 image,nlp,或是 moculer 這種圖形結構數據比賽的時候,不管是 github 還是 kaggle 論壇,能學習參考的代碼主要都是 pytorch,這就逼自己去學習了,但首先是得自己渴望拿個好名次。也可以用工作或者發表的動力,比如做一個 pytorch 的項目展示給同事或者學習夥伴們,反正感覺都得狠狠逼自己一回。

Q5: 看到 senkin13 在 github 上的 kaggle 的 repo,這是你所有代碼放的地方嗎?

A5: 放了大部分比賽的常規代碼,保留一些秘密武器(笑)。

Q6: 在 kaggle 裡如何快速提高,多讀文章還是多去復現別人的 solution?

A6: 個人覺得閱讀和寫代碼都重要,但寫代碼(實踐)更重要,邊打比賽邊學習思考是最高效的,復現別人 solution 是有了 idea 再去練習寫代碼,無疑這是 kaggle 最需要的能力之一。在自己思維枯竭的時候多讀讀文章能帶來靈感。可以說只要時間允許,越多越好。

Q7: 請問在學習完機器學習和深度學習的各類視頻書籍教程後,需要怎樣做實戰的提高最有效果?您是如何在 kaggle 上學習?還是都是看 paper?

A7: 如果想要一些實戰,直接來參加 kaggle 比賽吧!找一個最感興趣的賽題直接開始吧(最好 lb 榜上前排有很多 Master/GM 的:shake 會比較小、比賽比較可靠)。kaggle 的分享氛圍非常好,可以從 Notebook 區和 Discussion 區中發現很多很棒的 idea、方法、資源等等。在探索一個賽題的同時,會從大家的分享以及 paper 裡不斷學習新方法。

Q8: senkin13 覺得拿 solo gold 最難的地方在哪?

A8: 拋開天賦異稟的不談,像我這樣一步步從銅,銀,團隊金,solo 金做出來的來看,最難的地方是不能有短板,因為對手是團隊,他們不太可能有短板,就表格數據比賽來說不管是數據分析,特徵工程,模型算法,融合等都缺一不可,通過一定時間積累後再去挑戰比較好。還有時間一定要確保最大化投入,我打 elo 這個比賽幾乎從頭到尾一直沒休息,保證了特徵工程做到自己的極致,即使融合,後處理部分搞砸了,也沒掉出金牌區。

Q9: 可以列舉一下 kaggle 上學到的,在工作中最有用的三個 trick/技術嗎?

A9: 第一個是在地震預測賽 (LANL) 學到的特徵工程,像 MFCC 就被我應用到汽車引擎音頻分析項目取得很大成功。

第二個是 HomeCredit,Elo 裡面起到很關鍵作用的兩階段建模 meta 特徵,應用到商品銷售預測項目中也取得很好結果。

第三個是 Favorita, Recruit, 2019DSB 這些比賽的代碼我整理成半 automl 工具,為各種 time series 的項目迅速生成 baseline 提升了工作效率。

Follow-up: 請問 mfcc 如何運用「成功」的?mfcc 是一個矩陣,能具體說說這個成功的『亮點嗎?

Answer: 作為音頻的特徵,然後建立分類模型,得到很好的精度。把矩陣的每一行取一個平均值 就變成列了,可以去 kaggle 搜索下有很多,mfcc 主要是轉換成出適合人耳頻率的波形數據。

Q10: data mining 是否有從傳統的 GBDT 過渡到 NN 的趨勢?NN 應用到結構數據上,有什麼需要注意的?

A10: 我覺得 nn 還不會取代 gbdt,甚至 gbdt 也取代不了一些更古老的算法,像製造業有些項目獲取 label 很貴,數據樣本很少的情況下線性或者簡單 tree 模型有時表現更好,金融業的一些項目需要嚴格的解釋性,基於線性和規則類算法也很普遍。kaggle 主要面向競賽,所以數據足夠多和複雜,gbdt 會表現更好,nn 在一些人工數據或者匿名數據的比賽中超過了 gdbt,另外對於包含有序列的數據 rnn,cnn,transformer 表現也非常好,說明 nn 和 gbdt 互有優勢會長期共存。目前企業的數據越來越大,nn 或者說 deeplearning 在對應大數據上還是有優勢的,這可能會成為一個趨勢。

nn 應用到結構數據的話,預處理很重要,缺省值填充用 0 還是最大值,平均值有些技巧,可以看下 bestfitting 在 talkingdata 的分享。歸一化也是可以挖掘下,像 Michael Jahrer 在 porto 裡面用 RankGauss 取得了很好效果。

儘量走和 gbdt 不同得路線,用原始簡單的數據靠 nn 的網絡結構自主生成特徵看看能否取得好的效果。使用人工特徵的情況下,注意針對不同的 numerical,categorical,sequencial 類型特徵,分別用 dense,embedding,rnn 來構造,multi input 比單純的 mlp 效果好。

為了減少 variance,多跑幾次平均一下也是很有必要。

Q11: 日本 data science 行業發展的如何,對比中美有何有劣勢?

A11: 以我有限的視野看到的是靠 kaggle 取得好成績繼而轉型 ds 的越來越多,市場價值也水漲船高,各個傳統公司需求都上來了,但人才缺口很大,不像中國有龐大的人口紅利,美國吸引世界各地人才的紅利。

Q12: 一般和別人組隊在隊友方面有什麼要求呢?

A12: 一般我都是被動的哈,早期我不認識什麼人的時候是去論壇報上自己的分數等前排隊伍邀請我,自從加入 kaggler cn 群基本和熟人組隊比較多了,一般沒什麼要求(笑)。

Q13:請問在 salary prediction 比賽裡, 用 residual 來做 downsampling 的時候, 是怎麼選擇閥值的?

A13:手動選擇閾值。跑很多輪比較 valid 的分數,valid 裡面是不做下采樣的。

Q14:日本那邊的比賽平臺有試過嗎? 試過的話, 體驗如何?

A14:salary prediction 就是日本這邊一個平臺 probspace 舉辦的,還有 signate,nishika,另外還有專門線下比賽的平臺 atma,總體體驗都不錯,競爭小些容易拿 prize。基本都是日本 kagglers,但也有不少學生還沒在 kaggle 打出來,先在那些平臺打出成績的,包括外國留學生。

Q15:senkin 老師怎麼看比賽大部分都在重複以往的經驗,獲取對自己新的輸入看起來實在性價比太低。

A15:這是 kaggler 老鳥們的普遍問題,在舒適區拿金牌也相對容易,但成就感很低,還是得清空一下自己,找些公司項目做新領域或者跟著熟人做做新領域的比賽,最近我在做公司 nn 教學材料。

原文鏈接:https://zhuanlan.zhihu.com/p/128532325


分享到:


相關文章: