【Kaggle】タイタニック振り返り#1 RandomForest vs XGBoost vs LightGBM

Kaggleのタイタニックデータを使ったいろいろやったことを

”タイタニック振り返り”シリーズとして整理しておこうと思います。

全6回で、こんな感じで進む予定です↓

#1 最低限の前処理+パラメータチューニングなしの3モデル+stratified-k-fold

#2 特徴量をいくつか追加投入

#3 RFEによる特徴選択を試みる

#4 モデルのパラメータチューニング

#5 シンプルなブレンド

#6 スタッキング

今回は第一弾です。

 

最低限の前処理

 

前処理として、欠損値埋めと、カテゴリ変数の変換だけ最低限やっておきます。

他にも、外れ値を処理したりだとか、スケーリング(Standard Scaler、Min-Max Scaler等)をした方がよいケースもあるようです。

スケーリングについては、今回扱うモデル(ランダムフォレスト、XGBoost、LightGBM)では必要ないみたいですが、ロジスティック回帰とか使うようであれば必須です。

まずは定番ライブラリをインポートしておき、ファイルを読み込みます。

 

とあるKernelでfull dataにtrainとtestを入れて、まとめて前処理をかけていたのがあり、便利だと思ってまねさせていただきました。

欠損値埋めについては、Embarkedは”S”で、FareとAgeは中央値で埋めることにします。

また、カテゴリ変数はEmbarkedをワンホットエンコーディング、Sexをラベリングします。

このあたりは以前書いた記事のほうが詳しく書いています。よければ見てくださるとうれしいです。

【Kaggle初心者】タイタニックコンペを決定木&ランダムフォレストで試行錯誤してみた

 

前処理の最後に、使わない(使うのに処理が面倒な)カラムを落とします。

 

データセットはこのようになりました。

 

層化k分割交差検証

モデルの評価にあたっては、層化k分割交差検証(stratified-k-fold-cross-validation)を用います。

以前はtrain-test-splitでやっていたのですが、k分割交差検証の方が、より正確にモデルを評価することができます。

例えば3分割交差検証を行った場合、データセットをA,B,Cと3分割し、

①AとBで訓練して、Cで評価

②BとCで訓練して、Aで評価

③AとCで訓練して、Bで評価

という風に分割数分、毎回異なるデータでモデル訓練&評価を行い、平均値をとることでスコアを出します。

層化k分割交差検証は、データセットをk分割する際に、各小データセット内のクラス内訳比率が等しくなるように分割するものです。

ターゲットのクラス内訳が0と1の2種類で、全体のデータセットでその比率が3:7だった場合、k分割した際の各データセットにおいてもクラス内訳が3:7となるように分割してくれます。

では、stratified-k-foldの中にモデルを組み込んでみます。

 

モデルの比較

、、の前に、目的変数と説明変数を分けておきましょう。

 

ランダムフォレスト

まずはランダムフォレストからです。

for文でenumerateを使っていますが、これは使わなくてよかったやつです。

enumerateにしておくと、「Fold1:スコア〇〇」みたいに表示できたりします。(やっていませんが、、)

以下のような結果になりました

平均をとって、精度は0.8136275678129611です。

LeaderBoardのスコアは0.72727でした。

 

XGBoost

次はXGBoostです。

平均値は0.8192713653387811、

LBscoreは0.76555になりました。

 

LightGBM

最後にLightGBMを試します。

LightGBMを使っているカーネルで、以下のようなコードの記述が見当たらなかったのですが、きちんと動いたので間違ってはいないと思います(間違っていたら指摘していただきたいです、、)

平均値は0.8248890591306323、

LBscoreは0.72248となりました。

 

ここまでのまとめ

欠損値埋めとカテゴリ変数処理のみの最低限の前処理に加えて、stratified-k-foldで(パラメータ設定していない)3モデルでスコアを出してみました。

まとめると以下の表のようになりました。

XGBoostだけなぜかLBスコアが高い、、。

LBスコアはこれからも出していきますが、CVスコアのほうでいいモデルが作れたかどうかを判断していきたいと思います。

というわけで、みんな優秀だけれど、何も考えずにデータ突っ込んだ場合今回はLightGBMがちょっとだけよかったよ、という結果でした。

最後まで読んでいただきありがとうございました。

 

#2に続きます→

【Kaggle】タイタニック振り返り#2 特徴量エンジニアリング