統計学

ROC曲線・AUC・混同行列

2022年8月17日


よくある分類の手法としては、ロジスティック回帰であったり、直線や平面で2つのグループに分割する判別分析、そして曲線で分類するサポートベクターマシンなどがある。
これら回帰分析などだとモデルを作った後に、このモデルがどのくらい予測ができているのか、モデル自体の評価の方法として様々なものがありますが、この分類の手法でもよく推定しているとモデルの評価をする指標があります。
 

ここではそんな、分類の手法のモデル評価をするための指標についてまとめていこうと思います。
 

大きく分けて以下の3つが重要になります。
まず混同行列と呼ばれる、分類する前の正解データと実際に分類器をかけた結果の正誤表、
そして、その正誤表をもとに様々な指標を導出します。
その導出した指標を用いて、ROC曲線やAUCと呼ばれるモデル評価について考えていきます。
 

※ 検査と実際の病気で判別が正しいかどうかで、よくこの医療統計でROCは使われます。
その中でも、指標は感度というものもあれば、特異点というものもあればと、ここで扱っている名称(真陽性率や偽陽性率など)とは意味は同じでも呼び方が違ったりします。

 
分類とはいえどクラスター分析などには使用できません。
そもそも混同行列は正解がある前提で、あるモデルを構築してその判別によってちゃんと判別結果があってるかを判断するものです。そして基本的に2値になります。
そのため教師あり学習に使います。
クラスター分析は、教師なし学習で自分でクラスターの個数などを指定して分類され、毎回クラスターの中心点をどう取るかによって結果も変わってきます。
そのため、適用できません。
 

混同行列

分類結果が以下のようになったとします。
この時、各種値の計算をしてみましょう!

各種データにグループのフラグ付けをして、分類します。

 

要は分類において正解データがわかっている時、どのくらい正しく分類できているかを表す表のことです。
例えばですが、
ある犬の画像があったとします。
この時、
① 犬の画像を入力
⇒犬と判定 True(正解)とPositive(犬と判定) TP
② 犬の画像を入力
⇒犬と判定されない False(不正解)とNegative(犬じゃないと判定) FN
③ 犬じゃない画像を入力
⇒犬と判定 False(不正解)とPositive(犬と判定) FP
④ 犬じゃない画像を入力
⇒犬と判定されない True(正解)とNegative(犬じゃないと判定) TN

図での表示。
わかりやすい解説をする。

予測結果
分類予測結果「犬」 分類予測結果「犬じゃない」
実際 「犬」の画像 a b
「犬じゃない」の画像 c d

 
※ 本ページでは表側が実際のもの、表頭が予測結果としています。他の混同行列では予測が表側になって、表頭が実際のものとなっていたりして、以下各種指標の計算式が逆になっていたりしますので注意ください。
 

帰無仮説的に説明すると・・

帰無仮説が犬であると仮定。
上記の内容を帰無仮説的に話すと、
4つ目は犬じゃなく、ちゃんと分類した結果犬じゃないと認定しているので、TNはまさに検出力
犬なのに、犬じゃないと判定。まさに帰無仮説棄却で、第1種の錯誤
犬を犬と判定。帰無仮説受容。(受容域)
犬でないのに、犬と判定。第2種の錯誤。

https://qiita.com/TsutomuNakamura/items/a1a6a02cb9bb0dcbb37f

行列と呼ばれるのは、2×2の表だから。

まず分類系の手法を行った場合は上記のような混同行列を作成して、どのくらい間違っているのかなどを可視化するようにする必要があります。
この情報を用いることでより精緻な分析を以下で行っていくことが可能になる。
 

予測結果
分類予測結果「犬」 分類予測結果「犬じゃない」
実際 「犬」の画像 a b(第2種の錯誤)
「犬じゃない」の画像 c(第1種の錯誤) d(検出力)

 

陽性がいわゆる帰無仮説、陰性がいわゆる対立仮説かな
サンプリングして帰無仮説はいわゆる真の分布、つまり正解の分布、つまり予測が当たってる分布
対立仮説は予測が当たっていない分布。?
第1種の錯誤は、実際犬であるという帰無仮説の分布で、結果犬ではない(対立分布)の誤りの判別をしてしまった、、、これはまさに有意水準5%の箇所。
第2種の錯誤は、実際犬ではない(対立仮説)のに、結果犬(帰無仮説)と誤りの判別をしてしまう、、、これは第2種の錯誤。
そしてそれに対して1-第2種の錯誤が検出力(対立のものなら、ちゃんと対立と判定する力→つまり犬ではない画像なら、犬ではないと判別する力)。

帰無仮説や対立仮説では、本来はこっちの分布から発生したものなのに、別の分布で発生されたものと認定されてしまう、誤った判断をしてしまうという仮説検定があり、
いわゆる第1種の錯誤や、第2種の錯誤になります。

今犬であるものは、ちゃんと犬と判別されてほしい。

 

混同行列から導かれる重要指標

普通、判別分析などの結果では、
表側が正解の分類であり、表頭がいわゆる分析結果によって判別された結果になります。
なので、以下では真陽性という言葉が出てきます。
aとcについて、つまり表頭の縦軸の合計(a+c)、これは「である」と分析結果から認定されたものの合計に対して、
分子がa、つまり実際にそれが正解だったもの?
ということかな。
それぞれあくまでtrueとfalseって、それとそれ以外、つまり2種類だからtrueを犬としたら、それ以外はfalseと仮定。

ここでポイントは、
そもそも混同行列は、予測した結果がどのくらい実際に本当の答えとあってるかを見るもの。
予測結果が○○だった時、それが合っていた割合。
混同行列を用いる意味は予測結果がちゃんとあってるかどうかを見るためのもの。なので、予測結果に対してどのくらい判別できていたかを確認するのが主の目的です。
なので、基準は予測結果となり、予測結果に対してどのくらいちゃんと分類できていたのかを見るのが指標になります。

 

なので、予測で真と予測した結果に対して、実際にそれが本当に真であってる率。
だから分母は基本的に表頭の縦列全体の合計で、分子は本当の分類。

aとcについて、つまり左側について、
\(\displaystyle \frac{a}{a+c}\)と、\(\displaystyle \frac{c}{a+c}\)
bとdについて、つまり右側について、
\(\displaystyle \frac{b}{b+d}\)と、\(\displaystyle \frac{d}{b+d}\)
の4つがある。
さらには、横のつながりで、
\(\displaystyle \frac{a}{a+b}\)と、\(\displaystyle \frac{b}{a+b}\)
もある。

いきなり各指標を覚えても覚えれないので、この混同行列の指標の式は覚えやすいので、その式を覚えた上で各指標の意味について考えていきましょう!

こうすることて各指標の定義式は簡単に覚えれたと思うので、次にそれぞれの式がどういう意味かを考えていきましょう。
まず\(\frac{a}{a+c}\)。
これは実際は検査結果が正であるa+c。そのうちaなので、
検査結果が正であり、ちゃんと元々の医師の判断も正の率ということなる。

 

真陽性率(TFP)

検査が誤って陽性(+)と判断したものの割合。
上記の例で言えば、間違って犬と判断したものの割合ということ。
間違って犬と判断したなので、分析結果は犬であり、元々は犬でないということ。となると③になる。
\begin{eqnarray}
真陽性率(TFP)
&=& \displaystyle \frac{a}{a+c}
\end{eqnarray}
 

偽陽性率(FPF)

実際は「犬じゃない」のに、予測で「犬」と判定されてしまった率。
仮説検定的な要素で言えば、第1種の錯誤になります。
\begin{eqnarray}
偽陽性率(FPF)
&=& \displaystyle \frac{c}{a+c}
\end{eqnarray}
 

偽陰性率(FNR)

実際は「犬」なのに、予測で「犬じゃない」と判定されてしまった率。
仮説検定的な要素で言えば、第2種の錯誤になります。
\begin{eqnarray}
偽陰性率(FNR)
&=& \displaystyle \frac{b}{b+d}
\end{eqnarray}
 

真陰性率(TNR)

実際は「犬じゃない」、そして予測も「犬じゃない」と判定。
\begin{eqnarray}
真陰性率(TNR)
&=& \displaystyle \frac{d}{b+d}
\end{eqnarray}
 

まとめると、
上の赤字でも説明した通り、予測結果がどのくらいあってるかが重要。そもそもそういう分析だから。
なので、分母に予測結果の全体をおく。そのうち実際にあってる確率は?となる。
 

実際に予測が当たってた→真、外れてた→偽
実際にそれが犬だった→陽、それが犬ではなかった→陰
 

\(\displaystyle \frac{a}{a+c}\)は、予測が犬となった時、実際にそれが犬である率(真陽)。→ 真陽性率
\(\displaystyle \frac{c}{a+c}\)は、予測が犬となった時、実際にそれが犬ではない率(偽陰)。→ 偽陰性率
\(\displaystyle \frac{b}{b+d}\)は、予測が犬でないとなった時(偽)、実際にそれは犬である率(偽陽)。 → 偽陽性率
\(\displaystyle \frac{d}{b+d}\)は、予測が犬でないとなった時(偽)、実際にそれが犬ではない率(真陰)。 → 真陰性率
 

となります。
予測した結果あってたか(真偽)と、予測したものが犬だったかそれ以外だったか(陽陰)というように、予測が大事。

 

他の様々な重要指標

https://axa.biopapyrus.jp/machine-learning/model-evaluation/evaluation-measures.html

  • 正解率(Binary Accuracy)
  • 適合率(Precision)
  • 再現率(Recall)/感度(Sensitivity)
  • 特異度(Specificity)
  • F値(F-measure、F-score)

正解率(Binary Accuracy)

正解率はそのまま、予測した結果に対して、ちゃんと分類できているかどうかの結果になります。
そのため、以下のように、すべてのサンプルの合計に対して、正解した件数ということになるので、
以下のような計算式になります。
\begin{eqnarray}
正解率(Binary Accuracy)
&=& \displaystyle \frac{a+d}{a+b+c+d}
\end{eqnarray}

 

適合率(Precision)

適合率は、「陽性と予測したもののうち、実際に陽性であるものの割合」を表す指標です。
これって真陽性率と一緒です。

陽性と予測したもののうち(黄色箇所)、実際に陽性であるもの(赤字)となるので、

予測結果
分類予測結果「犬」 分類予測結果「犬じゃない」
実際 「犬」の画像 a b
「犬じゃない」の画像 c d

\begin{eqnarray}
適合率(Precision)
&=& \displaystyle \frac{a}{a+c}
\end{eqnarray}
 

再現率(Recall)/感度(Sensitivity)

再現率は、「実際に陽性であるもののうち、正しく陽性と予測できたものの割合」です。再現率は、誤って陰性と判断しては困る場合に用いられます。
この再現率は低くしたいのが通常で陽性であるものなのに、陰性と判断されては困りますよね。
この率はとにかく大きくしたいです。

予測結果
分類予測結果「犬」 分類予測結果「犬じゃない」
実際 「犬」の画像 a b
「犬じゃない」の画像 c d

\begin{eqnarray}
再現率(Recall)/感度(Sensitivity)
&=& \displaystyle \frac{a}{a+b}
\end{eqnarray}

 

特異度(Specificity)

特異度は、「実際に陰性であるもののうち、正しく陰性と予測できたものの割合」を表します。再現率の正負を反転させた指標ですね。(別サイトコピペ)
なので、実際に陰性であるもの、つまり表側の陰性(c, d)のうち、正しく陰性と予測なのでd。
よって以下のような計算式になる。

予測結果
分類予測結果「犬」 分類予測結果「犬じゃない」
実際 「犬」の画像 a b
「犬じゃない」の画像 c d

\begin{eqnarray}
特異度(Specificity)
&=& \displaystyle \frac{d}{c+d}
\end{eqnarray}

 

混同行列を仮説検定の帰無仮説と対立仮説で捉える

ここでちょっと別観点でこれらの指標を捉えてみます。
 

まずそもそも混同行列はモデルの分類評価です。
そのモデルを使って判別すると混同行列のような集計結果になります。

そこで、陰性をよく判断して間違ってしまうのであれば、もうすこし陰性を判断するモデルを構築しよう!ってなります。
でも、陰性をよく判断するモデルを作ると、今度は陽性と判断されるべきものが陰性として判断されてしまうリスクが高まります。
なので、
 

陽性に寄って判断するモデルでは、陰性のものが陽性と予測判断されやすくなるリスク。
陰性に寄って判断するモデルでは、陽性のものが陰性と予測判断されやすくなるリスク。

 

そのため、これらは同時に低くすることはできず、トレードオフな関係で、
どちらか低くなると、もう片方は高くなってしまう関係になります。
 

これを仮説検定の用語でいうと、

陽性に寄って判断するモデルでは、陰性のものが陽性と予測判断されやすくなるリスク。
第1種の錯誤(有意水準)
陰性に寄って判断するモデルでは、陽性のものが陰性と予測判断されやすくなるリスク。
第2種の錯誤

となります。
 

まとめると以下のようになります。

予測結果
分類予測結果「犬」 分類予測結果「犬じゃない」
実際 「犬」の画像 a b   (第2種の錯誤)
「犬じゃない」の画像 c   (第1種の錯誤) d   (検出力)

 
今回判別したいのが「犬」であるので、犬つまり陽性を帰無仮説分布、そして犬ではないつまり陰性を対立仮説分布とします。
そうすると、帰無仮説分布の有意水準\(\alpha\)はいわゆるいわゆる帰無仮説を棄却する(対立仮説を採択する)ので、陰性と判断されます。これは第1種の錯誤です。
 

F値(F-measure、F-score)

先程、第1種の錯誤と第2種の錯誤はトレードオフという話をして、
それぞれ\(c\)と\(b\)に該当します。
これらを別々に考えるのではなく、この2つの値を1つの値に変換してその値の大きさで最適な\(c\)と\(b\)の値を考えるためのものがF値となります。
\(c\)と\(b\)は率や%で表されるので、これを単純に平均取るのではなく、調和平均をとった値がF値になります。
なので、

\begin{eqnarray}
F値(F-measure、F-score)
&=& \frac{2}{\displaystyle \frac{1}{c} + \displaystyle \frac{1}{b}} \\
&=& \frac{2}{\displaystyle \frac{b+c}{bc}} \\
&=& \frac{2bc}{b+c} \\
\end{eqnarray}

 

まとめ

混同行列 → 再現性・偽陽性率 → ROC曲線・AUC

混同行列は分類の結果を表にしてまとめていて、
再現性や偽陽性率を計算して、
ROC曲線・AUCを求めることで、この分類モデル自体の評価を下す。

ROC曲線は真陽性率(=TPF)と偽陽性率(=FPF)を計算し、縦軸にTPF、横軸にFPFの図面に、

AUCはROC曲線下の面積のことで、
縦軸と横軸はそれぞれ最小値が0で最大値が1の率を表しているので、ROC曲線が直角になればAUCは1×1=1になる。
1に近いほどモデリングとしては精度が高いということになる。

ROC曲線を書いてみる

https://bellcurve.jp/statistics/glossary/2167.html
ROC曲線は、真陽性率(=TPF)と偽陽性率(=FPF)を計算し、縦軸にTPF、横軸にFPFをとった平面にプロットして線で結んで表す。(コメント)

ROC曲線は、そもそも元々の答えと結果が合ってるかどうかを判定するものです。

各データがあり、1000個のデータがあれば、その1000個1つ1つを図にプロットしていきます。
そのデータを真陽性率が0から順に並べて、それをプロットしていきます。
各データの真陽性率と偽陽性率(= 1-真陽性率)を求める。

真陽性率:実際の正解データのうち、正であるものを正しく正と予測した割合
偽陽性率:実際は負であるものを間違って正と予測した割合

http://www.clg.niigata-u.ac.jp/~medimg/practice_medical_imaging/med_imj/1roc/index.html
https://atmarkit.itmedia.co.jp/ait/articles/2208/17/news039.html

このように、混同行列からはさまざまな指標や分析ができたり、
さらには第二種の錯誤や第一種の錯誤など、検定の要素も入るなど、かなり統計学の中では重要な観点になります。

https://www.kikagaku.co.jp/kikagaku-blog/roc-auc/

ROC曲線は閾値を決めず結果を出す。
閾値をずらしていくことで、ROC曲線を作っていく。
例えば、めちゃめちゃ閾値を叩くすると、それ以上で正のものはちゃんと100パーセントで正と判別されてるけど、それ以下では正なのに負、負なのに正、と判別されているものや、負で負をちゃんと選別しているものもある。
正のものはいくつかはちゃんと正になってて、100パーセントだけど、他がダメ。

では少し閾値を下げてみると、
正であるもので正と判別されているものもあるけど、正なのに負と判別されているものも出てきた。
さっきは正のもので100パーセントあってたけど、今度はちょっと正答率が下がっている。そりゃ閾値下げるとその判別の分かれ目あたりのものはちゃんと判別されているか難しいですよね。。

さらに閾値を下げると、
負であるものは負と判別されているものが100%
というう感じになっている。

なので閾値を変更することで正答率が変わったり、判別できてなかったりする。
このように閾値を変更してみたときの結果を表したものがROC曲線になります。

-統計学
-

© 2024 Yosshi Labo. Powered by AFFINGER5