3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[ROC曲線/AUC]すごく丁寧に解説するROC曲線 AUC

Last updated at Posted at 2025-12-10

0. はじめに

この記事では以下のことについて説明します。

  • ROC曲線、AUCがなぜ必要なのか
  • ROC曲線、AUCとはなにか
  • ROC曲線の書き方
  • AUCの求め方
  • AUCの意味の解釈

1. 分類タスクにおけるAUC以外の評価指標

機械学習の分類タスクでは、「どれくらい正しく予測できているか」を数値で評価するために、さまざまな評価指標が用いられます。代表的なものとしては、次のような指標があります。

  • 正解率(Accuracy)
    予測が当たった割合。直感的にわかりやすいが、クラスに偏りがある場合(例:陽性が 1% しかない)にはあまり役に立たない

  • 再現率(Recall, Sensitivity)
    「実際に陽性であるもののうち、どれだけ陽性と予測できたか」。見逃し(False Negative)をどれだけ抑えられているかを見る指標

  • 適合率(Precision)
    「陽性と予測したもののうち、実際に陽性だった割合」。誤検知(False Positive)をどれだけ抑えられているかを見る指標

  • F1 スコア(F1-score)
    適合率と再現率の調和平均。両者のバランスを 1 つの数値で見たいときに用いられる

image.png

これらの指標は、ある 1 つの閾値(たとえば「0.5 以上なら陽性」)を前提とした評価である点が共通しています。

AUCはこれらの手法とは異なり、閾値に縛られない評価が可能となります。

ではなぜ閾値に縛られない評価が必要なのでしょうか。以下の例を見てみましょう。

2. 閾値の設定における問題

分類タスクにおいて、モデルは0~1の連続値を出力します。出力に対して閾値を設定し、閾値以上であれば陽性(1: Positive)、閾値未満であれば(0: Negative)とすることで、実際の結果と比較することができます。

以下の例を見てみましょう。出力に対して閾値を0.5に設定した場合です。

image.png

モデルの出力は0.2~0.3に固まっており、閾値を0.5にするとほとんどがNegativeになってしまいます。正解率は10%で良いモデルとは言えません。

では閾値を0.3に設定したらどうでしょうか。

image.png

閾値を0.3と低くしたことで、正解率が100%になりました。

このように閾値を自分で設定することは以下の問題点があります。

  • モデルやデータが変わるたびに、ちょうどいい閾値を探す手間がかかる
  • 閾値を設定する人のバイアスがかかってしまう

そんな問題点を解消したのが、次に説明するAUCスコアになります。

3. ROC曲線

AUCとはROC曲線下の面積なので、まずROC曲線を描く必要があります。
ROC曲線は、縦軸が TPR(実際に陽性だった人を陽性と予測した確率)、横軸が FPR(実際に陰性だった人を陽性と予測した確率) で構成されます。

TPR = \frac{TP}{TP+FN}   \qquad 
FPR = \frac{FP}{TN+FP}

image.png

では実際に以下のデータでROC曲線を描いてみましょう
10人のデータで、陽性の人が4人、陰性の人が6人います。それぞれにモデルの出力した予測確率が書いてあり、高い順にソートして並べています。
image.png

次に閾値を設定します。まずは0に設定してみましょう。

閾値=0の場合

image.png

当然、閾値より小さい出力は0,閾値以上のあたいは1として変換されます。なのでこの場合すべての出力が1になりますね。

この場合のTPRとFPRを求めてみましょう。

TPRは実際に陽性だった人を陽性と予測した確率だったので、分母は赤色の人の数、分子は赤色の人の中で陽性と予測された人の数になります。

TPR = \frac{TP}{TP+FN} = \frac{赤色かつ陽性と予測された数}{赤色の数} = \frac{4}{4} = 1

FPRは実際に陰性だった人を陽性と予測した確率だったので、分母は黒色の人の数、分子は黒色の人の中で陽性と予測された人の数になります。

FPR = \frac{FP}{TN+FP} = \frac{黒色かつ陽性と予測された数}{黒色の数} = \frac{6}{6} = 1

よって、

(FPR, TPR) = (1, 1)

となります。

これをROC曲線の点としてプロットしてあげましょう。

image.png

これで閾値が0の場合は終わりです。

閾値=0.06~0.12の場合

image.png

さっきと同様の作業をしていきます。

TPR = \frac{TP}{TP+FN} = \frac{赤色かつ陽性と予測された数}{赤色の数} = \frac{4}{4} = 1
FPR = \frac{FP}{TN+FP} = \frac{黒色かつ陽性と予測された数}{黒色の数} = \frac{5}{6} = 0.83
(FPR, TPR) = (0.83, 1)

image.png

閾値=0.12~0.24の場合

image.png

TPR = \frac{TP}{TP+FN} = \frac{赤色かつ陽性と予測された数}{赤色の数} = \frac{4}{4} = 1
FPR = \frac{FP}{TN+FP} = \frac{黒色かつ陽性と予測された数}{黒色の数} = \frac{4}{6} = 0.67
(FPR, TPR) = (0.67, 1)

image.png

閾値=0.24~0.37の場合

image.png

TPR = \frac{TP}{TP+FN} = \frac{赤色かつ陽性と予測された数}{赤色の数} = \frac{4}{4} = 1
FPR = \frac{FP}{TN+FP} = \frac{黒色かつ陽性と予測された数}{黒色の数} = \frac{3}{6} = 0.5
(FPR, TPR) = (0.5, 1)

image.png

閾値=0.37~0.38の場合

image.png

TPR = \frac{TP}{TP+FN} = \frac{赤色かつ陽性と予測された数}{赤色の数} = \frac{4}{4} = 1
FPR = \frac{FP}{TN+FP} = \frac{黒色かつ陽性と予測された数}{黒色の数} = \frac{2}{6} = 0.33
(FPR, TPR) = (0.33, 1)

image.png

閾値=0.38~0.42の場合

image.png

TPR = \frac{TP}{TP+FN} = \frac{赤色かつ陽性と予測された数}{赤色の数} = \frac{3}{4} = 0.75
FPR = \frac{FP}{TN+FP} = \frac{黒色かつ陽性と予測された数}{黒色の数} = \frac{5}{6} = 0.33
(FPR, TPR) = (0.33, 0.75)

image.png

閾値=0.42~0.65の場合

image.png

TPR = \frac{TP}{TP+FN} = \frac{赤色かつ陽性と予測された数}{赤色の数} = \frac{3}{4} = 0.75
FPR = \frac{FP}{TN+FP} = \frac{黒色かつ陽性と予測された数}{黒色の数} = \frac{1}{6} = 0.17
(FPR, TPR) = (0.17, 0.75)

image.png

閾値=0.65~0.83の場合

image.png

TPR = \frac{TP}{TP+FN} = \frac{赤色かつ陽性と予測された数}{赤色の数} = \frac{3}{4} = 0.75
FPR = \frac{FP}{TN+FP} = \frac{黒色かつ陽性と予測された数}{黒色の数} = \frac{0}{6} = 0
(FPR, TPR) = (0, 0.75)

image.png

閾値=0.83~0.96の場合

image.png

TPR = \frac{TP}{TP+FN} = \frac{赤色かつ陽性と予測された数}{赤色の数} = \frac{2}{4} = 0.5
FPR = \frac{FP}{TN+FP} = \frac{黒色かつ陽性と予測された数}{黒色の数} = \frac{0}{6} = 0
(FPR, TPR) = (0, 0.5)

image.png

閾値=0.96~0.98の場合

image.png

TPR = \frac{TP}{TP+FN} = \frac{赤色かつ陽性と予測された数}{赤色の数} = \frac{1}{4} = 0.25
FPR = \frac{FP}{TN+FP} = \frac{黒色かつ陽性と予測された数}{黒色の数} = \frac{0}{6} = 0
(FPR, TPR) = (0, 0.25)

image.png

閾値=0.98~1の場合

image.png

TPR = \frac{TP}{TP+FN} = \frac{赤色かつ陽性と予測された数}{赤色の数} = \frac{0}{4} = 0
FPR = \frac{FP}{TN+FP} = \frac{黒色かつ陽性と予測された数}{黒色の数} = \frac{0}{6} = 0
(FPR, TPR) = (0, 0)

image.png

これでROC曲線が書けました。

4. AUC

AUCはROC曲線で描かれる面積のことです。この値が大きいほど正しく分類できている/モデルの精度がいいということになります。
image.png

AUCの値とモデルの精度はおおまかな基準があるらしいです。

  • 0.9~1.0:非常に精度が高い
  • 0.8~0.9:精度が高い
  • 0.7~0.8:多少精度が高い
  • 0.6~0.7:あまり良くない精度
  • 0.5~0.6:ランダムと変わらない精度

また、特別なケースとして以下のような例を紹介します。

AUC=1.0になるケース

image.png
image.png

0.42~0.65になるまでFPRは下がり続けますが、TPRはずっと1.0を維持し続けます。
0.42~0.65の時点でFPRは0であり、以降はTPRだけ下がり続けます。

AUC≒0.5

モデルの精度が悪く、ランダムに近い予測をした場合はどうなるでしょうか。
image.png

image.png
TPRとFRPが交互に減少していき、階段のような形になります。

AUCの意味付け

ROC-AUC は、「陽性と陰性のペアをランダムに 1 組取ったとき、陽性のほうが高いスコア(モデルの出力値)を取る確率」 として解釈することができます。以下で証明していきましょう。

実際に陽性だった数を$ {n_+} $、実際に陰性だった数を$ {n_-} $とします。
ROC曲線を描くときに移動する量は、縦軸(TPR)は$ \frac{1}{n_+} $、横軸(FPR)は$ \frac{1}{n_-} $になります。
image.png

ROC曲線は(1, 1)からスタートし、陰性を1個通過するたびに左には、陽性を1個通過するたびに下に$ \frac{1}{n_+} $だけ進みます。

この移動一回分の面積を、横軸(FPR)の変化に注目して求めようとすると、
陰性を1個通過したとき、横幅は$ \frac{1}{n_-} $、縦幅は$\frac{\text{その陰性の右側にある陽性の数}}{n_+}$になるので、

\begin{align}
その陰性に対応する長方形の面積 \\
\\
= \frac{1}{n_-} \times \frac{\text{その陰性の右側にある陽性の数}}{n_+}
\end{align}

となります。陽性を通過したときには点が下に移動する(縦幅が小さくなる)だけなので、面積は計算しません。

例えば1番目の陰性を通過したとき、右側にある陽性の数は4個です。
image.png
image.png

この操作をすべての陰性に対して行い、長方形をすべて足し合わせたものがAUCとなります。

(陰性の番号, 陽性の番号)とすると、
\begin{align}
陰性1の場合 &= (1, 5), (1, 8), (1, 9), (1, 10) の4個なので、面積は\frac{4}{24}\\
陰性2の場合 &= (2, 5), (2, 8), (2, 9), (2, 10) の4個なので、面積は\frac{4}{24}\\
陰性3の場合 &= (3, 5), (3, 8), (3, 9), (3, 10) の4個なので、面積は\frac{4}{24}\\
陰性4の場合 &= (4, 5), (4, 8), (4, 9), (4, 10) の4個なので、面積は\frac{4}{24}\\
陰性6の場合 &= (6, 8), (6, 9), (6, 10) の3個なので、面積は\frac{3}{24}\\
陰性7の場合 &= (7, 8), (7, 9), (7, 10) の3個なので、面積は\frac{3}{24}\\
\\
AUC &= \frac{22}{24} = 0.92
\end{align}

この最後の数え上げは、「陽性と陰性のペアをランダムに 1 組取ったとき、陽性のほうが高いスコア(モデルの出力)を取る確率」 と全く同じことをしていることに気が付いたでしょうか。高いスコアというのは、右側にある、というふうに言い換えることができます。

陽性と陰性のペアをランダムに 1 組取ったとき、陽性のほうが高いスコアを取る確率 
\begin{align}
&= \frac{陰性のスコア<陽性のスコアとなる(陰, 陽)ペアの数}{(陰, 陽)ペアの全通りの数} \\
\\
&= \frac{(1, 5), (1, 8), (1, 9), (1, 10), ... , (7, 8), (7, 9), (7, 10)}{n_- \times n_+} = \frac{22}{24} = 0.92
\end{align}

つまり、TPRとFPRを動かして面積の総和を取ることで求められたAUCは、陽性と陰性のペアをランダムに 1 組取ったとき、陽性のほうが高いスコアを取る確率を意味しているということが示されました。

5. まとめ

本記事では、分類タスクの評価指標の位置づけから始めて、ROC 曲線と AUC の直感的な意味、ROC曲線の書き方とAUCの求め方、さらに、「面積」としての定義と「確率」としての統計学的な定義がどのようにつながっているのかまで、順を追って整理しました。

このような評価指標についてきちんと理解することは、自分でモデルを使う場合だけでなく、他人の出した結果を読み解いたり、議論したりするうえでの 統計リテラシー としても大切だと思います。

この記事を読むことで、ROC曲線とAUCについて理解し、実際に自分で書ける/求めることができるようになれば幸いです。

6. 参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?