MotoJapan's Tech-Memo

技術めも

【kaggle③】初心者がタイタニック号の生存予測モデル(Titanic: Machine Learning from Disaster)をやってみる(特徴量生成と生存関係の可視化)

これの続きです。
【kaggle②】初心者がタイタニック号の生存予測モデル(Titanic: Machine Learning from Disaster)をやってみる(データ分析、整形、欠損データ補完) - MotoJapan's Tech-Memo

2.7. 特徴量毎の生存分布確認(可視化)と特徴量生成

データの可視化は非常に重要。
pandasを使うと1~2行程度表やグラフを描けるのでどんどん使います。
可視化方法においては※1を参考にさせて頂きました。
データを表/グラフ化し、機械学習を行う特徴量を選定していきます。  

2.7.1 可視化(表化、グラフ化)

各特徴量と[Survived]の相関を見てみます。
ちなみに1行で書けます。

df_train[['Pclass', 'Survived']].groupby(['Pclass'], as_index=False).mean()

結果はこんな以下のような感じです。

上級クラスの方が平均的には生き残っているようです。
f:id:motojapan:20170629003018p:plain


ということで他も見てみます。

df_train[['Sex', 'Survived']].groupby(['Sex'], as_index=False).mean()
df_train[['SibSp', 'Survived']].groupby(['SibSp'], as_index=False).mean()
df_train[['Parch', 'Survived']].groupby(['Parch'], as_index=False).mean()
df_train[['Honorific', 'Survived']].groupby(['Honorific'], as_index=False).mean()
  • 女性が残る傾向あり

f:id:motojapan:20170629003120p:plain

  • 1人乗船、もしくは、兄弟配偶者の数は2人以下の生存率が高い

f:id:motojapan:20170629003136p:plain

  • 家族ずれの生存率は高いが、多すぎると逆に生存率が下がる

f:id:motojapan:20170629003347p:plain

  • 1:Mrs, 2:Miss 3:Master が同様に生き残る傾向にあり、

女性子供が優先的に救命ボートに乗れたようです。
f:id:motojapan:20170629003220p:plain


グラフ化もしておきますが、gitに書いてあるのでコードは割愛します。

  • 乗船クラスが高い程、生存率が高い

f:id:motojapan:20170629010414p:plain

  • 女性の生存率が高い

f:id:motojapan:20170629010429p:plain

  • 素のAge分布(欠損あり)

f:id:motojapan:20170629010438p:plain

  • Age_1) 20代前半にピークが際立っており、偏りがある

f:id:motojapan:20170629010445p:plain

  • Age_2) Age_1に比べて年齢がばらついている

f:id:motojapan:20170629010512p:plain

  • 0:Mrの生存率がかなり悪い

f:id:motojapan:20170629010543p:plain
だいぶ直観的になってきました。
前回補完した[Age_1]に比べて、[Age_2]の方が、ピークが抑えられている。

2.7.2 特徴量生成

難しいことはしていません。
乗客自身を含めた家族人数[FamilySize]という特徴量を生成します。
これで、[SibSp][Parch]をまとめて意味のある次元圧縮が可能となります。

次元の呪いを避けるためにも、次元削減は検討しましょう。
次元圧縮には、正規分布を仮定したPCA(主成分分析)やそれを仮定しないICA(独立成分分析)、などもありますが、今回は触れません。

df_train["FamilySize"] = df_train["SibSp"] + df_train["Parch"] + 1
df_train[['FamilySize', 'Survived']].groupby(['FamilySize'], as_index=False).mean()

家族の人数が1~4人の生存率は高い。
特に1人乗りは、総じて生存率が高いわけではなく、
ある程度人数がいた方が生存率が高いです。

救命ボートに乗りやすかったのか、
危険な情報の共有ができたのかもしれません。
f:id:motojapan:20170629003203p:plain
f:id:motojapan:20170629010525p:plain


可視化と特徴量生成は以上です。
次回は、いままでの情報を元に学習用データセットを準備です。