モデリング●●●●●

適合率・再現率とROC曲線

Precision, Recall and ROC Curve ・ てきごうりつさいげんりつとろっくきょくせん

分類モデルの当たり外れを混同行列から多面的に測る評価指標の体系

✦ 30秒で試す — 航海正解率99%のモデルが、何ひとつ見つけていないこともある再現率を100%にする、いちばん手軽な方法は?予想してみる

概要

適合率・再現率とROC曲線は、「陽性か陰性か」を判定する分類モデルの性能を多面的に測るための評価指標の体系です。病気の診断、迷惑メールの判定、不正取引の検知 — 世の中の予測タスクの多くは二値分類であり、そのモデルが「使い物になるか」を判断する場面で必ず登場します。

出発点は、予測と正解の組み合わせを4マスに整理した「混同行列」です。正しく陽性と当てた数(真陽性)、正しく陰性と当てた数(真陰性)、陰性なのに陽性と誤った数(偽陽性)、陽性なのに見逃した数(偽陰性)— この4つの数字から、適合率(陽性と予測したうちどれだけ本当に陽性か)、再現率(実際の陽性のうちどれだけ拾えたか)など、目的の異なる複数の指標が導かれます。

重要なのは、「正解率が高い=良いモデル」とは限らないという点です。たとえば陽性が全体の1%しかいないデータなら、全員を陰性と予測するだけで正解率99%が出てしまいます。だからこそ、何をどう間違えたかを分解して測る指標の体系が必要になるのです。

なぜ生まれたか

分類の評価が一つの数字で済まないのは、2種類の誤りの重みがタスクごとに違うからです。がん検診で病気を見逃す誤り(偽陰性)と、健康な人を精密検査に回す誤り(偽陽性)は、どちらも「間違い」ですが深刻さがまったく異なります。この構図は仮説検定における第一種の過誤と第二種の過誤と同じで、片方の誤りを減らそうとすればもう片方が増えるというトレードオフを、単一の正解率は覆い隠してしまいます。情報検索の分野では「検索結果のうち関連文書の割合(適合率)」と「関連文書のうち拾えた割合(再現率)」として、この2軸の評価が早くから定式化されました。

ROC曲線の起源はさらに古く、第二次世界大戦中のレーダー研究です。レーダー手が敵機の反応と雑音を区別する能力を測るために、「検出のしきい値を動かしたとき、真陽性率と偽陽性率がどう変わるか」を曲線として描く手法(Receiver Operating Characteristic=受信者操作特性)が考案されました。これが信号検出理論を経て医療診断や機械学習に輸入され、「しきい値の選び方に依存しない、判別能力そのものの評価」として定着しました。

詳細

混同行列 — すべての指標の源泉

ロジスティック回帰のような分類モデルは、多くの場合「陽性である確率」を出力し、それをしきい値(例: 0.5)で切って陽性/陰性の判定に変換します。その判定結果と正解を突き合わせた4マスの表が混同行列です。これはクロス集計の一種で、予測×正解という2つの軸で件数を整理したものと考えられます。

予測: 陽性予測: 陰性実際: 陽性実際: 陰性真陽性 TP正しく検出偽陰性 FN見逃し偽陽性 FP誤検出真陰性 TN正しく除外適合率 = TP ÷ 予測陽性の列陽性と言った中の的中率再現率 =TP ÷ 実際陽性の行陽性をどれだけ拾えたか
混同行列と主要指標 — 適合率は「予測陽性の列」を、再現率は「実際陽性の行」を分母に取る

適合率と再現率のトレードオフ

適合率(precision)は「陽性と予測した中で、本当に陽性だった割合」、再現率(recall)は「実際の陽性の中で、陽性と予測できた割合」です。同じTPを分子に持ちながら、分母が「予測の列」か「実際の行」かで視点が異なります。これは条件付き確率として読むと明快で、適合率は「陽性と予測した条件のもとで実際に陽性である確率」、再現率は「実際に陽性である条件のもとで陽性と予測される確率」です。条件の向きが逆なので、両者は一般に一致しません。

偽陽性は第一種の過誤、偽陰性は第二種の過誤にあたり、この2つはしきい値を介してトレードオフの関係にあります。しきい値を下げて広めに陽性と判定すれば、見逃しが減って再現率は上がりますが、誤検出が増えて適合率は下がります。逆にしきい値を上げれば適合率は上がり、再現率は下がります。どちらを優先すべきかはタスクの誤りコストで決まります。がんのスクリーニング検査なら見逃しが致命的なので再現率重視、スパム判定なら正常なメールを誤って捨てる方が痛いので適合率重視、という具合です。両者のバランスを1つの数字にまとめたいときは、調和平均をとったF値(F1スコア)がよく使われます。

ROC曲線とAUC — しきい値に依存しない評価

しきい値を1つに固定した評価には、「しきい値の選び方しだいで指標が変わる」という弱点があります。そこで、しきい値を連続的に動かし、各点での偽陽性率(実際陰性のうち誤って陽性と判定した割合)を横軸、真陽性率(=再現率)を縦軸にプロットした軌跡がROC曲線です。左上の角に近いほど「偽陽性を抑えたまま陽性を拾えている」ことを意味し、対角線は「コイン投げと同じでたらめな判定」に相当します。

偽陽性率(実際は陰性の人を誤って陽性とした割合)真陽性率(再現率)011ランダム判定(AUC = 0.5)しきい値 高め誤検出は少ないが見逃しありしきい値 低め誤検出が増える曲線の下の面積 = AUC(この例では 0.90)1 に近いほど判別能力が高い
ROC曲線 — しきい値を動かしたときの偽陽性率と真陽性率の軌跡。左上に膨らむほど判別能力が高い

このROC曲線の下側の面積がAUC(Area Under the Curve)で、1に近いほど良く、0.5ならでたらめと同等です。AUCには「ランダムに選んだ陽性の1件と陰性の1件を並べたとき、モデルが陽性の方に高いスコアを付ける確率」という直感的な解釈があり、しきい値の選択やクラスの比率に左右されにくい「判別能力そのもの」の指標として広く使われます。

陽性の割合で変わる指標、変わらない指標

ここに、実務で最も見落とされやすい性質があります。再現率(真陽性率)と偽陽性率は、それぞれ「実際に陽性の人の中で」「実際に陰性の人の中で」の割合なので、陽性がどれだけ珍しいか(有病率)には左右されません。ROC曲線とAUCもこの2つだけで描くので、同じモデルなら有病率が50%でも1%でも同じ曲線になります。ところが適合率は「陽性と判定した人の中で」の割合で、分母に陰性の人から出た偽陽性が混ざります。ベイズの定理で書けば、適合率 = 再現率×有病率 ÷(再現率×有病率 + 偽陽性率×(1−有病率))であり、有病率が下がると分母の後ろの項が支配的になって、適合率は急落します。

たとえば再現率90%・偽陽性率5%の優秀な検査でも、有病率1%の集団1000人に使うと、陽性10人のうち9人を拾う一方で、陰性990人から約50人の偽陽性が出ます。陽性判定59件のうち本物は9件、適合率は約15%です。同じ検査を有病率50%の集団に使えば適合率は95%近くになります。ROC曲線が良く見えることと、現場で陽性判定が信用できることは別の話なのです。下の部品で、しきい値を動かしたあと陽性の割合を1%に切り替えてみてください。ROC曲線はまったく動かないのに、PR曲線が崩れ落ちます。

⚡ 体験: しきい値と陽性の割合を動かす
陽性の割合
判別のしやすさ
スコアの分布(1000人)陰性 500人陽性 500人陽性と判定 →← 陰性と判定スコア低スコア高ROC 曲線(AUC 0.95)偽陽性率 →01真陽性率PR 曲線再現率 →01適合率
陽性と判定陰性と判定実際は陽性
真陽性 TP
409
正しく検出
偽陰性 FN
91
見逃し
実際は陰性
偽陽性 FP
43
誤検出
真陰性 TN
457
正しく除外
適合率 TP/(TP+FP)90%再現率 TP/(TP+FN)82%偽陽性率8.6%F10.86

金色の縦線がしきい値です。つかんで左右に動かすと、右側に入った人が「陽性」と判定されます。混同行列と、ROC・PR 曲線の上の点がどう動くか見てください。 次に陽性の割合を 1% にしてみましょう。

塗り = 件数(1000人あたり)。破線 = 陽性群の中での割合として見た形。縦線より右が「陽性」判定

このため、陽性が極端に少ない不均衡データでは、偽陽性率の分母(実際陰性の総数)が巨大なために誤検出が大量にあっても偽陽性率は小さく見え、ROC曲線は楽観的な印象を与えがちです。不正検知や希少疾患の検出のようなタスクでは、横軸を再現率、縦軸を適合率にしたPR曲線(Precision-Recall曲線)の方が、モデルの実用上の苦しさを正直に映します。PR曲線の「でたらめな判定」の基準線は対角線ではなく、適合率 = 有病率の水平線です。また、開発時と運用時で陽性の割合が違う(検証データはバランスを取って作ったが、現場では陽性が稀)と、適合率は開発時の数字から大きく下がる点にも注意が必要です。

指標の選び方

実務での指標選びは、結局「どの誤りが高くつくか」の言語化から始まります。正解率だけで報告されたモデルを見たら、まず陽性の比率と混同行列を確認する。しきい値込みの運用を評価するなら適合率・再現率・F値、しきい値をこれから決める段階やモデル同士の比較ならAUCやPR曲線、と使い分けるのが定石です。また、これらの指標はどれもテストデータ上の推定値なので、評価が過学習やデータリークで汚染されていないか、交差検証を含む評価手順の設計とセットで確かめる必要があります。

試問

モデルが付けたスコアの分布を、本当の陽性と陰性の2つの山で描いています。しきい値より右を「陽性」と判定します。適合率は「陽性と判定したうち本当に陽性だった割合」、再現率は「本当の陽性のうち見つけられた割合」です。しきい値・陽性の割合・判別のしやすさ(2つの山の離れ具合)を動かして、命題を成り立たせてください。

✦ 命題挑戦中

陽性が 1000 人中 10 人しかいない状況で、適合率と再現率をどちらも 50% 以上にせよ

  • 陽性の割合を 1% にする
  • 適合率 50% 以上(いま 90%)
  • 再現率 50% 以上(いま 82%)
⚡ 体験: しきい値・陽性の割合・判別のしやすさを動かす
陽性の割合
判別のしやすさ
スコアの分布(1000人)陰性 500人陽性 500人陽性と判定 →← 陰性と判定スコア低スコア高ROC 曲線(AUC 0.95)偽陽性率 →01真陽性率PR 曲線再現率 →01適合率
陽性と判定陰性と判定実際は陽性
真陽性 TP
409
正しく検出
偽陰性 FN
91
見逃し
実際は陰性
偽陽性 FP
43
誤検出
真陰性 TN
457
正しく除外
適合率 TP/(TP+FP)90%再現率 TP/(TP+FN)82%偽陽性率8.6%F10.86

金色の縦線がしきい値です。つかんで左右に動かすと、右側に入った人が「陽性」と判定されます。混同行列と、ROC・PR 曲線の上の点がどう動くか見てください。 次に陽性の割合を 1% にしてみましょう。

塗り = 件数(1000人あたり)。破線 = 陽性群の中での割合として見た形。縦線より右が「陽性」判定