ベースラインとF1スコアで理解する行動提案モデル評価
本記事は、行動提案モデル(多クラス分類)の実験を通して
- なぜベースラインが必要なのか
- mostfreq / random baseline は何を意味するのか
- なぜ accuracy だけでは不十分で、F1 スコアを見る必要があるのか
- Recall や混同行列をどう読めば、モデルの限界が分かるのか
を、実際の検証結果(batch3)に基づいて整理したものです。
前提として、筆者は動画から状態を抽出し、次に取る行動を予測するモデルを段階的に構築・評価しています。本記事ではモデル構築そのものではなく、評価と診断の考え方に焦点を当てます。
以下記事の補完です。
https://qiita.com/y4o4/items/a68163ca6c7f5cfe2596
なぜ「ベースライン」が必要なのか
モデルの評価でよく見る指標に accuracy(正解率)があります。
しかし、accuracy が 25% と言われても、それが
- 良いのか
- 悪いのか
- 偶然でも出るのか
は分かりません。
そこで必要になるのが baseline(基準モデル) です。
ベースラインとは「何も学習しなくても出せる性能」を明示的に用意し、
モデルがそれを上回っているかを確認するための基準です。
random baseline とは
定義
全クラスからランダムに予測するモデルです。
クラス数が 8 の場合:
- Top-1 accuracy の期待値は約 12.5%
役割
- 完全な偶然の下限
- 評価コードや分割方法が壊れていないかの確認
実験での例
random baseline
accuracy_top1 ≒ 0.10
accuracy_top3 ≒ 0.33
→ 理論値に近く、評価系が正常に動いていることが確認できました。
mostfreq baseline とは
定義
学習データで最も頻度の高いクラスを、常に予測するモデルです。
なぜ重要か
実データではクラス分布が偏っていることが多く、
何も考えなくても、それなりに当たる
という状況が起こります。
mostfreq baseline は、
- 「分布に乗っているだけ」の性能
- モデルが本当に状態を見て判断しているか
を見抜くための基準です。
技術的に baseline はどう算出しているか
ここで重要なのは、baseline 用にモデルを学習しているわけではないという点です。
baseline はすべて 評価時に直接計算 しています。
random baseline の実装イメージ
- 入力特徴量:一切使わない
- 学習:なし
評価時に次を繰り返すだけです。
pred = random.choice(class_ids)
Top-K の場合は、ランダムに K クラスを選びます。
preds = random.sample(class_ids, k=topk)
→ 完全な偶然の下限 を保証します。
mostfreq baseline の実装イメージ
- 学習データのラベル分布を数える
from collections import Counter
mostfreq = Counter(train_labels).most_common(1)[0][0]
- 評価時は常に同じクラスを返す
y_pred = mostfreq
Top-K の場合は、mostfreq を含む固定集合を返します。
→ 入力を一切見ないが、分布には忠実 な予測です。
学習モデルとの決定的な違い
-
baseline
- model.forward() を呼ばない
- 重み・勾配・最適化なし
-
学習モデル
- 入力 → NN → softmax → 予測
baseline は「考えていない」ことがコードレベルで保証されています。
accuracy だけでは足りない理由
accuracy は直感的で分かりやすい指標ですが、
- クラス不均衡
- 特定クラスへの偏り
に非常に弱いという欠点があります。
Precision / Recall の直感的理解
Precision(予測の質)
「それを出したとき、どれくらい正解だったか」
Recall(拾えた量)
「本来それを出すべき場面を、どれくらい拾えたか」
Recall の具体例(1文)
Recall とは、「本当はクラスAだった10件のうち、モデルがAだと正しく当てられた割合」である。
F1スコアとは
Precision と Recall のバランスを見る指標です。
macro F1 と weighted F1
- macro F1:戦略の多様性を見る
- weighted F1:実運用に近い評価
混同行列(Confusion Matrix)を直感で理解する
混同行列は、**モデルが「何を、何と間違えたか」**を一望する表です。
- 行:正解クラス
- 列:予測クラス
batch3 の評価から何が分かったか
batch3 データで評価すると:
-
accuracy / F1 は baseline を上回る
-
しかし混同行列では
- 特定クラスへの予測集中
- 多くのクラスで Recall が低い
「モデルが単純に間違っている」可能性をどう排除したか
まず疑うべきは、
モデルが壊れている / 学習できていないだけではないか?
という可能性です。
しかし次の検証結果から、この仮説は段階的に排除できました。
1. ベースラインを明確に上回っている
- random baseline を大きく上回る
- mostfreq baseline も安定して超えている
→ 偶然や分布追従では説明できない
2. 学習挙動が安定している
- train / val ともに改善
- best epoch が明確
- class-weight 導入で F1 が改善
→ 最適化は正常に進んでいる
3. 混同行列に「構造」がある
- 誤分類がランダムに散らばらない
- 多くのクラスが同じ予測クラスに吸い寄せられる
→ 間違い方に一貫性がある
これは「モデルが適当に外している」場合には起きません。
結論:失敗ではなく「情報不足」
以上を踏まえると、最も自然な説明は次になります。
モデルは最善を尽くしているが、
正解行動を区別するための情報が入力に含まれていない
つまり、
- モデル構造の限界ではない
- 学習失敗でもない
- 状態表現の情報量がボトルネック
という判断に至りました。
まとめ
- ベースラインは評価の出発点
- mostfreq を超えないモデルは危険
- accuracy だけでは判断できない
- F1 と混同行列は 改善点を教えてくれる
評価指標は単なる数字ではなく、
次に何を足すべきかを示す診断ツールです。
