當前位置:
首頁 > 知識 > 如何在 15 個月內佔領 Kaggle 榜首?bestfitting 經驗大放送

如何在 15 個月內佔領 Kaggle 榜首?bestfitting 經驗大放送

雷鋒網 AI 研習社按:相信玩過 Kaggle 比賽的人都知道 bestfitting,他在加入 Kaggle 社群短短兩年之內,就以黑馬之姿成功佔領比賽排行榜榜首。近日,Kaggle 對他進行了一次專訪,在專訪中,我們可以看到關於比賽的滿滿乾貨。

bestfitting 真名為 Shubin Dai,生活在長沙,他的朋友們喜歡稱他為 Bingo。他目前是一名數據科學家和工程經理,創立了一家專為銀行提供軟體解決方案的公司。在工作空閑時,除了參加 Kaggle 競賽,他還是一名狂熱的山地車手,並表示自己喜歡在大自然中度過時光。

雷鋒網 AI 研習社將訪談內容整理如下,各位 Kaggler 速來看看大神是如何煉成的吧。

1. 你的背景和研究經歷是什麼?

我的主修專業是計算機科學,在軟體開發方面擁有超過 10 年的經驗。至於工作,我目前創立了一個專為銀行提供數據處理和分析解決方案的團隊。

從上大學開始,我就一直對使用數學來創建能夠解決問題的程序很感興趣。這期間我不斷閱讀各種計算機科學書籍和論文,然後也很幸運,能夠在過去十年中一直關注著機器學習與深度學習的發展。

2. 你是如何開啟 Kaggle 征程的?

正如我之前所說,我一直在大量閱讀著與機器學習和深度學習有關的書籍和論文,但是在這個過程中我也發現,要將我所學到的演算法應用於那些可以隨時獲取的小型數據集中是很困難的。然後我就發現 Kaggle 是一個很棒的平台,這裡有各種各樣有趣的數據集、kernel 和精彩的討論,所以我迫不及待的想要試一試。我參加的第一項競賽是「預測紅帽商業價值(Predicting Red Hat Business Value)」。

3. 你參加 Kaggle 比賽的套路是什麼樣的?

1)首先是仔細閱讀比賽概述和數據描述;

2)查找類似的 Kaggle 競賽。作為一名相對較新的 Kaggler,我收集了 Kaggle 上所有往期競賽,然後做了基本分析;

3)閱讀類似競賽的解決方案;

4)閱讀相關論文,以確保自己不會錯過該領域的任何新進展;

5)分析數據並建立一個穩定的交叉驗證集;

6)數據預處理、特徵工程、模型訓練;

7)結果分析,例如預測分布、錯誤分析、特定樣本分析;

8)根據分析結果改進模型或者重新設計全新模型;

9)基於數據分析和結果分析,設計模型來增加多樣性或者用於針對某些特定樣本;

10)集成學習;

11)在必要時返回步驟 1。

4. 哪個機器學習演算法你最喜歡?

我會逐個選擇演算法,但我更喜歡在模型集成時使用那些簡單的演算法,比如嶺回歸(Ridge regression)。此外,在深度學習競賽中,我通常喜歡從 resnet-50 開始改進模型或者直接設計一個類似結構的模型。

5. 你最喜歡的機器學習工具是什麼?

我非常喜歡在計算機視覺競賽中使用 PyTorch 框架,而在自然語言處理(NLP)或者時間序列競賽中採用 TensorFlow 或 Keras。當我在做數據分析時,我會使用 seaborn 庫以及 scipy 家族中的那些工具。此外,scikit-learn 和 XGB 也是非常有效的工具。

6. 你對超參數的調優方式是什麼?

我會嘗試根據對數據和演算法的理論理解來調整參數,如果我無法解釋為什麼結果會更好或者更差,那麼我會感到不安。在深度學習競賽中,我會經常檢索相關論文,並試圖找出這些作者們在相似的情形下是怎麼做的。而且,我會比較參數更改前後的結果,例如預測分布、受影響的樣本等等。

7. 你採用什麼方法來使得交叉驗證與最終提交能儘可能穩定?

一個好的交叉驗證集是成功的一半。如果我找不到評估模型的好方法,我是不會繼續下一步的。

為了建立一個穩定的交叉驗證集,你必須很好地理解數據集和將面臨的挑戰。我還會檢驗並確保驗證集具有與訓練集類似的分布,我會儘力確保我的模型在我的本地交叉驗證集和公共排行榜上都能獲得提升。

在某些時間序列比賽中,我會將 aside data 作為驗證集保留一段時間。

我經常以保守的方式選擇最終提交結果,我總是選擇對我的安全模型(Safe model)的進行加權平均集成,並傾向於相對冒險的那一個(在我看來,更多的參數等於更多風險)。但是,我從來不選擇我無法解釋的結果進行提交,即便這個結果有可能在公共排行榜上得到更高的分數。

8. 簡單總結一下,哪些特質幫助你贏得了競賽?

好的交叉驗證集,從其它競賽中獲取經驗,閱讀相關論文,講究紀律和堅韌不舍。

9. 哪類 Kaggle 競賽你最喜歡,為什麼?

自然保護和醫療相關的比賽是我最喜歡的,我覺得我應該做點什麼來讓我們生活的地球變得更加美好。

10. 機器學習中最令你興奮的領域是什麼?

我對深度學習的各種進展都很感興趣。我想用深度學習解決除了計算機視覺以及自然語言處理之外的問題,所以我會嘗試在我參加的比賽和我的工作中使用它們。

11. 在解決數據科學問題時,你的領域專業知識發揮了多大的作用?

實話實說,我不認為我的專業領域知識發揮了極大作用,原因如下:

1)Kaggle 官方會非常細緻地準備數據集,這對於所有人都是公平的;

2)想要簡單地通過使用成熟的方法贏得比賽非常困難,特別是在深度學習比賽中,因此我們需要更多創造性的解決方案;

3)數據更加重要,我們可能需要閱讀一些相關的材料。

但是有一些例外。在 Planet Amazon competition 中,我確實從自己之前的熱帶雨林經驗中獲得了一些想法,但這些經驗在技術上而言,不能稱為領域專業知識。

12. 你認為自己最有創意的技巧、發現或者方法是什麼?

在最開始的時候一定要準備好解決方案文檔。我會強迫自己寫一份清單,裡面包括目前所面臨的挑戰,我應該閱讀的解決方案和論文,以及可能遇到的風險,所有可能有效的交叉驗證策略,可能有用的數據增強策略。而且,我會不斷更新文檔。大部分的文件最終都成為了我的獲勝策略。

13. 你在現在的工作中是如何使用數據科學的,在 Kaggle 上的競賽經驗是否對此有幫助?

我們嘗試使用機器學習來解決各種銀行業務問題:預測銀行網點的訪客數量,預測 ATM 應該準備的現金,產品推薦,操作風險控制等等。

在 Kaggle 中的競賽也改變了我的工作方式,當我想找到解決問題的方案時,我會嘗試去尋找類似的 Kaggle 競賽,因為它們是寶貴的資源,並且我還建議我的同事們研究類似的獲獎解決方案,說不定可以從中獲得靈感。

14. 你對權衡模型複雜度和訓練測試時間有何看法?

我的看法是:

1)當正確率最重要時,不應該過度關注模型的複雜性。我們必須充分利用經過數月的努力才獲得的訓練數據。

2)現在如果只使用多個弱模型的集成是很難去贏得比賽的。如果你想成為第一名,通常需要有非常好的單一模型。當我想在比賽中獲得第一名的時候,我經常強迫自己設計不同的模型,這些模型可以在公共排行榜上取得前 10 名甚至是前 3 的成績。

3)以我自己的經驗,我可以在競賽中設計多個模型來探索這個問題的上限,然後選擇一個簡單的模型使其在實際情況下可行。我總是盡最大努力為競賽組織者提供一個簡單的例子,然後在獲勝者採訪電話中與他們進行討論。我發現一些組織者甚至使用我們的解決方案和思想來解決他們面臨的一些其他問題。

4)可以發現,當訓練、測試運行時間很重要時,Kaggle 有很多機制來確保性能:kernel 競爭、團隊規模限制、添加更多在打分時沒有計算的數據等。我相信 Kaggle 也會根據挑戰的目標而改進規則。

15. 你是如何在 Kaggle 競賽中越來越領先的?

有趣的競賽和 Kaggle 中強大的競爭對手是我變得越來越強的原因。

在這裡有這麼多優秀的對手,想要贏得比賽非常困難,他們把我推到了極限。我去年曾試圖獨自完成儘可能多的比賽,然後我必須猜測出其他競爭對手會怎麼做。要做到這一點,我必須閱讀大量材料並且構建多功能模型。在比賽之後,我還會閱讀來自其他競爭對手的所有解決方案。

16. 最近你最關注哪些機器學習研究?

我期待今年可以參與一項深度強化學習競賽。

17. 你僅僅花了 15 個月就佔領排行榜榜首,這是如何做到的?

首先,第一名是衡量我在 Kaggle 上學到了多少東西以及運氣好壞的標準。

我在前幾次競賽中,試圖將近年來學到的理論轉化為技巧,並且從其他人那裡學到很多東西。

在我對 Kaggle 競賽有了一定了解之後,我開始思考如何以系統化的方式進行比賽,因為我在軟體工程方面有許多年的經驗。

就這樣大約半年後,我首次拿到第一名,變得更加自信。我想我可能在半年內成為一名特級大師。在 Planet Amazon competition 比賽中,我以第一名作為目標。

然後我覺得我應該繼續使用之前提到的策略和方法,並且取得了更多的成功。在贏得 Cdiscount 競賽後,我到達用戶排名榜前列。

受益於 Kaggle 平台,我從其他人那裡學到了很多東西,Kaggle 的排名系統也在我的進步中發揮了重要作用。同時我也感到非常幸運,因為我從未想過我可以連續獲得 6 個獎項,在許多比賽中我的目標都是前 10 名或者前 1%。我不認為我可以再次復現這樣的高光時刻。

但是,我來參加競賽的目的並不是為了一個好排名,我把每場比賽都視為學習的機會,我會嘗試從我不太熟悉的領域挑選比賽,這樣做的結果就是我在去年強迫自己閱讀了數百篇論文。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

AWS 上可用的公用數據集,任何人都可以免費訪問
用於自然語言處理的開源 Python庫——PyTorch-NLP

TAG:AI研習社 |