今回は再び Kaggle の Titanic の Competition です。R言語のrpart関数で決定木モデルを作成して予測してみようと思います。
まず、read.csv関数でトレーニング用のデータを読み込みます。
head関数でデータの始めの6行を表示してみましょう。
str関数でそれぞれの変数のデータ型を確認します。
Pclass、これは客室の等級ですが、データ型がintになっているのが気になります。factor関数でファクタ型に変換しましょう。
ここでひとまず、summary関数でデータの基本統計量を確認しましょう。
Survived, これは 0 が死亡で、1 が生存です。これもfactor関数でファクタに変換しましょう。
それともうひとつ、Ageのデータが NA の乗客が177人います。これは気になるので、HasAgeというファクタを作成しましょう。
これでまたsummary関数を実行してデータ変換がうまくいったか、HasAgeが追加されたか確認しましょう。
あ、確認してよかったですね。Hasge がファクタではなく文字列のままでした。factor関数でファクタに変換します。
これで決定木作成の下準備が終わりました。R言語のrpart関数で決定木を作成しますが、その前に、rpartパッケージを読み込みます。
こうして読み込んだら rpart関数で決定木モデルを作成します。
print関数でモデルを表示します。
* がついている行が最終ラインです。一番下の行、7) Pclass = 1, 2 を見ると、これは一つ上の段階が3) Sex = femaleです。なので、7)が意味するのは、性別が女性で、客室クラスが1等、2等客室の乗客は生存と判定、ということになります。
predict関数でこのモデルを使って生存・死亡を判定できます。
test用のファイルを読み込みます。
Pclassの変数をファクタ型に変換します。
HasAgeを作成します。
predict関数で生存・死亡を予測しましょう。
結果を表示します。
このようになりました。1番目の乗客は死亡確率が83%で生存確率が17%です。5番目の乗客は生存確率が81%です。
head関数でtestデータを見てみましょう。
1番目の乗客は男性で3等客室に乗っていて、34.5歳ですね。この乗客は死亡する確率は高いですね。5番目の女性です。男性に比べると生存する確率は高いですね。
predデータに生存確率が0.5以上なら1, そうでないなら0のSurvivedという変数を付け加えましょう。そのためにpredをまずデータフレームに変換します。
Survivedを加えます。
もう一度、pred を表示しましょう。
うまくできましたね。この結果を Kaggle に submit しました。
結果は。。。
Score が 0.78468 です。正解率が 78.468% になりました。前回が 71.77% でしたから 7ポイントぐらいの改善です。
今回は以上です。