參加kaggle競賽是怎樣一種體驗?

參加kaggle競賽是怎樣一種體驗?有木有同學參加過?結果如何?


先貼下Kaggle Profile以示誠意:Winsty | Kaggle 我是KDD Cup專業戶,雖然每年做的都不是特別好。。。和一些Kaggle專業戶們無論從數量還是質量上都差了好多。不過我一直覺得Kaggle在我PhD期間扮演了一個非常重要的角色。下面列幾個我覺得比較重要的問題自問自答下哈

Kaggle的比賽究竟鍛煉的是什麼能力?
首先說,絕大部分的Kaggle比賽是Data Mining(DM)比賽(除少數是和Discrete Optimization還有Computer Vision(CV) 有關),最重要的是和Machine Learning(ML)關係不大。這是很多人一個誤區,往往希望在Kaggle上學到很多ML的知識。Kaggle教給我的第一件事情,就是讓我清晰領會到了這兩者之間的不同:ML一般從模型或者演算法出發,講的是模型或者演算法本身存在的不合理的地方,然後提出新的假設,從而去優化模型或演算法。在這個過程中並不針對某一個具體的特殊的問題。而DM恰恰相反,它是從數據本身問題本身出發,希望針對問題的特性來設計最適合的方案。關鍵是在於對問題和數據的理解。之前總是覺得,DM/CV的paper都好水,到處找一個應用套。在我想明白這個問題之後,我就開始懂得欣賞DM/CV的paper。

其次,我覺得在一個DM的比賽中,最能鍛煉到的是對於數據的"嗅覺"。舉一個最有趣的例子,往往在比賽中會存在Data Leakage的情況,也就是說,某些和label相關的信息不小心會泄漏在feature中。有人通過這樣的feature取得了很好的成績之後,往往有人覺得非常鄙視。當然我不是說Data Leakage是一件好事情,但是在這背後往往隱藏的是發現leakage的人對於數據本身深刻的認識。這並不是每個人都能做到的。換句話講,就算沒有leakage,這群人還是會排名很前。在Kaggle的比賽中,能收穫最大的就是這種嗅覺。這其實也把我自己訓練成了一個data believer:也許一次兩次的巧合真的是意外,但是如果巧合總是持續發生,那麼背後一定有一個原因。

怎樣才能做好Kaggle的比賽?
第一點也是最重要的一點就是專註,專註,再專註。其實說來慚愧,我在這點上做得很不好。
第一年開始高歌猛進了一段,中間卡住,也是能力不足,然後就放棄了。
第二年抱學長大腿僥倖成績不錯,其實個人來講沒有做出太大貢獻。先是去寫了一個NIPS,然後又去處理了一些私事。
第三年做到一半,很偶然地被拉去百度做了ImageNet的比賽,精力主要就放到了ImageNet上。坑了隊友。。。
所以其實這三年,離我自己的期待都有一定的距離,我也很清楚問題出在哪裡。希望明年能真正focus一次吧。

第二點,永遠不要放棄。希望總存在於絕望之後。每個比賽都會有一個瓶頸期。耐心地去突破它後,就是一片開闊天空。

第三點,切記只看不做。很多人只喜歡紙上談兵,武斷覺得這個問題,或者這個數據就應該是怎樣。很多數據的特質都是要真正動手做進去才能發現其中的奧妙,針對這些特質設計的一些Feature或者Model,往往都能帶來極大的提高。

第四點,才是多看,尤其是在比賽結束之後。很多leader會在比賽結束之後部分甚至全部地公布自己的解法。這個時候返回去看看在比賽中自己忽略掉了什麼地方,才是成長最最重要的。第一年的比賽教給了我在一個實際的推薦系統里session的重要性。第二年的比賽教給了我機器不是萬能的,人肉一些規則往往更有效。每一年其實都對實際的Data Mining問題有新的認識,也更清楚了哪些paper是真的work,哪些是在灌水。這其實也就是我來做比賽的最大目的吧。

技術方面上什麼最關鍵?
前面提到Kaggle主要是以Data Mining的比賽為主,那麼這個答案就非常直接了:Feature Engineering 無數經驗告訴我們,做Kaggle比賽如果是抱著Machine Learning的態度,沉迷於facny的模型而忽略數據本身,一定會死得很慘很慘!

當然,基本的ML知識還是有的。在比賽中,最常用的分類器一般是Gradient Boosting Tree(GBDT)和Random Forest(對,你沒看錯,不是那個在教科書中推Dual時讓很多人痛不欲生的SVM)一些常見的預處理技巧,比如PCA,KMeans,TF/IDF,Hashing等等都還是必須的。這裡就不展開講了。

最後,但是非常關鍵的一點是Ensemble 從KDD Cup到Imagenet,我從來沒見過ensemble不會改善結果的情況,只是多與少的問題。不做ensemble就意味著你自己告別了一大塊寶藏。

總結
我覺得Kaggle是一個對於每個想成為所謂的Data Scientist的同學最好的試煉廠。在這裡,你就會知道課上學到的那些東西和能解決一個實際問題所需要的能力的差距。更何況,在學校里往往是拿不到任何大規模的數據。絕大多數課堂上用的還是只有幾百個幾千個數據的UCI dataset。Kaggle是縮小這個gap最好的一個地方。

最後,希望大家在Kaggle上都玩得愉快~~


參加過幾次,只拿過幾個前10%,匿了。

下面是我的一些個人經驗:
1. 一定做Ensemble,甚至是對submissions做ensemble。
2. 目的如果單純是拿好的排名,那麼就找人多的比賽參加,因為那些參加人數上千的比賽裡面大批殭屍參賽者,超過他們就可以進25%了。
3. 對大多數比賽來說,Feature Engineering比選用什麼模型更重要
4. 多看論壇,大家會在比賽進行中討論很多泛泛的思路,對自己可能有幫助。有時候會有人發布比較好的Beat the benchmark代碼,仔細思考為什麼這個模型能夠work,在上面塗塗改改有時候效果更好。
5. 永遠相信自己的cross validation結果,甚於public leaderboard,結束前後的榜單常常震動巨大,具體例子參見 Description - Africa Soil Property Prediction Challenge 和 Description - Higgs Boson Machine Learning Challenge
6. 每次比賽最有價值的東西就是結束之後的方法分享帖,大家的方法都很不一樣,挑一個說得比較全面清晰的方法,自己嘗試重現一個一樣或者接近的效果,然後再嘗試改進它,這個過程能學到非常多東西。


kaggle winner = feature engineering + ensemble + good machine + domain knowledge。

等式前兩項應該可以保證至少25%,很大希望10%了。要拿到Top10還是需要投入很多時間(調參,試feature太重要了!!),所以好的機器也必不可少(減少訓練時間啊)。

從八月份開始玩,至今參賽5次,1次10%,2次25%。。。大部分都是報名時候看著就報了,最後沒時間做,(有1次還組隊了,簡直坑隊友,感謝神隊友!)。。最好成績2%吧,遺憾與top10擦肩而過,至今未到master。

同意@Naiyan Wang的觀點,大部分kaggle比賽和machine learning關係不大。大部分比賽還是很brute force的方法,個人看法能拿到10%並不是很困難,都是一些常見的featuer處理方法(Hash, BOW, TFIDF, Categorization, Normalization),加幾個常見模型(RF, GBDT, LR),cross-validation調參數,最後ensemble一下。最好有很好的機器(主要是ram,以及tree-based model並行),這樣就不用太擔心online training的問題,大部分的lib也能用了。

不過如果想拿top10還是有一定難度,大部分冠軍得主其實都有相關領域從業經驗,有一些domain knowledge,對問題的思考也會更本質一點。

總體而言,我覺得參加kaggle還是很不錯的體驗,有一些幫助,特別是比賽結束後大家解法的分享和探討可以學到一些東西(貼一個地址Kaggle Competition Past Solutions。)但honestly,我覺得kaggle更適合機器學習入門者,對這個領域有興趣的同學們來產生興趣,鍛煉實際能力,感受一下實際的數據集(雖然仍然有些不一樣),對從業者或者researcher們而言幫助不是很大。


謝邀~~~

前些日子為了準備「Kaggle入門,看這一篇就夠了」這篇文章,搜集了不少資料,同時也對一些有著豐富項目經驗的Kaggler進行了採訪,這裡就簡單轉述一下他們的參賽的體驗給大家一個參考:

Kaggler A,NYC Data Science Academy team leader/ 美國數據電子交易公司CEO,多次參加Kaggle比賽:

參加此項目,你不可或缺的品質就是持續的熱情和堅韌不拔的毅力,即使是像我這樣的老司機,和另外兩個專攻CS和統計方向的小夥伴組隊,一個難度中等的項目做下來也要投入兩周,每天工作10h以上。更別提那些有著強迫症,一遍遍修改方案,直至deadline的完美主義大牛了。我相信沒有一支奪冠隊伍是在提交方案後完全沒改過的,頂尖高手的成功不僅是基於他們的專業素養,還有其背後我們看不到的勤奮。

Kaggler B,某知名大數據公司的數據分析師,在美國讀統計研究生期間曾通過Kaggle項目提升自己數據操作技能:

我是統計本科申請一年半的統計Master,目前剛剛回國工作。在出國前對Kaggle也是聞所未聞,來到美國以後,在導師的引導下知道了Kaggle這個巨大的學習源,經常在上面學習。在我看來,Kaggle的背書還是非常有用的,排位前幾十的都是大神級別,他們從來不需要找工作,都是工作來找他們。而對我們這樣的小白,如果沒有整塊時間找實習或者沒有找到合適的實習機會,利用閑暇時間做一些Kaggle項目,寫在簡歷上也能算做一些項目經驗,更容易得到面試;同時,在做項目的過程中,實實在在的Skills的提高也能讓我們在求職時筆試的表現更好,獲得更好的工作機會。


1. 充足的時間和精力
2. 清晰的思路以及準確的判斷力。團隊協作,互相學習。
3. 要知其所以然,充分理解數據,問題和方法之間的關係。對於模型要懂得原理,為什麼work,適用於什麼情況。不要盲目輕信某一篇或者幾篇論文。不要盲目亂試模型,浪費時間,即使獲得好的成績收穫也不大。
4. 注意對自己工程能力的提升,多積累自己的代碼。注重效率。拿幾個包跑幾個參數對自己的提升也不大。
5. 有些比賽提供的數據很有價值,不要被他們的task限制住而花大量的時間去對一個意義不大的評價標準做小數點後好幾位之內的提升。多思考能不能做點更有意思的事情。
6. 不要重複去做同樣的事情或者一直參加類似的比賽。


1、專註、投入,如果有其他事情不能專註還是算了吧;
2、深入理解數據以及feature,不要上來就套亂七八糟的模型;有些問題是需要業務知識的。
3、ensemble以及有ensemble性質的那些模型,例如gbdt等;
4、這個東西我覺得只要上了道,每次比賽套路、招數無非就是那些,拼時間吧。


挺有意思的。可以遇到很多頂尖高手。像參加flight2的時候遇到netflix冠軍隊隊長Gabor Takacs,他本身在AI領域也有深耕,參加Galaxy Zoo 的時候遇到Lecun實驗室的幾個小組。

有的人說,前幾名通常是機器好或者運氣好,我倒不這麼看,從這些頂尖高手身上可以學到很多東西。除了一絲不苟的嚴謹和精湛的專業素質,更令人佩服的是他們絕不服輸的精神,EQ絕對超一流。很多比賽前面50名不停輪動,像loan-default-prediction,從前幾名跌到幾十名就是一、兩天的事情,很多時候我都感覺筋疲力盡了,而那些最頂尖的高手,依然不斷的更新方案,一次次的推翻自己,一次次的迎頭趕上,有的比賽他們提交的方案多達上百個,嘗試過很多種方法,這比馬拉松磨人多了。

真正的頂尖高手都是極其勤奮的人。

最近做搜索引擎沒時間參加kaggle了,過段時間我還會繼續去向高手們學習的。


我們木有體驗~來分享一下嘉賓的經驗hhhh~

Kaggle 是全世界首屈一指的數據科學、機器學習開發者社區和競賽平台,我們邀請了來自中山大學CIS實驗室的劉思聰分享了他們團隊獲取Kaggle 亞馬遜雨林比賽金牌的經驗。以下內容根據他的分享做了不改變原意的編輯整理:

先大致的說一下這個比賽,很多人看到名字後會誤以為這是亞馬遜公司辦的比賽,其實這兩者完全沒有關係。它之所以被叫亞馬遜是因為它的衛星圖像來自亞馬遜雨林,我們要做的任務是在給出的一些衛星圖片上打上標籤分類,一共有17個不同的標籤。

我們取得的成績如PPT所示。

另外還有我們的結果分析圖。

接下來講怎麼構建單模型。

這是分享最重點的一部分,涉及到究竟是使用框架提供的預訓練模型還是自己隨機初始化模型去搭建一個模型,另外還涉及到如果要用預訓練模型,有哪些可以用。在明白這個之後我就會大致介紹一下怎麼去訓練一個Baseline模型,進行結果分析與改進。

首先講一下是用預訓練模型還是使用隨機初始化參數模型,這個選擇對於不同比賽來說是不同的。預訓練模型的好處是,我們可以利用ImageNet上預訓練的參數,ImageNet是一個非常大的數據集,可以在上面訓練,讓模型得到比較好的提升。但是如果我們使用預訓練模型,也就意味著大體的模型框架都是保持和它預訓練時候設置的一樣,那樣能做的調整就比較少。如果我們使用隨機初始化參數,對於模型,好處是幾乎可以說想怎麼搭就怎麼搭,壞處就是我們沒辦法用到ImageNet上預訓練的參數。

我們在比賽開始的時候就做了一些實驗,自己搭建了一些隨機初始化參數模型和預訓練模型,發現我們任務中隨機初始化參數模型的收斂速度等都遠遠比不上預訓練模型,所以我們後面的比賽就幾乎一直在用預訓練模型,至少在單模型階段是這樣的。

確定了要使用預訓練模型之後,會考慮具體選擇哪種。其實幾乎所有不同的框架都有提供自己的預訓練模型,除了有一些共通的之外,還有一些不同的,有一些預訓練模型只有某個框架有,有一些預訓練模型大家可能都有比較分析,我們最後選擇了一個PyTorch的框架。我們選擇PyTorch的原因是因為首先它的代碼比較輕量級,然後提供的預訓練模型的種類比較多,我們用它寫起來也很方便,很快就可以構建模型,大家基本上一學就會,它涵蓋了絕大多數模型。

在選擇了工具還有可以用的模型之後,就可以開始動手去訓練一個模型。一般來說,我們最開始有做一個Baseline,這個是很正常的套路,一般只有訓練一個模型,才可以對這個模型有大概的感覺。比如可以訓練ResNet18,這比較簡單。然後我們稍微劃分一下訓練集,比如說80%訓練,20%驗證,再比如用Adam做優化,調整一下學習率,試了這幾個之後就大概可以去調整訓練出比較好的模型。

一開始我們也不知道哪個範圍的學習率是比較合適,我們用0.0001這個數值是比較好的,模型收斂比較快,也比較穩定,一般學習率過大的話訓練會抖動,然後過小的話收斂比較慢,這個過程中我們也用到隊員開發的一個工具Hyperboard,可以實時記錄訓練過程中那些訓練曲線的變化,然後介面也比較簡單,在這樣一輪訓練下來之後,我們一般就可以得到反饋,然後去做結果分析,分析完之後我們才能考慮下一步要怎麼去改進訓練或者是數據。

我們當時在比較小的模型上觀察到結果是這樣的,模型一開始收斂的挺快,然後它開始過擬合,訓練集上Loss下降,驗證集Loss反增。我們當時分析了一下,覺得官方提供的訓練數據集只有4萬個樣本,相對這個任務來說是比較小的,比較容易發生過擬合,然後我們就用人類的先驗來對它做一個數據增強,這樣可以把原來的樣本用一些手段把他們變的更多,然後有了這些經過數據增強的樣本,有更多的數據的話,訓練出來模型就比較難過擬合。用數據增強解決過擬合的問題後,我們就開始可以對模型進行調整。

解決了數據不足之後我們就可以考慮使用更大模型了。最簡單的提升模型方法是使用參數規模更大的預訓練模型,另外一種就是對模型進行一些改動,用預訓練模型很難對卷積層去做一些改動。

我們大部分的改動都是在卷積層之後的全連接層進行的,我們後面也可以改動卷積層最後的Global Pooling層的輸出大小,還可以把兩個小的模型的輸出特徵拼在一起,然後再進行分配,拼成一個大模型。然後還可以增加Batchnorm、dropout、L2等,但在比賽中沒有觀察到這些參數有非常大的影響,所以我們後面並沒有對這些做仔細的調整。

確定了大體的框架還有使用的模型,接下來就是比較枯燥的調參階段,在這裡非常重要的一個參數是初始學習率,剛才講到我們選擇大概0.0001這樣一個基準的學習率,只是大概確定的一個範圍,我們可以再做一些仔細調整。調整這個初始學習率,對最後的收斂也是有影響的。

還有就是Batch size的選擇,盡量把GPU佔滿,一般來說是32-128之間,有時會做一些微調。一般來說,在訓練的過程中,下降到一定程度之後可能就完全收斂了,或者是開始出現過擬合,這時候經常會做的一個操作就是把整體的學習率降低,這樣訓練往往會提升整理的效果。在調參的過程中,也要不斷對參數跑出來的結果做記錄,去做分析和驗證,看哪些參數會比較好。

我們幾乎把十幾個模型都跑了一遍,有的跑了好幾遍,我們發現ResNet效果是最好的,DenseNet效果緊隨其後。VGG,Inception v3效果差一點。最差的是AlexNet和SqueezeNet,因為前者確實比較老而且效果也不佳,後者做的是一些壓縮工作,整體上參數不會很多,所以效果比較差一些。Inception v4和Inception Res v2效果非常糟糕,我們後來沒有使用。另外有些模型雖然總體比較差,但他們之間具有多樣性,Ensemble到一起可以提升性能。

接下來講一下數據增強。

我會為大家介紹一下有哪些數據增強的方法,有一個就是調整亮度、飽和度、對比度。這些調整之後,我們可以認為它是一個新的樣本。然後另外來說我們要通過人類的先驗,我們可以看到,把一張河流的圖調亮一點,它還是一條河流,但我們可以得到一個亮度和原來不同的樣本。

然後此外還常用的有隨機裁剪一幅圖,可以把裁剪之後的圖作為輸入,但是在這個比賽中我們並沒有用到這種技術,因為我們考慮到有一些圖片,如果去做一些隨機裁剪,可能會把圖裡面的一些特徵剪掉。

然後還有隨機縮放,水平/垂直翻轉,旋轉,把圖片變得模糊,加高斯雜訊等,這些都是很常見的方法,不過並不是每一種都適合。

對於任何任務來說,我們都應該根據實際情況來選擇一個好的數據增強。好的數據增強應該是這樣:增強過的圖片應該盡量接近原分布。對於這個比賽,我們主要使用的就是翻轉和旋轉這兩個手段,比如左右翻轉。旋轉的話我們把圖像進行90度、180度、270度這樣去轉。翻轉和旋轉配合,我們可以獲得八種角度的一張圖,並且圖像的標籤不會發生變化。

這樣的話我們就有了更多的訓練樣本,相當於把這個數據集擴充了八倍,這個方法是適用於這個比賽的數據增強,但是它並不適用於所有比賽。得根據實際情況去理解,就整體來說就是不要偏離原來分布太多,然後做完數據增強之後最好還是原來的level。

然後還有一個經常要用到的數據增強。這個增強不是為了在訓練時防止過擬合,我們在測試的時候其實也可以用數據增強。在測試的時候我們也會對一張圖的八個方向的樣本進行預測,我們可以得到八個結果,然後利用這八個結果再去進行投票,或者是加權平均或直接平均,獲得的這個結果一般都會比原來單個方向的穩定得多,這可以帶來很明顯的提升。

接下來要講的就是K折交叉驗證。

首先說下我們為什麼要做K折交叉驗證。最直觀的一個目的是要儘可能的用到全部的訓練數據,因為我們在訓練的時候,經常要劃分80%的數據做訓練集,20%的數據做測試集,確保當前的模型泛化性能是沒有問題的。但是這樣一來的話,我們就沒辦法拿驗證集上的這部分數據來訓練。

在K折交叉驗證中,我們可以先把原來的數據化成K折,這兒有一個例子,把它化成5份,然後每次用其中四份來做訓練集,把剩下一份做驗證集,這樣分別進行五遍,我們就可以在原來整個數據上一起訓練一遍,然後獲得了五個模型,然後再把它們的結果做一個平均,那這個平均結果其實就是在整個訓練集上都訓練過的結果。我們將訓練結果拼接在一起,也可以為後面的集成提供out-of-fold數據。

然後另外一個重點就是劃分K折究竟要注意什麼。主要是有這幾點:一是隊伍內部共享同一個劃分;二是單模型階段和模型集成階段盡量使用同一個劃分;三是訓練集和驗證集的劃分要與訓練集和測試集劃分方式一致;四是折數劃得越多,計算力消耗越大,需要看計算資源是否足夠;五是數據量足夠多時,可以不用使用K折劃分。

最後的重頭戲是模型集成。

模型集成在一般比賽中都會用到,它是很重要的一個環節。在圖像比賽中的地位相對來說沒有那些文本比賽那麼重要,因為圖像比賽中,我們主要用的都是卷積神經網路之類,這些模型之間並不會有特別大的不同。

Ensemble的提升主要還是要訓練一些比較好的單模型,這樣才能使最後的去集成比較好,然後在一些像文本的比賽的話,可能有的要用深度學習的方法,有的要用傳統學習方法,有的需要手工加入一些特徵,這些特徵多樣性很大,一般在比賽的模型集成階段就可以帶來很大的提升。

我們在比賽中不同階段用了不同的模型集成手段,比如平均Bagging,Bagging Ensemble Selection,還有Attention Stacking,Attention Stacking是我們自己加入的一個東西,效果還不錯。

接下來講一下模型集成階段的單樣本輸入,如PPT所示,對於某一個樣本來說,每個模型都可以預測17個類的結果,如果我們有五個模型,那我們就可以獲得五份這樣的結果,我們把他們拼到一起可以得到一個概率曲線。然後最簡單粗暴的做法就是直接把結果取一個平均,當成最後的結果。這是我們在早期的方法,所有模型有相同的權重,將概率矩陣沿模型數維度進行平均。

等到中期,我們用了一個稍微好一點的Bagging Ensemble Selection方法。它的好處是每個模型有不同的權重,在Selection過程中,有的模型可能被選到多次,有的模型也可能一次也沒被選到,按照被選中次數為權重,概率矩陣沿模型維度進行加權平均。比如說我們最開始選擇最好的三個模型,然後把12345都分別加進來,看哪個效果最好。這種方法也比較簡單粗暴,這個過程中不涉及交叉驗證。

到了後期我們採用Stacking,它的性能更強一點。每一個模型的每一個類都有自己的權重,這其實是比較好理解的,比如說某個模型在氣象類上表現的比較好,但他在其他類上表現比較差,那樣的話,他在氣象類上應該有一個更高的權重,在其他類上的權重比較低。我們利用模型在不同類上的不同表現性能來做一個集成。

一般來說,在Stacking階段,常用的一個做法就是,把每一個類都單獨訓練一個分類器,然後以它在之前所有模型的輸入作為輸入,然後去預測一個結果。我們有17個類,就訓練17個單分類器,然後去預測出17個結果。在這裡最簡單的是直接過一個線性回歸,但是我們發現在當時的驗證集上容易過擬合。

然後我們自己設置了一種比較簡單的機制,即Attention Stacking。對於每一個類,我們去學一個和單模型數目一樣多的參數,然後對它做Softmax,這樣就使得這些參數加權為1,加權為1的話就是一個天然的權重,可以把原來的五個類按照這個權重直接加權平均。

後來我們還用Logistic Regression、Ridge Regression做stacking,我們發現Attention Stacking在驗證集上效果比較好,但因為時間有限,並沒有做足夠量的對比實驗。最後還是要提到,不管這些模型集成怎麼做,在這種圖像比賽中都要有比較好的單模型,而且得具有多樣性,這樣Ensemble才有意義。

QA

Q:你們數據記錄工具是什麼?
A:我們使用的數據記錄工具,比如記錄曲線用的是Hyperboard,然後其他的一些統計數據只是簡單地用excel表來記錄。

Q:數據增強階段為什麼不是隨機角度,而是用了四個固定角度?
A:這個是有對比的,我們之前做過一些隨機角度的,但是發現它相比用四個固定角度,帶來的提升並不高,而且會消耗更多的計算資源。

Q:Ensemble Selection用了多少個模型?
A:Ensemble Selection用了挺長一段時間,從十幾個模型到六十幾個模型我們都有試著用,但是後來發現這種方法沒有劃分驗證集,想得到驗證集我們只能去用Stacking。


某位仁兄在論壇里寫到:
After spending the last 3.5 months doing Santa competition AXA
competition in all my spare time, I promised my wife I wouldn"t do any
more for a while.


------------------------
最近參加了National Data Science Bowl. 這是我第一次kaggle competition.
順便祝賀最高票答主拿到Top 2. 我自己37,還要向 @Naiyan Wang@曹旭東 各位多學習


N人行,必有top K。


我很想說,有solid背景和比賽經驗,而且想跳到quant坑裡的請pm我簡歷,該信息長期有效。


Kaggle是個很好的學習環境,而且獲勝者會無私地分享其創意、演算法甚至代碼。向優秀者學習。


沒時間長期集中投入,也有些題目是需要其他領域的業務知識。反正我只是在上面練了個手,沒希望跑到top幾來著


拿過2%(25/1689) 和5%(50/1047)

主要的體驗
1,很耗精力,尤其對於我這種強迫症,感覺每天下班回來搞這個大概是上班所花精力的2倍。。每天都想著要用掉5次submit。。
2,鍛煉動手能力(寫代碼),比如數據清理,feature engineering,各個package的應用。我參加的2次數據都不小,所以gradient boosting我是在AWS上租個8cpu的instance跑的,neural network是用自己顯卡跑的(980ti就是這麼自信xD)
3,心情起伏比較大,每天有新想法,嘗試後發覺沒用,然後競爭對手紛紛趕上,有壓力
4,後期比較單調無聊,因為基本的feature engineering想法都窮盡了,後期大家都是在瘋狂的ensemble model,運行時間劇增,只為擠出那0.00幾的分。雖然知道這意義不大,但別人都在做,不做就會落後
5,比賽最後3天有人發現data有leakage,並且這leakage的效果好到基本可以無視之前的好模型和好feature,結果比賽變成看誰在最後3天挖掘出leakage的更多價值。當時很多排名靠前的人都很沮喪,因為之前兩個月努力都白費了,而且這leakage,就是當初主辦者在train test split的時候沒注意shuffle,所以鑽研這個的solution對辦這比賽的公司來說是毫無意義的。我當時本來排在十幾名,本來還想著private rank可以到前十的。。結果leakage一出來直接跌到100開外。。然後我就吧leakage簡單的加到部分模型里,跑完submit完就不管了。(那幾天正好是假期)

我的建議
抱著學習和鍛煉的態度去參加kaggle,考慮解決這個問題的實際做法,多看別人的kernel。
不要太看名次。。尤其是前三,真的是有實力有精力也無法確保拿到。。kaggle挺多比賽的第一名都是很多模型的stacking,誇張的比賽我見過第一名用了500個模型,那比賽的排行榜,roc_auc都高的嚇人,0.97的樣子,前排基本上每個人和前一名差距在小數點後第四位。test set有一點noise排名就會有大變化。。


阿里巴巴大數據競賽第二季正式上線!題目多多(涉及推薦、影響、金融!)!數據多多!獎金多多!@好東西傳送門O網頁鏈接
---------------------------------------------------------------------------------------
轉自 quora的Chris Hefele:

I』ve been fortunate enough to have landed in the top few spots of a few Kaggle competitions, and I』ve been surprised by what factors that do not matter much, as well as those that do. Here are my observations views:

Persistence Enthusiasm: First, I agree with Vik』s comments that persistence plays a big role. These contests are both addictive and frustrating. Many times I』ve coded up what I thought was a great idea, only to be dumbfounded about why it ended up hurting my score. Converging on a good model takes time, so to keep going, it really helps to be enthusiastic about the problem, or about learning something new, or about working with your teammates.

Know your data (aka Exploratory Data Analysis): Each dataset is unique, so I think it』s really, really important to roll around in the data get to know its quirks inconsistencies inside out. You should do this before you even think of throwing the data into some ML algorithm or doing pre-processing. Write code that generates thousands of graphs that you can scan, so you get a good 「feel」 for what the variables in the raw dataset are doing. Sometimes quirks can provide insights, while other times they provide opportunities. Large outliers have burned me more than once, so one lesson I』ve learned is to always have a sensible strategy for finding and dealing with them, rather than ignoring them.

Feature Engineering: I think this is one of the most important skills, if not the most important one. The good news, though, is that it』s not exclusively a highly-technical skill. A good dose of creativity and common sense can take you a long way when dreaming up new features. Also, if the contest domain is completely new to me, I usually just Google around for some papers in the field, and scan them to get a general idea of what features/factors are already known to be very important. But I don』t dwell on doing too much research (i.e. no more than 5%-10% of the competition duration). Most of the time, I have fun generating as many crazy ideas for features as possible, and then let a features-selection or feature-prioritization algorithm prune away the ones that don』t work well.

Avoiding Overfitting: When every 0.000001 matters, a crucial technical skill is avoiding overfitting your model to the data. When the leaders of a contest are separated by only a very small amount, even a little overfitting can cause you to lose many places in the final standings.

Picking a problem you had particular insight about: I』ve been surprised that this hasn』t been particularly important. Sometimes, I』ve done poorly on problems that I thought I had insights on, while other times I"ve done well on areas completely new to me. So for me, I think there』s a very loose correlation (at best) between insights/experience and success in a contest. Many Kaggle winners come from fields outside of the contest』s domain, so previous insights don』t seem to be mandatory. But knowing a problem area already may mean you"re interested in it, which means you"ll likely work harder on the contest be more successful.

On using external data: It』s soooo tempting to use external data, but generally, I haven』t found using them useful. One really interesting blog post about this topic came up during the Netflix Prize, where members of the winning team commented that external data helped their weaker models at first, but as they progressed, it didn"t help them at all. http://pragmatictheory.blogspot....

Superior knowledge of the subtleties of ML: Now-a-days, with everyone using libraries of ML routines, you can use techniques you don』t fully understand do fairly well. This is both good and bad. Knowing the subtleties details of each algorithm is helpful for tuning, but one could conceivably stumble your way towards the best algorithm or parameters by just trial and error. I"d say most most competitors probably have access to the same set of "standard" machine-learning algorithms that are provided in ML libraries, so this really doesn"t provide a huge competitive advantage.

Proprietary tools: I don』t think this is an advantage at all, given all the open-source tools and libraries that are out there. I』ve never used a proprietary tool for these contests (well, actually that』s not true, I sometimes make charts in Excel…)


昨天完成了第一個正經參加的kaggle比賽,結果居然就是目前參賽人數最多的,所以得了個top7% 我也就知足了。

之前也做過一些ml/pr的項目,但是感覺kaggle的收穫還是很特別的。
一來畢竟是比賽,追求又好又快,而且還有每天最多五次的提交限制,不能瘋狂測試也不指望最後衝刺。最後幾天為0.0001的AUC提高同時猛cv三套演算法的心情真是酸爽。寫paper做日常項目的時候很少會同時極致的tune多個model,也很少會在意這麼一點提高,於是查資料的手速和眼速都超快,也關注到一些以前不在意的地方。

二來是對手強大,討論有益。kaggle的論壇氛圍很好,對我這個新手,偶爾看幾個貼都有滿腦袋小燈泡的感覺。並且剛說了是個最熱鬧的比賽,很多top kaggler也在,他們的討論和代碼都挺有意思,當然更期待賽後採訪他們公布演算法。

另外還有一個takeaway,不要盲信pb,不要對overfitting低頭:)
這次比較最後幾天pb上大家都為了排名瘋狂的overfit,我也心動了,最後也臨時加了一個覺得overfitting但排名高的結果,和一個自己的top model一起提交,而不是兩個都選自己的top model。結果,還是正經的model表現好多了,而終榜上overfitting的各隊都結果一般,有的下降兩三千位。Learned my lesson.

所以,第一次參加的我表示,很推薦,很受教。期待讀到更多經驗分享,期待認識玩的來的小夥伴一起組隊 :)


都16年了,Kaggle已經採用了很多的新技術。樓上的關於Kaggle偏DM弱ML的結論已經不太適用, 在新競賽中Tensorflow, Keras, MXNext等正在被大量的使用。憑藉著海量的數據集,kaggle是一個很好的Deep learning訓練平台


做過kaggle的圖像類比賽,剛開始做比賽的時候比較帶勁,願意毫無厭倦的嘗試各種技巧,讀paper也帶勁了許多,因為kaggle而讀了大多且跟進deep learning的paper。覺得kaggle給我帶來的影響就是讓我迅速從理論轉向實踐,而且排行榜這種快速的反饋機制也讓實踐變得很有趣。取得過不錯的成績,不過後來讀多了paper,就總想試著改進最新的演算法,成功率很低,結果也就不如用一些驗證過的演算法把問題做細,例如之前的獲獎者根據比賽特性對training數據做了額外的標註取得了更好的結果。


快來參加DataCastle驗證碼大賽,多參加活動就好啦~
首頁


首先你能在做任務中獲得更多的理論以及實踐。其次在比賽中可以結識和你志同道合的人。再者比賽名次不錯的話還有相應的獎勵。無論哪種都是不錯的體驗~

但是kaggle上菜鳥的名次可能不會太考前,現在國內還是有一些大數據方面的競賽,建議可以先從國內的練手~


更新:我又拿了個top2%(12/735)。排名比較靠前的隊伍好多都人手多塊gpu,時代飛速發展啊。

******
參加過一次,top1%(16/2293)。感想如下:


1.Kernels和Discussion裡面大部分華麗的visualization和看似有道理的分析都是沒什麼價值的。新手入門的話不要被嘴炮拐錯了方向。

2.我參加的那一次突然有一天湧現了許多作弊的id,其中大部分從昵稱就能看出是國人。讓我一夜間下降了二十名。不過之後這些賬號被主辦方封號了。勸大家不要作弊,包括一人多號,跨隊私享模型或代碼。被查出來丟祖國的臉。

3.有時候可能每天都會排名往下降,每天醒來看一眼leaderboard都會讓自己不開心。但後來看了知乎的這個回答https://www.zhihu.com/question/32032932/answer/58810196,於是堅持了下來。

4.一定要尊重數據,強行套用生活經驗或自己的直覺或華麗的模型來強姦數據是沒有好處的。


推薦閱讀:

怎麼在 Excel 上做數據地圖?
數據挖掘入門基礎知識疑惑?
AI領域的灌水之風如何破局?
怎麼培養數據分析的能力?
機器學習里的 kernel 是指什麼?

TAG:數據挖掘 | 機器學習 | 數據科學家 | 大數據 | Kaggle |