本文へスキップ
ひもとくAI

モデルを比べる:ベースラインと交差検証、テストは一度だけ

レッスン 4/6

モデルを比べる(1):ベースラインと、交差検証

比べる相手を、先に決めておく

モデルのよさは、比べる相手があって初めて分かります。レッスン1の企画シートのとおり、まず次の2つをベースラインにします。

  • いつも「やめる」と予測する(全員に案内を送るのと同じ)
  • 学習時間が120分未満の人を「やめる」と予測する(単純なルール)

評価指標は、企画シートで決めたもの

「やめる人を見逃したくない、でも無駄な案内も減らしたい」ので、再現率と適合率をまとめた F値 を主な指標にし、再現率・適合率も一緒に見ます。

訓練データの中で、交差検証で比べる

テストデータ(900人)は、最後に一度だけ使います。モデル選びは、訓練データ(2100人)の中で、第8章の 交差検証(5分割)で行います。どのモデルも、レッスン3と同じ前処理を Pipeline でつなぎます。

モデル交差検証のF値再現率適合率
いつも「やめる」0.7611.0000.614
ロジスティック回帰0.7790.8560.715
決定木(深さ5まで)0.768――
決定木(深さの制限なし)0.663――
ランダムフォレスト(200本)0.7500.8040.703
勾配ブースティング0.7710.8420.712

(決定木の再現率・適合率は、ここでは測っていません。交差検証と学習にかかった時間は、ブラウザと同じ環境で、ロジスティック回帰が0.3秒、勾配ブースティングが2.4秒、ランダムフォレストが6.2秒でした)

分かったこと

  • ロジスティック回帰が、一番よいF値でした。ランダムフォレストや勾配ブースティングは、時間がかかるうえ、このデータでは上回りませんでした
  • 深さの制限のない決定木は、訓練データではF値1.0(すべて正解)なのに、交差検証では0.663と、ベースラインより悪くなりました。第5章・第8章の 過学習 です
  • いつも「やめる」と予測するだけでも、F値は0.761あります。ロジスティック回帰との差は0.018で、大きくはありません。「AIを使えば劇的によくなる」とは限らないのが、現実のデータに近い姿です

第11章のまとめのとおり、「いつでも一番よいモデル」はありません。単純なモデルから試し、交差検証で比べて、複雑なモデルは効果があるときだけ使う のが基本です。単純なモデルは、速く、理由も説明しやすいという利点もあります。

モデルを比べる(2):テストデータで一度だけ確かめる

Python で交差検証して比べる

from sklearn.model_selection import cross_val_score
from sklearn.dummy import DummyClassifier

candidates = {
    "いつも「やめる」": DummyClassifier(strategy="constant", constant=1),
    "ロジスティック回帰": LogisticRegression(max_iter=1000),
    "決定木(深さ5)": DecisionTreeClassifier(max_depth=5, random_state=0),
}
scores = {}
for name, m in candidates.items():
    pipe = make_pipeline(pre, m)                       # レッスン3の前処理とつなぐ
    scores[name] = cross_val_score(pipe, X_train, y_train, cv=5, scoring="f1").mean()
print(scores)
best = max(scores, key=scores.get)                     # F値が一番大きいモデルの名前

DummyClassifier は、特徴量を見ずに決まった答えを返す、ベースライン用のモデルです。scoring="f1" で、交差検証の評価をF値にします。max(scores, key=scores.get) は、値が一番大きいキー(モデルの名前)を返す書き方です。

選んだモデルを、テストデータで一度だけ確かめる

交差検証で選んだロジスティック回帰を、訓練データ全体で学習させ、テストデータ(900人)で確かめました。

方法案内を送る人数再現率適合率F値
いつも「やめる」(全員に送る)9001.0000.6130.760
学習時間120分未満(単純なルール)5760.7540.7220.738
ロジスティック回帰6580.8680.7280.792

全員に送るのに比べて、案内を242人分減らしながら、やめる人の86.8%に届きます。単純なルールと比べると、同じくらいの適合率で、見逃しが少なくなりました。企画シートの成功の基準(8割以上に届き、単純なルールより見逃しが少ない)を満たしています。交差検証のF値(0.779)と、テストのF値(0.792)も近く、選び方に大きな問題はなさそうです。

よくある誤解

  • 「テストデータで一番よかったモデルを選べばよい」: テストデータに合わせて選ぶと、テストの結果が実力より良く見えます(第8章)。選ぶのは交差検証、テストは最後に一度だけです
  • 「複雑なモデルほど、よい結果になる」: このデータでは、ロジスティック回帰が、ランダムフォレストや勾配ブースティングを上回りました
  • 「ベースラインとの差が小さければ、AIは役に立たない」: F値の差は0.03ほどでしたが、送る案内を242人分減らせました。差の意味は、使い方(企画シート)に照らして考えます

振り返り

  • 企画シートで決めたベースラインと評価指標で比べる
  • モデル選びは訓練データの中の交差検証で、テストデータは最後に一度だけ使う
  • 単純なモデルから試し、複雑なモデルは効果があるときだけ使う

演習

演習を読み込んでいます…