1. 程式人生 > >關於Kaggle入門,看這一篇就夠了

關於Kaggle入門,看這一篇就夠了

這次醞釀了很久想給大家講一些關於Kaggle那點兒事,幫助對資料科學(Data Science)有興趣的同學們更好的瞭解這個專案,最好能親身參與進來,體會一下學校所學的東西和想要解決一個實際的問題所需要的能力的差距。雖然不是Data Science出身,但本著嚴謹的科研態度,在進行了大量的調研、學習以及對相關經驗者的訪談之後,決定寫下這篇專欄,一方面讓那些對資料科學(Data Science)有興趣的求職者和申請者能真正瞭解這個專案,另一方面也讓那些有想法參與進來的人get到正確的開啟方式。

什麼是Kaggle?

Kaggle成立於2010年,是一個進行資料發掘和預測競賽的線上平臺。從公司的角度來講,可以提供一些資料,進而提出一個實際需要解決的問題;從參賽者的角度來講,他們將組隊參與專案,針對其中一個問題提出解決方案,最終由公司選出的最佳方案可以獲得5K-10K美金的獎金。

除此之外,Kaggle官方每年還會舉辦一次大規模的競賽,獎金高達一百萬美金,吸引了廣大的資料科學愛好者參與其中。從某種角度來講,大家可以把它理解為一個眾包平臺,類似國內的豬八戒。但是不同於傳統的低層次勞動力需求,Kaggle一直致力於解決業界難題,因此也創造了一種全新的勞動力市場——不再以學歷和工作經驗作為唯一的人才評判標準,而是著眼於個人技能,為頂尖人才和公司之間搭建了一座橋樑。

這裡有一篇對Kaggle首席科學家Jeremy Howard的採訪,介紹了Kaggle的建立初衷及運營模式,即任用最聰明的人解決世界上最棘手的問題;同時,任何公司和組織都可以受益於機器學習的發展進步,感興趣的同學可以戳這裡: 

原文連結 ,來進一步瞭解。

Kaggle的競賽模式是什麼樣的?

Kaggle上的競賽有各種分類,例如獎金極高競爭激烈的的 “Featured”,相對平民化的 “Research”等等。但他們整體的專案模式是一樣的,就是通過出題方給予的訓練集建立模型,再利用測試集算出結果用來評比。同時,每個進行中的競賽專案都會顯示剩餘時間、參與的隊伍數量以及獎金金額,並且還會實時更新選手排位。在截止日期之前,所有隊伍都可以自由加入競賽,或者對已經提交的方案進行完善,因此排名也會不斷變動,不到最後一刻誰都不知道花落誰家。

由於這類問題並沒有標準答案,只有無限逼近最優解,所以這樣的模式可以激勵參與者提出更好的方案,甚至推動整個行業的發展。

Kaggle競賽另一個有趣的地方在於每個人都有自己的Profile,上面會顯示所有自己參與過的專案、活躍度、實時排位、歷史最佳排位等,不僅看上去非常有成就感,更能在求職和申請的時候起到Certificate的作用。

Kaggle參賽者的背景大多是什麼樣的?

從比賽目標出發,參賽者主要分為兩種,一種是以獎金和排名為目的,包括靠獎金為生的職業Kaggler;另外一種就是以提升相關skills和背景為目的業餘愛好者甚至在校學生了。

從背景來看,前者的來源主要有豐富data science、data mining、machine learning工作經驗的業內人士,或者是實力強勁的民間“技術宅”;而後者則往往是一些有一定技術能力,但經驗欠缺,從中進行學習和鍛鍊的“長江後浪”。

0基礎的人如何上手Kaggle?

理論上來講,Kaggle歡迎任何資料科學的愛好者,不過實際上,要想真的參與其中,還是有一定門檻的。一般來講,參賽者最好具有統計、計算機或數學相關背景,有一定的coding技能,對機器學習和深度學習有基本的瞭解。Kaggle任務雖然不限制程式語言,但絕大多數隊伍會選用Python和R,所以你應該至少熟悉其中一種。此外,對於那些對成績有追求的人,Feature Engineering也是必不可少的。但對於Data Science的入門者來說,這樣的要求實在是有些過分了。對於這一塊想要進一步瞭解的同學可以看這個問題:特徵工程到底是什麼?其中@城東 的答案(點這裡)和@張戎 的答案(點這裡)都非常詳細。

當然,如果你從未獨立做過一個專案,還是要從練習賽開始熟悉。因為競賽模式中的任務是公司懸賞釋出的實際案例,並沒有標準的答案;而練習賽不僅專案難度低,而且是有官方給出的參考方案的,大家可以用來對比改善自己的測試結果,從中進行提高。所以呢,建議感興趣的同學先去獨立做一下101和playground的訓練賽,至於做多少個案例才能上道,就要看個人素質啦。這裡為大家推薦幾篇非常好的文章,裡面手把手的教了大家入門級的兩個經典練習專案,供大家學習。

1. Titanic(泰坦尼克之災)

2. House Prices: Advanced Regression Techniques(房價預測)

3. Digital Recognition(數字識別)

Kaggle競賽獲獎及取得名次難麼?

Kaggle競賽取得獎金乃至取得好的名次的難度都是非常高的,通常一個專案的參與人數都能達到數千人,而其中只有Top 1可以得到獎金,可以說是高手中的高手。通常來說,幾個具有一定水平的業內人士在臨時組隊的情況下最多也就拿到20名左右的成績,想要再往前衝往往都需要有一定程度的默契和合作經驗了。

所以,對於以學習與實踐為目的的小白選手來說,不要太在意排名,從參賽的過程中不斷地提升自己才是最終的目的。當經過一次又一次的洗禮最終取得一個不錯的成績後,相信你也已經成長為可以在相關領域獨當一面的人才了。

Kaggle競賽的認可度高麼?

Kaggle作為Data Science業內享有盛名的平臺,在業界擁有極高的認可度。所以如果你是想尋找相關行業的工作,那一個漂亮的Kaggle profile將為你的簡歷增色不少。Quora上的這個問題: How can we use Kaggle? (點選檢視)就提到,把Kaggle的專案經驗寫在Linkedin上可以很直觀的展現自己作為一個Data Scientist的能力。

國內亦有一些高階人才對Kaggle有很高的認知度,比如Edward.Fu - 知乎 一直在知乎各個和Kaggle相關的問題下留言尋覓Kaggle比賽經驗豐富的人,表示常年有這方面的需求,說明國內對Kaggle的專案經驗也是非常認可的。如@Lau Phunter在Kaggle 的比賽在 Machine Learning 領域中屬於什麼地位? 回答下面所說的:

“寫上參加過Kaggle比賽,我會看簡歷。

得過一次10%,我會給電話面試。

得過2次或者以上10%,我會給on site面試。

得過一次前10,我們會談笑風生。”

參加Kaggle是一種怎樣的體驗?

在調研的過程中我採訪了幾個Kaggler,將他們的親身經驗做了一下總結:

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

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

Kagger B ,某知名大資料公司的資料分析師,在美國讀統計研究生期間曾通過Kaggle專案提升自己資料操作技能:

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

除此之外,知乎上面著名的“體驗貼”也給出了很多第一手的體驗: 參加kaggle競賽是怎樣一種體驗? - 大資料 - 知乎 。在這個問題下Naiyan Wang 給出了一個非常詳細的答案,同時答主也有一個很好的Profile,文中涉及Kaggle側重的能力,比賽的要點,以及關鍵的技術,歡迎大家圍觀~

Kaggle的競爭非常激烈,正如OFuture T - 知乎

所說,很多時候Kaggle的排名即便是前50位流動性也很大,從前幾名跌至幾十名不過一兩天的事,可想而知想要保住排位要在此付出多大的時間和精力,一次次的推翻自己,碾壓別人,真是個磨人的小妖精。。。

Kaggle有什麼意義?

  • 從求職者的角度來看:

Kaggle提供了一個非常好的學習平臺,在這裡你可以接觸到真正的業界案例,收穫實際的專案經驗,在每一個專案中不斷挑戰自己,甚至在Kaggle榜上佔據一席之位,提高自己在業內的知名度,優秀的排位甚至可能帶來的非常好的工作機會。同時,也可以認識一群志同道合的人,擴充套件自己的professional network,與業內最頂尖的高手互動,尤其是很多隊伍在比賽結束後都會公開自己的解法,如果這個專案恰好你參與過,為之投入過無數個日日夜夜,此時就是不可多得的學習機會。

對於剛剛進入這個行業的菜鳥而言,參加Kaggle的專案是非常“長見識”的,可能初期的嘗試會非常吃力,畢竟都是非常前沿的問題,但是如果能堅持完整的把一個專案做下來,且不說coding能力會有一個很大的提高,在實際案例中解決問題的能力也會得到極大的鍛鍊,為自己的職業生涯打下一個良好的基礎。如果能在Kaggle這種高手雲集的比賽中獲得一個還不錯的成績,寫在簡歷上足以打動你今後的Boss,跳槽就翻倍的高薪工作指日可待!值得一提的是,雖然是彙集精英的社群,Kaggle的論壇氛圍很好,對新人非常友好,大家一定要多看Script多請教!

  • 從申請者的角度來看:

對於申請Data Science相關專業的同學來講,大資料的走紅使得Data Science的申請競爭愈演愈烈,因此如何提升背景也是大家非常關心的問題。而Kaggle正好給大家提供了一個非常好的平臺,在這裡人人有參與專案的機會,無論你的背景是什麼,都可以通過選擇合適的專案來找到屬於自己的位置,利用自己的專業優勢,為整個team作出貢獻,豐富簡歷的同時也能學習一些乾貨,為自己以後的學習打好基礎。而其在領域內的知名度足以讓你在眾多申請者中脫穎而出,絕對是申請利器!

對於新人,如何在Kaggle中提升排位?

  • 選擇合適的隊友:

由於Kaggle的專案是由公司提供的,涉及各個行業,所以一般都是不同背景的人組隊參加(如統計、CS、DS,專案相關領域如生物等)。因此對於新手來講,很重要的一點就是要抱好大腿,不僅可以蹭到好的排名,還有機會近距離向大牛學習,技能值必然嗖嗖漲。而自己可以從力所能及的工作做起,如清洗資料等等,積累專案經驗。

  • 選擇“正確”的專案;

首先,選擇資料量小的專案,這樣不管使用什麼演算法都不會耗時太久,對機器效能要求也不高,出結果也比較快;其次,選擇難度低獎金少的專案,一方面競爭小,另一方面也適合新手;最後,選擇參與人數多的專案,畢竟有那麼多“殭屍號”撐著。這樣下來,基本上認認真真做下來排名都不會太難看。

  • 選擇恰當的工具:

我們都知道循序漸進的道理,因此對於剛剛涉獵Kaggle,只是希望從中學習,而不追求高排名的同學,可以先從學習Machine Learning中常用的模型開始,比如Logistic Regression和Random Forest,這兩個模型對於大部分問題就夠了;基礎好的還可以學習一下Gradient Boosting,雖然難度高一點,但是視覺化效果會好很多。

當然,說到底,想獲得更好的名詞,提高自己的skill才是終極解決方案!

最後是彩蛋時間:

這裡有超級良心的手把手教程, 如何在 Kaggle 首戰中進入前 10% , 詳細介紹了Kaggle專案的大致流程,包括Data Exploration, Statistical Test, Data Processing, Feature Engineering, Model Selection, Ensemble Generation每一步該怎麼做,有哪些Tips,最後還給出了一個“Home Depot Search Relevance”的案例,拿到它就可以開始自己的Kaggle排位賽了!祝願大家都能夠成為一個優秀的Data Scientist!

接下來是我整理的一些相關的學習資源,大家各取所需。

  • 基礎準備篇之Python
  • 基礎準備篇之R
  • 基礎準備篇之Machine Learning
  • 基礎準備篇之Kaggle Experience
Python機器學習實踐與Kaggle實戰 Techniques to improve the accuracy of your Predictive Models