前回、探索的データ分析を行い得られた知見を元に、複数の予測モデルの性能を比較してみます。

 

今日も教材はこちら。

 

https://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5Data-Science%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-Python%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8BKaggle%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF-KS%E6%83%85%E5%A0%B1%E7%A7%91%E5%AD%A6%E5%B0%82%E9%96%80%E6%9B%B8-%E7%A5%A5%E5%A4%AA%E9%83%8E/dp/4065190061

 

こちらの内容を参考に行いました。

 

第2章 Titanicに取り組む

 2.2 全体像を把握!submitまでの処理の流れを見てみよう

   2.4 ここで差がつく!仮説に基づいて新しい特徴量を作ってみよう

 

まずは、前回行った結果で、SibSp(タイタニックに同乗している兄弟/配偶者の数)・Parch(タイタニックに同乗している親/子供の数)ともに一定の値を超えると生存率が下がるという状況がありました。

そこで、「SibSpとParchを足し合わせて「家族の人数」という特徴量を新たに作ると、予測性能に寄与する可能性がある」という仮説に基づいて、結果を比較してみます。

 

まずは、この仮説の検証のために、このようなグラフを作りました。

 

ここからわかることは、

1. FamilySize>=5の場合、生存率が低い

2. FamilySize==1の場合、生存率が低い

ということです。

特に2は顕著なので、ここから、IsAloneという新たな特徴量も作成します。

 

 

生存率に関係が深そうなAge・Embarked・Fare・Pclass・Sexに加えて、

①FamilySizeとIsAloneは使わない

②FamilySizeとIsAlone共に使う

③FamilySizeのみ使う

④IsAloneのみ使う

の4条件で予測モデルを作成します。

 

 

どの項目で欠損値があるかを確認。

Age・Fare・Cabin・Embarkedに欠損値が存在していることがわかるので、中央値や最頻値などに置き換える。(Cabinは使用しないため、そのまま)

また、カテゴリ変数であるSex・Embarkedの表示を0,1,2などに直す。

 

 

これでデータの準備ができたので、機械学習させるためにX_train(訓練データの説明変数)、y_train(訓練データの目的変数)を準備。

まずは、「①FamilySizeとIsAloneを使わない」について。

 

 

これらを用いて、ロジスティック回帰でモデル作成。

(ピンクの警告は一旦無視しちゃってます。)

 

X_testは、テストデータの説明変数。

y_predに予測データを格納。

 

 

 

gender_submission.csvは提出形式のサンプルデータとして提供されているもの。

こちらに先ほどの予測結果を代入して、csv形式で保存。

 

これを、②〜④についても同様に作成し、kaggleに提出したところ、スコアはこんな感じでした。

 

①FamilySizeとIsAloneは使わない 0.66985

②FamilySizeとIsAlone共に使う 0.66028

③FamilySizeのみ使う 0.66028

④IsAloneのみ使う 0.66985

 

①と④がわずかに高い、という結果でした。

決定木でやった方がいい結果ですね。

 

どの特徴量が一番効いているかを知るために、④のときの回帰係数(と切片)を調べてみた結果がこちら。

 

順番は、'Age','Embarked','Fare','Pclass','Sex','IsAlone' なので、一番回帰係数の絶対値が大きいのはSexで、2番目がPclassでした。

Sex(0=男性、1=女性)は値が大きいほど(女性であるほど)、Pclass(1 = 上層クラス(お金持ち)、2 = 中級クラス(一般階級)、3 = 下層クラス(労働階級))は値が小さいほど(高いクラスであるほど)、生存率が上がるということで、

前回確認した結果とも合致している。

 

ちなみに、ロジスティック回帰についてはこのサイトがわかりやすい。

https://istat.co.jp/ta_commentary/logistic

 

今日はここまで!