JaSST'19 TokyoでのQA4AIの発表資料『AIプロダクトに対する品質保証の基本的考え方』に、Model Robustnessのキーワードとして「正答率、適合率、再現率、F値」とあります。
www.slideshare.net
このあたり、自分の中でちゃんと咀嚼できていないなあと思っていたので、整理してみました。
まあすでにいろんなページがあるので何を書いても再発明以下になってしまうのですが、自分でやってみないと覚えないんですよね・・・。
判断と誤判断
たとえば量産品の検査において、不良品を検出したいとします。
この場合、モノが不良品であれば「陽性」(Positive)、良品であれば「陰性」(Negative)ということになります*1。
もちろん、検査における良/不良の判断と、実際のモノの良/不良が一致するとは限りません。誤判断ってやつです。
たとえば実際には不良品なのに、検査では良品(陰性)だと判断してしまった場合、これを「偽陰性」(False Negative)と呼びます。逆に、良品を不良品と誤判定するのが、「偽陽性」(False Positive)です。
表にすると、以下のようになります。これを混合行列(Confusion Matrix)と呼びます*2。
なんというか、Googleっぽくなってしまった・・・。
日本語限定のネタですが、
- 偽陽性: 悪くないものを「悪いのでは!」と誤ってしまうことで、「α過誤」ともいうことから「あわてものの誤り」
- 偽陰性: 悪いものなのに「まあ大丈夫だろう・・・」と誤ってしまうことで、「β過誤」ともいうことから「ぼんやりものの誤り」、
と称することもあるようです。けっこう見事な言葉遊びですよね。
判定のよしあし
混合行列上の各要素を組み合わせることで、判定の「よしあし」を定量化することができます。
- 正答率 (Accuracy): 判定がどれだけ正しいか。正確度。
- 適合率 (Precision): 陽性判定がどれだけ正しいか*3。適合度。精度。
- 再現率 (Recall): 実際の陽性をどれだけ拾えているか。感度。
- 特異度 (Specificity): 実際の陰性をどれだけ拾えているか。
例として、混合行列の各値が以下のようになっていたとしましょう。
ちょっとゴチャゴチャしていますが・・・
全数100件に対し、良品(N)が90、不良品(P)が10。これに対し、不良品予想を9、良品予想を91したところ、正解(T)が97で、うち真陽性(TP)が8、真陰性(TN)が89。不正解(F)は3で、うち偽陽性(FP)が1、偽陰性(FN)が2、という読み方になります。
正答率 (Accuracy)
(TP+TN) / (TP+TN+FP+FP)
真 / 全数
これは単純に、全判定のうち、正解であった割合です。陽性は陽性と、陰性は陰性と判断できているか。混合行列でいう True であるか。というメトリクスです。
上の例だと、正答率は97.0%になっています。
適合率 (Precision)
TP / (TP+FP)
真陽性 / 予想陽性
判断が「陽性」であるもののうち、実際に陽性であった(True Positive)割合です。
検査者が「あわてもの」であった場合、過剰に「これは不良品!」と判断することにより、この値は低くなります。
上の例だと、適合率は88.9%になっています。
再現率 (Recall)
TP / (TP+FN)
真陽性 / 実際陽性
実際に陽性であるもののうち、判断でも陽性とした(True Positive)割合です。感度 (Sensitivity) という呼び方もあります。
検査者が「ぼんやりもの」であった場合、「まあ、これは大丈夫だろ・・」と判断することにより、この値は低くなります。
上の例だと、適合率は80.0%になっています。
特異度 (Specificity)
TN / (FP+TN)
TN / 実Negative
再現率の逆で、実際に陰性であるもののうち、判断でも陰性(True Negative)とした割合です。
なぜいろいろなメトリクスが必要なのか
正答率のあやしさ
陽性になる確率が1%程度しかない事象を考えてみましょう。陽性=1、陰性=99とします。
この性質があらかじめわかっているとき、判定者は何も考えずに「陰性」としておけば、高い正答率を達成できます。
ケース1
・陽性と判定して実際に陽性だったケース (TP): 0
・陽性と判定したが実際には陰性だったケース (FP): 1 ← あわてもの
・陰性と判定したが実際には陽性だったケース (FN): 1 ← ぼんやりもの
・陰性と判定して実際に陰性だったケース (TN): 98
この場合、正答率は98.0%という高い値になります。
「だいたい陰性だろう」とわかっているので、適当に陰性判定していれば、数値が高くなるのですね。
一方で適合率と再現率は0%です。
現実の陽性をまったく拾えていないし、陽性の判定もまったく当たっていないからです。
適合率と再現率の関係
では、適合率と再現率はどういう関係にあるのでしょうか。
13%が陽性、87%が陰性というケースを考えてみます。
ケース2
・陽性と判定して実際に陽性だったケース (TP): 12
・陽性と判定したが実際には陰性だったケース (FP): 43 ← あわてもの
・陰性と判定したが実際には陽性だったケース (FN): 1 ← ぼんやりもの
・陰性と判定して実際に陰性だったケース (TN): 44
半分くらい間違っている(F)ので、正答率は56.0%に留まります。陽性判定の信頼性を意味する適合率も、FPが多いのでわずか21.8%です。
一方、陽性をどれだけ拾えるかを意味する再現率は、92.3%。分布的には陽性が13%しかないものに対し、半分以上で陽性判定を下しているので、実際の陽性もそれなりにカバーできてしまうということです。
この「あわてもの」をやられると、病院なら再検査、工場なら単価上昇につながってしまいますね。
もう一つ、別のケースです。
ケース3
・陽性と判定して実際に陽性だったケース (TP): 1
・陽性と判定したが実際には陰性だったケース (FP): 0 ← あわてもの
・陰性と判定したが実際には陽性だったケース (FN): 12 ← ぼんやりもの
・陰性と判定して実際に陰性だったケース (TN): 87
この人はケース1と同様に陰性に多くを賭けている分、正答率は88.0%。一度しか出していない陽性判定が当たったので、適合率は100.0%です!
一方で本当の陽性をたくさん見逃しているので、再現率はたったの7.7%です。
この「ぼんやり」をやられると、病院なら病気の見逃し、工場ならクレーム多発につながってしまいます。
陽性の確率が低い場合には、ざっくり以下のようになります。
- とにかく陽性判定しておけば(あわてもの)、本当の陽性も拾えるので再現率が高くなる。でも多くが偽陽性なので、適合率は低くなる。
- とにかく陰性判定しておけば(ぼんやりもの)、実際にも陰性が多いので適合率は高くなる。でも陽性を拾えなくなるので、再現率は低くなる。
あわてとうっかりのバランスをとる
ということで、あわてものとぼんやりもののバランスを取る必要があります。
適合率と再現率の調和平均を取ったのが、F1スコアです。
横軸に適合率、縦軸に再現率をとって、バブルの大きさにF1スコアを当てると、こんなイメージになります。
適合率、再現率がともに上昇すればF1スコアも大きくなっていきます。一方、適合率を上げるために再現率を犠牲にしたり、その逆をしたりするより、両者のバランスを取る方がF1スコアが大きくなることが見てとれます。
ケース2のF1スコアは0.35、ケース3では0.14という低さです。
ケース4
陽性と判定して実際に陽性だったケース (TP): 8
陽性と判定したが実際には陰性だったケース (FP): 6 ← あわてもの
陰性と判定したが実際には陽性だったケース (FN): 5 ← ぼんやりもの
陰性と判定して実際に陰性だったケース (TN): 81
このケースでは、正答率は89.0%とまあまあですが、適合率は57.1%、再現率は61.5%とともにいまいち。ただバランスがとれているのでFスコアは0.59と、先の2つよりはましになっています。
まとめ
「判定の適切さ」とひとことで言っても、何を重視するかによって使うべきメトリクスが異なることがわかりました。
あわてものを少なくすることが是なら適合率、ぼんやりものを少なくするのが是なら再現率。
そのバランスを取りたいならFスコアです。*4
これにて、『AIプロダクトに対する品質保証の基本的考え方』の1スライドの1行分の勉強が終わりました。