Accuracyだけに頼れない理由

Accuracy、Recall、Precisionなど、機械学習モデルを評価する指標はいろいろとある。

そういった指標についてよくまとめられている記事：[Data Science Performance Metrics for Everyone](https://towardsdatascience.com/data-science-performance-metrics-for-everyone-4d68f4859eef)があったので、その内容をもとに、自分なりに学習したものを付け加え、下記にまとめる。

上記記事では、透析中の患者が来週中に入院するための機会学習モデルを作成し、そのモデルを評価する指標について説明している。

# 用語
## True Positive
Positiveと予測し、実際にPositiveだったもの。

## False Positive
Positiveと予測し、実際はNegativeだったもの。

## False Negative
Negativeと予測し、実際はPositiveだったもの。

## True Negative
Negativeと予測し、実際にNegativeだったもの。

## Prevalence
ここでは、Positiveである割合。辞書をひくと、"有病率"などと訳される。


# Accuracy (正確度)
分子：True Positive + True Negative (予測が正しかったもの)　
分母：  全数

Accuracyは、予測が正しかった割合をみるものだ。


## なぜAccuracyだけにたよってはいけないのか？
たとえば、全患者のうち2%の入院数だとして、
機械学習モデルが、全て"入院しない" と予測したとしても、
Accuracyは98%を叩き出してしまう。98%のAccuracy・・・一聴するとすこぶる良い機械学習モデルが作成されたように思えるが、
実際には必ずしもそうではないということだ。

# Recall, Specificity, Precision
上記Accuracyの問題に対応するため、Recall (Sensitivity), SpecificityやPrecisionを使用する。

## Recall(再現率)
分子： True Positive (実際にPositiveであり、Positiveと予測したもの)
分母： True Positive + False Negative (予測にかかわらず実際にPositiveなもの)

Recallは、予測にかかわらず実際にPositiveのもののうち、Positiveと予測し実際にPositiveだったものの割合をみるものだ。網羅性をみることができる。Recallが高いということは、取りこぼしが少ないということ。Recallが低いということは、取りこぼしが多いということだ。
適合率(precision)とは、トレードオフの関係である。
なお、Recallは、Positiveと予測したが実際にはNegativeだったものは鑑みない。つまり、正確性は考慮しないということだ。正確性をみたいのであればPrecisionをみる。

## Specificity
分子： True Negative (Negativeと予測し、実際にNegativeだったもの)
分母： False Positive + True Negative (予測に関わらず実際にNegativeであるもの)

Specificityは、予測にかかわらず実際にNegativeのもののうち、Negativeと予測し実際にNegativeだったものの割合をみるものだ。

## Precision (精度 ・ 適合率)
分子： True Positive (実際にPositiveだったもの)
分母： True Positive + False Positive (Positiveと予測したもの)

Positiveと予測したもののうち、実際にPositiveだったものの割合。
正確性をみることができる。
再現率(recall)とは、トレードオフの関係である。
Precisionでは、False Negativeは鑑みないので、網羅性はみることができない。網羅性をみるのはRecallである。


# トレードオフについて
たとえば、Recallの数値が悪いため、よりPositiveと予測されやすいようにモデルを調整したとしよう。
その場合、Positiveと予測する数が増えるので、Recallは上がる。そのかわり、Negativeと予測する数が減るので、Specificityは下がる。

また、Recallを上げようとするとき、Precisionは下がる。極端な例でいうと、仮にすべてをPositiveと返すモデルがあったとすれば、Recallは100%となるが、Precisionはひどいことになるだろう。
反対に、Precisionを上げようとすると、Recallが下がる。

# F値によりRecallとPrecisionを評価する
RecallとPrecisionの値を評価するために、F値を用いる。
F値は、次の計算で求められる。
分子：2Recall∗Precision
分母：Recall+Precision
単なる２つの値の平均をとるのではなく、上記のような計算を行うのは、極端な値の評価を下げるためだ。
例えば、RecallとPrecisionが０．１,０．９であるより、0.5,0.5のほうがF値では良い値になる。


# Prevalenceが低いとき、適合率はどうなるか
一般的に、Prevalenceが低いとき、適合率は下がる傾向にある。
50%の有病率のものを予測するより、2%の有病率のものを予測する方が適合率が下がる傾向がある。

# ROC, AUC
ROCやAUCという評価指標もある。
参考： 
[【ROC曲線とAUC】機械学習の評価指標についての基礎講座](http://www.randpy.tokyo/entry/roc_auc)
[機械学習の評価指標 – ROC曲線とAUC](https://techblog.gmo-ap.jp/2018/12/14/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E8%A9%95%E4%BE%A1%E6%8C%87%E6%A8%99-roc%E6%9B%B2%E7%B7%9A%E3%81%A8auc/)

#####参考文献
[Data Science Performance Metrics for Everyone](https://towardsdatascience.com/data-science-performance-metrics-for-everyone-4d68f4859eef)
[適合率(precision)と再現率(recall)](http://www.cs.t-kougei.ac.jp/SSys/Pre_Rec.htm)
[適合率(precision, 精度)について](http://www.cse.kyoto-su.ac.jp/~g0846020/keywords/precision.html)
[再現率(precision)について](http://www.cse.kyoto-su.ac.jp/~g0846020/keywords/recall.html)
[true positive, false positive, true negative, false negative について](http://www.cse.kyoto-su.ac.jp/~g0846020/keywords/tpfptnfn.html)
[Beyond Accuracy: Precision and Recall](https://towardsdatascience.com/beyond-accuracy-precision-and-recall-3da06bea9f6c)