雑記 in hibernation

頭の整理と備忘録

2値分類モデルの評価指標を一覧にまとめる

この記事では2値分類問題における評価指標を列挙し、一覧表にまとめます。
また、適切な評価指標を用いることの必要性をケーススタディで確認します。
なお本記事は個人的な備忘録として作成しています。 

 

1. はじめに

1.1. 正答率だけでは不十分な2値分類モデル評価

2値分類タスクにおけるモデルの性能評価の際、正答率のみによる評価では目的に対して不十分なケースがあります。例えば陰性と陽性のサンプル数に極端な偏りがあるケースでは、サンプル数の多いクラスを推定結果として出力することで高い正答率を実現できてしまうことがあります(このケースついては後ほど説明します)。

そこで、よりつぶさにモデルを評価するために「サンプルの実際の分類」と「モデルの推定結果の分類」の2軸でクロス集計し、その表を用いて各種の評価値を計算することでモデルの性能評価の指標とします。

1.2. 評価指標、混乱しがち問題

この評価指標は概念としてはさほど難しくないのですが、種類が複数あり、また同じ指標でも分野によって用いられる名称が異なることがあります。脳の記憶容量が少ない悲しい人(=我)は混乱すること必須なので、指標の呼称と計算方法、そしてその解釈について一覧表にまとめたいと思います。

 

2. 性能評価指標をまとめる

2.1. モデルの出力結果のまとめ方

評価指標について列挙する前に、モデルの出力結果のまとめ方について説明します。

2値分類モデルの出力結果は混同行列(Confusion Matrix)と呼ばれる以下のような表にまとめることができます。この表は「実際にサンプルが陰性/陽性であったか」と「モデルの推定結果として陰性/陽性のどちらが得られたか」の2軸による、サンプル数についてのクロス集計表です。

 

混同行列はこんな感じです。「混同行列」で画像検索するとこれとほぼ同じ表が死ぬほど出てきます。

  モデルの推定結果
Positive Negative
実際の
分類
Positive
(陽性)
TP : True Positive
(正しく陽性と推定)
FN : False Negative
(誤って陰性と推定)
Negative
(陰性)
FN : False Positive
(誤って陽性と推定)
TN : True Negative
(正しく陰性と推定)

 

表中の各セルにはサンプル数が入ります。例えば「実際は陽性に分類されるサンプルで正しく陽性と推定されたサンプルが100あった」場合、左上の "TP" のセルは "100" となります。4つのセルの合計が全サンプル数に相当します。

ちなみにどうでもいい話ですが、脳の記憶容量が少ない悲しい人(=我)はTPとかFNとか言われてもやっぱり混乱します。「FN」とか聞いても「実際の分類がN」なのか「推定結果がN」なのかわからなくなっちゃうんですね。FNなら「F(ミスって)、N(陰性) = だから実際は陽性だな」みたいに考えるようにしたら解決しました。

 

2.2. 評価指標の一覧表

本題です。

上記の混同行列の集計結果を元に、各種評価指標が算出されます。

評価指標としてよく見るものを以下の一覧表にまとめてみました。

なお、f1スコアやAUCなどの2次的に計算される指標はここには掲載しません。 

評価指標 定義
解釈
和名 英名 分子 分母 言葉にすると
正解率
正答率
Accuracy TP+TF TP+FP+FN+FP 全サンプルのうち、実際の分類と
推定結果が一致したサンプルの割合
分類結果が
どの程度正しかったか
適合率
精度
陽性的中率
Precision TP TP+FP 陽性と推定されたサンプルのうち
実際に陽性であるサンプルの割合
陽性と推定された結果が
どの程度信用できるか
再現率
感度
真陽性率
Recall TP TP+FN 実際に陽性のサンプルのうち、
陽性と推定できたサンプルの割合
陽性をどの程度
見逃さなかったか
特異度
真陰性率
Specificity TN FP+TN 実際に陰性のサンプルのうち、
陰性と推定できたサンプルの割合
陰性をどの程度
見逃さなかったか
陰性的中率 NPV TN FN+TN 陰性と推定されたサンプルのうち、
実際に陰性であるサンプルの割合
陰性と推定された結果が
どの程度信用できるか
偽陽性 FP Rate FP FP+TN 実際に陰性であるサンプルのうち、
陽性と誤推定したサンプルの割合
陰性をどの程度見逃したか
(1-特異度)
偽陰性 FN Rate FN TP+FN 実際に陽性であるサンプルのうち、
陰性と誤推定したサンプルの割合
陽性をどの程度見逃したか
(1-再現率)

 

以上でこの記事はミッションコンプリートです。 

 

 

3. 感染検査の性能を評価するケース

評価指標の一覧表を作った時点でこの記事の目的は達せられたのですが、せっかくなのでもう少し突っ込んでみます。

2値分類モデルの性能評価についての現実的なタスクを題材に、モデルの性能を評価する際に適切な評価指標を用いることの必要性を体感してみたいと思います。ここでは "架空の疫病"*1の感染検査の分類性能評価を題材とします。

検査の性能として感度・特異度がわかっている前提で、様々なサンプルの偏りを仮定して混同行列と各評価指標の値を確認してみます。 

 

3.1. 疫病の感染検査

仮に、"ある疫病" の検査精度を以下のように設定します*2

  • 感度:62%
  • 特異度:98%

 

先の表と照らし合わせて考えてみます。

感度とは「陽性をどの程度見逃さずに検出できたか」の指標でした。この場合、全ての感染者サンプルのうち62%を陽性として検出できることになります。

また、特異度とは「陰性をどの程度見逃さずに検出できたか」の指標でした。この場合、非感染者サンプルのうち98%を陰性として検出できることになります。

特異度に注目すると、直感的にはこの検査が「陰性」と推定した場合、その結果はかなり確からしいものと感じられます。しかし実際はそうであるとは限りません。「陽性(陰性)を見逃さない性能」と「検査結果の信頼性」は異なる評価だからです。

 

検査結果の確からしさに関する指標として以下の評価値に注目して、もう少し詳しくみていきます

  • 正答率:どの程度の分類結果が正しかったか
  • 適合率:推定結果"陽性"がどの程度信用できるか
  • 陰性的中率:推定結果"陰性"がどの程度信用できるか

 

感染率50%の場合

以降、計算のために全サンプル数を100000[人]として考えます。感染しているか否かが既知の100000[人]に対して検査を行い、検査の分類性能を評価するようなイメージです。

まずはサンプルに偏りがない場合として感染率50%の場合を考えてみます。つまり、全サンプルのうち実際に陽性の人数が50000人、実際に陰性の人数が50000人の場合です。

 この場合の混同行列と評価指標は以下のようになります。

  推定結果[人]   評価指標 値[%]
陽性 陰性   正答率 0.8000
実際の
分類
[人]
陽性 31000 19000 50000   適合率 0.9688
陰性 1000 49000 50000   陰性的中率 0.7206
32000 68000 100000      

 

陰性的中率に注目してみます。これの意味するところは「検査結果が陰性だった時に実際に陰性である確率が72%」ということです。 この値を低いと見るか十分高いと見るかはタスク・目的次第ですが、先に「特異度98%」という数字を見た際に感じた検査精度に対する印象とはだいぶ異なるのではないでしょうか。この結果から、先述した「陽性(陰性)を見逃さない性能」と「検査結果の信頼性」は異なる評価である、ということが実感できると思います。

 

これはサンプルに偏りのない「まだマシ」なケースです。サンプルに偏りが生じた場合についても見ていきます。

 

3.2. サンプルが偏った場合の評価値

 感染率80%の場合

現実的な感染症としては考えにくいかもしれませんが、「感染者の方が非感染者より多い」場合を想定してみます。

混同行列と評価指標は以下のようになります。

  推定結果[人]   評価指標 値[%]
陽性 陰性   正答率 0.6920
実際の
分類
[人]
陽性 49600 30400 80000   適合率 0.9920
陰性 400 19600 20000   陰性的中率 0.3920
50000 50000 100000      

 

陰性的中率に注目すると39%程度となっています。感染率50%の時と比較すると信頼性の低い結果となりました。同じ検査であっても、サンプルの偏り方次第で検査結果の信頼性に差が生じることがわかります。なお陰性的中率は「検査結果が陰性だった場合、実際に陰性である確率が39%」という意味ですから、検査結果が陰性だった場合でもあまり安心できない気がします。

ちなみに適合率は98%ですが、これは「検査結果が陽性だった場合、実際に陽性である確率が98%」という意味合いです。僕なら人に伝染さないように速攻で家帰って薬飲んで寝ます。

 

 

感染率3%の場合

実際は陽性であるサンプルが陰性サンプルに対して少なく偏っている場合として、感染率3%の場合を考えます*3

混同行列と評価指標は以下のようになります。

  推定結果[人]   評価指標 値[%]
陽性 陰性   正答率 0.9692
実際の
分類
[人]
陽性 1860 1140 3000   適合率 0.4895
陰性 1940 95060 97000   陰性的中率 0.9881
3800 96200 100000      

 

 適合率に注目してください。これは「陽性と判断されたサンプルのうち、実際に陽性である確率が48%」という意味です。感染率80%の際の陰性的中率と同様に、サンプルの偏りによって検査結果の信頼性が大きく変動していることがわかります。仮に検査で陽性を言い渡された場合に本当に陽性である確率は半分以下ということですから、僕が被験者で陽性反応が出たとして、「この結果を聞いて僕はどうすればいいんですか」というのが正直な感想です。

 

3.3. 目的にあった指標で評価しよう

感染率が50%,80%,3%の場合を見てきました。モデル(この場合は検査方法)の分類性能を評価する際に適切な評価指標を用いることの必要性が体感できたと思います

最後に駄目押しで正答率も見てみます。検査の方法は変わっていないのにも関わらず、サンプルの偏り方によって正答率に差が出ています。特にサンプルに偏りのある状況で、正答率だけをモデルの評価指標とすることは危険です。例えば感染率3%の場合、正答率だけに注目すれば「どの被験体に対しても問答無用で陰性と判断する検査(もはや検査とは言えないが)」の方が評価が高くなってしまいます(この場合の正答率は97%)。これはモデルの判断能力を正当に評価できているとは言えませんし、検査の本来の目的は「感染者を(なるべく高い精度で)見逃さないこと」や「被験者が感染していないことを(なるべく確からしく)保証すること」だろうと思いますので、目的に即した評価になっているとも考えにくいです。

例えば「陽性のサンプルを見逃さない」ことが目的ならば、この場合の適切なアプローチは、対象とするサンプルの分布を把握した上で「感度(陽性サンプルを見逃さない度)を高めつつ適合率(検査結果"陽性"の確からしさ)を落とさない」という方針になると考えられます(感度と適合率のトレードオフについての説明は、ここでは省略します)。

 

4. まとめ

ということで、以下の2点を要点として記事を書き連ねてきました。

  • 2値分類の評価指標がややこしいので表にまとめた
  • 目的に応じて適切な評価指標を選ぶのが大事

ROC曲線やAR値についてはまたいつかまとめたいです。特に後者は意外と情報が少ないです。使う分野が限られているからでしょうかね。ROCとの違いなど、自分なりに備忘録としてまとめる必要性を感じています。

f1スコアなどの評価指標については、ググれば大体わかるので別段まとめる予定はないです。

 

加筆修正は必要に応じて随時行います。

本記事はあくまで個人的な備忘録として記載していますが、間違い等あれば指摘いただけますと幸いです。

 

 

 

*1:最近医療系の誤情報とか厳しいので、特定の病気を取り上げることはしませんよという体裁ですが、ぶっちゃけ○ンフル○ンザを想定しています。

*2:この数字はこちらインフルエンザの検査精度に関する論文からお借りしたものです。

https://www.ncbi.nlm.nih.gov/pubmed/22371850  

*3:以下のサイトによれば2019年9月〜2020年1月頭までの累積の推定患者数と2019年10月1日現在の人口統計を元に算出した患者率は約2.7%とのことです。 

https://kansensho.jp/pc/article.html?id=IE00000448&ssl=on&ssl=on