文章目錄[隱藏]
之前發過跟Z by HP做的一個(ge) Kaggle 大師訪談,在裏麵聊了一些對Kaggle的看法。我覺得說的還比較實在,但最後分批發出來加上花哨的排版,感覺係統性下降了不少。本來尋思找個(ge) 時間再寫(xie) 一篇,但前幾天(大概5月份吧。。)逛推特看到Mario[1](最高世界排名12的Kaggle Grandmaster)寫(xie) 的這篇文章,非常讚同,幹脆給翻譯成中文發出來。
以下是譯文,加了一些我的小comments。
在Kaggle上競賽是否值得?一個Kaggle大師的思考
作者:Mario Filho
沒有Kaggle,我就不會(hui) 有數據科學事業(ye) 。
因此,如果你正在尋找一篇抨擊Kaggle的博文,這裏不是你要找的地方。
但是,我不是一個(ge) 認為(wei) Kaggle是每個(ge) 人成為(wei) 數據科學家必須做的終極事情的激進分子。
我想從(cong) 一個(ge) 曾經參加過大量比賽但幾年前決(jue) 定 "退休 "的人的角度來發表真實的看法。
一些背景情況
我的職業(ye) 道路非常奇怪,但我認為(wei) 這是一個(ge) 更有說服力的案例,說明花時間參加Kaggle比賽可以幫助你。
我是一個(ge) 從(cong) 法學院輟學的人,不想再上大學,決(jue) 定自學機器學習(xi) 是個(ge) 好主意,盡管當時幾乎所有的數據科學工作崗位都要求至少有STEM的碩士學位。
我把在Kaggle上的比賽看作是顯示我知道自己在做什麽(me) 並彌補沒有學曆的唯一機會(hui) 。
上大學可以為(wei) 我節省很多時間和精力,但我仍然認為(wei) ,即使你沒有處於(yu) 我當時的奇怪情況,也可以從(cong) Kaggle中受益。
Kaggle的優點
1.你遇到的人
我有機會(hui) 向機器學習(xi) 領域最優(you) 秀的人學習(xi) ,在某些情況下,我還結識了Kaggle以外的朋友。
我對在Caterpillar(現在的Tube Pricing)比賽期間通過Skype與(yu) Giba[2]和Leustagos[3]討論策略的時間記憶深刻。
Stas Semenov的成績一直給我留下深刻印象,在聯係合作之後,我找到了一個(ge) 超越比賽的朋友。
今天,你看到很多人在論壇上尋找大規模的參與(yu) ,或者為(wei) 了獲得獎牌而組隊,但Kaggle的真正價(jia) 值在於(yu) 組隊創造關(guan) 係。
我(在生活中)最大的錯誤之一是試圖自己做所有事情。
如果你看看排名靠前的Kaggle參賽者單槍匹馬與(yu) 組隊參加的比賽有多少,你會(hui) 發現大多數人的團隊參與(yu) 比例都很高。
如果你在一個(ge) 團隊中,更容易獲得前排位置和獎項。
與(yu) 有經驗的Kagglers合作的一個(ge) 額外提示
吸引有經驗的Kaggler加入你的團隊的最好方法是有一個(ge) 有前途的解決(jue) 方案(由LB排名來證明),並提議做大部分的重活。
我知道與(yu) 更有經驗的Kaggler組隊會(hui) 對我的成長有很大幫助,所以我使用了以下策略來獲得我與(yu) Giba的第一個(ge) 團隊。
當時有兩(liang) 個(ge) 比賽的結束日期相同。我與(yu) Giba交談,發現他專(zhuan) 注於(yu) 我沒有參加的那個(ge) 比賽。
我知道他喜歡參加盡可能多的挑戰賽。我有一個(ge) 像樣的解決(jue) 方案(在LB上大約150名),並向他提出以下建議:讓我們(men) 合作,我們(men) 來談談想法,我來負責大部分的工作。
他同意了,在看了我的代碼幾分鍾後,他發現我的功能工程中有一個(ge) 簡單的錯誤。在修複它之後,我們(men) 躍居第二名。
這對我們(men) 的積極性是一個(ge) 巨大的推動。
我們(men) 讓Leustagos和Josef Feigl加入了這個(ge) 團隊。我們(men) 都付出了很大的努力,最後贏得了比賽。
閱讀他們(men) 的代碼,領略他們(men) 對機器學習(xi) 的思考,比我上的任何課程都要好。
2.你得到的工作機會
我多次遇到以下對話。
我:"你是怎麽(me) 找到我的?"
招聘者。"我在看Kaggle,發現了你的資料。"
即使你在Kaggle上沒有保持很高的排名,公司也會(hui) 積極尋找Kaggle比賽的獲勝者、大師和特級大師。
在LinkedIn上搜索描述中帶有 "Kaggle "的職位,你會(hui) 看到像亞(ya) 馬遜、微軟和Meta這樣的公司把比賽經驗作為(wei) 首選資格。
有些公司如英偉(wei) 達甚至有一個(ge) 專(zhuan) 門的Kaggle Grandmaster團隊。
譯注:做比賽的話的話他們(men) 就是你的競爭(zheng) 對手。。
對於(yu) 自由職業(ye) 者/谘詢業(ye) 來說,這是個(ge) 不確定因素。一些客戶會(hui) 知道Kaggle並重視它,另一些則不會(hui) 。這可能會(hui) 隨著時間的推移而改善。
即使你從(cong) 來沒有贏得過比賽,你從(cong) 比賽中學到的東(dong) 西也會(hui) 幫助你在工作中做得更好。
3.贏錢很爽,但不是全部
獎金通常不值得你花時間和精力去贏。
如果你剛剛起步,最好把比賽作為(wei) 一種學習(xi) 工具,而不是把注意力放在錢上。
將你在Kaggle上獲得的知識用於(yu) 其他項目,其潛在收益是天文數字。
我不記得我到底是在哪裏聽到的關(guan) 於(yu) 在Kaggle上比賽和在公司裏做數據科學家的比喻。
這就像把跑5公裏的人和奧林匹克運動員相比。奧運會(hui) 運動員要想獲得最大的成績,就必須超越基本的要求。就像在Kaggle上的競爭(zheng) 迫使你非常深入地去完成任務。
雖然你很可能永遠不會(hui) 在工作中對一項任務進行如此深入的研究,但你在比賽中做過的事實使你更簡單、更快速地得出高性能的解決(jue) 方案。
隻是不要被蒙蔽,以為(wei) 建模是唯一重要的事情(後麵會(hui) 有更多相關(guan) 的內(nei) 容)
4.你在不知不覺中變得擅長編寫機器學習代碼
要成為(wei) 一名優(you) 秀的數據科學家,既要有策略,也要有 "機械 "技能。
Kaggle是一個(ge) 練習(xi) 機械部分的好地方。
由於(yu) 你必須在各種解決(jue) 方案之間快速迭代,寫(xie) 代碼處理數據和建立機器學習(xi) 模型將成為(wei) 你的第二天性。
你也會(hui) 更好地使用開箱即用的機器學習(xi) 庫,並且總是比大多數數據科學家更早知道在實踐中發揮作用的新庫和方法。
5.你將對數據和機器學習的可能性有一個非常好的感覺
這在Kaggle之外的許多不同領域都非常有用。
盡管數據集(幾乎)是現成的,但對我有幫助的一個(ge) 練習(xi) 是嚐試逆向工程,看看讚助商是如何創建它的。
例如,在最近的H&M推薦挑戰中,任務是根據顧客過去的購買(mai) 曆史,預測他們(men) 在未來7天內(nei) 會(hui) 購買(mai) 哪些商品。
他們(men) 分享了來自客戶、交易和產(chan) 品的數據,而如何使用這些數據則是由你來決(jue) 定的。
下次你必須解決(jue) 公司內(nei) 部的推薦問題時,你就知道要尋找哪些數據庫,以及如何使用它們(men) 來獲得一個(ge) 模型的工作。
6.你學會了可靠驗證的價值
"相信你的驗證(Trust your validation)"是Kaggle社區的頂級競爭(zheng) 者經常使用的一句話。
這並不意味著相信任何驗證,而是首先創建一個(ge) 值得信賴的驗證分項,並且不要花太多時間 "調整 "你的模型以攀登公共排行榜。
攀比排行榜(在大多數情況下)會(hui) 導致過度擬合和私人排行榜上的糟糕結果,就像一個(ge) 糟糕的驗證方案會(hui) 導致模型在生產(chan) 中表現不佳一樣。
一些比賽在公共排行榜和私人排行榜之間有可怕的震蕩,這給你一個(ge) 教訓,你永遠不會(hui) 忘記在部署模型之前有一個(ge) 可靠的驗證方案是多麽(me) 重要。
不僅(jin) 如此,你會(hui) 學到許多不同的方法來驗證你的模型,這些方法超出了通常的隨機訓練/測試分割。一些Kaggle選手對此非常有創意,然後在比賽結束後在論壇上分享。
我從(cong) 有經驗的競爭(zheng) 者那裏學到的一個(ge) 具體(ti) 的Kaggle提示是,把公共排行榜當作另一個(ge) 驗證折頁。
7.你要學會快速找到目標泄漏點
如果你的結果看起來好得不像真的,那麽(me) 它們(men) 可能就是真的。
當測試集的信息通過你所使用的特征 "泄漏 "到訓練集時,就會(hui) 發生泄漏。這是你在生產(chan) 中無法獲得的信息,但卻存在於(yu) 你的曆史數據中。
例如,假設你試圖預測明天的股票價(jia) 格。
如果你在將數據分割成訓練和驗證之前簡單地對數據進行縮放,那麽(me) 你的驗證指標將比它們(men) 應該的樂(le) 觀得多。
這是因為(wei) 你在訓練數據中使用了關(guan) 於(yu) 未來的信息。
Kaggle是一個(ge) 學習(xi) 這個(ge) 的好地方,因為(wei) 它充滿了泄漏的例子。
你會(hui) 了解到,當你在Kaggle上發現數據泄露時,你會(hui) 利用它來贏得比賽,但當你在比賽之外看到它時,你會(hui) 修複它。
8.你學習可重複的研究實踐
當你贏得比賽時,你必須提交你的代碼和一份報告,解釋你所做的事情,並與(yu) 讚助商進行通話。
這有兩(liang) 個(ge) 目的:顯示你沒有作弊和提供有價(jia) 值的研究。
這隻是比賽教你如何做可重複研究的一種方式。
你必須把你在比賽中嚐試的所有亂(luan) 七八糟的東(dong) 西組織起來,讓它產(chan) 生預測,讓你在排行榜上獲得相同的位置。
如果你從(cong) 未贏過呢?
另一種練習(xi) 方式是在比賽期間在團隊中分享工作。
在有經驗的Kagglers團隊中,每個(ge) 人都在自己的工作,在這裏和那裏分享一點點代碼。
每個(ge) 團隊成員的機器裏都有一份完整的當前最佳解決(jue) 方案的副本,所以他可以嚐試在其中添加新的模型。
這需要我們(men) 定義(yi) 共享的驗證分割和數據,這是使解決(jue) 方案可重複的一個(ge) 重要部分。
這是在不得不在 "真實世界 "中進行研究之前練習(xi) 研究技能的一個(ge) 很好的方法,因為(wei) 你可以犯所有你想犯的錯誤而不會(hui) 有大的後果。
如果你想看看一個(ge) 組織良好的最終解決(jue) 方案庫是怎樣的,可以看看Chenglong Chen的這個(ge) 方案[4]。
9.你培養了自信
每一個(ge) 機器學習(xi) 問題都是一樣的,隻是穿上了不同的衣服。
當你看到自己在起初似乎遙不可及的比賽中取得進展時,你會(hui) 獲得自信,相信自己能夠解決(jue) 非常困難的問題。
我總有一種感覺,下一次比賽我根本做不出什麽(me) 有用的東(dong) 西,但即使在我的解決(jue) 方案被擊垮的比賽中,我也學到了寶貴的經驗。
事實上,那些我表現較差的比賽正是讓我學到最重要的東(dong) 西的比賽。
10.擴大你的解決方案工具箱
如果你不了解一個(ge) 工具,你就無法使用它。
你的機器學習(xi) 工作的質量取決(jue) 於(yu) 你對某一問題有多少想法、方法和技巧。
在你嚐試之前,沒有辦法知道什麽(me) 會(hui) 成功,但如果你隻知道1種方法呢?
你有越多的候選解決(jue) 方案就越好。
Kaggle競賽將迫使你在快速迭代解決(jue) 方案的過程中嚐試許多不同的技術。
這將幫助你學習(xi) 許多不同的方法來解決(jue) 機器學習(xi) 問題,並給你一個(ge) 工具箱,讓你在不同情況下使用這些方法。
例如,我總是發現人們(men) 不知道的一個(ge) 工具是因式分解機(FM)。你聽說過這個(ge) 模型嗎?
對於(yu) 非常稀疏的、有數百萬(wan) 行的分類數據來說,這是一個(ge) 很好的解決(jue) 方案。它的速度很快,而且實現了一種非常聰明的方法來模擬特征的相互作用。
如果我不參加(或至少不讀)Kaggle點擊預測比賽,我就永遠不會(hui) 知道這個(ge) 工具了。
Kaggle的壞處
1.在Kaggle上花費太多時間會扭曲你對機器學習的看法
譯注:我認為(wei) 比鑽研技術更重要的是讓技術產(chan) 生價(jia) 值
在業(ye) 界,機器學習(xi) 並不是要每天多次刷新排行榜,看你是否保持了自己的位置。
今天,我仍然很難提醒自己,我不需要為(wei) 客戶創造絕對最好的解決(jue) 方案。它需要解決(jue) 的是問題,並且是可維護的。
在最壞的情況下,我質疑自己。"如果我不能建立一個(ge) 能在競爭(zheng) 中獲勝的模型,我真的知道我在做什麽(me) 嗎?"
冒名頂替者綜合症是最好的!
不要在Kaggle上花費太多時間,而忽略了機器學習(xi) 的其他重要方麵。
Kaggle應該在你的技能發展計劃中,但我也建議你把大部分時間花在端到端項目上。
從(cong) 了解業(ye) 務問題開始,做一些數據探索,看看數據是否可以幫助解決(jue) 問題,建立和評估不同的模型,並進行部署。
今天你可以非常容易地部署模型,無論是簡單的Gradio/Streamlit應用程序,還是SageMaker和Vertex AI上更複雜的pipeline。
我發現建立一個(ge) 被人們(men) 使用的東(dong) 西比一個(ge) 隻存在於(yu) 我的筆記本電腦上的模型更令人滿意。
2.贏=努力+經驗+運氣+金錢
為(wei) 了取勝,你將不得不快速測試許多想法。隨著你的數據集的規模不斷增長,你將需要使用雲(yun) 服務來獲得更大更快的機器。這將花費你真正的錢。
可以把它作為(wei) 教育成本,但要注意它。幾年前,一個(ge) 朋友因為(wei) 配置錯誤的現貨價(jia) 格,在AWS上花了大約5千美元,在一個(ge) 比賽中獲得第四名。隻有前三名獲得了獎金。哎喲!
你在排行榜上的位置越高,你就越需要依靠運氣。前幾名之間的分數差異非常小,數據或你的代碼中的小的隨機波動可以造成很大的差異。
而且這並不是簡單的噪音,而是在正確的道路上開始的運氣。
每次我贏得任何比賽,在我看來,我嚐試的每個(ge) 想法都會(hui) 提高我的分數。在其他情況下,幾乎所有我嚐試的東(dong) 西從(cong) 一開始就失敗了。
在閱讀最近H&M時尚推薦比賽的解決(jue) 方案時,我發現至少有兩(liang) 個(ge) 頂級團隊說Catboost是他們(men) 最好的模型,還有兩(liang) 個(ge) 頂級團隊說這是他們(men) 最差的模型。
同樣的數據,兩(liang) 個(ge) 不同的開發曆史,兩(liang) 個(ge) 不同的結果。
要想獲勝,你不僅(jin) 要創造一個(ge) 好的機器學習(xi) 解決(jue) 方案,還要花大量的時間來嚐試不同的競賽技術。
一個(ge) 簡單的例子是使用你的整個(ge) 數據集來擴展特征或編碼類別,而不僅(jin) 僅(jin) 是訓練部分。
在Telstra比賽[5]中(我贏得了比賽),我花了很多時間以不同的方式對數據泄漏進行編碼,這樣我就可以合集所有的數據並贏得比賽。
在Tube Pricing比賽[6]中(我的團隊贏了),我們(men) 花了很多時間來利用Tube ID的數據泄漏,並用你能想到的所有可用的機器學習(xi) 庫來創建集合。
你可以發現這樣的比賽,獲勝者幾乎是逐行尋找可利用的模式,而這些模式因為(wei) 一些數據處理錯誤而被轉化為(wei) 私人排行榜。
因此,如果你決(jue) 定要贏得比賽,要知道你會(hui) 花很多時間在那些在實踐中是錯誤的事情上,但由於(yu) 比賽中數據的性質,是必須要贏得的。
我建議你有一個(ge) 超越獲勝的目標,比如嚐試所有類型的編碼員,或者嚐試所有的樹形收集方法。這樣,當比賽結束後,你可以帶走一些東(dong) 西。
我曾經想學習(xi) 更多關(guan) 於(yu) 特征工程的知識,所以我設定了一個(ge) 目標,隻使用 "單一模型"(可以是XGBoost這樣的樹狀集合,但不是傳(chuan) 統的Kaggle集合)。
除了知道如何在實踐中創建強大的單一模型外,每個(ge) 獲勝的合集都有一個(ge) 非常強大的單一模型,並得到其他模型的補充。
在Tube Pricing比賽中,我最好的單一模型足以獲得第10名。
3.Kaggle數據是靜態的
譯注:例如Kaggle特別容易遇到noisy data,但現實項目中應對髒數據最好的辦法不是融合,而是修正你的數據。
在比賽中,數據是靜態的。你必須訓練一個(ge) 能在特定數據集上運行良好的模型。
這與(yu) 現實世界不同,現實世界中的數據一直在變化,你必須持續更新你的模型。
這種情況正在發生變化,因為(wei) 一些與(yu) 交易有關(guan) 的比賽已經有了一個(ge) 不斷變化的排行榜,要求你編寫(xie) 的代碼將在幾個(ge) 月內(nei) 用新的數據多次運行。
所有這些,同時受到Kaggle Kernels上可用計算資源的限製。
4.那麽......值得還是不值得?
Kaggle既不是一無是處,也不是銀色子彈。
一般來說,對那些說Kaggle是唯一重要的東(dong) 西的人和那些說它沒用的人要小心。
大多數批評都是基於(yu) 這樣的期望,即Kaggle可以教會(hui) 你一切。但沒有什麽(me) 能真正教會(hui) 你一切。把Kaggle用在它所擅長的地方。
我認為(wei) 每個(ge) 數據科學家都可以從(cong) 嚐試認真參加至少一個(ge) 挑戰賽中受益。
除了明顯的技術學習(xi) ,你還能學到有用的心理技能,比如。
你要學會(hui) 足智多謀。與(yu) 其總是向別人索取你必須解決(jue) 的問題的解決(jue) 方案,不如自己去找一個(ge) 解決(jue) 方案。
你要學會(hui) 創新。如果你想改進你的解決(jue) 方案,你就必須想出那些不是一眼就能看出來的原創想法。
你要學會(hui) 在壓力下工作。在競爭(zheng) 中,每一分鍾都很重要,如果你想贏,你就必須能夠迅速提供結果。
你要學習(xi) 如何處理挫折。你可能會(hui) 花比你預期更多的時間去嚐試不同的東(dong) 西,但都不奏效。
Kaggle是一種工具,和其他許多工具一樣,如何使用它取決(jue) 於(yu) 你。
對我來說,Kaggle是很有價(jia) 值的! 我甚至得到了這件很酷的外套!(我也有 :))
參考資料
[1]Mario Filho: https://www.kaggle.com/mariofilho
[2]Giba的profile page: https://www.kaggle.com/titericz
[3]Leustagos的profile page: https://www.kaggle.com/leustagos
[4]Chenglong wining solution: https://github.com/ChenglongChen/kaggle-CrowdFlower
[5]Telstra比賽: https://www.kaggle.com/competitions/telstra-recruiting-network
[6]Tube Pricing比賽: https://www.kaggle.com/c/machinery-tube-pricing
評論已經被關(guan) 閉。