Kaggleチュートリアル"Titanic"
Kaggleは、世界最大規模の機械学習コンペティションサイト。
Titanicは、そのチュートリアル的な課題になっている。
このコンペティションでは、タイタニック号での乗客の生死を予測する。
https://www.kaggle.com/c/titanic/overview
とりあえず、80%の壁を超えるまで、試行錯誤しました。
それを今回簡単に紹介します。
最後にコードがついてます(github)
データ概観
このSurvivedを予測する。
Trainデータは、892個。Testデータ(提出するデータ)は、417個になっている。
上位7%までにやったこと
他のカーネルや、記事をみて、様々試した。
データ補完
-Fare: Pclassごとの平均値をとって、その平均値を持ってFareを補完した
-Embarked: 最頻値(S)を用いて補完した。
*Ageを平均値で補完や、Mr,Miss,Masterなどを用いて補完することも考えたが、結局精度が上がらなかったため、今回は、単純にAgeを不使用とした。
作成した特徴量
-Sex,Embarked: これらあは、単純にダミー変数化した。
e.x.) Male -> 0, Female -> 1
-Pclass:1、2、3のまま使用。
-FamilySize: SibSp + Parchで家族の人数を計算。
FamilySizeを用いて、独り身(IsAlone)、小規模、中規模、大規模家族という形のダミー変数を作成した。
-Title(敬称): Mr, Miss, Mrs,などの情報を名前から抽出。
年齢だけでなく、結婚情報も正確に抽出できると考えた。
このTitleをダミー変数として、特徴量に加えた。
-Ticket_ini: チケットの頭文字を抽出。
この頭文字を用いてダミー変数を作成した。
-n_same_ticket: 同じチケット番号を持っている人が何人いるのか。
同じチケット番号の人は、家族or友人同士で同時にチケットを購入している可能性。
そのため、チケット番号が同じになるのでは、と予想したそうです。
個人的考え)SibSpやParchでは、同伴している家族情報しかわかりませんが、これだと同伴していた友人などの情報もわかるので優位なのではないかと考えた。
参考)https://yolo-kiyoshi.com/2018/12/16/post-951/
-Cabin_ini: Cabinの頭文字を抽出。
この頭文字情報をダミー変数に変換。
特徴量のまとめ
以上31個の変数を使用。
1 Pclass
2 Sex
3 Fare
4 n_same_ticket
5 Embarked_C
6 Embarked_Q
7 Embarked_S
8 Ticket_ini_1
9 Ticket_ini_2
10 Ticket_ini_3
11 Ticket_ini_A
12 Ticket_ini_C
13 Ticket_ini_Others
14 Ticket_ini_P
15 Ticket_ini_S
16 Ticket_ini_W
17 Title_Master.
18 Title_Miss.
19 Title_Mr.
20 Title_Mrs.
21 Title_Others
22 Cabin_Initial_B
23 Cabin_Initial_C
24 Cabin_Initial_D
25 Cabin_Initial_E
26 Cabin_Initial_N
27 Cabin_Initial_Others
28 IsAlone
29 Family_size_small
30 Family_size_mid
31 Family_size_big
機械学習モデル
RandomForestを使用。
ハイパーパラメータを適当に調節してあげて、10foldの10個の式で予測値平均をとった。
分割は層化k分割を使いました。
LightGBM・XGBoost・Catboostも使ってみた。
しかし、Public scoreはRandom forestの方がよかった。(過学習かな)
いくつかのモデルを作成して、アンサンブルをとってもみたが、結局Random forest単体がBESTだったので、
これで行きました。
重要変数
ちなみにRandom forestの重要変数は、こんな感じでした。
Github
載せました。
細かい点を見たい方は、こちらで確認してください。
そのまま動かして、**80.861%**の精度になるはずです。
https://github.com/taruto1215/Kaggle_Titanic
今回のきっかけ
実は、私GCI2020summerという東大松尾研究室のデータサイエンス講習に参加しております。
その時に、Titanicコンペに参加することになったのですが、
2日くらいで80%くらいいくだろうと、甘く見ており、結局期日までに78~9%の精度で終了。。。
悔しかったので、継続してチャレンジして、80%を達成できました。
まだまだ、初心者なのでご助言などあれば、是非ください。