SPSS StatisticsによるROC分析

# はじめに
■環境
Windows10
SPSS Statistics 28.0.1

■サンプルデータ
https://github.com/Makimaki2020/sampledata/blob/main/BIRTHWT.SAV?raw=true

# ［ROC分析］メニュー
SPSS Statisticsの［分析］メニュー＞［分類］には、［ROC曲線］と［ROC分析］のROCに関する２つのメニューがあります。［ROC分析］メニューは、2019/4にリリースされたv26から追加されています。［ROC曲線］と［ROC分析］メニューはどちらも、ROC(Receiver Operatorating Characteristic curve、受信者動作特性曲線)を作成することができます。ROC曲線の詳細についてはここでは割愛しますが、２値分類(病気の罹患の有無、ダイレクトメールのレスポンスの有無、機械の故障の有無など)のモデルを評価したり、カットオフ値を決めたりする際に利用します。
それぞれのメニューの機能は、次の通りです。
　●［ROC曲線］：ROC曲線グラフ、ROC曲線下の面積(AUC)、ROC曲線の座標の出力
　●［POC分析］：上記に加えて、複数のROC曲線下の面積の差の検定、PR曲線グラフ、PR曲線の座標、AR値の出力
［POC曲線］メニューの機能は、［ROC分析］メニューの機能に包含されています。

# ROC分析の機能
ここからは［ROC分析］メニューの機能をみていきます。ROC曲線を描くことが主な目的のため、あらかじめ２値分類の分析、たとえばロジスティック回帰や決定木分析などを実行して、傾向スコア(ターゲットとなるカテゴリの予測の確信度：たとえば病気の罹患が有の予測確率)をデータファイルに保存しておくことが必要です。
SPSS Statisticsの［分析］メニュー＞［二項ロジスティック］では、［保存］ボタンの［予測値］エリアにある［確率］を選択すると傾向スコアが保存できるので、ここではそれを利用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/fde2976f-69a7-71af-f291-a8b992bd3a2c.png)

［分析］メニュー＞［分類］＞［ROC分析］を選択します。［検定変数］には、前で保存した傾向スコアの変数「予測確率［PRE_1］」を［状態変数］には、２値分類の従属変数を指定し、［状態変数の値］は、ターゲットとなる値(たとえば、病気の罹患の有の値「１」)を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/29618155-ea25-eeb2-be7c-5f2b31ec41a3.png)

［表示］ボタンをクリックすると様々なアウトプットが選択できます。すべてを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/f2ee66af-a7cc-28d5-9e11-12f515718585.png)

実行して、アウトプットを見てみましょう。
今回使用したデータのターゲット［正］は、59ケースで、非ターゲット［負］は130ケースで巷によくあるアンバランスなデータです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/1311ee16-d452-cb01-c7f3-5c1dd7a2479c.png)

ROC曲線は、y軸に感度、x軸に1-特異度を用います。感度は、真陽性率で実際に陽性で予測も陽性であることを意味します。対する1-特異度は、特異度が真陰性率で実際に陰性で予測も陰性であることを意味し、1から引くことで実際には陰性にもかかわらず誤って陽性に予測してしまう偽陽性率を表します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/f6f90519-d2e6-9ba3-201b-73708c582b36.png)


ROC曲線は、真陽性率と偽陽性率を表しているので、真陽性率が高く、偽陽性率は低い方が良いことになり、グラフとしては曲線が左上に引き上げられるほど良いことになります。モデルが最も良い場合は感度が１、1-特異度が０、曲線下の面積が１になります。逆にもっとも悪い場合(ランダムに割り当て)は、参照線が表していて曲線下の面積が0.5になります。曲線下の面積は0.5～1の範囲で、１に近いほどモデルの検出力が高いと言えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/20f7cd03-10af-0a3b-dd32-206974c88f8f.png)

ここでの曲線下の面積AUCは、0.708となっていて、漸近95%信頼区間から下限0.624、上限0.792であり、ランダムな場合の0.5と比較して5%水準で統計的にも有意な差があることが示されています。
Giniインデックスの値(=AR値：Accuracy ratio)は2×AUC-1で算出されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/bcb1f0cd-74f9-8267-ee7a-974d4c5dc984.png)

適合率/再現率曲線(PR曲線)は、y軸に精度(適合率)、x軸に再現率を用いています。適合率は陽性と予測したうち実際に陽性である割合、再現率は実際に陽性を陽性と予測した割合です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/034eddc7-d54a-801e-0196-4ad1210fc794.png)

理想としては適合率も再現率も高い値がよいと思われますが、この２つはトレードオフの関係にあるため分析の課題によってどちらかに注目するか、もしくは両方のバランスをとったF値(2×適合率×再現率/(適合率＋再現率))で評価します。ただし、F値は出力されないのでPR曲線の座標を使って計算します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/bb59ffd8-e92a-db3c-7b5d-def39badb53f.png)

全体のモデルの品質は、AUCの漸近95%信頼区間の下限の値を棒グラフで表示しています。一般的にAUCの基準は0.7以上が望ましいと言われています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/6b5d4c8b-ed3b-592f-3ba2-478262033d69.png)

ROC曲線の座標は、［より大きいか、等しい場合に正］＝カットオフ値、感度、1-特異度の列から構成されています。感度が最も高く、かつ1-特異度が最も低い組み合わせが、ターゲットの予測精度が最も高いカットオフ値になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/415080c8-2ab8-0c6f-8511-1bb28d7717e2.png)

上のテーブルをEXCELにコピー＆ペーストし、感度-(1-特異度)を算出して結果の降順で並び替えたものが以下です。黄色でハイライトした値がターゲットの予測精度が最も高くなるカットオフ値です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/7e45f3bc-99d6-9167-6e95-5c5c24d04d36.png)


PR曲線の座標もROC曲線の座標と同じように出力されます。［より大きいか、等しい場合に正］＝カットオフ値、［精度］＝適合率、［再現率］の列から構成されています。適合率と再現率はトレードオフの関係にあるので、F値を求めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/5a126a48-5b71-071e-ee71-7e0de64d2c79.png)

上のテーブルをEXCELにコピー＆ペーストし、F値を算出して結果の降順で並び替えたものが以下です。黄色でハイライトした値が適合率と再現率が最も高くなるカットオフ値です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/d607286e-6f88-a500-a5d6-1e29b55d7b61.png)

では、カットオフ値を変えた結果を見てみましょう。二項ロジスティックの［オプション］でカットオフ値は変更することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/3d2bf1d7-2f6e-132a-2c43-00d250ec6c25.png)

２値分類の予測モデルは同じですが、カットオフ値により分類テーブルが変わります。

■デフォルト0.5の場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/30d9ae44-7c84-6519-2dc7-03fc73be849a.png)

■ROC曲線の感度と1-特異度の差の最大値に該当するカットオフ値0.216の場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/b45ac564-60f2-794e-333e-fd93c89ebfc9.png)

■PR曲線の適合率と再現率の調和平均(F値)の最大値に該当するカットオフ値0.219の場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/aa541646-8f0c-3ae2-41ba-e321d0e384ca.png)

カットオフ値を0.5から変更したことにより、ターゲットの予測精度が４倍以上高くなっていることがわかります。今回はROC曲線、PR曲線どちらの座標を使用しても結果に差がありませんでしたが、ターゲットと非ターゲットがアンバランスの場合にはPR曲線の方がよい場合があります。

# まとめ
SPSS StatisticsのROC分析を実行してみました。