こんにちは!Onplanetzです.
今回titanicのtrainデータをもとに性別や年齢など、どんな要素が生存率に影響を与えていたのか分析してみました。random forest、lightGBMを使用して実装しました。
初めに、データの前処理を行いました。
Train,test両データとも年齢、運賃に欠損値があったため欠損値を中央値で補完しました。
また、性別、乗船場所のダミー変数への置き換え、チケットクラス、性別、年齢、運賃、乗船場所の5つのデータのみを反映させていました。しかし、なかなか正答率が上がらなかったため反映させるデータの数を増やすことにしました。名前とsibsp,parchにも反映させました。元のデータのまま反映させてもさほど意味がないと感じたため、名前は敬称ごとに分類しSibspとparchを組み合わせることで一緒に乗船した家族の数や一人で乗っているかどうかを知ることができます。
データの前処理・整形はこれで終わります。
次にモデルの適合とパラメータの調整を行いました。
まずligthtGBMを使用しました。使用したデータはチケットクラス、性別、年齢、運賃、乗船場所のみで行い、グリッドサーチを使いパラメーターの最適な値を探索しました。パラメーターの数値を調整し実装したところkaggleでのスコアは0.751ほどでした.
次にrandom forest を使用しました。こちらで使用したデータはlightGBMで使用した5のデータと前処理の段階で成形した家族のサイズと名前の敬称の7個のデータを使用して実装に当たりました。こちらもグリッドサーチを使いパラメーターの調整を行い、lightGBMで使用したトレーニングデータとそこで得たテストデータの結果をトレーニングデータとして使用することでトレーニングの数を増やして実装してみたところkaggleのスコアで78.9まで上がることができました。この方法は過学習になる可能性も秘めているので必ずしも良い結果になるとは言えませんが今回はうまくいきました。
今回のタイタニックの予測を通して前処理・データの整形が非常に大切なものであると実感しました。
使用するデータの選択やパラメーターの調整などによって大きく結果も変り何回も試行錯誤しながら根気強くやっていかなければいけないなと感じました。
参考: