【図解】ROC曲線の意味と描画方法についてイメージをつかむ

#1. はじめに
分類モデルの性能を評価する際、どの指標を用いるかが重要になります。
シンプルに正解率を使う際もありますが、それだけでは正確にモデルの性能を評価することができないときもあります。
今回はその指標をいくつかまとめつつ、特にイメージしづらかったROC曲線について整理します。

#2. 基礎情報
##2-1. 混同行列
混同行列とは、分類器の真陽性(True Positive)、真陰性(True Negative)、偽陽性(False Positive)、偽陰性(False Negative)の4つのそれぞれの数を列挙した正方行列になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/915c0909-11dd-011b-9103-2d58a864170a.png)


##2-2. 真陽性率/偽陽性率
次に上記のそれぞれの数を利用した指標を列挙する。

正解率(ACC:ACCuracy)
全データのうち、正しく判定されたデータの割合

```math
ACC = \frac{TP+TN}{FP+FN+TP+TN}
``` 

真陽性率(TPR:True Positive Rate)
全陽性データのうち、正しく陽性と判定されたデータの割合

```math
TPR = \frac{TP}{P} = \frac{TP}{FN+TP}
``` 

偽陽性率(FPR:False Positive Rate)
全陰性データのうち、誤って陽性と判定されたデータの割合

```math
FPR = \frac{FP}{N} = \frac{FP}{FP+TN}
``` 

適合率(PRE:PREcision)
陽性と判定されたデータうち、本当に陽性だったデータの割合

```math
PRE = \frac{TP}{TP+FP}
```

再現率(REC:RECall)
全陽性データのうち、正しく陽性と判定されたデータの割合(TPRと同じ)

```math
REC = TPR = \frac{TP}{P} = \frac{TP}{FN+TP}
``` 

F1スコア
PREとRECのバランスをとるために、組み合わされた指標

```math
F1 = 2\frac{PRE \times REC}{PRE+REC}
```

例をあげて上記の指標を計算してみます。
まず、下記混同行列の例を考えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/757a4dca-c1eb-2c2c-fb28-df530b05e429.png)

この場合各指標は以下の通りになります。

```math
\begin{align}
ACC &= \frac{TP+TN}{FP+FN+TP+TN}\\
&= \frac{40+71}{2+1+40+71} \\&= 0.97\\
 \\
TPR &= \frac{TP}{FN+TP}\\
&= \frac{40}{1+40} \\&= 0.98\\
 \\
FPR &= \frac{FP}{FP+TN}\\
&= \frac{2}{2+71}\\
&= 0.03\\
 \\
PRE &= \frac{TP}{TP+FP}\\
&= \frac{40}{40+2}\\
&=0.95\\
 \\
REC &= TPR\\
&=0.98\\
 \\
F1 &= 2\frac{PRE \times REC}{PRE+REC}\\
&= 2\frac{0.95 \times 0.98}{0.95+0.98}\\
&= 0.96
\end{align}
```

ACC/TPR/PRE/REC/F1は数値が高いほうが、FPRは数値が低いほうが良いので、
各指標とも同じ傾向で性能を評価できていることがわかります。



次に、もともとのラベルに偏りがある場合を考えます。
全データ数100の内、陽性が3/陰性が97の場合を考えます。
全てのデータを陰性と判定してしまうような意味のない分類器によって分類を行ったとき、
混同行列は以下の通りになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/ba235d9b-67d1-b754-8854-740f3d3fb055.png)

この時正解率ACC=0.97となり、高い数値を得ますが、この分類器の性能が低いことは明らかです。
こういったときは陽性を確実に判定することが重要になるので、
TPRやPRE、RECでの評価が適切となってきます。
これらの指標の使い分けについては以下の2例を元に考えてみたいと思います。

例えば、ある病気について陽性か判定するようなシステムを構築する際、
陽性か怪しい人も陽性と判断し、医師による精密な検査に回したいと考えます。
つまり偽陽性(FP)はある程度増えても、偽陰性(FN)は避けたいです。
その際はTPRやRECを重視するべきです。

逆の例としては、メールボックスの迷惑メールを(陽性として)判定するようなシステムを構築する際、
何も問題ないメールをスパムメールとして振り分けると、ユーザーが見落としてしまいます。
つまり、偽陰性は(FN)はある程度増えても、偽陽性(FP)は避けたいです。
その際はPREを重視するべきです。

#3. ROC曲線とAUC
受信者操作特性(Receiver Operating Characteristic:ROC)曲線は、分離モデルの評価に役立つ便利なツールとなります。
その作成方法としては分類器の閾値を変えることで推移する偽陽性率(FPR)を横軸、真陽性率(TPR)を縦軸にとります。
完璧な分類器はグラフ左上に位置付けられ、当て推量(ランダムな推定)の場合は対角線となります。
このROC曲線に基づいて曲線下面積(Area Under Curve:AUC)を計算することで定量的な評価が可能となります。

では、まず良い分類器のROC曲線を見てみます。

![image.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/528a9e70-6c07-30ef-63ab-acf368f7387b.gif)

左上のグラフがNEGATIVE DATA、右上のグラフがPOSITIVE DATAを示します。
横軸が分類器が推測したデータが陽性である確率、縦軸がヒストグラムの度数を示します。
赤い点線は閾値を示しており、その線よりも左側をNEGATIVE、右側をPOSITIVEと判定しています。
よって、
NEGATIVEデータの赤線より左が真陰性(TN：青)
NEGATIVEデータの赤線より右が偽陽性(FP：水色)
POSITIVEデータの赤線より左が偽陰性(FN:オレンジ)
POSITIVEデータの赤線より右が真陽性(TP:赤)
となります。
そしてこれらのデータをもとにFPRとTPRを計算し、左下のグラフにプロットしていきます。
閾値を0から1まで変化させるとROC曲線を得ることができます。

さらに細かく解説します。
下記図は閾値を0.3とした時のグラフになります。
NEGATIVE DATAはTN(青部)とFP(水色部)が半分半分なため、FPRは0.5程度です。
POSITIVE DATAはほとんどがTP(赤部)なため、TPRは1.0付近となっています。
![0030.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/4514ad72-9ef3-218a-2975-66ad07d88029.png)

下記図は閾値を0.7とした時のグラフになります。
NEGATIVE DATAはほとんどTN(青部)なため、FPRは0.0付近となっています。
POSITIVE DATAはFN(オレンジ部)とTP(赤部)が半分半分半分なため、TPRは0.5程度です。
![0070.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/452cba6d-96f4-6194-136e-e1111baeb765.png)

今回はNEGATIVE DATAが0側、POSITIVE DATAが1側に偏っており、かつそれぞれの分布の重なりが少ないため、
良い分類器であることがわかります。またそれに応じてROC曲線も左上に沿っており、AUCも1に近い値となっています。


次にNEGATIVE DATA、POSITIVE DATAともに分布の重なりが大きくかつ0.5付近によっている例を示します。
ROC曲線が1つ前のグラフより対角線に近くなっていることが分かります。
![image.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/7dc34b92-4828-ea18-d8c3-e0021a8780dd.gif)

最後に当て推量の際のROC曲線を示します。
NEGATIVE DATAもPOSITIVE DATAも0.5を中心とした正規分布にそって推定されています。
この際のROC曲線は対角線となり、AUC=0.5となります。
![image.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/87e3effa-1437-632d-e56c-d4d44cf030f1.gif)


#4. まとめ
今回は分類器の評価指標とROC曲線の描画方法についてまとめました。
今後分類器を評価する際には役立てられるかと思います。