01
正解率だけを見ると何がまずいのか
あるカード会社が、不正な取引を見つけるモデルを作りました。テストしてみると、正解率(accuracy)は95%。100件中95件を当てたということなので、なかなか良さそうです。でも、そもそも100件のうち不正取引が5件しかなかったとしたら、どうでしょうか。
下の図では、マス1つが取引1件で、赤いマスが本物の不正取引です。モデルが「不正」と判定したマスは手前に飛び出します。2つのモデルを切り替えてみましょう。
- 正解率
- 95%
- 再現率
- 0%
取引100件の中から不正取引5件を見つけるモデル
何もせず全部「正常」と答えただけなのに、正解率は95%です。不正取引は1件も見つけられていません(再現率0%)。
いつも「正常」と答えるだけのモデルは何も学習していないのに、正解率は95%です。不正は1件も見つけていません。実際に学習したモデルのほうは正解率が93%と低いものの、不正5件のうち4件を見つけました。この会社に必要なのは、もちろん2つ目のモデルです。
正解率は、すべての予測のうち当たったものの割合です。片方の結果がもう片方よりずっと多いデータ、いわゆる不均衡データでは、多いほうをいつも答えるだけで正解率が高くなってしまいます。不正検知、病気の診断、不良品検査など、探したいものがめったに出てこない問題はたいていこの形です。
問題文にこんな表現があれば → これを選ぶ
- “陽性がデータ全体の1%しかない”正解率ではなく適合率・再現率・F1スコア
- “多いほうのクラスを答え続けるだけで高い点が出る”正解率の落とし穴
では、代わりに何を見ればいいのでしょうか。まずは、モデルの当たり・外れを4つに分けるところから始めます。
02
混同行列・適合率・再現率・F1スコア
「スパムかどうか」のように2つのうち1つを選ぶモデルでは、結果は必ず4つの箱のどれかに入ります。見つけたいほう(スパム)を陽性(positive)、もう一方(普通のメール)を陰性(negative)と呼びます。そして、モデルの判定が当たっていれば真(true)、外れていれば偽(false)を頭につけます。
ここが引っかかりやすいところです。モデルが普通のメールを「スパム」と判定したとします。「陽性」と言って外れたので、これは偽陽性(FP)です。逆にスパムを普通のメールとして通してしまったら偽陰性(FN)です。後ろの「陽性・陰性」はモデルが何と答えたか、前の「真・偽」はそれが当たっていたかを表します。
| モデルの判定:スパム(陽性) | モデルの判定:正常(陰性) | |
|---|---|---|
| 実際はスパム | TP 真陽性:ちゃんと見つけた | FN 偽陰性:見逃した |
| 実際は正常 | FP 偽陽性:誤って判定した | TN 真陰性:正しく通した |
この表を混同行列と呼びます。ここから、大事な割合が2つ出てきます。
適合率(precision)= TP ÷ (TP + FP)
モデルが「スパム」と判定したもののうち、本当にスパムだったのはどれくらいか。「判定したら、ちゃんと当たっているか」です。誤検知のコストが大きいときに見ます。
再現率(recall)= TP ÷ (TP + FN)
本物のスパムのうち、モデルが見つけられたのはどれくらいか。「漏れなく見つけたか」です。見逃しのコストが大きいときに見ます。再現率は感度(sensitivity)とも呼ばれます。
分類モデルはふつう0〜1のスコアを出し、自分で決めたしきい値を超えたら陽性と判定します。下の図では、メール20通をスコア順に並べています。しきい値を動かしてみましょう。
- 混同行列
- TP 4 · FP 3 · FN 2 · TN 11
- 指標
- 適合率 57% · 再現率 67% · F1 62%
メール20通のうちスパムは6通。しきい値より右(手前に出たマス)をスパムとして振り分けます
しきい値 0.5:スパム6通のうち4通を見つけ(再現率67%)、スパムと判定した7通のうち4通が本物のスパムです(適合率57%)。しきい値を下げるほど再現率は上がり、適合率は下がります。
しきい値を上げると、モデルは自信のあるものだけを判定するので適合率は上がります。そのかわり見逃すスパムが増え、再現率は下がります。しきい値を下げると逆になります。たいてい、片方を上げるともう片方が下がるのです。そこで、どちらの間違いがより痛いかでしきい値を決めます。見逃しが許されないがん検診なら再現率を優先し、大事なメールを絶対に埋もれさせてはいけないスパムフィルターなら適合率を優先します。
両方をまとめて見たいときはF1スコアを使います。適合率と再現率の調和平均なので、片方が高くても、もう片方が低ければF1スコアも低くなります。不均衡データでモデルを1つの数字で比べるときによく使われます。
問題文にこんな表現があれば → これを選ぶ
- “見逃しが許されない(病気、不正)”再現率
- “誤検知が許されない(スパムフィルター)”適合率
- “適合率と再現率を1つの数字にまとめる”F1スコア
- “陰性なのに陽性と予測した”偽陽性(FP)
- “陽性なのに陰性と予測して見逃した”偽陰性(FN)
でも、適合率と再現率がしきい値ごとに変わるなら、しきい値を決める前に2つのモデルを比べるにはどうすればいいのでしょうか。
広告
03
ROC曲線とAUC
しきい値を1から0まで少しずつ下げながら、そのたびに2つの値を測ります。真陽性率(TPR)は、本物のスパムのうち見つけられた割合。偽陽性率(FPR)は、普通のメールのうち誤ってスパムと判定した割合です。TPRは第2章の再現率と同じものです。横軸にFPR、縦軸にTPRをとって点を結ぶと、ROC曲線ができます。
良いモデルは、普通のメールをほとんど誤判定しないうちにスパムをどんどん見つけるので、曲線が左上に向かって一気に立ち上がります。当てずっぽうのモデルは対角線に沿って進みます。曲線の下の面積をAUC(area under the curve)と呼びます。下の図では、柱が埋めている面積がAUCです。
- AUC
- 0.84
しきい値を1から0へ下げながら記録した (FPR, TPR)。柱が埋める面積がAUC
誤判定をわずかに増やすだけで、スパムをどんどん見つけられます。曲線が左上に張りつくほど、面積(AUC 0.84)は1に近づきます。
AUCは0.5(当てずっぽう)から1(完璧)までの値をとります。しきい値を1つに決めなくても、モデルが陽性と陰性をどれだけうまく見分けられるかを1つの数字で表せるので、しきい値を決める前に複数のモデルを比べるのに便利です。ただし、実際にサービスで使うときはしきい値を1つに決める必要があり、そこから先はまた第2章の適合率と再現率の話になります。
問題文にこんな表現があれば → これを選ぶ
- “しきい値に関係なくモデルを比べる”AUC
- “感度と「1 − 特異度」を描いた曲線”ROC曲線
- “AUCが0.5”当てずっぽうと同じ
ここまでのモデルは「スパムかどうか」のようにカテゴリを当てるものでした。売上や住宅価格のように数値を予測するモデルは、単純に当たり・外れでは評価できません。どれだけずれたかを測る必要があります。
Pro限定
ここまでは無料で読めます
残りの5章はPro会員向けです。各章に3D図解と「問題文にこんな表現があれば」の整理が続き、最後の章では実際に解いて確かめられます。
- 04MAEとRMSE
- 05生成された文章の評価
- 06LLMによる採点と人による評価
- 07A/Bテストとビジネス指標
- 08指標の選び方
PasslyExam
概念をつかんだら、次は試験形式の問題で確かめましょう
PasslyExamは、各資格の出題範囲に合わせて作成したオリジナルの練習問題・解説・本番形式の模擬試験を提供しています。正解の選択肢がなぜ正しく、似た選択肢がなぜ誤りなのかまで解説します。登録すると毎日無料で練習問題に取り組めます。