閱讀本文前可能需要先閱讀 有關kaggle比賽裏的shake up分析

首先要說明的是,在避免shake上我覺得做的好的是2017年成為GM的老GM,那時候的數據較小,而且匿名賽居多,所以對model的把控能力很強。本文僅為拋磚引玉

在文章開始之前,先回顧一下上篇文章的兩個關鍵結論:

1.從統計學的觀點看shake,shake的原因主要來自於模型的variance和數據的variance ,不同分佈、小數據、敏感metric綜合加劇了這個情況。

2.在容易shake的比賽裏,刻意的去overfit test數據提升名次要比老老實實按照local cv做模型提升名次快的多。

本文都是基於這兩個結論展開的:

一、首先說避免shake:

  1. 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表現更好的,這就是這個比賽抽獎的邏輯.

 2.梅賽德斯賓士

這個比賽數據太小,很多 minor patterns機器學習方法也分辨不出是outlier 還是真的有用的feature,所以結果大部分人的結果就是3~4個cluster,下圖中那些紅點都預測不到,而我們又知道這個比賽數據小(4000),metric對異常值極為敏感,所以根據minor patterns手動改一個值,直接從baseline到了top6%.

通過這兩個例子我們可以知道,

1.要想提升中獎率,要對問題以及local cv有深刻的理解

2.在容易shake的比賽裏,刻意的去overfit private提升名次要比老老實實按照local cv做模型提升名次快的多.(所以說小數據、不同分佈在kaggle這種一次開private榜的比賽裏是拼人品,在國內比賽平臺b榜開幾天這種的也只能是"拼人品")

the last 保持平常心

在這種容易shake up比賽,肯定存在認真做的都掉名次,臨時一兩周隨便搞搞肯能摸到了獎牌,有些比賽摸獎殭屍大軍蒙對了,霸佔了獎牌區,我連寫三篇文章其實還是想說.要保持平常心,不要用比賽結果來衡量努力,要明確自己是否學到東西,相信rp守恆定律,這次運氣不好,將來也會在別處還回來.O(∩_∩)O~


推薦閱讀:
相關文章