Photo by Marek Studzinski on Unsplash
今回は最後ということで、生存者の予測をしてみます。
まず、予測に使う変数だけを集めたデータフレームを作ります。
adj_age(NAを0に置換した年齢)とl_fare(運賃の対数)の他はぜんぶダミー変数です。
adj_ageとl_fareを最小値0、最大値1にスケール変換します。
(観測値 - 最小値)/(最大値 - 最小値) で最小値が0、最大値が1になりますね。
こうして作成したest_allをtrain, testの二つのデータフレームに分けます。
それでは、lm()関数を使って線形モデルを作成します。
adj_ageとl_fareは連続変数なので、その他の変数との交互作用も考慮するために、
Survived ~ adj_age*(.) + l_fare*(.) としています。そして、step()関数で不要な説明変数を削除しています。
p値を見ると、pc1(Pclassが1), master(Master. が敬称), female(女性), adj_age:sibsip3(年齢 x SibSpが3の人) は星が3つで生存にプラスの作用です。
反対にsibsp3(SibSpが3)とsibsp5(SibSpが5)の人は生存にマイナスの作用で星が3つです。
このモデルを使って、predict関数でest_testのデータの生存者を予測してみます。
全体の生存率は39%ぐらいと予測しています。
write.csv()関数で結果をCSVファイルに出力して、Kaggleに予測をsubmitします。
このようにCSVファイルでできます。
これを提出します。
結果は0.77272でした。
試しにKaggleにはじめからあるgendar submission、(これは女性なら生存、男性なら死亡、というものです)のスコアも見てみます。
結果は0.7655でした。
なので、線形確率モデルで予測したモデルのほうが少しだけ、0.00717だけ上です。
testの人数は1309- 891 = 418人ですから、
418 * 0.007171 = 2.99706, つまり3人多く正しく予測できたということです。
マシーンラーニングは他にもランダムフォレストやサポートベクターなどありますが、
それらはまた今度、気が向いたらやりましょう。
初めから読むには、
です。