Kaggle Titanicチュートリアル: ベースラインモデル編

投稿者: | 2018-12-29

いよいよ機械学習モデル構築に入っていきます。高度なモデルを使いたくなりますが

  • 仮定、前提が多く「うまく動かない」「精度がでない」ことがある
  • エラーや精度が出ない時の原因特定が大変

なのでシンプルなモデルから始めて徐々に高度化することをオススメします。

ここでは最もシンプルなモデルとして「Majority classifier」から始めます。とてもシンプルなモデルですが「最低限これ以上の精度は出るはず」というベースラインを与えてくれますし、テストデータの生存率の情報も与えてくれます。

Majority classifierの構築/予測

Majority classifierとは

学習データで最も多かったラベルで予測

するモデルです。Titanicチュートリアルの場合、学習データでは死亡(62%)の方が多いのですべて「死亡」と予測することに対応します。

Scikit-learnでは単純なルールで予測するDummyClassifierが用意されておりstrategyオプションに’most_frequent’を指定するとMajority classifierになります。なお、コード全体はこちらを参照ください。

from sklearn.dummy import DummyClassifier
model = DummyClassifier(strategy='most_frequent')

model.fit(X_train, y_train)

このモデルで予測した結果を「PassengerId,生存予測結果」のCSV形式で出力します。念の為、中身を確認すると

と確かにテストデータの乗客をすべて死亡と予測しています。

この結果をKaggleに提出(submit)しましょう。Titanic tutorialのページで「Submit Predictions」を選び

  • Step 1: 予測結果をアップロード
  • Step 2: 予測結果の説明を記入

します。今後のチューニングでは

  • アルゴリズム: Majority classifier, ロジスティック回帰など
  • アルゴリズムのパラメタ: 正則化パラメタなど
  • 特徴量: 説明変数として何を使っているか、前処理として何をしているか

を色々と変えていくのでこれらの情報を後から確認できるよう残しておきましょう。

説明を記入し終えたら「Make submission」をクリックします。予測結果が送られPublic Leaderboard(LB)用のデータでの精度が算出されます。

記念すべき1回目のスコアは「0.62679」[1]大体10,700チーム中10,300位くらいでした。です。すべて「死亡」と予測するモデルでも62.7%の精度が出でました。この結果から大きく2つのことがわかります。

テストデータでの生存率

準備編で触れた通りテストデータはPublic/Private LB用に2等分されています。今回、すべて「死亡」と予測して精度が62.7%だったことからPublic LB用のデータでの生存率は37.3%で学習データとほぼ同じことが分かります。

当たり前だと思うかもしれませんが、コンペによっては学習/テスト用データの取得時期が異なるなどで目的変数の分布がずれていることがあります。2値分類だとMajority classifierの結果から目的変数の分布がわかるので確認しておきましょう。

モデル精度の基準

最もシンプルなモデルの精度を「最低限出せる精度」(=ベースライン)と捉え、あるモデルがこの精度を下回った場合には何か大きなミスをしていると判断できます。

また、クロス集計から「チケットクラスが1st」「女性」「5才以下」など生存率6〜7割のルールが見つかっており、ベースラインからどれくらい改善できそうかも試算できます。仮に「生存率が高いルールに合致するサンプルが全体の4割あり、その生存率は65%」とすると全体の生存率(37%)から「残りの6割の生存率は18%」となり

  • ルールに合致すれば「生存」
  • 合致しなければ「死亡」

と予測することで75%程度の精度が得られそうだと分かります。

まとめ

最もシンプルなモデルとして「Majority classifier」での予測を行いベースライン(精度62.7%)を確認の上、おおよその目標(75%程度)を把握しました。

複雑なモデルをいきなり適用し

どこが正しく、どこが間違いなのか不明なままチューニングを進める

のと、シンプルなモデルから始め

ベースライン、目標感を把握しチューニングを進める

のでは進め方が大きく違ってくると思います。このチュートリアルでも

  • 少なくとも62.7%の精度は出ないとおかしい
  • 精度75%くらいまではきっと行けそう
  • 精度75%から先はうまい特徴量を見つけないとそれ以上の精度は出にくそう

とマイルストンを意識しながら分析を進めることができますし、仕事としてする場合も上司・お客様から見た安心感が違ってくる[2] … Continue readingと思います。

シンプルなモデルだからと侮って手を抜くのではなくモデル構築の最初の重要な一歩としてきっちりとやりたいですね。

脚注

脚注
1 大体10,700チーム中10,300位くらいでした。
2 機械学習プロジェクトでは精度を事前にコミットできない分、早い段階で精度の目標感を共有しこのまま進めて大丈夫かジャッジすることが重要だと思います。

スポンサーリンク


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です