當前位置:
首頁 > 知識 > 數據分析秘籍在這裡:Kaggle 六大比賽最全面解析(上)

數據分析秘籍在這裡:Kaggle 六大比賽最全面解析(上)

AI 研習社按,Kaggle 上有各式各樣的數據挖掘類比賽,很多參賽者也樂於分享自己的經驗,從他人的經驗中進行總結歸納,對自己的實踐也非常重要。

本文將以 Kaggle 上 6 個不同的比賽為例,介紹常見的三類數據(結構化數據,NLP 數據,圖像數據)分析經驗,以助力大家提升數據分析能力。此文為上篇,主要介紹結構化數據和 NLP 數據,包含 Titanic 比賽,房價預測比賽,惡意評論分類,恐怖小說家身份識別。

正文如下,AI 研習社編譯整理:

建立準確模型的關鍵是全面了解正在使用的數據,但數據通常是混亂的。在我自學機器學習的前幾個月,對如何理解數據並沒有很多的想法。我假設數據來自一個自底向上組織完好的包,或者至少有一組明確的步驟可以遵循。

查看別人的代碼之後,我發現大家理解、可視化和分析相同數據集的方式是不同的,對此我很震驚。我決定通讀幾種不同的數據分析方式,找出其中的異同點,並提煉出一套理解數據集的最佳實踐或策略,以便更好地利用它們進行數據分析。

數據科學家會花大量時間在數據預處理上,而不是模型優化問題上。

——lorinc

本文中,我選擇了一些在Kaggle上公開的探索性數據分析(EDA)。這些分析將互動式代碼片段與文章結合在一起,有助於提供數據的鳥瞰圖或梳理數據中的模式。

我同時研究了特徵工程,這是一種獲取現有數據並用一些方法將其轉化,賦予數據其他含義的技術(例如,獲取時間戳並提取 DAY_OF_WEEK 列,這些列可用於預測商店中的銷售情況)。

我想看看各種不同的數據集,所以我選擇了:

結構化數據

NLP(自然語言)數據

圖像數據

結構化數據

結構化數據集是包含訓練和測試數據的電子表格。電子表格可能包含分類變數(顏色,如綠色、紅色和藍色),連續變數(年齡,如 4、15 和 67)和序數變數(教育程度,如小學、高中、大學)。

訓練數據表中包括一個嘗試解決的目標列,這些列不會出現在測試數據中。我所研究的大部分 EDA 都側重於梳理出目標變數與其他列之間的潛在關聯性。

我們的主要目的是尋找不同變數之間的關聯性,有很多切分數據的方法。可視化的選擇更多。

特徵工程可以讓你充分發揮想像力,不同參賽選手在合成特徵或將分類特徵合併為新特徵時,都有不同的方法。

讓我們更深入地看看Titanic competition和House Prices competition這兩項比賽。

Titanic

圖片來自 Viaggio Routard

Titanic 比賽非常受初學者歡迎,很多 Kaggle 用戶都不斷參與這個比賽。因此,這個比賽的 EDA 往往寫得很好,並且有詳細記錄,是我看到的最清晰的。

數據集包括一個訓練集電子表格,其中包含一列「Survived」,表示乘客是否倖存,以及其他補充數據,如年齡、性別、票價等等。

我選擇用於分析的 EDA 是由 I,Coder 提供的EDA to Prediction Dietanic,déjà vu 提供的Titanic Survival for Beginners EDA to ML,katerina Kokatjuhha 提供的In Depth Visualisations Simple Methods。

所有這三種 EDA 都以原始指標開始。

I,Coder 描述的數據集

數據預處理過程中對空值或缺失值進行處理是關鍵一步。本文選取的三個 EDA,一個在前期處理了這一問題,另外兩個在特徵工程階段進行處理。

I,Coder 反對指定一個隨機數來填補缺失的年齡:

正如我們前面看到的,Age 特徵有 177 個空值。要替換這些 NaN 值,我們可以為它們指定數據集的平均年齡。但問題是,有許多不同年齡段的人,我們不能把 4 歲小孩的平均年齡分配到 29 歲。有什麼方法可以找出乘客的年齡段?我們可以檢查名稱特徵。在這個特徵中,我們可以看到像先生或夫人的稱呼,我們可以將先生和夫人的平均值分配給各個年齡組。

I, Coder 輸入的年齡

I,Coder 將特徵工程作為純數據分析的一部分,然而其他兩位作者認為它是一個獨立的步驟。

這三位 kernel 作者在深入了解數據、找出數據間潛在相關性時,都非常依賴圖表和可視化。他們使用的圖表包括因子圖、交叉表、條形圖、餅圖和小提琴圖(結合箱線圖和密度圖特徵的一種圖)等等。

deja vu 關於倖存者性別的圖表

你可能對泰坦尼克號中的「女性與兒童優先」這句話很熟悉。在最初的數據分析中,對每位作者來說,年齡和性別這兩個特徵很重要。也可以對收入背景(如票價所示)進行一些詳細的檢測。

船上的男性比女性多很多。儘管如此,倖存的女性幾乎是倖存男性的兩倍。女性在船上的倖存率約為75%,而男性約為18-19%。

——I,Coder

Jekaterina 和 I,Coder 都是基於對圖表和數據的視覺檢測得出結論,如 Jekaterina 所寫:

性別:女性的倖存機會更高。

船艙等級:擁有頭等艙票更有可能倖存。

血親關係和規模:中等規模的家庭比獨自旅行的人或大家庭的倖存率更高。原因可能是單獨的人會想犧牲自己去幫助別人。對於大家庭,我認為是整個家庭太難管理,因此家族成員都在尋找彼此而不是忙著上船逃生。

救生船 C 有更高的倖存率。有趣的是,大部分頭等艙的乘客乘坐的就是救生船 C。

Jekaterina 繪製的反映船艙等級和救生船的圖表

Deja Vu 的 EDA 在分析的每一步都記錄了一個準確的數字,就每個特徵對最終預測的重要性提供了一個很好的反饋。

特徵工程

三位 kernel 作者的特徵工程存在很多可變性。

每位作者選擇不同數量的 bucket 作為連續變數,如年齡和票價。與此同時,他們都以不同的方式處理家庭關係,I,Coder 建立了一個 SibSip(血親關係)——是獨自一人還是與家人(配偶或兄弟姐妹)一起(family_size 和 alone),Jekaterina 則列出了一個客艙bin,並提出以 child(兒童)或 adult(成人)作為特徵。

Jekaterina 列出的客艙等級字母

I,Coder 在剔除不相關的列時特別激進:

名稱 —>我們不需要名稱特徵,因為它不能轉換為任何分類值。

年齡 —>我們有 Age_band 特徵,所以不需要這個。

船票 —>它是不能被分類的隨機字元串。

票價 —>我們有 Fare_cat 特徵,所以不需要。

客艙 —>有許多缺失值,也有許多乘客有多個艙位。所以這是一個無用特徵。

票價範圍 —>我們有 Fare_cat 特徵。

乘客身份 —>無法分類。

對於填補步驟,Jekaterina 寫道:

上的救生船:用一個主要類來填充

船艙等級:因為票價中只有一個缺失值,我們將用相應船艙等級的中值進行填充

年齡:有幾種輸入技術,我們將使用均值上下範圍內的隨機數進行填充

她確保新的填充數據不會破壞平均值,進行了總結了:

Jekaterina 檢測新輸入值是否破壞均值

點評

三位作者都有檢查數據並描述整體形狀。

I,Coder 考慮了整體的缺失值,而 Jekaterina 在接近尾聲時才開始考慮。

每個人都著眼於倖存者的分類,然後按性別分類倖存者。交叉列表、因子圖和小提琴圖都是常用的圖表。Jekaterina 還繪製了一些非常有趣的圖表。

當涉及到特徵工程時,作者們有些分歧。作者在構建新特徵的問題上存在差異,一些人將其視為一個獨立的步驟,另一些人則在初步數據分析時對其進行處理。圍繞分箱的選擇各不相同,隨著年齡、產權和票價的不同,所收到的 bucket 數量都不同,並且只有 Jekaterina 構建了一個離散的 child/adult(兒童/成人)特徵。

對於缺失值的填充方法也不同。I,Coder 建議查看現有數據以預測估算值,而 Jekaterina 確保她的估算數據不影響均值。

他們在思考和處理數據上有一些明顯的相似之處,主要是在可視化和特徵工程上有些差異。

房價

該圖由美國顧問團提供

房價預測是另一種結構化數據比賽。它比上面的 Titanic 比賽有更多的變數,包括分類、順序和一些連續特徵。

我所選擇的用來分析的 EDA 是 Pedro Marcelino 的Comprehensive Data Exploration with Python,Angela的Detailed Data Exploration in Python,以及Sangeon Park的Fun Python EDA Step by Step。

雖然這些數據在類型上類似 Titanic,但實際上複雜得多。

在愛荷華州埃姆斯住宅問題中,有 79 個解釋變數用來描述這些房子的方方面面。該競賽要求你預測每間房的價格。

Pedro 描繪了售價

Angela 和 Pedro 花了一些時間來研究與 Titanic 比賽中類似的原始數據。Angela 在直方圖上畫出了售價,並繪製了關於這些特徵的熱圖。而 Pedro 也描繪了售價,並得出了以下結論:

偏離了正態分布

有明顯的正偏態

出現了尖峰態

之後,Pedro 將自己置於買家的角度,猜測哪些特性對他來說很重要,從而來看他的選擇和售價之間的關係。之後,他建立了一個熱圖,讓自己對特徵有更加客觀的觀察。

與售價相關的特徵圖

相比之下,Angela 以一種更加客觀的方式來描述,她通過相關關係列出了數字特徵,也描繪了與售價相關的特徵圖,從數據中尋找模型。

Sang-eon 果斷剔除了缺失值和離群值(並使用線性回歸估算了臨界線附近的異常值),之後才開始描繪與售價相關的多方面特徵。

Pedro 一直在尋找數據之間的相關性,以檢查數據丟失問題。他提出:

丟失數據有多普遍?

丟失數據是隨機的還是有模式的?

這些問題的答案對於實踐很重要,缺少數據可能意味著樣本容量的減少。這會阻止我們進一步的分析。從真實性的角度來看,我們需要確保數據丟失不會導致偏頗。

為解決這些問題,Pedro 繪製了缺失單元的總數以及百分比,並選擇刪除了 15% 或是更多包含缺失數據的單元格所在的列。他再次依賴主觀選擇來決定移除哪些特徵:

……我們會錯過這些數據嗎?我不這麼想。這些變數似乎都不是很重要,因為它們中的大多數都不是我們在購買房子時所要考慮的方面。此外,通過仔細觀察變數,比如「PoolQC」、「MiscFeature」和「fireplacery」等變數很有可能導致異常值出現,因此我們很樂意刪除它們。

Pedro 對缺失數據的處理方法是,要麼刪除整個列(如果它們包含有大量缺失值),要麼刪除只有少數缺失值的行。他還建立了一個啟發式的解決異常值的方法:

最主要是設定一個閾值來定義觀測值是否為異常值。為此,我們將數據標準化。在這種情況下,數據標準化意味著將數據值轉換為平均值為 0,標準差為 1 的數據。

他的結論是,從靜態的角度來看,沒什麼可擔心的。但在重新審查了數據之後,他刪除了一些覺得可疑的數據點。

特徵工程

Sangeon 檢查了數據的偏態和峰度,並做了一個 wilxocc -rank 測試。他用一個非常好看的 3D 圖進行總結:

Sang-eon 的 3D 特徵圖

與此同時,Pedro 討論了這些數據的正態性、同方差性、線性度和無相關誤差,他將數據歸一化,並發現其他三個問題也得到了很好的解決。

點評

這三個 kernel 的作者都沒有做過多的特徵工程分析,可能是因為數據集中已經有很多的特性了。

有很多策略來決定如何處理這些數據,有些作者採用了主觀策略,有些則直接採用更加客觀的測量。對於何時以及如何剔除缺失數據或異常值,他們沒有達成明確的共識。

與之前 Titanic 競賽相比,這裡更多的關注於統計方法和完整性。可能是因為有更多的特徵需要處理,也有可能是無效的統計結果會對整體產生更大的影響。


自然語言處理

自然語言或 NLP 數據集包含單詞或句子。雖然核心數據類型與結構化數據競賽中的相同,但用於自然語言分析的工具——文本是特定的,這會導致不同的分析策略。

在其原始形式中,語言不易被機器學習模型識別。為了將其轉換為適合神經網路的格式,需要對其進行變形。一種流行的技術是Bag of Words(詞袋),其中句子被有效地轉換為 0 或 1 的集合,即特定單詞是否出現。(不出現為 0,出現為 1)

由於需要轉換數據,大多數 Notebook 的前幾個步驟傾向於將文本轉換為機器可讀的內容,並且這一步驟都趨於相似。之後,大家的方法會出現很大差異,並對特徵工程應用各種不同的可視化和技術。

惡意評論分類

我看到的第一個 NLP 比賽是Toxic Comment Classifcation Competition(惡意評論分類),包括一個數據集,其中大量數據來自維基百科討論頁面的評論,通過評論在等級上的得分,來區分是侮辱、淫穢,還是惡意評論等。參與者面臨的挑戰是預測給定評論的惡意標籤。

我選擇用於分析的 EDA 是 Jagan 的Stop the S@#$ - Toxic Comments EDA,Rhodium Beng 的Classifying Multi-label Comments和 Francisco Mendez 的Don"t Mess With My Mothjer。

三位作者都從描述數據集開始,隨機抽取了一些評論。雖然沒有缺失值,但評論中有很多噪音,並且不清楚這種噪音在最終的數據分析中是否有用。

Jagan 繪製的惡意分類分布圖

惡意程度在各個類別之中不是均勻分布的。因此,我們可能會遇到分類失衡問題。—— Jagan

Francisco 剔除掉無實際意義的詞(例如「and」或「the」)。他用雙標圖繪製出一個特定單詞最適合的類別。

雙標圖中,大多數單詞都是正常排列的,也有一些例外,肥胖與厭惡有相關性,這很令人驚訝,因為它是圖表底部唯一的非種族詞語,圖表中有一些通用的冒犯性詞語,像die(死亡)這樣的詞語只與威脅有關。

Francisco 之後提出錯別字和惡意之間是否存在關聯。

顯然是有的,而且令人驚訝的是,當 mother 這個單詞拼寫錯誤的時候從來都不會跟厭惡或威脅扯上關係,但當它拼寫正確時,就會有一些關於厭惡和威脅的評論。是不是人們傾向於在威脅某人或表達厭惡的時候下筆更謹慎一些呢?

隨著 Francisco 進一步的挖掘,他發現在很多情況下,惡意評論中包括一遍又一遍複製粘貼的短語。在刪除重複的單詞,重新分析後,他發現了一組新的相關性。

普通的惡意評論中一般使用溫和的詞,如母親、地獄、槍、愚蠢、白痴和閉嘴等,一些惡意的淫穢評論中會使用 f-word。從雙標圖中也可以知道惡意和侮辱是相似的,至少是有攻擊性的,而更嚴重就是厭惡和威脅。

這三位作者都利用數據可視化取得了很好的效果。

Rhodium 創建一個字元長度直方圖和分類類別之間的熱圖,並發現了一些標籤之間高度相關,例如,侮辱評論有 74% 的可能也是淫穢的。

Jagan 繪製了一些詞雲、熱圖和交叉表,觀察到:

非常惡意的評論可以被歸納為惡意標籤

除了少數例外情況,其他分類似乎是惡意評論的一個子集

特徵工程

Rhodium 將文本變成小寫,手動將句法結構變成事物,並手動清除標點符號。

Jagan 繪製了各種與惡意相關的特徵來尋找相關性。他發現,垃圾郵件經常存在惡意。

對於單個單詞和單詞對,Jagan 和 Rhodium 都使用 TF-IDF 繪製頂部單詞。

點評

他們似乎都遵循了所關注領域內的幾個最佳實踐步驟,包括小寫文本、處理結構和清理標點符號。然而,也有認為這些可能是潛在的特徵方向,而不僅僅是噪音(例如,Francesco 發現錯字和惡意之間的相關性)。

恐怖小說家身份識別

Spooky Author Identification(恐怖小說家身份識別)競賽提供了三個恐怖主題作家 Edgar Allan Poe, HP Lovecraft 和 Mary Wollstonecraft Shelley 寫的一些文本片段,要求參賽者構建一個能夠將作家和特定文本進行匹配的預測模型。

我選擇用於分析的 EDA 是 Anisotropic 的Spooky NLP and Topic Modelling Tutorial,Bukun 的Tutorial Detailed Spooky Fun EDA and Modelling和 Heads or Tails 的Treemap House of Horror Spooky EDA LDA Features。

這個數據集的有趣之處在於它的簡單性,除了作家之外,文本中幾乎沒有其他非結構化的數據。因此,所有的 EDA 都只關注用不同的方法來解析和分析語言。

大家首先檢查數據集,然後挑出幾行來繪製每位作家的故事數目。Bukun 還研究了每位作家文章中的單詞長度,而 Anisotropic 繪製了一張整體單詞數目的條形圖。

Anisotropic 表示,這些詞都是常見的詞,不僅僅出現在三位作家的恐怖故事和小說里,還有報紙、兒童讀物、宗教文本——幾乎所有其他的英語文本里都可以找到。因此,我們必須找到一種方法來對數據集進行預處理。首先去掉通常不會帶來太多信息的單詞 。

他們都構建了詞雲圖來顯示出現最頻繁的單詞:

Heads or Tails 根據 50 個最常見詞構建的詞雲

Heads or Tails 也對每位作家的整體句子、單個句子和字詞長度進行繪製,並發現作家之間的細微差異。

Anisotropic 和 Bukun 討論了分詞並且移除了停用詞。他表示,這個階段的工作是嘗試將類似單詞的不同變體減少到一個單獨的術語(一個單詞不同的分支都被簡化為單個詞幹)。因此,如果文中有「running」、「runs」和「run」,將變成「run」。(當然,會失去過去、現在或將來時態)。

在分詞之後,Anisotropic 刪除了停用詞,還原了詞性並重新建立出現頻次排在前 50 的單詞的詞頻柱狀圖:

Bukun 繪製了出現頻次前 10 的單詞的詞頻圖,並發現了一個不同的集合:

Heads or Tails 也這樣做了,另外,還通過作家來看分詞和詞幹化之後詞頻排在前面的單詞。

Bukun 和 Heads or Tails 都使用 TF-IDF 值來查對於特定作者來說最「重要」的單詞。

Heads or Tails 將作者最重要的詞繪製在一張不同的圖表中

Bukun 觀察到頻率最高的二元模型和三元模型(分別是兩個和三個單詞的集合)。

Heads or Tails 繪製了二元模型之間的詞關係

Bukun 和 Heads or Tails 都進行了情緒分析,並觀察了每位作家的整體負面情緒。

Bukun 使用了一種叫做「NRC 情感辭彙」的詞典來檢測每個文本片段中的「恐懼」、「驚喜」和「快樂」的數量,並利用詞雲圖、表格、條形圖來可視化作家們的情緒。

Bukun 繪製的與開心匹配的詞雲

特徵工程

Bukun 建議增加一些可能的特性,包括逗號、分號、冒號、空格的數量以及包含大寫字母的單詞或是以大寫字母開頭的單詞,並繪製每一種的圖像。

Heads or Tails 強調:

我們已經注意到,可以通過知名人物來識別這三位作家。Mary Shelley 寫了「Raymond」,Lovecraft 寫了「Herbert West」。但是對於一般的名字呢?一些作家在某些特定的情況下更樂意使用名字嗎?這是在研究完句子或字元長度之後,我們要關注的重點。

從這個角度來看,Heads or Tails 依賴於 babynames 包,它以每年最受歡迎的名字為特徵,為數據添加一個額外的特性。

Bukun 和 Heads or Tails 都注意到作家之間性別代詞的分類問題,Heads or Tails 也注意到句子的主題、作者的首字母、尾字母以及特殊單詞的數量、每一個句子裡面特殊單詞所佔的比重、對話的標籤和押韻。(這是一個很酷的想法)

Heads or Tails 繪製的各種測量值

Heads or Tails 繪製了一張圖總結,展示了特徵的相互作用:

Heads or Tails 的圖展示了特徵交互

點評

這是一項值得研究的競賽。因為文本片段更長,而且不依賴於結構化的數據。

他們傾向於利用小寫單詞、詞幹和分詞等 NLP 常見應用,同時他們也傾向於使用比 Toxic 中更先進的技術,比如情感分析和二元、三元模型分析技術。

在這兩個競賽中,他們都用到了TF-IDF。

在特徵工程階段,他們設計了各種各樣新特徵。包括每個句子的平均單詞數、標點符號的選擇、以及單詞是否重複等。

via:thekevinscott.com

4 月 AI 求職季

8 大明星企業

10 場分享盛宴

20 小時獨門秘籍

4.10-4.19,我們準時相約!

新人福利

關注 AI 研習社(okweiwu),回復1領取

【超過 1000G 神經網路 / AI / 大數據資料】

七步即可學會R語言,從此數據分析不再怕!


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

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


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

Kaggle 冰山圖像分類大賽近日落幕,看冠軍團隊方案有何亮點
阿里巴巴 WSDM Cup 2018 奪得第二名,獲獎論文全解讀

TAG:AI研習社 |