🎃

ROC曲線を直感的に理解する

2020/11/19に公開

1. この記事について

この記事は、機械学習で出てくるROC曲線を、直感的に理解することを目的とするものです。ROC曲線の一般的な定義や説明自体はインターネット上に溢れているので、ここではそれとは少し違った説明をします。

2. ROC曲線とAUC

ROC曲線は、機械学習における二値分類タスクのモデル性能の評価に用いられるものです。モデル出力(予測値)が連続的である場合に用います。

ROC曲線は、予測値と真のターゲットの対応から描くことができ、例えば下図のようなイメージです。

ROC曲線が何者かを述べる前に、これをどのように評価に用いるかを簡単に説明します。

ROC曲線の下側の面積 (AUC: Area Under the Curve) は、予測値の大きい順にデータを並べ変えたとき、1が上に固まっている(0が下に固まっている)ほど大きくなるという性質があります。下図の2つのケースを比較すると、イメージしやすいでしょう。

つまり、AUCが大きいほどターゲットの0と1を上手く分離できており、モデル性能がよいと言えます。AUCは0以上1以下の値を取ります。

ちなみに、最初の図は10,000個のデータに対するROC曲線だったのに対し、上の図は50個のデータに対するROC曲線です。

ROC曲線というネーミングではありますが、実は曲線ではないことがわかります。データ数が多いと曲線に見えますが、(有限のデータで描く以上は)どこまで行ってもROC曲線は折れ線なのです。

3. ROC曲線のレシピ

ROC曲線の定義を述べずに、いきなり描き方を説明してしまいましょう。ここでは見やすさのために、データが20個の場合を例に挙げます。

  1. 予測値とターゲットの対応表を、予測値の大きい順に並べる。

  2. 横軸と縦軸の範囲が0~1の正方形を描く。

  3. ターゲットが0の数だけ横軸を、1の数だけ縦軸を分割する。(この例だと10個ずつ。)

  4. 正方形の左下(原点)から始める。

  5. 上から順にターゲットを見て、1なら上に、0なら右に1マスずつ進む。

  6. これを最後のデータまで繰り返す。(このとき、正方形の右上に到着する。)

以上です。この描き方を理解すれば、ターゲットが1のデータが上に固まっている方が、図の上側により速く到達できるので、AUCが大きくなるということがわかるでしょう。

今回は、正例と負例が10個ずつの場合を考えましたが、インバランスなデータだとどうなるか、上の描き方を元にぜひ想像してみてください。

以上の説明では、一般的なROC曲線の説明で出てくる、真陽性率 (TPR) や偽陽性率 (FPR) はおろか、閾値という言葉さえ使いませんでした。個人的には、一番最初はこういう直感的なイメージから入る方が、より理解がスムーズではないかと思います。(もちろん、人によるとは思いますが。)

4. ROC曲線の定義

既にこの記事の主旨は達成されました。ですが、上の説明がROC曲線の本来の定義と整合が取れていることを、簡単に説明しておきましょう。

ROC曲線は、連続的な予測値を0と1に分ける閾値を動かしたとき、真陽性率と偽陽性率をそれぞれ縦軸と横軸に取ってプロットされる図です。

真陽性率とは「ターゲットが1であるものの内、1と予測できた割合」、偽陽性率とは「ターゲットが0であるものの内、1と予測してしまった割合」です。真陽性率は再現率 (Recall) とも呼ばれます。

例えば、先ほどの例で閾値を0.5にしたとき、1と予測するのは下図の赤線より上の範囲です。

ターゲットの1は10個あって、そのうち赤線より上に8個入っていますから、真陽性率は\frac{8}{10}です。一方、ターゲットの0は10個あって、赤線より上に入ってしまっているものが1個ありますから、偽陽性率は\frac{1}{10}です。

この閾値を0から1の範囲で動かしたとき、真陽性率と偽陽性率の変化をプロットしたのが、ROC曲線というわけです。

0と1を分ける閾値を下げていくと、赤線のすぐ下にあったデータが上にくる瞬間が来ます。このとき、もしそれが1なら、予測できたものが1個増えるわけですから、真陽性率が\frac{1}{10}上がり、偽陽性率は変化しません。逆に0なら、偽陽性率が\frac{1}{10}上がり、真陽性率は変化しません。

これが、先ほど図を使って説明した、「1だったら上に1マス進む」、「0だったら右に1マス進む」という操作に対応するわけです。

以上、いかがでしたでしょうか。それでは、また。

Discussion