混同行列(confusion matrix)とは、機械学習モデルや検査等の性能を示すための方法である。2×2の表に、実際のラベル(病気である・病気でない、など)と機械学習や検査による予測結果(陽性である・陰性である、など)の組み合わせごとに、その数を書き込むことで作成する。
混同行列の書き方・見方
例として、以下のような検査を考える。
A症候群という病気があり、その病気に対する新しい検査キットが開発された。性能評価のために、A症候群の患者100人に実施すると、そのうち90人で陽性、10人で陰性となった。また、健常人1,000人を対象に実施すると、20人で陽性、980人で陰性となった。
この結果を混同行列で表示すると以下のようになる。
検査結果:陽性 | 検査結果:陰性 | |
A症候群である | 90 | 10 |
A症候群でない | 20 | 980 |
この表の各セルには名前がついており、一般化すると以下のようになる。
判定結果(+) | 判定結果(ー) | |
真の状態(+) | 真陽性(TP) | 偽陰性(FN) |
真の状態(-) | 偽陽性(FP) | 真陰性(TN) |
- 真の状態が(+)で、判定結果も(+)
- 真陽性(TP:True Positive)
- (+)の状態を正しく検知できている。
- 真の状態が(ー)で、判定結果も(-)
- 真陰性(TN:True Negative)
- (-)の状態を正しく検知できている。
- 真の状態は(-)なのに、判定結果は(+)
- 偽陽性(FP:False Positive)
- 誤って(+)と判定している(神経質すぎる)→第一種過誤
- 真の状態が(+)なのに、判定結果は(-)
- 偽陰性(FN:False Negative)
- (+)の状態を見落としている(大雑把すぎる)→第二種過誤
このうち、1.と2.が正解であり、3.と4.は不正解となる。また、同じ不正解でも、無駄に多くの陽性判定を出してしまう偽陽性のことを第一種過誤と呼び、(+)の状態を見逃してしまう偽陰性のことを第二種過誤と呼ぶ。病気の検査などにおいては、第二種過誤の方が問題とされることが多い。なぜならば、陽性が出た被験者に対して精密検査を行った結果、それが実は偽陽性であったことが判明しても「心配しすぎだった」で話が済むのに対し、陰性と判断された被験者を放っておいたら実は病気で、気付いたら手遅れだったでは取り返しがつかないからである。
混同行列から計算される指標
混同行列から、機械学習モデルや検査の性能を評価するための様々な指標を計算できる。
判定結果(+) | 判定結果(ー) | |
真の状態(+) | 真陽性(TP) | 偽陰性(FN) |
真の状態(-) | 偽陽性(FP) | 真陰性(TN) |
- 有病率(Prevalence (Rate))
- $$\frac{TP+FN}{TP+TN+FP+FN}$$
- 感度(Sensitivity)
- $$\frac{TP}{TP+FN}$$
- 特異度(Specificity)
- $$\frac{FP}{TN+FP}$$
- $$\frac{FN}{TP+FN}$$
- $$\frac{TP}{TP+FP}$$
- $$\frac{FN}{TN+FN}$$
- $$\frac{Sensitivity}{1-Specificity}$$
- $$\frac{1-Sensitivity}{Specificity}$$
以下、実際の計算例を示しながら各指標の性質を説明するために、先程のA症候群の検査の混同行列を再掲する。
検査結果:陽性 | 検査結果:陰性 | |
A症候群である | 90 | 10 |
A症候群でない | 20 | 980 |
有病率
計算例
$$\frac{90+10}{90+10+20+980}\simeq 9.1\%$$
性質
有病率は被験者の何%が病気を有しているかを表す。よって有病率は検査の性能を表すものではなく、実際の人口状況に依存する指標である。しかし、後述する通り、有病率の違いによって「よりよい検査」を作るための難易度は異なってくる。
感度・特異度
計算例
$$感度=\frac{90}{90+10}=90.0\%$$
$$特異度=\frac{980}{980+20}=98.0\%$$
性質
感度は「病気を有している人を正しく検出できる割合」、特異度は「病気を有していない人を正しく除外できる割合」である。一般に、感度の高い検査は除外診断に、特異度の高い検査は確定診断に優れているとされている。なぜならば、感度の高い検査(病気の患者の大部分を検出し、さらには健常人ですら「病気」と判断しうる、陽性が出やすい検査)でも陽性が出ない場合はほとんど病気ではないと考えてよい(除外してよい)し、特異度の高い検査(陽性が出にくい検査)でも陽性が出る場合は病気である可能性が非常に高いからである。よって、実際の病気の診断においては、感度の高い検査(便潜血:大腸癌で陽性になりやすいが、痔など他の腸疾患でも陽性となる、など)でスクリーニングを行った後、怪しいと判断された被験者に対し特異度の高い検査(下部消化管内視鏡:大腸癌を視認しないと陽性にならない、など)を行って確定診断を行うことが多い。
なお、感度は再現率(Recall)や真陽性率(TPR:True Positive Rate)と呼ばれることもある(後述)。
偽陽性率・偽陰性率
計算例
$$偽陽性率=\frac{20}{980+20}=2.0\%$$
$$偽陰性率=\frac{10}{90+10}=10.0\%$$
性質
偽陽性率は「病気でない患者に陽性判定が出る割合」、偽陰性率は「病気を有している患者に陰性判定が出る割合」である。すなわち、それぞれ第一種過誤・第二種過誤が生じる割合と考えることができる。
ROC曲線
ところで、検査を開発するにおいて、得られた検査値(血液検査のデータなど)から陽性・陰性を判定するためには、「この値を超えたら(下回ったら)陽性」というような閾値を設定する必要がある(例えば、前立腺癌の腫瘍マーカーであるPSAは、閾値4.0ng/mlを超えると危険であると判断される)。この閾値を変えて「陽性」と判断される値の範囲を広げることで偽陽性率と真陽性率(=感度)は高まるのであるが、閾値を全般的に変化された時のこの2つの指標の変化の関係を見ることで、閾値の設定に依存しない検査の性能を評価することができる。すなわち、真陽性率(高いほど良い)が上がるように閾値を変化させたときに、偽陽性率(低いほど良い)があまり上がらない検査であれば、性能が高いと言える。これを視覚的に表示するために、横軸に偽陽性率(FPR)、縦軸に真陽性率(TPR=感度)を取って値をプロットした曲線をROC曲線(Receiver Operating Characteristic Curve)と言い、機械学習モデルや検査の性能評価によく用いられる。
陽性的中率・陰性的中率
計算例
$$陽性的中率=\frac{90}{90+20}\simeq 81.8\%$$
$$陰性的中率=\frac{980}{980+10}\simeq 99.0\%$$
性質
陽性的中率は「陽性と判定された人が実際に病気を有している割合」、陰性的中率は「陰性と判断された人が実際に病気を有していない割合」である。陽性的中率は適合率(Precision)とも呼ばれる(後述)。すなわち、どちらも高いほど良い指標であり、特に陽性的中率は「偽陽性の少なさ」を表現するため、検査の性能評価でも重要視される。しかし、実際には陽性的中率を高めるのは難しいことが多い。
A症候群の患者と非患者の比は100:1,000だが、ここで患者と非患者の比が100:10,000となるB症候群の検査について考えてみよう。この病気についてもA症候群の検査と同様、感度90%・特異度98%の検査を開発したとすると、混同行列は以下のようになる。
検査結果:陽性 | 検査結果:陰性 | |
B症候群である | 90 | 10 |
B症候群でない | 200 | 9800 |
このとき、陰性的中率は \(\frac{9800}{9800+10}\simeq 99.9\%\) であるが、陽性的中率は \(\frac{90}{90+200}\simeq 31.0\%\) と大きく低下する。この理由は、以下のように考えられる。
特異度が98%ということは、病気でない人が陽性と判断される確率は2%と非常に低いのであるが、非患者の絶対数が患者の数に比べて非常に多いため、そのうちのわずか2%でも数の上では非常に大きくなる。つまり、今回は患者100人の90%よりも非患者10,000人の2%の方が大きいため、以上のように陽性的中率が50%を割る結果となったのである。
そして、実際に検査が開発されるような病気は有病率が非常に低いことが多く、B症候群のように、100人に1人が発症する疾患はむしろ「有病率が高い疾患」に分類される。そのため、陽性的中率が数%台になってしまうこともまれではない。その他、一般の機械学習・異常検知などにおいても「陽性」と判断されるべきものの割合は非常に少ないことが多く、同様の現象が起こり得る。
PR曲線
前述のROC曲線は検査の性能評価によく用いられる手法であるが、実はこのような有病率の低下による性能悪化を上手く反映することができない。すなわち、実は陽性的中率が非常に低い場合でも、ROC曲線の形状が「高性能」を示す状態に保たれてしまうことが多いのである。そこで、このように非患者数が患者数に比べて非常に多い、いわゆる「歪みの大きい」データの分析においては、性能評価のために、横軸に再現率(Recall=感度)、縦軸に適合率(Precision=陽性的中率)を取って値をプロットした曲線を参照する。再現率と適合率の間にはトレードオフの関係があり、閾値を変えて再現率を上げようとすると適合率は低下するが、この時の適合率の低下量が少ないほど優れた検査であると言える。このような曲線のことをPR曲線(Precision Recall Curve)と言う。
陽性尤度比・陰性尤度比
計算例
$$陽性尤度比=\frac{\frac{90}{90+10}}{1-\frac{980}{980+20}}=45$$
$$陰性尤度比=\frac{1-\frac{90}{90+10}}{\frac{980}{980+20}}\simeq 0.10$$
性質
それぞれの定義式に感度・特異度の定義式を代入すると
$$陽性尤度比=\frac{\frac{TP}{TP+FN}}{1-\frac{TN}{TN+FP}}=\frac{\frac{TP}{TP+FN}}{\frac{FP}{TN+FP}}$$
$$陰性尤度比=\frac{1-\frac{TP}{TP+FN}}{\frac{TN}{TN+FP}}=\frac{\frac{FN}{TP+FN}}{\frac{TN}{TN+FP}}$$
となる。TPとFP、TNとFNは、それぞれ陽性または陰性と判断された数であり、TP+FNが実際の患者数、TN+FPが非患者数に等しいことを考えると、陽性尤度比は「患者は非患者に比べて、何倍陽性と判定されやすいか」、陰性尤度比は「患者は非患者に比べて、何倍陰性と判定されやすいか」を表す指標であることがわかる。指標の意味の上ではそのような位置づけなのであるが、実際には、検査の結果を見た後に被検者が実際に病気を有している確率(=検査後確率)を求めるために使用されることが多い。
検査前確率、すなわち、検査をする前に被検者が病気を有していると考えられる確率は、有病率に等しい。このとき
$$検査前オッズ=\frac{病気を有している人数}{病気を有していない人数}$$
で定義される検査前オッズに、検査の結果が陽性であれば陽性尤度比、陰性であれば陰性尤度比を掛けることで
$$検査後オッズ=\frac{検査結果が〇性で、病気を有している人数}{検査結果が〇性で、病気を有していない人数}$$
で定義される検査後オッズを求めることができ、ここから検査後確率が計算できる。
尤度比を用いた検査後確率の計算例
$$検査前確率=有病率\simeq 9.1\%$$
$$検査前オッズ=\frac{90+10}{980+20}=0.1$$
より、検査結果が陽性の場合
$$検査後オッズ=検査前オッズ\times 陽性尤度比$$
$$=0.1\times 45=4.5$$
よって、非患者1に対して患者4.5が存在するので
$$検査後確率=\frac{4.5}{4.5+1}\simeq 81.8\%$$
である。
検査結果が陰性の場合
$$検査後オッズ=検査前オッズ\times 陰性尤度比$$
$$=0.1\times \frac{0.10}{0.98}\simeq 0.01$$
よって、非患者98に対して患者1が存在するので
$$検査後確率=\frac{1}{1+98}\simeq 1.0\%$$
となる。したがって、検査で陽性と判定された場合には被験者が病気である確率が上昇し、陰性と判定された場合には被験者が病気である確率は低下する。また、以上の結果から、検査結果が陽性である場合の検査後確率は陽性的中率に等しく、検査結果が陰性である場合の検査前確率は(1-陰性的中率)に等しいことがわかる(すなわち、尤度比を用いずとも、混同行列があれば検査後確率を直接計算できる)。
補足
以上の性質より、陽性尤度比は1より大きく、陰性尤度比は1より小さい正の値を取ることが予想されるが、万が一この条件を満たさない検査があったとしたらそれは無意味な検査になる。
また、上記のような尤度比を用いた検査後確率の計算は、ベイズの定理に基づく。
ベイズの定理から上記の計算法が導かれることの証明は、以下を参照のこと。
コメント