(O+P)ut

OutPut Log by SE in SIer



(O+P)ut

Output Log By Engineer

【サルでも分かる】ROC曲線入門

スポンサーリンク

f:id:mtiit:20190529190855p:plain

はじめに

ROC曲線とは、ある検査のカットオフ値を連続的に変化させた際の真陽性率偽陽性率の値をプロットした曲線です。

本記事では

カットオフ?真?偽?

程度の知識でもROC曲線について理解できるよう、わかりやすい入門記事を書いてみました。

所要時間目安 : 10分

ROC曲線?

ROC曲線とは受信者動作特性曲線(Receiver Operating Characteristic curve)の略であり、もともとは無線信号検出器に関する曲線です。

まずは、偽陽性率と真陽性率について説明します。

偽陽性率?

ある検査によって陽性か陰性か判断が行われるとします。
ただし、これはあくまで検査結果なので、実態と検査結果が異なる場合があります。

そのような事象を扱うため、統計学用語として
陽性と判断され、実際に陽性であることを真陽性と呼び、
陽性と判断され、実際は陰性であることを偽陽性と呼びます。

陽性と判断すれば結果はどうあれX陽性なんだね

逆も然りで、
陰性と判断され、実際は陽性であることを偽陰性と呼び、
陰性と判断され、実際は陰性であることを真陰性と呼びます。

図にすると以下のようになります。

実態 : 陽性 実態 : 陰性
検査 : 陽性 真陽性 偽陽性
検査 : 陰性 偽陰性 真陰性

そして偽陽性率とは本当は陰性なのに検査が誤って陽性と判断したものの割合を指します。

分母が陰性の人で分子が間違えて陽性にした人ってことか

先ほどの表に数値を入れてみました。偽陽性率を計算してみます。

実態 : 陽性 実態 : 陰性
検査 : 陽性 80 20
検査 : 陰性 10 460

実態が陰性なものは20+460=480あり、その中の20を誤って陽性とカテゴライズしたので偽陽性率は

> 20/480
[1] 0.04166667

約4%ということになります。

同じように、真陽率とは検査で正しく陽性と判断したものの割合です。

上の例では、実態が陽性なものは80+10=90であり、その中で80を正しく陽性とカテゴライズしたので真陽性率は

> 80/90
[1] 0.8888889

約89%ということになります。

偽陽性率は低い方が嬉しくて、真陽性率は高い方が嬉しいんだね


この偽陽性率と真陽性率ですが、検査の基準を変更すれば変わってきます。

例えば、極論ですが、診察者がどんなデータでも陽性と判断してしまう検査基準を用意した場合、

実態 : 陽性 実態 : 陰性
検査 : 陽性 90 480
検査 : 陰性 0 0

高い値を出して欲しい真陽性率は1ですが、低い値を出して欲しい偽陽性率も1になってしまいます。

逆に、偽陽性率を下げるためにどんなデータでも陰性と判断してしまう検査基準を用意した場合、

実態 : 陽性 実態 : 陰性
検査 : 陽性 0 0
検査 : 陰性 90 480

偽陽性率は確かに0ですが、高い値を出して欲しい真陽性率も0になってしまいます。

なるほど。データは同じでも基準を変えれば真陽性率や偽陽性率も変わるんだね




カットオフポイント?

偽陽性率と真陽性率が分かったので、いよいよプロットしてみます。

ここでは、実際にデータを見ながら考えていきます。
陰性の方を検査した値が以下のような分布だとします。
f:id:mtiit:20190302162730p:plain
x軸が検査した値で、y軸が分布です。
値40あたりが平均です。

逆に陽性の方を検査した値が以下のような分布だとします。
f:id:mtiit:20190302162920p:plain
値80あたりが平均です。

で、実際に検査して判定する際はこのようにごちゃまぜになっています。
f:id:mtiit:20190302163225p:plain

ここから基準値を選定して、陽性か陰性か判断する必要があります。


さて、あなたが判定する立場であれば、どのあたりに線を引くでしょうか?

60あたりで綺麗に分けれそう

f:id:mtiit:20190302163315p:plain

みなさん答えは同じで、このあたりだと思います。

検査した値が赤線より高ければ陽性、低ければ陰性。

この検査基準であれば真陽性率は1、偽陽性率が0になります。

そして、検査基準の値をカットオフポイントと言います。いわゆる、閾値です。

判定基準の赤線の値がカットオフポイントっていうのか

では、カットオフポイントをずらして見ましょう。

真陽性率と偽陽性率が変化します。

以下のように陽性の基準をゆるくすれば
f:id:mtiit:20190302163829p:plain
真陽性率は1のままですが、偽陽性率が大きくなります。

赤線が左側にいくほど陽性の人を陰性と判定することはなくなるけど、陰性の人も陽性と判定しちゃうんだね

逆に以下のように陽性の基準をきつくすれば
f:id:mtiit:20190302163849p:plain
偽陽性率は0のままですが、真陽性率が小さくなります。

赤線が右側にいくほど間違って陽性にすることはなくなるけど、陽性の人も陰性と判定しちゃうんだね




いよいよROC曲線

ROC曲線の定義を再掲します

ROC曲線とは、ある検査のカットオフ値を連続的に変化させた際の真陽性率偽陽性率の値をプロットした曲線

実際に、基準であるカットオフ値をずらしながら偽陽性率と真陽性率をプロットするとどんなグラフになるでしょうか。

  1. 検査値が0以上、つまり全てを陽性とするゆるい基準では偽陽性が1で真陽性が1です。
  2. そこから基準をあげていけば真陽性率が1のままだんだん偽陽性率が下がってきます。
  3. そして検査値が60になると偽陽性率が0、真陽性率が1の完璧な判定基準です。
  4. 60を超えて検査値をさらに厳しくしていくと、偽陽性率は0のまま真陽性率がだんだん下がってきます。
  5. 最後まで行けば、つまり検査値が100以上ないと陽性ではないとする厳しい基準にしてしまうと偽陽性率も真陽性率も0になります。

つまり、以下のような図になります。
f:id:mtiit:20190302164959p:plain

1が右上で3が☆マークで5が左下だね

これがROC曲線です。

ただし、上の例は判定を行う上で最適なケースです。陽性と陰性の分布が綺麗に分かれています。

以下がよくあるケースです。

よく見るROC曲線

陰性の方が以下のような分布で
f:id:mtiit:20190302170421p:plain
陽性の方が以下のような分布で
f:id:mtiit:20190302170433p:plain
判定するデータが以下のような分布だとします
f:id:mtiit:20190302170443p:plain

二つの分布が混ざってるね

どこで区切っても、真陽性率を1、偽陽性率を0にすることができないことが分かるでしょうか。
真ん中あたりで区切っても、どうしても陰性の人を陽性としてしまい、どうしても陽性の人を陰性としてしまいます。

ただし、全てを陽性といってしまえば先ほどと同じように真陽性は1に、全てを陰性といってしまえば偽陽性は0です。

このグラフをプロットすると先ほどの直線のようにはいかないことはなんとなくイメージできます。

詳細は割愛しますが、以下のようになります。
f:id:mtiit:20190302170919p:plain

このようにROC曲線は文字通り、曲線を描きながら真陽性率と偽陽性率の関係性を表します。

そして、このROC曲線で囲まれた面積をAUC(Area Under Curve)と呼び、その検出法が最適なROC曲線(以下の図でいう左側)にどのくらい近いかを数値化します。
f:id:mtiit:20190302171601p:plain

実際、ROC曲線とはAUCを定量化するために用いられるケースが多く、それは診断法がどれぐらい有用なのかを知る手がかりになります。

まとめ

ROC曲線とは偽陽性率と真陽性率が基準値に対してどのように変化するかを示す曲線であり、それを用いて算出されるAUCはその検査がどれくらい有用性があるのかの指標として利用されます

ちなみに、真陽性率は「感度」と呼ばれたり、偽陽性率に関する値は特異度といった形で表現されることもあります。

統計的精度の評価として、よく登場する曲線なので本記事が理解の一助になれば幸いです。

以上、サルでも分かるROC曲線入門でした。


他の記事を読む