caret::confusionMatrixの出力結果について
機械学習の勉強で「性別を身長から予測する」モデルを以下の記事を見ながら作成しました。
Chapter 28 Introduction to Machine Learning | Introduction to Data Science
モデル精度を測るためにcaret::confusionMatrix関数を使用したところ、出力結果に指標がたくさん出てきたため、意味を調べました。
出力結果は以下です。1つ1つ指標の意味を見ていきます。
>confusionMatrix(data = y_hat, reference = test_set$sex) Confusion Matrix and Statistics Reference Prediction Female Male Female 69 45 Male 50 361 Accuracy : 0.819 95% CI : (0.7834, 0.8511) No Information Rate : 0.7733 P-Value [Acc > NIR] : 0.00616 Kappa : 0.4761 Mcnemar's Test P-Value : 0.68152 Sensitivity : 0.5798 Specificity : 0.8892 Pos Pred Value : 0.6053 Neg Pred Value : 0.8783 Prevalence : 0.2267 Detection Rate : 0.1314 Detection Prevalence : 0.2171 Balanced Accuracy : 0.7345 Positive' Class : Female
confusion matrixについて
テストデータでモデルを検証した結果、下記のようなconfusion matrixが得られます。
prediction \ refefence | female | male |
---|---|---|
female | 69 | 45 |
male | 50 | 361 |
confusion matrixの各セルの名称は以下です。
prediction \ actural | Positive | Negative |
---|---|---|
Positive | TP(True Positive) | FP(False Positive) |
Negative | FN(False Negative) | TN(True Negative) |
2値分類を一般化するために、片方をPositive、もう片方をNegativeとします。ちなみにcaret::confusionMatrix関数では、ファクター型のベクトルを引数に取り、ファクターのラベルをアルファベット順にみて先の方が自動的にPositiveになります。そのため、上記の例では"Female"がPositiveになっています。
TP、FP、FN、TNは以下の意味になります。
- TP:Positiveと予測して正解がPositiveだった数(当たり)
- FP:Positiveと予測したが正解はNegativeだった数(外れ)
- TN:Negativeと予測して正解がNegativeだった数(当たり)
- FN:Negativeと予測したが正解はPositiveだった数(外れ)
confusion matrixを使用したモデル精度の検証は上記の4項目を使って指標の算出や検定を行います。
accuracy
accuracyは以下の計算方法で求められます。なお、overall accurayなどともよばれます。
これは訓練で使用したデータのうち、正しく男性、女性を判定できた割合です。
この数値は高ければ高いほど精度が高いといえますが、注意が必要なのが数値例のように、データが片方に偏っている(男性の方がかなり多い)場合、片方の精度が高くてももう片方の精度がよくないことがあります。
実際に男性と女性に分けて以下のように予測精度を見ると、女性のほうの精度が明らかに低いことがわかります。
Femaleのaccuracy :
Maleのaccuracy :
なお、ここで「Femaleのaccuracy」は後段ででてくるsensitivityに、「Maleのaccuracy」はspecificityに対応しています。
95%CI
accuracyの信頼区間です。
caret::confusionMatrixは関数の中でbinom.test関数を呼び出してaccuracyの計算を行っています。
信頼区間は以下の計算結果と一致します。
binom.test((69 + 361), 525, p = 0.5)
p=0.5というのは仕様で、一般的に二項分布を使用して信頼区間を求める際にはこのようにするようです。以下の記事をご参照ください。
No Information Rate(NIR)
以下の式で計算されます。
この値は「ランダムに予測した場合の予測精度」という意味で、最初に計算したaccuracy(overall accuracy)と比較するために使用します。
「ランダムに予測した場合の予測精度」というのは、「全体の男性の割合がNIRなので、適当に対象のNIRの割合を男性、(1 - NIR)の割合を女性に振り分ければNIRの精度は出せるだろう。」というような意味です。
実際には予測する段階ではNIRは不明のため、NIRという概念はaccuracy(overall accuracy)の水準を考えるための擬似的な予測精度です。
上記の場合は男性の方が多いので男性の割合がNIRになっていますが、女性の方が多い場合は女性の割合がNIRになります。
P-Value [Acc > NIR]
accuracy > NIRを帰無仮説とする二項検定のP値です。95%CIと同様、内部でbinom.testを呼び出しています。
引数でp=NIRとなっているのに注意が必要です。
binom.test((69 + 361), 525, p = NIR, alternative = "greater")
このように、carete::confusionMatrixでは二項分布を使用して信頼区間の計算と仮説検定を行うのですが、分布の平均値pのパラメータが異なっています。
これは仕様なのですが、なぜ違うのか、この違いがどのような影響を与えるかはまだ理解できておりません。
この件については、以下で触れられております。
Kappa
ここで計算されているのはCohen's kappaです。
計算式は以下です。
計算すると以下です。
probabiliity of random agreementは、accuracyの大きさを評価するために擬似的に用意した指標で、NIRと目的は似ていますが、異なる方法で計算します。
解釈としては以下のようになります。
Femaleに予測した割合が(TP + FP) / TOTALで正解のFemaleの割合が(TP + FN) / TOTALです。
同様に、Maleに予測した割合が、(FN + TN) / TOTALで正解のMaleの割合が(FP + TN) / TOTALです。
つまり、予測する際に男女比だけ決めて後は適当に振り分けた場合の正解確率(TPとTNの領域)がprobabiliity of random agreementです。
confusion matrixで整理すると以下になります。
prediction \ refefence | female | male |
---|---|---|
female | - | |
male | - |
はの値を取り、0より大きければランダムな予測よりは精度が高いことになります。
Mcnemar's Test P-Value
Mcnemarの検定をした場合のP値です。caret::confusionMatrix内でmcnemar.test関数が呼び出され検定が行われます。
検定統計量は以下のように計算します。
これは自由度1の分布に従うため、分布で検定が行われます。
以下のように計算するとp値の0.68152が再現できます。
# chi^2 test : degree of freedom is 1 pchisq(0.168421, 1, lower.tail = FALSE) > pchisq(0.168421, 1, lower.tail = FALSE) [1] 0.6815189
以下の記事もご参照ください。
https://oku.edu.mie-u.ac.jp/~okumura/stat/mcnemar.html
マクネマー検定 - 健康統計の基礎・健康統計学
なお、Mcnemar検定はFNとFPに差があるかを検定しているため、今回の例のようにPositiveとNegativeを入れ替えても問題ない状況では検定する意味がないと思われます。Mcnemar検定を行う状況としては、上記のリンクのように何らかの施策有無の効果検証を行いたいときなどになると思います。
Sensitivity
モデルの有効性指標でFemaleに予測されたサンプルが本当のFemaleのうち何割を占めているかを表わします。
以下の記事もご参照ください。この記事のように以降の指標は疫学の文脈で特に有用と思われます。今回の例ではPositiveとNegativeをそれぞれFemale、Maleとしていますが、入れ替えても問題に本質的な影響はありません。
http://kamiyacho.org/ebm/ce204.html
Sensitivityは日本語で「敏感度」と訳すようです。
Specificity
モデルの有効性指標でMaleに予測されたサンプルが本当のMaleのうち何割を占めているかを表わします。
なお、Specificityは日本語で「特異度」と訳すようです。
Neg Pred Value
以下で計算されます。
Prevalence
以下で計算されます。
Detection Rate
以下で計算されます。
Detection Prevalence
以下で計算します。
Balanced Accuracy
SensitivityとSpecificityの平均です。
accuracyよりも小さくなりますが、「性別を身長から予測する」モデルの精度指標としてはBalanced Accuracyの方が有用と思われます。
以上
データサイエンスのための統計学入門 ―予測、分類、統計モデリング、統計的機械学習とRプログラミング
- 作者: Peter Bruce,Andrew Bruce,大橋真也,黒川利明
- 出版社/メーカー: オライリージャパン
- 発売日: 2018/02/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る