病気の判定モデルを作ったら正解率94%やった
でも「それ全部陰性って答えても90%になるで」って指摘された。どういうこと?
【悲報】正解率94%のモデル、全部「陰性」と答えるだけでも90%やった。混同行列と適合率・再現率・ROC曲線【G検定】
前提のおさらい。モデルの成績は、学習に使ってないテスト用のデータで測る。ここでは、そのテスト用データで「どう測るか」の話
>>1
1000人のうち本当に病気の人が100人として、結果を4つに分けた表が混同行列
真陽性(病気を陽性と当てた):80人
偽陰性(病気を見逃した):20人
偽陽性(病気でないのに陽性):40人
真陰性(病気でないのを陰性と当てた):860人
>>3
正解率は
でも病気の人が1割しかおらんから、全員を陰性と答えるだけで になる。正解率だけやと、見逃しの多さが見えへん
>>4
そこで適合率と再現率を見る
適合率:陽性と判定した120人のうち、本当に病気やった割合
再現率:本当に病気の100人のうち、陽性と判定できた割合
F値はこの2つの調和平均で
>>5
適合率と再現率、どっちを重く見ればええん?
>>6
目的しだい。病気の見逃しが怖いなら再現率
迷惑メールの判定なら、大事なメールを迷惑メール扱いされると困るから適合率を重く見る
しきい値を下げると陽性が増えて再現率は上がるけど、偽陽性も増えて適合率は下がる。たいてい片方を上げるともう片方が下がる
>>7
しきい値をいろいろ動かしたときの様子を1枚の図にしたのがROC曲線
横軸に偽陽性率(病気でない人を陽性にした割合)、縦軸に真陽性率(再現率)をとる。この例なら偽陽性率は 、真陽性率は0.8で、曲線上の1点になる
>>8
AUCは、ROC曲線の下の面積。1なら完璧、0.5ならでたらめと同じ
「病気の人と病気でない人を1人ずつランダムに選んだとき、病気の人のほうに高い点数をつける確率」と同じになる
病気の人の点数が 0.9, 0.4、病気でない人が 0.6, 0.2 なら、4組のうち病気の人のほうが高いのは3組で、AUCは0.75
>>9
AUCはしきい値を決めんでも比べられるのが便利。でも実際に使うときは、どこかでしきい値を決めて、そのときの適合率と再現率を確かめなあかんで
管理人のひとこと
- 混同行列は真陽性・偽陰性・偽陽性・真陰性の4つ。例では80, 20, 40, 860で正解率0.94だが、全員陰性でも0.9になる。
- 適合率は陽性と判定した中の当たり(80/120≈0.67)、再現率は本当の陽性の中で当てた割合(0.8)。F値は調和平均で約0.73。
- 見逃しが怖いなら再現率、誤検出が困るなら適合率を重く見る。しきい値を動かすと片方が上がり片方が下がる。
- ROC曲線は偽陽性率(例:約0.044)と真陽性率の図。AUCはその下の面積で、陽性に高い点数をつける確率(例:0.75)。