RによるAUCの有意差の解析
- Pythonで予測したモデルの評価をしたい。
- 2つのAUCの優位差の解析をしたい。
RによるAUCの有意差の解析を行う方法を解説します。
機械学習を用いて構築された予測モデルの評価に、ROC曲線下面積(AUC)を用いることがよくあります。
2つのモデルのどちらがより精度の高い予測モデルであるかをAUCによって評価するといったことが考えられます。
つまづく事なく、AUCの有意差検定が出来るようにしたい
そこでこの記事では、『RによるAUCの有意差の解析方法』について解説します。
この記事を読めば「RによるAUCの有意差の解析を行う方法」の全てが分かります。
ROCやAUCについて知りたい方はこちら
RとRStudioのインストール
まずは、準備としてRとRStudioをインストールする必要があります。
RとRstudioのインストール方法についてはこちらの記事を参考にしてみてください。
基本的に、WindowsもMacもインストール方法は同じですが、参考に両方載せておきます。
▶ 【2021年11月版】WindowsにR・RStudioをインストールする
インストールが完了すると、こんな画面になるのでここまで出来たら準備は完了です。
AUCの差の検定(統計)
AUCの差の検定のための統計的知識および理論については、こちらの記事を参考にしてみてください。
RによるAUCの有意差の解析
それでは、いよいよ具体的にRを使ってAUCの有意差の解析を行っていきたいと思います。
pROCのパッケージをインストール
RStudioの全体像は下図のようになっています。
赤枠の中に注目して、Packagesというタブを選択します。
Packagesペインに切り替えた右下区画には、 既にインストールされているパッケージの一覧が表示されています。
続いて、Packagesペインのタブのすぐ下の部分をよく見てもらうと InstallとUpdateという項目が並んでいるのを見つけられるはずです。
このInstallをクリックしましょう。 画面の中央に、Install Packagesというタイトルのダイアログが現れます。
このInstall Packages ダイアログの真ん中に Packages(separate multiple with space or comma)と タイトルが付けられている入力フォームがあります。
この入力フォームに、インストールしたいパッケージ名を書き込み、 下の Install と書かれているボタンを押すと、 パッケージのインストールが始まります。
今回の場合は、入力フォームにpROCと書き込んで、下の Install ボタンを押してください。 インストール作業が開始されます。
ここまで出来たらパッケージのインストール作業は終了です。
AUCの解析に必要なcsvファイルの準備
今回は、python等で機械学習を行い、正解ラベルとそれぞれの予測モデルの予測値が用意されている事を前提とします。
今回は、以下のデータセットについてAUCの差の検定を行いたいと思います。
y_trueが正解ラベル、y_pred1がモデル1の予測値、y_pred2はモデル2の予測値が入っています。
RによるAUCの差の検定
以下のRスクリプトを実行すると、AUCおよびp値を算出することができます。
library(pROC)
data <- read.csv("ROC.csv")
rocA <- roc(data$y_true, data$y_pred1)
rocB <- roc(data$y_true, data$y_pred2)
print(roc.test(rocA, rocB))
実行結果は以下のようになりました。
DeLong's test for two correlated ROC curves
data: rocA and rocB
Z = -2.0154, p-value = 0.04387
alternative hypothesis: true difference in AUC is not equal to 0
95 percent confidence interval:
-0.0608323055 -0.0008476493
sample estimates:
AUC of roc1 AUC of roc2
0.9323247 0.9631647
予測モデルAによるAUCは0.93、BによるAUCは0.96となり、予測モデルBによるAUCの方が高い値となりました。
p値を見ると0.04387とあり、一応有意差ありという結果になりました。
また、実際には両側検定と片側検定はどちらを行うべきなのか悩ましいところもあると思います。
roc.test(rocA, rocB, alternative="greater")
上記コードを実行する事で、片側検定を行うことが出来ます。
コメント