瞭解機器學習Kaggle競賽

在數據科學領域,可用的資源太多了:從Datacamp到Udacity到KDnuggets,有數千個在線的地方可以學習數據科學。所以,如果您希望通過實踐來學習,那麼

Kaggle可能是通過實踐數據科學項目擴展您的技能的最佳選擇。

雖然它最初被稱為機器學習競賽的地方,但Kaggle - 它自稱為“你的數據科學之家” - 現在提供了一系列數據科學資源。雖然這一系列文章專注於競賽,但Kaggle有很多優勢:

  • 數據集:您可以免費下載和使用的數萬種不同類型和大小的數據集。如果您正在尋找有趣的數據來探索或測試您的建模技能,這是一個很好的去處。
  • 機器學習競賽:曾經是Kaggle的核心,這些建模技能測試是學習尖端機器學習技術和使用真實數據磨練你的有趣問題能力的好方法。
  • 學習: Jupyter notebook中教授的一系列數據科學學習課程,涵蓋SQL到深度學習。
  • 討論: 提供問題並從Kaggle社區的數千名數據科學家那裡獲得建議。
  • kernel
    :在Kaggle服務器上運行的在線編程環境,您可以在其中編寫Python / R腳本或Jupyter筆記本。這些內核完全免費運行(您甚至可以添加GPU)並且是一個很好的資源,因為您不必擔心在自己的計算機上設置數據科學環境。內核可用於分析任何數據集,參與機器學習競賽或完成學習軌道。您可以複製和構建來自其他用戶的現有內核,並與社區共享您的內核以獲得反饋。
瞭解機器學習Kaggle競賽

Kaggle是什麼

總的來說,Kaggle是一個學習的好地方,無論是通過更傳統的學習軌道還是通過參加比賽。當我們想了解最新的機器學習方法時,可以選擇閱讀,也可以去Kaggle,找一個比賽,看看人們如何在實踐中使用它。就個人而言,我覺得這更有趣,也是一種更有效的教學方法。此外,社區非常支持並且總是願意回答問題或提供項目反饋。

摘要

在本文中,我們將重點介紹Kaggle機器學習競賽:家庭信用違約風險問題。這是一個相當直接的競爭,具有合理大小的數據集,這意味著我們可以完全使用Kaggle的內核進行競爭。這大大降低了進入門檻,因為您不必擔心計算機上的任何軟件,甚至不必下載數據!只要您擁有Kaggle帳戶和Internet連接,就可以連接到內核並運行代碼。

我打算在Kaggle和內核(Python Jupyter Notebook)上進行整個比賽,學習本文,需要創建Kaggle帳戶來複制內核,然後點擊藍色的Fork Notebook按鈕,以便在內核環境中進行編輯和運行。

比賽說明

家庭信用違約風險問題是標準的監督機器學習任務,其目的是利用歷史貸款申請數據來預測申請人是否會償還貸款。在學習期間,我們為模型提供了特徵 - 描述貸款申請的變量 - 以及標籤 - 如果貸款已償還則為二進制0,如果貸款未償還則為1 - 模型將學習從功能到映射的映射標籤。然後,在測試期間,我們為模型提供新批量應用程序的特徵,並要求它預測標籤。

本次比賽的所有數據都是結構化的,這意味著它存在於整齊的行和列中 - 想想電子表格。這意味著我們不需要使用任何卷積神經網絡(在處理圖像數據方面表現優異),它將為我們提供真實世界數據集的優秀實踐。

本次比賽遵循大多數Kaggle比賽的總體思路:

公司有數據和需要解決的問題,不是聘請內部數據科學家建立模型-->他們提出了適度的獎勵來吸引整個世界貢獻解決方案-->一個由數千名技術熟練的數據科學家(Kagglers)組成的社區隨後就這個問題進行研究,基本上不收取任何費用來提出最佳解決方案。就具有成本效益的商業計劃而言,這個方案很可取。

Kaggle競賽環境

當你去競賽主頁時,你會看到:

瞭解機器學習Kaggle競賽

快速瀏覽選項卡

這是一個快速瀏覽選項卡

  • 概述

問題的簡要說明,評估指標,獎品和時間表

  • 數據

不允許競爭所需的所有數據作為外部數據。您可以下載所有數據,但我們不需要這樣做,因為我們將使用可以連接到數據的Kaggle內核

  • kernel

您和其他競爭對手之前完成的工作。在我看來,這是比賽最有價值的資源。您可以通讀其他腳本和筆記本,然後複製代碼進行編輯和運行

  • 討論

另一個有用的資源,您可以從競爭主機和其他競爭對手中找到對話。一個提問和從別人的答案中學習的好地方

  • 排行榜

誰站在最頂端,你站在哪裡

  • 規則

不是很有趣,但很好理解

  • 團隊

如果您決定組建團隊,請管理團隊成員

  • 我的提交

查看您之前提交的內容,並選擇最終用於比賽的內容

學習他人的重要性

雖然它們被稱為競賽,但是Kaggle機器學習活動也被稱為“協作項目”,因為主要目標不一定是贏得,而是實踐和向同行數據科學家學習。一旦你意識到打擊別人而不是擴大你自己的技能,你將從競爭中獲得更多。當您註冊Kaggle時,您不僅可以獲得所有資源,還可以成為擁有數千年集體經驗的數據科學家社區的一員。

通過努力成為社區的積極參與者,充分利用所有這些經驗!這意味著從共享內核到在討論論壇中提問。儘管讓您的工作公開可能會令人生畏,但我們通過犯錯,收到反饋和改進來學習,這樣我們就不會再犯同樣的錯誤了。每個人都從初學者開始,社區非常支持所有技能水平的數據科學家。

在這種心態中,我想強調與他人共享代碼不僅是可以接受的,而且是鼓勵的!但生活中,它被稱為協作和極其重要的技能。

將自己投入競爭的一個很好的方法是找到一個與好的排行榜得分共享的內核,分叉內核,編輯它以嘗試提高分數,然後運行它來查看結果。然後,將內核公開,以便其他人可以使用您的工作。數據科學家不是站在巨人的肩膀上,而是成千上萬為了所有人的利益而公開工作的人的背後。

Jupiter notebook

一旦您對Kaggle的工作方式有了基本的瞭解,以及如何充分利用競爭對手的理念,現在是時候開始了。在這裡,我將簡要概述一個Python Jupyter notebook,我把它放在kernel中用於Home Credit Default Risk問題,但為了獲得全部好處,你需要將筆記本分配到Kaggle並自己運行,你不要我必須下載或設置任何東西。

當你在內核中打開筆記本時,您將看到以下環境:

瞭解機器學習Kaggle競賽

kernel notebook環境

kernel notebook環境

可以將其視為標準的Jupyter筆記本,其美學略有不同。您可以像在Jupyter中一樣編寫Python代碼和文本(使用Markdown語法),並在Kaggle的服務器上完全在雲中運行代碼。但是,Kaggle內核具有Jupyter Notebook中沒有的一些獨特功能。點擊右上角的向左箭頭,展開內核控制面板,調出三個標籤(如果筆記本不是全屏,那麼這三個標籤可能已在代碼旁邊顯示)。

瞭解機器學習Kaggle競賽

在數據選項卡中,我們可以查看內核所連接的數據集。在這種情況下,我們擁有整個競爭數據,但我們也可以連接到Kaggle上的任何其他數據集或上傳我們自己的數據並在內核中訪問它。數據文件../input/在代碼中的目錄中可用 :

input

#列出連接到內核的數據文件

os.listdir('../ input /')

瞭解機器學習Kaggle競賽

連接到內核的文件可在../input/中找到

Settings選項卡允許我們控制內核的不同技術方面。在這裡,我們可以在會話中添加GPU,更改可見性,並安裝任何尚未在環境中使用的Python包。

最後,“版本”選項卡允許我們查看以前提交的任何代碼運行。我們可以查看對代碼的更改,查看運行的日誌文件,查看運行生成的筆記本,以及下載從運行中輸出的文件。

瞭解機器學習Kaggle競賽

版本選項卡

要運行整個筆記本並記錄新版本,請點擊內核右上角的藍色Commit&Run按鈕。這將執行所有代碼,向我們顯示已完成的筆記本(如果出現錯誤,則顯示任何錯誤),並保存在運行期間創建的所有文件。當我們提交筆記本時,我們可以訪問我們的模型所做的任何預測並提交它們進行評分。

介紹notebook大綱

第一個notebook旨在讓您熟悉這個問題。我們的開始與任何數據科學問題的方式大致相同:理解數據和任務。對於這個問題,有1個主要訓練數據文件(包括標籤),1個主要測試數據文件和6個附加數據文件。在第一個筆記本中,我們只使用主要數據,這將得到一個不錯的分數,但後來的工作將必須包含所有數據,以便具有競爭力。

要理解數據,最好距離鍵盤幾分鐘,並閱讀問題文檔,例如每個數據文件的列描述。因為有多個文件,我們需要知道它們是如何連接在一起的,儘管對於第一個筆記本,我們只使用主文件來保持簡單。通過其他內核讀取也可以幫助我們熟悉數據以及哪些變量很重要。

一旦我們理解了數據和問題,我們就可以開始為機器學習任務構建它。這意味著處理分類變量(通過單熱編碼),填寫缺失值(插補),並將變量擴展到一個範圍。我們可以進行探索性數據分析,例如查找與標籤的相關性,以及繪製這些關係的圖表。

瞭解機器學習Kaggle競賽

變量的相關熱圖

我們稍後可以使用這些關係來建模決策,例如包括要使用的變量。

瞭解機器學習Kaggle競賽

年齡分佈

瞭解機器學習Kaggle競賽

年齡組的違約率

當然,沒有我最喜歡的情節,即Pairs Plot,沒有完整的探索性數據分析。

瞭解機器學習Kaggle競賽

對比圖的特徵(紅色:未在kde和散點圖中償還的貸款)

在徹底探索數據並確保它對機器學習可接受之後,我們繼續創建基線模型。但是,在我們完全進入建模階段之前,我們必須瞭解競爭對手的績效指標。在Kaggle比賽中,一切都歸結為單個數字,即測試數據的指標。

雖然使用二進制分類任務的準確性可能具有直觀意義,但是不可取,因為我們正在處理不平衡的類問題。而不是準確性,提交是根據曲線下的 ROC AUC或接收器操作特性曲線區域來判斷。我會讓你對這個進行研究,或者閱讀筆記本中的解釋。只要知道更高越好,隨機模型得分為0.5,完美模型得分為1.0。為了計算ROC AUC,我們需要根據概率而不是二進制0或1進行預測。然後,ROC 將真實陽性率與假陽性率顯示為閾值的函數,根據該閾值,我們將實例分類為正。

通常我們喜歡做一個簡單的基線預測,但在這種情況下,我們已經知道對任務的隨機猜測會得到0.5的ROC AUC。因此,對於我們的基線模型,我們將使用稍微複雜的方法Logistic迴歸。對於二進制分類問題,這是一種流行的簡單算法,它將為未來的模型設置一個低標準。

在實現邏輯迴歸之後,我們可以將結果保存到csv文件以進行提交。提交筆記本時,我們編寫的任何結果都將顯示在“版本”選項卡的“輸出”子選項卡中:

瞭解機器學習Kaggle競賽

運行完整筆記本的輸出

在此選項卡中,我們可以將提交內容下載到我們的計算機,然後將其上傳到競賽中。在這款筆記本中,我們製作了四種不同型號,分數如下:

· Logistic迴歸:0.671

· 隨機森林:0.678

· 具有構造特徵的隨機森林:0.678

· Light Gradient Boosting Machine:0.729

這些分數並沒有讓我們接近排行榜的頂端,但它們為未來的改進留下了空間!我們還可以瞭解僅使用單一數據源可以獲得的性能。

毫不奇怪,非凡的Gradient Boosting Machine(使用LightGBM庫)表現最佳。這個模型幾乎贏得了每個結構化的Kaggle競賽(數據採用表格格式),如果我們可能需要使用某種形式的模型想要認真競爭!)

結論

本文和入門內核展示了Kaggle競賽的基本開端。這並不是為了贏得勝利,而是為了向您展示如何進行機器學習競賽的基礎知識,以及一些讓您開始實施的模型(儘管LightGBM模型就像是跳出了深層次)。

此外,我闡述了我的機器學習競賽理念,即通過參與討論,建立其他代碼和分享自己的工作來儘可能多地學習。最好的過去得分是令人愉快的,但我認為這不是主要關注點,而是學習新數據科學技術的積極副作用。雖然這些比賽被稱為競賽,但它們實際上是一個合作項目,歡迎每個人參與並磨練自己的能力。

仍有大量工作要做,但幸運的是,我們不必單獨完成。在後來的文章中,我們將看到如何在其他人的工作基礎上做出更好的模型。我希望這篇文章讓您有信心開始參與Kaggle或參與任何數據科學項目。


分享到:


相關文章: