kaggleの初心者コンペとして有名なタイタニックをやってみました。
kaggleの初心者コンペとして有名なタイタニックをやってみました。
今回はGoogle Colabを使い、大きく以下の流れで精度の検討を行っています。
- ひとまず最短経路でサブミット
- 特徴量を検討
- モデルを検討
コードは以下にアップしているのでご参照ください。
https://gitlab.com/h-furukawa/kaggle_titanic/-/blob/master/Untitled0.ipynb
- ひとまず最短経路でサブミット
データを確認してサブミットまで持っていきます。機械学習のモデルに適用するために「数値データ」かつ「nullを含まない」カラムをピックアップしてk-最近傍法でモデルを生成、予測を行います。(どのモデルが最適かは後に検討するためここでは決め打ちで最近傍法を使いました)
数値データか否かを確認するために各カラムのデータ型を見ます([6])。数値データはint64(整数値)とfloat64(小数値)なのでPassengerId, Survived, Pclass, Age, SibSp, Parch, Fareが該当します。このうちPassengerIdはID値(順番に付与されているだけの数値なので予測には適さない)、Survivedは目的変数(0 or 1で生死を予測)なのでtrainデータから省きます。残りはPclass, Age, SibSp, Parch, Fareです。
次にnullデータを含むか否かを確認します([7], [10])。trainデータとtestデータ両方を見ると、さきほどのカラムのうちnullデータは含まないのは、Pclass, SibSp, Parchの3カラムです。まずはこの3カラムを使って予測をします。
[11]でtrainデータをセット、Survivedは目的変数としてセットします。[13]でk-最近傍法(KNeighborsClassifier)を使いモデルを作りtrainデータに対するスコアを確認します。[14]でtestデータをセットし予測をして[15]でサブミットします。
スコアは0.62918でした。
- 特徴量を検討
次により最適な特徴量を検討します。モデルはk-最近傍法に固定して特徴量のみを変えて精度を比較します。
基本的な戦略はワンホットエンコーディングとスケール変換です。
ワンホットエンコーディングではカラムをデータの種類で分割して0 or 1フラグを立てます。たとえばパターン1ではPclass, Sex, Embarkedをワンホットエンコーディングしました。Pclassは3, 1, 2の3種類([16])、Sexはmale, femaleの2種類([17])、EmbarkedはS, C, Q(とnull)の3種類なのでワンホットで展開してもカラム数はそれほど多くはなりません。ワンホットエンコーディングした結果は[22]になります。
スケール変換はStandardScalerを使いました。StandardScalerは平均を0、分散を1になるように変換をすることでデータを標準化します。
trainデータに対するスコアが一番高かったのはパターン5だったのでこれを採用してサブミットしました。パターン5ではPclass, SexをワンホットエンコーディングしStandardScalerを使います。Fareはtestデータにnullがありますがそれは平均値で埋めるようにしています。
サブミットしたスコアは0.77272でした。
- モデルを検討
有用な特徴量を定めることができたので最後に様々なモデルを試してみて良いものを探します。今回は、ロジスティック回帰、サポートベクタマシン、 決定木、ランダムフォレスト、勾配ブースティングを試しました。
スコアが高かったのは勾配ブースティングでしたのでこのモデルを使って予測したものをサブミットします。
スコアは0.70813となり結果的にk-最近傍法の0.77272が一番高いスコアとなりました。
最後は若干詰めが甘い結果となりましたが、「モデルを固定して特徴量の検討」→「定めた特徴量でモデルを検討」の流れが伝われば幸いです。
今回は予測モデルを作る流れのほんの一例ですので興味のある方はkaggleのノートブックなど見てさらに勉強していくことがお勧めです。
EVENTS