**2020/12/3更新**
コメントでも指摘いただいている通り、FPとFNを誤って記載しておりました。
関連箇所については修正をしました。
誤った情報を掲載してしまい、大変申し訳ございませんでした。
はじめに
Accuracy/Recall/Precisionといった機械学習の評価指標がややこしいです。
参考書などを見ると、
陽性 | 陰性 | |
---|---|---|
陽性 | TP | FN |
陰性 | FP | TN |
という感じの表(混同行列というらしい)が出てきて、いろいろ説明されていますが
陽性/陰性とかPositive/Negativeとか言われても、いまいちピント来きません!!!
ということでいろいろ調べていたら、以下のブログにとてもわかりやすく説明されていた。
https://towardsdatascience.com/data-science-performance-metrics-for-everyone-4d68f4859eef
備忘もかねて、この記事にまとめます!
ケース
ある医者が透析している患者が来週中に入院するか/しないかを予測する
医者の予測結果をベン図にすると以下のようになります。
- 入院すると予測
- True Positives(TP) : 本当に入院した => 予測は正解
- False Positives(FP) : 入院はしなかった => 予測は不正解
- 入院しないと予測
- False Negatives(FN) : 入院した => 予測は不正解
- True Negatives(TN) : 本当に入院しなかった => 予測は正解
今回のユースケースにおける入院率は2%程とのことです。
それではこちらのユースケースを元に機械学習の性能指標について説明します。
機械学習における性能指標
Accuracy(精度・正解率)
4つの中で最もよく使われる指標でありどれだけ正確に予測できているかを表します。
(TP + TN ) / (TP + FP + TN + FN)
Accuracyだとやぶ医者を見抜けない
もし予測した医者がやぶ医者で以下のように予測したらどうなるでしょうか?
「よくわからないので、誰も入院しないってことで!」
これだと実際に入院すると予測されるべき患者を一人も予測できてません。
しかしこの場合でもAccuracyは約98%という高い数値を示します。
(TP = 0 , TN ≒ 98)
つまりこのケースにおいて、Accuracyは適切な指標にならないことが言えます。
Recall(再現性)
Recallは実際に入院した患者を予測の時点でどれだけ当てることができたかという指標です。
つまりどれだけ取りこぼしなく予測することができたかを表します。
TP / (TP + FN)
Recallを用いるとやぶ医者を見抜ける
やぶ医者は一人も入院する患者を予測することができなかったため、Recallは0になります。(TP = 0)
そのため、このケースにおいてはRecallが適切な性能指標であることがわかります。
※Sensitivity(感度)と言う場合もあります。
Specificity(特異性)
Recallの反対。入院しなかった患者を予測の時点でどれだけ当てることができたかという指標です。
こちらはあまり使わないですね。
Precision(適合率)
Precisionは入院すると予測した患者のうち、本当に入院した患者の割合を表します。
つまり入院すると予測したものがどれだけ正しかったかを示します。
TP / (TP + FP)
Precisionは患者が知りたい指標
ある患者が医者から「あなたこのままだと来週から入院するぐらい病状が悪化しますよ、今のうちから入院しておくと大分マシになりますよ」と言われたとします。
そんなときに患者が知りたいのがPrecisionです。このPrecisionが高かければ医師の言ったことを正しそうだと判断できるし、低ければ医者が言ったことはあまり気にしなくてよさそうだと判断できるわけです。
まとめ
指標 | 何を表すか |
---|---|
Accuracy | どれだけ正確に予測できているか |
Recall | どれだけ取りこぼしなく予測することができたか |
Precision | 正と予測したものがどれだけ正しかったか |
なんとなくそれぞれの違いがイメージできたでしょうか?
特にRecallとPrecisionの違いがいまいちイメージしにくいと思います。
理解のポイントとして
医者目線 => Recall
患者目線 => Precision
というように視点によって何を求められるか考えると、イメージしやすくなるかと思います。
以上です~