ゼッタノート

ゼッタが勉強したことをまとめたノート代わりのブログ。たまに日記になるかも。

ROC曲線が描かれる様子をGIFアニメーションにしてみた

 matplotlibで遊んだんですけど、せっかくなのでブログに載せます。前回の記事ROC曲線に触れたとき、真陽性率と偽陽性率の面積比のようなものと言いましたが、実際にROC曲線を描いていくとどんな感じになるのか、アニメーションで見れたら面白いなと思ってコードを書いてみました。x軸は偽陽性率、y軸は真陽性率です。x軸とy軸の数値は特に意味はありません。

どこかしらの識別器のROC曲線描画の様子

f:id:Zetta777:20190405104020g:plain
 青色の正規分布が真に陽性な尤度、オレンジ色の正規分布が真に陰性な尤度です。灰色部分は偽陰性率、紫色の部分は偽陽性率となります(y軸は真陽性率なのでその部分を色付けしたほうがよかったのでは...)。灰色の部分が減る度(真陽性率が増える度)y軸方向に増加し、紫色の部分が増える度x軸方向に増加していることが分かると思います。それはさながら面積比を表しており、最後は1:1となることが確認できます。また、これを見るとx軸方向に増加する度にy軸方向に減少することはないということも確認できるかと思います。

完全な識別器のROC曲線描画の様子

f:id:Zetta777:20190405104332g:plain
 次に完全な識別器の場合です。前回はただ文章で「曲線は(0,0)から(0,1)を通り、(1,1)を結ぶ直線となるので、AUCは1となります」と書きましたが、このアニメーションを見ると、確かにそうなるということが分かるかと思います。

ランダムな識別器のROC曲線描画の様子

f:id:Zetta777:20190405104334g:plain
 最後にランダムな識別器の場合です。分かりづらいですが、真に陽性な尤度と真に陰性な尤度の分布が重なっています。こちらは前回の記事で「原点と(1,1)を結んだ45度の直線はランダムな識別機となり、AUCは0.5となります」と書きましたが、確かにそうなることが分かります。また、以上3枚を見ると、AUCの最低値は0.5で、そこから性能を上げると徐々に左上方向にシフトしていき、1が最高値となる、ということも実感が持てるかと思います。ここから真に陰性な尤度のグラフを少しでも右にずらせば、AUCは0.5より大きくなりますからね。


今回はプレゼン用に用意したつもりだったのですが、グラフの描画の様子をアニメーションにするのはなかなか面白いですね。余裕があればまたどこかでやってみたいと思います。それではまた次回お会いしましょう。