crosshyou

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

KaggleのTitanicのデータの分析11 - lm()関数で線形回帰モデルを作り生存者を予測する。gender_submission.csvより3人多く正しく予測した。

f:id:cross_hyou:20220327082529j:plain

Photo by Marek Studzinski on Unsplash 

www.crosshyou.info

今回は最後ということで、生存者の予測をしてみます。

まず、予測に使う変数だけを集めたデータフレームを作ります。

f:id:cross_hyou:20220327082930p:plain

f:id:cross_hyou:20220327083024p:plain

adj_age(NAを0に置換した年齢)とl_fare(運賃の対数)の他はぜんぶダミー変数です。

adj_ageとl_fareを最小値0、最大値1にスケール変換します。

f:id:cross_hyou:20220327083237p:plain

(観測値 - 最小値)/(最大値 - 最小値) で最小値が0、最大値が1になりますね。

こうして作成したest_allをtrain, testの二つのデータフレームに分けます。

f:id:cross_hyou:20220327083441p:plain

それでは、lm()関数を使って線形モデルを作成します。

f:id:cross_hyou:20220327084056p:plain

f:id:cross_hyou:20220327084108p:plain

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のデータの生存者を予測してみます。

f:id:cross_hyou:20220327085034p:plain

全体の生存率は39%ぐらいと予測しています。

write.csv()関数で結果をCSVファイルに出力して、Kaggleに予測をsubmitします。

f:id:cross_hyou:20220327085648p:plain

f:id:cross_hyou:20220327085700p:plain

このようにCSVファイルでできます。

これを提出します。

f:id:cross_hyou:20220327090011p:plain

結果は0.77272でした。

試しにKaggleにはじめからあるgendar submission、(これは女性なら生存、男性なら死亡、というものです)のスコアも見てみます。

f:id:cross_hyou:20220327090436p:plain

結果は0.7655でした。

なので、線形確率モデルで予測したモデルのほうが少しだけ、0.00717だけ上です。

testの人数は1309- 891 = 418人ですから、

418 * 0.007171 = 2.99706, つまり3人多く正しく予測できたということです。

マシーンラーニングは他にもランダムフォレストやサポートベクターなどありますが、

それらはまた今度、気が向いたらやりましょう。

初めから読むには、

 

www.crosshyou.info

です。