はじめに
Recall/Precision
といった指標を何度も何度も忘れてしまう人(ボク)向けの記事です。
前提
以下の方を前提としてます。
- 簡単な算数がわかるかた。
- True Positive, False Positiveとかは知ってる方。
RecallとPrecisionの定義の確認
ざっくりとは、以下の感覚をつかむといいと思います。
- **「何でもかんでもTrue!」**って予測すると上がるのが、Recall
- **「確率が超高い時しかTrue」**って予測すると上がるのが、Precision
$$Recall = \frac{TP}{(TP + FN)} = \frac{真にTrueなレコードに、Trueと予測した数}{真にTrueなレコードの数} $$
$$Presicion = \frac{TP}{(TP + FP)} = \frac{真にTrueなレコードに、Trueと予測した数}{Trueと予測した数} $$
わからない方は、こちらなどを参考に。 (Accuracy/Recall/Precisionってややこしくない??)
Recall/ Presisionの使い分け方
「Recall/Precision」どっちを重要視すればいいか、
具体的なケーススタディと共に見て行きましょう。
- True事象の**「重要度」と「めんどくさい度」**で決める (再掲)
ケーススタディ1:ガン患者の予測
患者に対して、癌かどうかを予測をする。
患者がガンである : True
患者がガンでない : False
皆さんなら、PrecisionとRecallどっちを重視するでしょうか?
癌は**「重要度(危険度)」が非常に高い**です。
「本当は癌」の方を「癌でない」と予測したら、最悪命を落とす結果になるかもしれません。
ガンの見落としはできるだけ防がなければいけないので、Recallが重要になります。
一方で、Recallが高ければいいわけでもないです。
「患者全員が癌だ!」というモデルを作れば、Recallは100%になります。
しかし、全員に精密検査をするという「めんどくささ」も発生します。
結果としては、**「Recallは限りなく100になる中で、F1-scoreが高いモデル」**がいいということになりますね。
ケーススタディ2 : 風邪患者の予測
患者に対して、風邪かどうかを予測をする。
患者が風邪である : True
患者が風邪でない : False
風邪は**「重要度(危険度)」**がそこまで高くありません。
「風邪じゃない」と予測した人が、「本当は風邪だった」場合でも、そこまで大きな問題になりません。
一方、診断する際には「面倒くささ」が発生します。「ちょっと体調悪い」くらいの患者1000人を全部陽性として診断すると、**全員診察するという「コスト」**が発生します。
この場合は、「確実に患者だろう」という人を予測したいので。Precisionが重要になります。
とはいえ、Precisionの指標だけ見ればいいわけではありません。
「とんでもなく体調悪い患者だけ、Trueにするモデル」を作レバPrecisionは上がりますが、
1/1000しかTrueと予測しないモデルは、ほとんど事業貢献してません。
なのでこの場合は、
**「Precisionが高い精度になるよう、Accuracyを高める」**という意識になります。
まとめ
Recall, Precisionどちらを使うかは、
**『True事象の「重要度」「めんどくささ」で評価』**するのが大事になります。
一方、「重要度」「めんどくささ」は一意に定義できるモノでもなく、それだけ見ればいいものでもありません。
偏りすぎない臨機応変な評価を心がけていきましょう。(自分への戒め。)
ご意見とか間違えた解釈あれば、コメントいただけると幸いです。