機械学習のベースライン評価:正解率80%でも見落とす文書分類の例
ベースラインは、複雑なモデルを比較するための単純な基準です。高度な手法を試す前に、「多数派を返すだけならどうなるか」「一定の確率を返すならどうなるか」を同じ評価データで確かめます。ここでは架空の文書を通常・要確認に分ける問題で、正解率だけでは見えない違いを確認します。
学習側と評価側のラベルを混ぜない
教材の学習用文書10件は、通常8件・要確認2件です。別に用意した評価用5件は、通常4件・要確認1件とします。これは手計算用の架空データです。実データの割合や性能を表す数字ではありません。
| 基準 | 作り方 | この教材の出力 |
|---|---|---|
| 多数派のラベル | 学習側で多いクラスを毎回返す | 通常 |
| 学習側のクラス割合 | 学習側の割合を確率として毎回返す | 通常0.8、要確認0.2 |
scikit-learnのDummyClassifierでは、most_frequentとpriorがこうした基準を扱います。予測ラベルが同じでも、返す確率の意味は異なります。[出典1] 評価側の割合を先に見て基準を作る方法とは区別してください。
多数派を返すだけで正解率は80%になる
全件を通常とすると、通常4件は正解、要確認1件は見落とします。正解率は4/5=0.8ですが、要確認に対する再現率は0/1=0です。「80%正解した」とだけ報告すると、要確認を1件も検出していない事実が隠れます。
| 評価の観点 | この教材の多数派基準 |
|---|---|
| 全体の正解率 | 0.8 |
| 要確認を正しく拾えた件数 | 0件 |
| 要確認を見落とした件数 | 1件 |
| 要確認の再現率 | 0 |
確率を比較するならlog lossも定義をそろえる
常に通常0.8・要確認0.2を返す基準では、この5件の平均log lossは −(4×ln(0.8)+ln(0.2))/5 ≈ 0.500402 です。自然対数を使っています。これは教材の計算値で、実モデルの測定結果ではありません。
通常に確率1を置く別の予測では、要確認の正解クラスに0を置きます。数学上はln(0)が有限値にならないため、損失が発散します。数値計算ライブラリは小さい値でクリップする場合があります。その設定を確認せず、手計算と実装の値が同じだと期待しないでください。
モデル比較表には基準を同じ行に置く
| 方法 | 評価件数 | 正解率 | 要確認の見落とし | 確率評価 |
|---|---|---|---|---|
| 多数派・割合基準 | 教材5件 | 0.8 | 1件 | log loss約0.500402(割合の確率) |
| 比較するモデル | 同じ5件 | 実行後に記入 | 実行後に記入 | 同じ定義で計算 |
目的が要確認文書の拾い上げなら、見落としと、人が確認する件数の両方を見ます。分類する閾値を調整する場合は、調整用と最終評価用のデータを分けます。評価5件では一般化した結論は出せませんが、同じ条件で比較する手順は学べます。
基準を決めるチェックリスト
- 基準に必要な割合を学習側だけで決めた。
- 比較する方法が同じ評価行を使う。
- 正解率以外に、重要なクラスの誤りも数えた。
- 確率指標の対数・クリップ・クラス順をそろえた。
- 単純な基準を下回ったとき、データ分割やラベルの不具合も点検する。
個別適用や説明の拡張時に確認する事項:複雑なモデルが必要かを判断するには、まず基準が何を達成しているかを説明できることが大切です。多数派の多さで得た正解率と、入力を使って区別できた成果を分けて記録してください。