タイタニック号の乗客の生存予測~Kaggleに挑戦(その3)

タイタニック号の乗客の生存予測~Kaggleに挑戦(その3)


3度目のチャレンジです。

今回は、ロジスティック回帰分析ではなく、機械学習の一つであるランダムフォレストを使ってタイタニック号の乗客の生存予測をします。

また、新たにFamilySize(家族数)とCabin(部屋番号)を説明変数に入れてモデルを作っています。

さて、スコアは伸びるのでしょうか?

FamilySize(家族数)と生存の関係

推測ですが、タイタニック号の沈没事故において、家族は一緒になって行動していたと考えられます。

従って、家族全員が生存、あるいは全員が死亡したケースが多そうです。

実際に学習用データを確認してみます。

FamilySize(家族数)は既存の変数であるSibSp(兄弟、配偶者の数)とParch(両親、子供の数)によって以下の式で算出できます。

$$ FamilySize = SibSp + Parch + 1 $$

出力結果


FamilySize(家族数)が大きいほど、生存率が低そうですね。

5人以上の家族で乗船していた場合は、かなりの確率で死亡しています。

従って、FamilySize(家族数)はSurvived(生存)と関係がありあそうなので、説明変数として追加します。

Cabin(部屋番号)と生存の関係

Cabin(部屋番号)は1回目の投稿で調べた通り、欠損値が多かったため、今までは説明変数として利用するのを避けてきました。


しかし、調べてみると、Cabin(部屋番号)の頭文字に応じて部屋の階層が異なっていたようです。

画像は、タイタニック号の断面図です。

横に振られているアルファベットは、Cabin(部屋番号)の頭文字となっています。

デッキに近い階層から順に、A、B、C…と振られていますね。

Kaggleのフォーラムでも以下のような記事があったので、参考になります。


救命ボートはデッキにあり、部屋がデッキに近い階層だった人のほうが生存したのではという推測ができます。

実際に学習用データを確認してみます。

出力結果


Uは欠損値を意味しています。

欠損値になっている人の生存率が低いですね。

Aの乗客の生存率が低いのが気になりますが、一応これも説明変数として追加してみましょう。

予測モデル構築と評価

今回は複数モデルを作成し、学習用データでの予測制度が最も優れているモデルを採用することにしました。

各モデルのサマリを確認します。


model4の予測精度が最も良いので、こちらを使って予測します。

せっかく追加したCabin(部屋番号)が説明変数に入っていませんが、予測精度が良いので仕方がありませんね。

Kaggleへ提出

以下のコードによりテストデータに予測モデルmodel4をあてはめ、予測結果を出力します。


さてさて予測結果は、、、

正答率は78.468%で、9,207人中4,046位でした。
前回よりも正答率は2.87%上昇、3755位ランクアップ。
目覚ましい進歩ですね!

一旦、予測に使ってきた手法を整理する記事を書きましょうか。