kaggle比賽的shake分析——如何避免和利用shake
閱讀本文前可能需要先閱讀 有關kaggle比賽裏的shake up分析
首先要說明的是,在避免shake上我覺得做的好的是2017年成為GM的老GM,那時候的數據較小,而且匿名賽居多,所以對model的把控能力很強。本文僅為拋磚引玉。
在文章開始之前,先回顧一下上篇文章的兩個關鍵結論:
1.從統計學的觀點看shake,shake的原因主要來自於模型的variance和數據的variance ,不同分佈、小數據、敏感metric綜合加劇了這個情況。
2.在容易shake的比賽裏,刻意的去overfit test數據提升名次要比老老實實按照local cv做模型提升名次快的多。
本文都是基於這兩個結論展開的:
一、首先說避免shake:
- trust loca cv:
雖然在前面的文章說過在特定比賽裏,好模型並不意味著好結果,但從統計學的觀點,模型越好獲勝的概率還是越大。比如說1000人去摸十二個金牌,對於某些隊伍來說,中獎率為90%,對某些隊伍來說,中獎率只有0.1%,如果在elo這個比賽裏手工改-33來過擬合public,中獎率就為0了,總而言之,基於local cv把模型做好纔是提升獲勝勝率的方法。
那麼如何確定自己是否能做對local cv的,簡單的回答一個問題:「在kaggle這種一次開榜的比賽開小號對提升分數有沒有收益?」如果這個問題想明白了,可以認為對local cv的理解剛剛入門了。
2.釜底抽薪法,不做那些shake的比賽:
前面說過容易shake的幾個場景,那麼其實就簡單了,我們儘可能挑大數據量,同分布,metric不敏感的比賽來做就好了,或者做那些實力方差大的圖像類比賽。其實已經有很多人按照這個標準來選擇比賽了,比如超級大神bestfitting,最近二十場比賽獲得了十九塊金牌,其中也包括了幾個結構化數據比賽,說明大神都是確認不會shake才投入時間的,少做、精做,一擊致命。去年的國內獎金收割機器plantsgo很多時候在某些比賽冒個泡,一看這個比賽不是比拼實力而是拼人品就棄賽也是這個套路。所以參加比賽的時候可以去多參考gm的選擇,gm越多越說明不會shake,當然隨之而來的是競爭會激烈。
3.拉開兩個submission的區分度
簡單來說結合比賽特點兩頭下注,比如說之前的提到的厄瓜多比賽,我因為認定自己的模型是正確,兩個都下注到自己正確的模型上了,萬萬沒想到有bias的錯誤模型撞上了bias的結果,回頭看其實完全可以下注一個錯誤的模型,在大家都錯的情況下靠特徵工程去競爭,這樣其實就避免了錯誤模型湊巧擬合到了real world結果正確模型反倒被反殺的情況。其他的例子:在train、test不同分佈,但是又用auc的比賽,這時候就一個local cv最好,一個public最好最合適;時序比賽就是一個押大、一個押小。總之要結合實際比賽來說話,也要結合對成績的需求來說,想保住現在的成績不掉太多,可以保守點,如果想往上沖,可以激進點,但也要承擔跌入萬丈深淵的風險.
4.結合domain knowledge讓自己的模型盡量可解釋
對於樣本較少的數據集,很容易overfit local cv,比如今年的lanl地震題以及vsb電力題,這時候若是使用神經網路或者暴力特徵工程和篩選方法,可能會取得理想的local cv,但是這可能是overfit來的,對於這樣的,結合domain knowledge來提取feature才能保證模型的泛華能力;
對於時序類數據集,需要結合相關數據以外的知識來判斷時域曲線中的spike是否是週期現象還僅僅是不會再重現的異常值.
可解釋是提升模型泛華能力的好方法.
5.具備碾壓的實力
比如說一個模型的variance和數據的variance是0.005,但是如果你領先金牌/獎牌線>0.005,自然就不必擔心shake了O(∩_∩)O~
二、如何利用shake:
上文說瞭如何避免shake,本質上還是要提高自己的實力.但是實力不夠咋辦,其實可以刻意去做容易shake的比賽,畢竟抽來的牌子也是牌子呀~~但是如何正確的抽獎,也是需要深刻理解題目本質的,以下就舉兩個例子來說明如何結合問題最大可能中獎.
1.lanl
在地震預測題目Congrats, and my 5 min lottery tickets (81th place/silver medal)裏,大神su shizhe僅僅是簡單的對開源kernel乘了兩個係數,就成功81/4540,並且證實如果運氣好,金牌也不是不可能.
接下來我們來分析他方法work的原因.從預測結果分析圖中可以看出,lanl有16個地震,直線圖是gound truth,剩下折線為預測值,具體到每一個地震,其實趨勢預測對了,但是整體斜率不對,對於大直線(長時間地震)偏低,對於小直線(短時間地震)偏高,也就是說針對具體某個地震,我們只需乘個係數,就能擬合的更好.所以當test裏長時間地震比例高的時候,只要放大個係數,反之縮小個係數,就可以overfit private. 樣本少導致private和train的樣本不可能完全一致,所以往高往低兩頭下注乘一個相對保守係數,肯定總有一個比原baseline表現更好的,這就是這個比賽抽獎的邏輯.