Re Reference AI

評価

適合率とは

Precision

モデルが陽性と予測した事例のうち、実際に正しかった割合を示す評価指標

評価指標分類

ひとことで言うと

AIが「正解」と答えたもののうち、実際に合っていた割合を示す指標。

概要

適合率(Precision)とは、分類モデルが「陽性(該当する)」と予測した事例のうち、実際に正しく陽性だった事例の割合を示す評価指標。 誤って陽性と判定してしまう「偽陽性」をどれだけ抑えられているかを表す指標であり、迷惑メール判定のように、誤検知(正常なメールを迷惑メールと誤判定すること)のコストが大きいタスクで重視される。 再現率(Recall)とはトレードオフの関係になることが多く、両者をバランスよく評価するためF1スコアと組み合わせて使われることも多い。 LLMの評価文脈では、RAGが検索してきた文書のうち実際に質問と関連する文書がどれだけの割合を占めるかを測る指標としても使われる。 陽性と判定する基準(閾値)を厳しくするほど適合率は高くなりやすいが、その分見逃しが増えて再現率が下がる傾向にあり、閾値の設定がこのトレードオフを左右する。

背景

分類モデルの性能を、単純な正解率(Accuracy)だけで評価すると、陽性の事例が少ない不均衡なデータセットでは実態を正しく反映しない場合がある。 適合率は、モデルが陽性と判定した予測の信頼度を測る指標として、こうした場面でも有効な評価軸を提供するために整理された。

アーキテクチャ

適合率は、TP(True Positive, 正しく陽性と判定した数)を、TP+FP(False Positive, 誤って陽性と判定した数)で割った値として計算される(Precision = TP / (TP + FP))。

ワークフロー

モデルの予測結果と正解ラベルを突き合わせて混同行列(TP・FP・FN・TN)を集計 → TPとFPの数からPrecision = TP / (TP + FP)を算出 → 算出したPrecisionを再現率F1スコアと合わせて評価。

コード例

scikit-learnで適合率を計算する

from sklearn.metrics import precision_score

y_true = [1, 0, 1, 1, 0]
y_pred = [1, 0, 0, 1, 1]

print(precision_score(y_true, y_pred))

利点

  • モデルが陽性と判定した予測のうち、どれだけ信頼できるかを直接示せる
  • 誤検知のコストが大きいタスクで、モデルの実用上の適性を評価しやすい
  • scikit-learn等の主要ライブラリで手軽に計算できる

欠点

  • 適合率だけを高めようとすると、陽性の判定を絞り込みすぎて見逃し(偽陰性)が増えやすい
  • 再現率と合わせて見なければ、モデル全体の性能を正しく評価できない
  • 陽性事例が極端に少ない不均衡データでは、閾値の設定次第でスコアが不安定になりやすい

比較

  • 再現率適合率と再現率はトレードオフの関係になることが多く、両方を確認する必要がある
  • F1スコアF1スコアは、適合率と再現率の調和平均として、両者をバランスよく評価する指標

関連用語

再現率F1スコアNLP

よくある質問

適合率だけを見ればいい?

いいえ。 適合率だけを重視すると見逃し(偽陰性)が増えやすいため、再現率F1スコアと合わせて確認することが一般的。

適合率と正解率(Accuracy)は何が違う?

正解率は全予測のうち正解だった割合を示すのに対し、適合率は「陽性と予測したもの」に限定して正しさを見る指標。 陽性事例が少ない不均衡データでは、正解率だけでは実態を見誤りやすい。

参考文献

関連Zenn記事