【ROC曲線のAUC】95%信頼区間の求め方と実装方法

機械学習・AI
Sponsored

ROC曲線AUC95%信頼区間を計算することで、「たまたま」得られたデータの結果から、AUCがとるであろう値の範囲を推測することができます。

そのため信頼区間は、論文中にも必ず示されています。

この記事では、ROC-AUCの95%信頼区間を求める方法について解説し、その計算をPython言語により実装する方法を紹介します

オンラインで自動計算

艮電算術研究所の自動計算Webアプリ「AutoCalc」では、この記事で解説する方法にもとづいて、ROC曲線のAUCがとりうる値の信頼区間をオンラインで算出できます

AutoCalc - Fast and High-Performance Online Calculation Apps
AutoCalc enables you to perform advanced and fast calculations online for free. We support a wide range of calculations, from useful everyday life tasks, such a...

その他にも様々な計算機能を用意しているので、いろいろ試してみてください!

ROC-AUCとは

ROC曲線とAUC

ROC曲線(Receiver Operating Characteristic Curve)は、検査の感度(真陽性率)と偽陽性率トレードオフをプロットし、検査の分類性能を調べる方法です。

曲線の下にできる面積をAUC(Area Under the Curve)といい、ROC曲線のAUC(ROC-AUC)がおよそ0.8を超えている場合、その検査は優れていると判断することができます。

ROC曲線の性質や、PR曲線との使い分けについては、以下の記事に詳しく書いてあります。

【図解】ROC曲線・PR曲線の書き方と使い分け基準を解説
ROC曲線とPR曲線は、検査や機械学習の分類に対する性能を判定する方法です。この手法を用いることで、検査の感度や陽性的中率のトレードオフを考慮しながら、性能を判定・比較することができます。この記事では、具体例を用いてROC曲線・PR曲線の書き方を説明し、それぞれを状況別に使い分ける方法について解説します。

ROC-AUCの信頼区間

信頼区間とは

信頼区間(Confidence Interval; CI)は、厳密にいうと以下のように定義されます。

正規分布にしたがう母集団から繰り返しサンプリングを行い、そのたびに一定の方法で区間を計算する。

このとき得られた複数の区間のうち、x%の区間が母平均を区間内に含んでいるとき、

この方法によって求めららた区間をx%信頼区間という。

ただし、統計学の論文を書くような場面以外では、もう少し簡単に考えて良いでしょう。

今回扱う「ROC-AUCの95%信頼区間」については、「ROC-AUCは大体このあたりの値になる」を意味する指標として活用してください。

ROC-AUCの信頼区間の式

得られたデータから計算したROC-AUCの値を \(A\) とします。

また、 \(A\) の標準誤差を \(SE(A)\) と書きます(計算方法は後に示します)。

このとき、ROC-AUCのx%信頼区間 \(C(x)\) は、

$$C(x)=A\pm z\left(\frac{1-x}{2}\right)SE(A)$$

と、あらわされます。

ここで、 \(z(a)\) は、正規分布の上側a%点を返す関数です。

統計でよく基準となる、95%信頼区間( \(x=0.95\) )を求める際には、正規分布表より

$$z\left(\frac{1-x}{2}\right)=z(0.025)=1.96$$

となるため、

$$C(x)=A\pm 1.96SE(A)$$

と求めることができます。

ROC-AUCの標準誤差

信頼区間の式で用いた \(SE(A)\) は、Hanley et al. (1982)の文献によると、

$$SE(A)=\sqrt{\frac{A(1-A)+(n_P-1)(Q_1-A^2)+(n_N-1)(Q_2-A^2)}{n_P\cdot n_N}}$$

で計算することができます。

ここで、 \(n_P,n_N\) はそれぞれ、ROC曲線を描いたデータのうち、

  • \(n_P\) :「真に陽性が出るべきだった人数(=例:病気の人数)」
  • \(n_N\) :「真に陰性が出るべきだった人数(=例:健康な人数)」

を意味します。これらを今後、陽性例陰性例と呼ぶことにします。

\(Q_1,Q_2\) は、ROC曲線を描いた検査から計算される、以下のような確率値です。

  • \(Q_1\) :2つの陽性例を無作為に選んだ時、その両方が、無作為に選んだ1つの陰性例よりも、検査で「陽性の疑いが強い」と判断される確率
  • \(Q_2\) :2つの陰性例を無作為に選んだ時、その両方が、無作為に選んだ1つの陽性例よりも、検査で「陰性の疑いが強い」と判断される確率

同文献中では、この2つの確率はおおよそ、

$$Q_1=\frac{A}{2-A}$$

$$Q_2=\frac{2A^2}{1+A}$$

で計算できることが示されています。

Pythonによる実装

以上の理論にしたがい、ROC-AUCの95%信頼区間を計算するプログラムをPythonで実装します。

コード内の変数の意味は次のとおりです。

  • y_true :データが陽性例または陰性例のどちらであるかを記録した、ラベルの配列
  • y_score :データに対して検査が判断した、陽性確率の配列
    • 例:検査値の値など
  • positive :陽性例を表すラベルの文字
    • デフォルト設定では、陽性=1、陰性=0を想定

以下のコードはsklearnライブラリの関数を用いてROC曲線を計算し、同時にROC-AUCの95%信頼区間を出力します。

参考文献

[1] J. A. Hanley and B. J. McNeil. The Meaning and Use of the Area under a Receiver Operating Characteristic (ROC) Curve. Radiology, 1982.

Comments