Kaggle: Titanic — Machine Learning from Disaster(Top 2%)

ChunJen Wang
jimmy-wang
Published in
Apr 17, 2021

本篇介紹我在Kaggle參與競賽的心得,以透過資料實戰,進行ML/DL技能的活化。

遙望大神 Giba,取得數面金牌獎,實在欽佩,

希望有天也能成為強者。

這一次的學習內容幾乎是Kaggle比賽當中的Hello World,也就是Titanic的題目,透過乘客的相關資訊(X),來預測是否能在Titanic事件中存活(Y),為一個經典的分類預測(Classification),且結果Y=存/沒。

Start here! Predict survival on the Titanic and get familiar with ML basics.
https://www.kaggle.com/c/titanic/overview
從這裡開始,在數次嘗試後,總算取得前2%的成績。

Kaggle Titanic 參賽成果。

鐵達尼號有哪些資訊?

  • Id: 識別資料序用,沒有其他用意。
  • Survived: 就是要預測的Y,1為存活/0為逝去。
  • Pclass: 階級,可以讀出階級越高(1),存活率越大。(range: 1–3)
  • Name: 名字,可以用來識別是否已婚、階級、是否可能同一家族。
  • Sex: 男/女。
  • Age: 年紀,在train, test set都有許多缺失值,是比賽學習補值重點。
  • SibSp: 該名乘客旁系血親總數(含配偶)。例如兄弟姊妹。
  • Parch: 該名乘客直系血親總數。例如父母、子女。
  • Ticket: 票號。
  • Fare: 票價。
  • Cabin: 倉號,最多缺失值的一欄,補值相當困難。
  • Embarked: 登船港口代碼
    (C=Cherbourg, Q=Queenstown, S=Southampton)

訓練資料集(training set)共 891 筆資料,
測試資料集(testing set)共418筆資料。

特徵工程 Feature Engineering

  1. 新增乘客親友總數=加總SibSp與Parch。
  2. 透過姓名稱號做group by缺失的Age欄位。
  3. 眾數(mode)補上Embarked缺失值,以平均(mean)補上Fare缺失值。
  4. "others"補上Cabin缺失值,擷取Cabin開頭英文字母,並轉為類別參數。
  5. 建立one-hot encoding: Pclass, Sex, Embarked, Cabin。

機器學習模型建立 Model Building

本次模型採用 LogisticRegression(86%)、KNN(76%)、RandomForest(89%)、SVM(79%)、XGBoot(88%)。

準確度(accuracy_score)衡量模型表現。

並透過cross validation方式,最終以 3 fold代入。

最終挑選LogisticRegression, RandomForest, XGBoot進行ensemble learning,並提交預測成果。

小小感想:
這是在Kaggle第一個比賽,當然過程中也查了很多其他人的做法,譬如有人補Age做法也有透過Pclass來補,看起來也不錯,針對Fare只缺一筆,也有細緻化的補法(先看該人Pclass, Name來判斷婚姻狀態來group by再補平均)

在Cabin的處理上,甚至有大神船體結構圖像化,真的是很厲害。

Source: https://www.kaggle.com/gunesevitan/titanic-advanced-feature-engineering-tutorial?scriptVersionId=27280410

也是因為看到這篇,原本想捨棄Cabin這個缺失太多的參數,最終還是留下來了。

同時驗證了KNN抓越多K時,模型表現確實會越差。

KNN n_neighbors(X軸)與準確度(Y軸)關係圖。

很多細節很難文字化敘述,這個比賽也有一堆人準確度100%,覺得有點誇張得結果,而由於沒有版上大神強大的EDA技術,圖片的部份就多參考Dicussion大神們的筆記吧!

--

--

ChunJen Wang
jimmy-wang

嗨,歡迎你的到來,我目前在銀行擔任DS。過去曾做過銀行大型專案BA,也曾在轉職科技業DE中踢了鐵板,相信每一個人都有自己要走的路,而努力的過程,可以讓我們離心中理想更接近,如果我的文章能帶給你一些啟發與幫助,別忘了幫我在文章底下按下拍手~^^