ROC・AUCROC & AUC
閾値を動かして測った成績を一本の曲線と数字に
- 分けるモデルは答えをすぐには出しません。「これくらいならこちら」と決める閾値を人が別に決める必要があります。
- ROC(Receiver Operating Characteristic、受信者操作特性)曲線は閾値を端から端まで動かしながら測った成績を一枚につなげて描いたものです。
- 曲線が左上にぴったり寄るほど良いモデルです。対角線に寝そべる曲線は何の役にも立たないという意味です。
- AUC(Area Under the Curve、曲線下面積)は、その曲線を一つの数字に縮めた値です。1に近いほど良く、0.5ならでたらめに選ぶのと同じです。
- 閾値と無関係な値なのでモデルどうしを比べるのに向いていますが、片方がとても少ない資料では実際より甘く出ます。
目次
1たとえで理解する
冷蔵庫に牛乳が何本かあります。表示された日付が数日過ぎたものです。ある本はまだ大丈夫で、ある本は傷んでいますが、開けてみるまでわからないので日付だけを見て決めるしかありません。
「日付が過ぎたらすぐ捨てる」と決めると、傷んだ牛乳を飲むことはありません。代わりに、まだ大丈夫な牛乳をたくさん捨ててしまいます。「一週間までは置いておく」と決めると、捨てる本はほとんどありませんが、傷んだものを飲んでしまいます。どちらも正解ではなく、基準を何日に置くかによって得るものと失うものが入れ替わるだけです。
だから基準を一つだけ試すことはしません。過ぎた日がゼロのときから十日後まで一日ずつ動かしながら、日付ごとに「傷んだ本をどれだけふるい分けたか」と「まだ大丈夫な本をどれだけ捨てたか」を書いておけば、この判断の性質全体が一枚に収まります。
2くわしく
閾値はモデルではなく人が決める
分けるモデルが出すのは「こちら」か「あちら」ではなく、どれくらいそれらしいかを表す点数です。その点数がどこを超えたらこちらと呼ぶかは人が決めます。この線が閾値です。
閾値を下げると少し怪しいだけでこちらと呼ぶので、見つけ出す量が増えます。代わりに違うものまで捕まえます。閾値を上げると確実なものだけを呼ぶので、無駄に捕まえることは減りますが見逃すものが増えます。基準日を前後に動かすのとまったく同じです。
だから閾値を一つ決めて測った点数は、その閾値での成績にすぎません。閾値を動かせば同じモデルの点数が変わります。モデル自体がどれくらいうまく分けるかを知りたいなら、閾値を固定したまま見るのではなく、全体をひととおり見渡す必要があります。
閾値ごとに点一つ、つなげば曲線
閾値をいちばん低い場所に置いて二つを測ります。一つは本当にこちらであるもののうち何本を見つけたか、もう一つはあちらであるもののうち何本を間違って捕まえたかです。この二つの値を座標にして点を一つ打ちます。
閾値を少し上げてまた測って点を打ち、また上げて打ち、こうして最後まで行くと点が並びます。その点をつないだ線がROC曲線です。左下の隅は何も捕まえない状態、右上の隅は全部捕まえる状態です。
良いモデルの曲線は左上にぴったり寄ります。無駄に捕まえることをほとんどしないまま、見つけるべきものは全部見つける閾値があるという意味だからです。反対に曲線が対角線に沿って寝そべっているなら、どの閾値を選んでも得る分だけ失うという意味で、役に立ちません。
曲線を一つの数字に縮めると
曲線は情報が多い代わりに、複数のモデルを並べて比べるには不便です。そこで曲線の下の面積を測って一つの数字に縮めます。この値がAUCです。曲線が左上に寄るほど下の面積が大きくなるので、値が大きいほどよく分けるモデルです。
この数字にはわかりやすい意味が一つ付いています。こちらに属するもの一本とあちらに属するもの一本を無作為に選んだとき、モデルがこちらに高い点数を付ける確率がそのままAUCです。0.9なら十回のうち九回ほど順序を正しく当てるという意味です。
0.5はコイン投げと同じです。順序を当てる確率が半分という意味なので、何の情報もないということです。値が0.5より下がったら逆に読む必要があります。反対に答えるとよく当たるという意味なので、たいていどこか間違った信号です。
甘く出る場所に注意する
AUCが便利な理由は、閾値を選ばなくてよく、割合が変わっても値があまり揺れないという点です。ですがこの長所がそのまま落とし穴になる場合があります。見つけるべきほうがとても少ない問題です。
一万件のうち十件を見つける問題なら、あちらの九千九百九十件のうち百件を間違って捕まえても、間違って捕まえる割合はとても小さく見えます。曲線は依然として左上に寄り、AUCも高く出ます。しかし現場では十件を見つけるために百件を無駄に確認しなければならず、使えない道具です。
こういうときは、見つけるべきほうだけを置いて描いた別の曲線を一緒に見ます。指し示したもののうち当たった割合と、実際に見つけた割合を二つの軸にする曲線ですが、少ないほうが主役の問題では、こちらのほうがずっと正直に動きます。
3もう少し正確に
ROC曲線の二つの軸には決まった名前があります。縦軸は実際にこちらであるもののうち見つけた割合で、再現率と呼ばれます。横軸は実際にあちらであるもののうち間違って捕まえた割合です。二つの軸はどちらも自分の群れの中だけで計算するため、二つの群れの個数の割合が変わっても曲線の形は大きく揺れません。
たとえがずれる点もあります。牛乳は日付という一つの値で判断しますが、モデルはいろいろな情報を一度に見て点数を付けます。ただしずれて見えるこの点こそがむしろ大事な場所でもあります。日付は傷みそのものではなく傷みを代わりに測る値であり、モデルが出す点数も正解そのものではなく正解を代わりに測る値だからです。曲線が左上に寄るという言葉は、その代わりに測る値が使い物になるという意味です。実際の曲線は閾値をごく細かく動かせるので、資料にある点の数だけ細かい階段の形をしています。
AUC一つだけを見てモデルを選ぶのも注意が要ります。AUCは順序をどれだけうまく付けるかしか教えてくれず、その点数をそのまま確率のように信じてよいかは教えてくれません。実際に使うには閾値を決める必要があり、その閾値は見逃したときの損害と間違って捕まえたときの損害を見比べて選ぶべきです。
4やってみる
5よくある誤解
AUCが高ければそのままよく当てるモデルだと思われがちですが、実際には順序をうまく付けるという意味にすぎず、閾値を間違えれば当てる個数はひどいことになり得ます。
AUC 0.5は性能が半分という意味だと思われがちですが、実際には何の情報もない状態、でたらめに選ぶのと同じ状態を意味します。
ROC曲線はどんな問題でも信じられると思われがちですが、実際には見つけるべきほうがとても少ない問題では、実際より甘い絵を見せます。
7ひとこと要約
つまりROC曲線は閾値を端から端まで動かしながら測った成績を一枚につなげて描いたもので、AUCはその曲線を一つの数字に縮めてモデルどうしを比べさせてくれる値です。
誤りや、もっと良いたとえがありますか? 修正を提案する · 最終更新2026-09-02