【Kaggle入門】KerasでTitanic生存者予測をする方法

スポンサーリンク
python
スポンサーリンク

今回はKaggleのTitanic生存者予測について、データのダウンロードから提出までをまとめました。

スポンサーリンク

データのダウンロード

Titanic : Machine Learning from DisasterのコンペティションのData -> Download Allでデータがダウンロードできます。

3つのcsvファイルがダウンロードされます。

  • gender_submission.csv:提出用
  • test.csv:テストデータ
  • train.csv:学習データ

データの読み込み

ダウンロードしたファイルからデータを読み込みます。

train.csvのSurvivedの列は教師データとして使うデータです(No=0, Yes=1)。今回は、データ処理が難しそうなTicketとCabin以外のデータを使うことにします。

 

Pclass チケットクラス 1 = Upper, 2 = Middle, 3 = Lower
Name 名前  
Sex 性別 male or female
Age 年齢  
SibSp 一緒に乗った兄弟や配偶者の数  
Parch  一緒に乗った親や子供の数  
Fare 運賃  
Embarked 出航した港

C = Cherbourg, Q = Queenstown, S = Southampton

データ数と欠損値があるか確認します。

学習データのデータ数は891で、AgeとEmbarkedに欠損値があることがわかりました。

テストデータのデータ数は418で、AgeとFareに欠損値があることがわかりました。

学習データの前処理

Sex

まず、SexとSurviveの関係について調べます。

891データのうち、577が男性、314が女性でした。また、女性の方が男性よりも生存する可能性が高そうです。

データをmale→0、female→1として変換します。

Sexを数値に置き換えることができました。

Embarked

EmbarkedとSurviveの関係を調べます。

Southamptonから乗った人がもっとも多く、死者数も多いようです。

データには、C = Cherbourg, Q = Queenstown, S = Southamptonの三種類が含まれているので、それぞれ、C→0, Q→1, S→2として数値に置き換えます。

Embarkedには欠損値が2つ含まれるので、欠損部分を埋める必要があります。

ここでは、欠損部分を最頻値で埋めることにします。

AgeとName

Ageには177個の欠損値が含まれます。

Nameのデータ処理が難しそうなので、ここでは、Ageの177個欠損値を埋めるためにNameのデータを利用したいと思います。そうすることで、ただ全体の平均値や最頻値で埋めるよりも、実際の値に近いデータを当てはめることができるのではないかと考えたからです。

手順は以下の2ステップです。

  1. 敬称の種類ごとに年齢の平均値を求める
  2. 平均値で欠損部分を埋める

1. 敬称の種類ごとに年齢の平均値を求める

Mrs, Miss, Mr, Master, Dr, 敬称なし(ー)の6つのカテゴリに分けて、それぞれの敬称に対する年齢の平均を求めます。

「Master」は少年または青年につける敬称なので平均年齢が最も低いです。また、「Mrs:既婚女性、Miss:未婚女性」の敬称なので、Mrsの方がMrsよりも平均年齢が高くなりました。

2. 平均値で欠損部分を埋める

続いて、上で求めた平均値で欠損部分を埋めていきます。

これで、欠損値が埋まったので年齢と生存の関係を調べます。

10才ぐらいまでの子供は生存者が多く、20代、30代では死者数が多いことがわかりました。

Parch

Parchはすでに数字になっているのでこのまま使うことにします。

子供や親と乗船していない人の方が、生存しやすいようです。

SibSp

SibSpもすでに数字になので、そのまま使うことにします。

Parchの場合と同様に、一人で乗った場合が最も生存しやすいようです。

Fare

最後にFareです。Fareも今回は特にデータ処理をしていません。

高いチケットを買った人の方が生存する可能性がたかそうです。

使わないデータを削除

今回、Name, Ticket, Cabinは入力データに含めないので削除しておきます。

テストデータも同様に処理

テストデータも学習データの処理と同様に数値に変換しました。テストデータはFareに一つ欠損があるので、最頻値で埋めています。

データの相関をみる

今回使うデータどうしの相関をみてみます。

機械学習

Train用とValidation用に分割

まず、学習データを学習に使うデータとモデルを評価するためのデータに分割しておきます。

学習

今回は、ランダムフォレストで学習させました。

評価

評価用のデータでモデルの精度を調べます。

評価用のデータに対する精度は82%でした。

ファイルに出力

最後に、学習済みのモデルを使ってテストデータの予測をします。予測結果はsubmission.csvに書き込みます。

ファイルの提出

Submit Predictionsでファイルをアップロードして提出すると自分のスコアを確認できます。

今回のスコアは0.76555で、まだまだ改良の余地がありそうです。これから、DiscussionやNotebooksの内容を参考に工夫していきたいと思います。

最後まで読んでいただき、ありがとうございました。

タイトルとURLをコピーしました