crosshyou

主にクロス表(分割表)分析をしようかなと思いはじめましたが、あまりクロス表の分析はできず。R言語の練習ブログになっています。

Kaggle の Titanic の Competition に参加その2 - R言語のrpart関数の決定木で参加。正解率は 78.468% でした。

f:id:cross_hyou:20190116160939j:plain


 

 

www.crosshyou.info

今回は再び Kaggle の Titanic の Competition です。R言語のrpart関数で決定木モデルを作成して予測してみようと思います。

まず、read.csv関数でトレーニング用のデータを読み込みます。

f:id:cross_hyou:20190116145612j:plain

head関数でデータの始めの6行を表示してみましょう。

f:id:cross_hyou:20190116145756j:plain

str関数でそれぞれの変数のデータ型を確認します。

f:id:cross_hyou:20190116145952j:plain

Pclass、これは客室の等級ですが、データ型がintになっているのが気になります。factor関数でファクタ型に変換しましょう。

f:id:cross_hyou:20190116150353j:plain

ここでひとまず、summary関数でデータの基本統計量を確認しましょう。

f:id:cross_hyou:20190116150631j:plain

Survived, これは 0 が死亡で、1 が生存です。これもfactor関数でファクタに変換しましょう。

f:id:cross_hyou:20190116151315j:plain

 

それともうひとつ、Ageのデータが NA の乗客が177人います。これは気になるので、HasAgeというファクタを作成しましょう。

f:id:cross_hyou:20190116151246j:plain

これでまたsummary関数を実行してデータ変換がうまくいったか、HasAgeが追加されたか確認しましょう。

f:id:cross_hyou:20190116151531j:plain

あ、確認してよかったですね。Hasge がファクタではなく文字列のままでした。factor関数でファクタに変換します。

f:id:cross_hyou:20190116151907j:plain

これで決定木作成の下準備が終わりました。R言語のrpart関数で決定木を作成しますが、その前に、rpartパッケージを読み込みます。

f:id:cross_hyou:20190116152058j:plain

こうして読み込んだら rpart関数で決定木モデルを作成します。

f:id:cross_hyou:20190116152516j:plain

print関数でモデルを表示します。

f:id:cross_hyou:20190116152731j:plain

* がついている行が最終ラインです。一番下の行、7) Pclass = 1, 2 を見ると、これは一つ上の段階が3) Sex = femaleです。なので、7)が意味するのは、性別が女性で、客室クラスが1等、2等客室の乗客は生存と判定、ということになります。

predict関数でこのモデルを使って生存・死亡を判定できます。

test用のファイルを読み込みます。

f:id:cross_hyou:20190116153301j:plain

Pclassの変数をファクタ型に変換します。

f:id:cross_hyou:20190116153649j:plain

HasAgeを作成します。

f:id:cross_hyou:20190116154115j:plain

predict関数で生存・死亡を予測しましょう。

f:id:cross_hyou:20190116154227j:plain

結果を表示します。

f:id:cross_hyou:20190116154511j:plain

このようになりました。1番目の乗客は死亡確率が83%で生存確率が17%です。5番目の乗客は生存確率が81%です。

head関数でtestデータを見てみましょう。

f:id:cross_hyou:20190116154818j:plain

1番目の乗客は男性で3等客室に乗っていて、34.5歳ですね。この乗客は死亡する確率は高いですね。5番目の女性です。男性に比べると生存する確率は高いですね。

predデータに生存確率が0.5以上なら1, そうでないなら0のSurvivedという変数を付け加えましょう。そのためにpredをまずデータフレームに変換します。

f:id:cross_hyou:20190116155540j:plain

Survivedを加えます。

f:id:cross_hyou:20190116155743j:plain

もう一度、pred を表示しましょう。

f:id:cross_hyou:20190116155929j:plain

うまくできましたね。この結果を Kaggle に submit しました。

結果は。。。

f:id:cross_hyou:20190116160655j:plain

Score が 0.78468 です。正解率が 78.468% になりました。前回が 71.77% でしたから 7ポイントぐらいの改善です。

今回は以上です。