はじめに
分類モデルの評価によく使われる指標(Accuracy / Recall / Precision / F1スコア)について、イメージしづらかったので、備忘録程度にまとめました。まずこれらの指標の土台となる予測結果の4分類(TP/TN/FP/FN)を整理してから、各指標を見ていきます。
1. 予測結果の4分類(TP/TN/FP/FN)
二値分類(Positive / Negative)の場合、予測結果は以下の4種類に分類されます。
| 予測: Positive | 予測: Negative | |
|---|---|---|
| 実際: Positive | TP(真陽性) | FN(偽陰性) |
| 実際: Negative | FP(偽陽性) | TN(真陰性) |
各セルの意味:
| 略称 | 日本語名 | 意味 |
|---|---|---|
| TP (True Positive) | 真陽性 | 実際に Positive で、Positive と予測できた(正解) |
| TN (True Negative) | 真陰性 | 実際に Negative で、Negative と予測できた(正解) |
| FP (False Positive) | 偽陽性 | 実際は Negative なのに、Positive と予測してしまった(誤り) |
| FN (False Negative) | 偽陰性 | 実際は Positive なのに、Negative と予測してしまった(誤り) |
2. Accuracy(正解率)とその限界
1章で整理した4分類を踏まえると、Accuracy は「全予測のうち正解した割合」として次のように表せます。
$$\text{Accuracy} = \frac{TP + TN}{\text{TP + TN + FP + FN}}$$
最もシンプルな評価指標ですが、これだけでは足りないケースがあります。
例:がん検診のAIモデル
- データセット
- がん患者:100人
- 健康な人:9,900人(合計10,000人)
ここで、全員を"陰性(健康)"と予測するだけのモデルを作ったとします。
$$
\text{Accuracy} = \frac{9900}{10000} = 0.99
$$
99%の正解率ですが、このモデルはがん患者を1人も発見できていません。
これが不均衡データにおける Accuracy の問題点です。多数派クラス(健康な人)を正しく当て続けるだけで高スコアが出るため、少数派クラス(がん患者)への予測性能が隠れてしまいます。
3. Recall(再現率)と Precision(適合率)
Recall(再現率)
$$\text{Recall} = \frac{TP}{TP + FN}$$
見逃しの少なさを見る
- 分母
TP + FN= 実際の Positive の総数 - 分子
TP= その中で正しく Positive と予測できたもの
Recall が 1 に近いほど、実際の Positive を見逃していないことを示します。
ただし、Recall の式には FP(誤検知)が含まれません。そのため、「全部 Positive と予測する」だけでも Recall = 1.0 になります。Recall が高くても、誤って検知しているものが多い可能性がある点に注意が必要です。
Precision(適合率)
$$\text{Precision} = \frac{TP}{TP + FP}$$
予測の精度を見る指標
- 分母
TP + FP= Positive と予測した総数 - 分子
TP= その中で本当に Positive だったもの
Precision が 1 に近いほど、Positive と予測したものが実際に Positive である精度が高いことを示します。
ただし、Precision の式には FN(見逃し)が含まれません。そのため、「確実なものだけ Positive と予測する」だけでも Precision = 1.0 になります。Precision が高くても、実際のPositiveを多く見逃している可能性がある点に注意が必要です。
Recall と Precision の比較
| 観点 | Recall | Precision |
|---|---|---|
| 気にする誤り | FN(見逃し) | FP(誤検知) |
| 意味 | 本物を何件拾えたか | 予測した件数のうち何件が本物か |
| 上げる方法 | 閾値を下げる(積極的に Positive にする) | 閾値を上げる(確実なものだけ Positive にする) |
※ 閾値:「この確率以上なら Positive と予測する」という境界値
4. Recall と Precision、どちらを重視するか
Recall と Precision はトレードオフの関係にあります。どちらを重視すべきかは見逃しと誤検知、どちらがより影響が大きいかで決まります。
見逃しを避けたい → Recall 重視
FN(見逃し)が多いと困る場面:
- がん検診・疾患スクリーニング:見落とすと手遅れになる
- 不正検知(クレジットカード詐欺):見落とすと実害が出る
「誤検知(FP)が多少増えても構わないから、見逃し(FN)をゼロに近づけたい」という状況で Recall を優先します。
誤検知を避けたい → Precision 重視
FP(誤検知)が多いと困る場面:
- スパムフィルター:重要なメールをスパムと誤判定するリスクがある
- レコメンドエンジン:興味のない広告を出し続けるとユーザー体験が下がる
「見逃し(FN)が出ても、予測するときは確実なものだけを予測したい」という状況で Precision を優先します。
5. F1スコア
$$
\text{F1} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}
$$
Recall と Precision の調和平均です。両方のバランスを取りたいときに使います。
算術平均 (P+R)/2 ではなく調和平均を使う理由
調和平均ではどちらかが極端に低いと全体スコアも低くなるため、「片方だけ高くて満足」という状況を防げます。
例:Precision=0.9、Recall=0.1 の場合
- 算術平均:0.50
- 調和平均(F1):0.18
6. まとめ
重視する評価指標の選び方
データの性質で選ぶ
| 状況 | 推奨指標 |
|---|---|
| クラスがバランスよく分布している | Accuracy |
| データが不均衡 | Accuracy だけでは不十分 |
何を重視するかで選ぶ
| 状況 | 推奨指標 |
|---|---|
| 見逃しを避けたい | Recall |
| 誤検知を避けたい | Precision |
| どちらも同じくらい重視したい | F1スコア |
各指標の公式
| 指標 | 公式 | 見ているもの |
|---|---|---|
| Accuracy | $\frac{TP+TN}{TP+TN+FP+FN}$ | 全体の正解率 |
| Recall | $\frac{TP}{TP+FN}$ | 本物を何件拾えたか |
| Precision | $\frac{TP}{TP+FP}$ | 予測のうち何件が本物か |
| F1 | $\frac{2 \times P \times R}{P+R}$ | Recall と Precision のバランス |
重視する指標は「何を許容できないか」から選びます。
見逃しを許容できないのであれば Recall、誤検知を許容できないのであれば Precision を重視します。
7. おまけ:クラス別スコアを読んでみる
ここでは、架空の果物分類モデルを例に、クラス別の Precision/Recall を読み解いてみます。
以下はサンプル出力です。
クラス Precision Recall
--------------------------------
apple 0.392 0.681
grape 0.857 0.333
apple:Precision=0.392、Recall=0.681
Recall が高く「よく拾えている」が、Precision が低く「apple と言ったときの約61%は別クラス」という状態です。
grape:Precision=0.857、Recall=0.333
Precision が高く「予測したらほぼ本物」だが、Recall が低く「実際の grape の約33%しか検出できていない」状態です。
2つを比較
| クラス | 性質 | 意味 |
|---|---|---|
| apple | P低, R高 | 積極的に検知するが外れも多い |
| grape | P高, R低 | 慎重に検知するが見逃しが多い |
このように、モデル全体のスコアだけでなく、クラス別のスコアを見ることで、どのクラスをどう改善すべきかの方針が見えてきます。