AUC(ROC曲線下面積)とは — 順番の正しさを測る指標と、確率の正しさとの違い

この記事の要点

  • AUCは、予測スコアの順番の付け方がどれだけ正しいかを0〜1で表す指標です。0.5は当てずっぽうと同じ、1.0は当たりを全部外れより上に並べられた状態です。
  • 「ランダムに選んだ当たり1件のスコアが、外れ1件のスコアより高い確率」と読めます。下の8件の例では0.9375です。
  • AUCは確率の数字が正しいか(校正)を見ません。確率を全部半分にしてもAUCは変わらないので、Brier scoreと組み合わせて使います。

モデルが出した確率を評価するとき、「当たりそうなものを上位に並べられているか」と「確率の数字そのものが正しいか」は別の問題です。AUCは前者だけを測る指標です。scikit-learnのroc_auc_scoreの公式リファレンスは、この関数を「予測スコアからROC曲線下面積(ROC AUC)を計算する」ものと説明しています。

ROC曲線とAUC

確率に「ここ以上なら当たりと見なす」というしきい値を置くと、当たりを正しく拾えた割合(真陽性率)と、外れを誤って当たりと見なした割合(偽陽性率)が決まります。しきい値を1から0まで動かし、横軸に偽陽性率、縦軸に真陽性率をとって描いた線がROC曲線で、その下の面積がAUCです。

AUCの値読み方
1.0当たりを全部、外れより上に並べられている
0.5順番の付け方が当てずっぽうと変わらない
0.5未満順番が逆になりがち(スコアの向きを取り違えている可能性がある)

8件の例でAUCを手計算する

架空の8レースについて、ある1艇の1着確率と結果を並べました(実在のレースの値ではありません)。

レースモデルの1着確率結果
A0.90当たり
B0.80当たり
C0.70当たり
D0.60外れ
E0.55当たり
F0.50外れ
G0.30外れ
H0.20外れ

当たりは4件(A・B・C・E)、外れは4件(D・F・G・H)です。当たりと外れの組は4×4=16組あります。このうち「当たりの確率が外れより高い」組を数えると、Eの0.55がDの0.60より低い1組だけが逆で、残り15組は正しい順番です。

AUC = 正しい順番の組 ÷ すべての組 = 15 ÷ 16 = 0.9375

この「組を数える」考え方は、ROC曲線の面積と同じ値になります。同点の組は0.5組と数えます。

AUCでは分からないこと — 確率の正しさ

上の8件の確率を、全部半分(0.45、0.40、0.35…)にしてみます。順番は変わらないので、AUCは0.9375のままです。ところが確率と結果のずれを二乗して平均するBrier scoreは、0.135から0.224へ悪化します。半分にした確率は、実際の当たりの割合よりずっと低いからです。

指標元の確率全部半分にした確率何を見ているか
AUC0.93750.9375順番の付け方
Brier score(小さいほど良い)0.1350.224確率の数字と結果のずれ

オッズと比べて期待値を考えるときに必要なのは、確率の数字そのものです。AUCが高くても、確率が全体に低すぎたり高すぎたりすれば、期待値の計算は狂います。確率のずれの直し方はPlatt scalingとisotonicの違い、ずれの測り方はECE(校正誤差)と予測確率のキャリブレーションで扱っています。

レース予測で使うときの注意

よくある質問

AUCとは何ですか?

ROC曲線の下の面積で、予測スコアの順番の付け方がどれだけ正しいかを0〜1で表す指標です。ランダムに選んだ「当たり」1件のスコアが「外れ」1件より高い確率と読むことができ、0.5は当てずっぽうと同じ水準です。

AUCが高ければ確率も正しいのですか?

そうとは限りません。AUCは順番だけを見るので、すべての予測確率を半分にしても値が変わりません。確率の数字そのものが正しいかは、Brier scoreや校正の図で別に確かめます。

AUCはどうやって計算しますか?

scikit-learnでは roc_auc_score(y_true, y_score) で計算できます。手で計算する場合は、当たりと外れの組を全部作り、当たりのスコアが高い組の割合を数えます(同点は0.5と数えます)。

出典

  1. scikit-learn: sklearn.metrics.roc_auc_score
  2. Fawcett, T. (2006). An introduction to ROC analysis. Pattern Recognition Letters, 27(8).