推薦閱讀時間:10min~12min
文章內容:解讀二元分類模型各種評估指標
在分類模型中,有很多關於模型性能的評估指標(evaluation metric),比如 accuracy、precision、recall、f1-score、roc、auc、prc 等等。這裡慢慢梳理下這些指標的含義以及用途。
混淆矩陣介紹這些概念之前先來介紹一個概念:混淆矩陣(confusion matrix)。對於 k 元分類,其實它就是一個k x k的表格,用來記錄分類器的預測結果。對於常見的二元分類,它的混淆矩陣是 2x2 的。
假設要對 15 個人預測是否患病,使用 1 表示患病,使用 0 表示正常。預測結果如下:
預測值:111110000011101真實值:011011001010100將上面的預測結果轉為混淆矩陣,如下:
上圖展示了一個二元分類的混淆矩陣,從該混淆矩陣可以得到以下信息:
二元分類問題可以獲得 True Positive(TP,真陽性)、False Positive(FP,假陽性)、 False Negative(FN,假陰性) 和 True Negative(TN,真陰性)。這四個值分別對應二元分類問題的混淆矩陣的四個位置。
小技巧:上面的這四個概念經常會被搞混淆(難道混淆矩陣的名稱就是這麼來的?),這裡有個小方法幫你記住它。在醫學上,一般認為陽性是患病,陰性是正常。所以只要出現「陽性」關鍵字就表示結果為患病,此外,陽性也分為真陽性和假陽性,從名稱就可以看出:真陽性表示確確實實的陽性,也就是說實際為陽性(患病),預測也為陽性(患病);假陽性表示不真實的陽性,也就是說實際為陰性(正常),預測為陽性(患病)。真陰性和假陰性也可以按照上面的方式來簡單理解。
很明顯,這裡的 TP=5,FP=2,FN=4,TN=4。
評估指標說完混淆矩陣後,得到了 TP、FP、FN、TN,通過這四個概念,可以計算出各種評估指標。
普及一些基本概念:有時候「陽性」、「真」、「正類」、「1」 指的是一回事,「陰性」、「假」、「負類」、「0」指的也是一回事。例如模型對這個樣本的預測結果為 1,可以認為模型對這個樣本的預測結果為真、或者為正類、或者為陽性,實質上說的都是一個意思。
accuracyaccuracy 翻譯成中文一般叫準確率,它指的是模型的預測結果中正確的比例。
一般情況下,accuracy 越高,說明模型的效果越好。
precisionprecision 翻譯成中文一般叫精確率,它指的是模型預測為真,實際也為真的樣本數量佔模型預測所有為真的樣本數量的比例。
一般情況下,precision 越高,說明模型的效果越好。
recallrecall 翻譯成中文一般叫召回率,有的地方會叫查全率,它指的是模型預測為真,實際也為真的樣本數量佔實際所有為真的樣本數量的比例。
一般情況下,recall 越高,說明有更多的正類樣本被模型預測正確,模型的效果越好。
F1-scoreF1-score 也叫 F1 值,它是綜合考慮 precision 和 recall 後的結果,並且兩者的權重一致。
一般情況下,F1-score 越高,說明模型的效果越好。
Fa-scoreFa-score 是 F1-score 更一般的形式,它表示在生成得分過程中,recall 的權重是 precision 權重的阿爾法倍。
一般情況下,F1-score 越高,說明模型的效果越好。
TPR 是 True Positive Rate 的縮寫,翻譯成中文一般叫真陽性率,有的地方會叫 sensitivity(敏感性),說的都是一個意思,它的計算方式與 recall 一樣,指的是模型預測為真,實際也為真的樣本數量佔實際所有為真的樣本數量的比例。
一般情況下,TPR 越高,說明有更多的正類樣本被模型預測正確,模型的效果越好。
FPRFPR 是 False Positive Rate 的縮寫,翻譯成中文一般叫假陽性率,它指的是模型預測為真,實際為假的樣本數量佔實際所有為假的樣本的數量的比例。
一般情況下,FPR 越低,說明有更多的負類樣本被模型預測正確,模型的效果越好。
TNRTNR 是 True Negative Rate 的縮寫,翻譯成中文一般叫真陰性率,有的地方會叫 specificity(特異性),它指的是模型預測為假,實際也為假的樣本數量佔實際所有為假的樣本數量的比例。
一般情況下,TNR 越高,說明有更多的負類樣本被模型預測正確,模型的效果越好。
FNRFNR 是 False Negative Rate 的縮寫,翻譯成中文一般叫假陰性率,它指的是模型預測為假,實際為真的樣本的數量佔實際所有為真的樣本的數量的比例。
一般情況下,FNR 越低,說明有更多的正類樣本被模型預測正確,模型的效果越好。
ROC一般說的 ROC (receiver operating characteristic curve) 都是指 ROC 曲線。ROC曲線的縱坐標為 TPR(Talse Positive Rate,真陽性率),橫坐標為 FPR(False Positive Rate,假陽性率)。
如何得到 ROC 曲線呢?可以看到,ROC 曲線是由一系列 (FPR, TPR)點構成的,但一個特定的分類器,只得到一個分類結果,即只有一組 (FPR, TPR),如何得到多個呢?
我們都知道,一般分類器預測每個樣本時可以輸出該樣本屬於正類(也就是1)的概率值,概率值的範圍在 (0-1) 之間,一般閾值(threshold)為 0.5,也就是概率值大於等於 0.5 的認為是正類,否則是負類。現在我們將模型對所有樣本的預測值(屬於正類的概率值)降序排列,然後依次將預測的概率值作為閾值,每次得到該閾值下模型預測結果為正類、負類的樣本數,然後生成一組 (FPR, TPR) 值,這樣就可以得到 ROC 曲線上的一點,最後將所有的點連接起來就出現了 ROC 曲線。很明顯,閾值設置的次數越多,就會生成更多的 (FPR, TPR) 值,畫出的 ROC 曲線也就越光滑。也就是說 ROC 曲線的光滑程度與閾值設置次數的多少有絕對的關係,與樣本數量沒有必然聯繫。現實中,我們畫出的 ROC 曲線多數都是不光滑的。
來看下 ROC 曲線中的幾個特殊點和特殊的線。
第一個點 (0, 1),即 FPR = 0,TPR = 1,這意味著 FP(假陽性)=0, FN(假陰性)=0,這就是一個完美的分類器,因為能夠對所有的樣本正確分類。
第二個點 (1, 0),即 FPR = 1,TPR = 0,這意味著 TN(真陰性)=0, TP(真陽性)=0,這是一個非常糟糕的分類器,因為所有的預測結果都是錯誤的。
第三個點 (0, 0),即 FPR = 0,TPR = 0,這意味著 FP(假陽性)=0, TP(真陽性)=0,這說明模型將所有樣本都預測為負類。
第四個點 (1, 1),即 FPR = 1,TPR = 1,這意味著 FN(假陰性)=0, TN(真陰性)=0,這說明模型將所有樣本都預測為正類。
通過上面的分析可以得到一個結論:ROC 曲線越靠近左上角,模型性能越好。
特殊的線:y = x,這條線上的所有的點都表示模型的區分能力與隨機猜測沒有差別。
AUCAUC(Area Under Curve)被定義為ROC曲線下的面積,很明顯,AUC 的結果不會超過 1,通常 ROC 曲線都在 y = x 這條直線上面,所以,AUC 的值一般在 0.5 ~ 1 之間。
AUC 的數值與每個預測概率的數值大小無關,在乎的是每個預測概率的排序。舉個例子,隨機挑選一個正樣本以及一個負樣本,分類器對這兩個樣本進行預測得到每個樣本屬於正類的概率值,根據概率值對樣本進行排序後,正樣本排在負樣本前面的概率就是 AUC 值。極端情況,如果 AUC = 1,意味著按照模型對所有樣本的預測值降序排序後,所有正樣本都排在負樣本前面。
如果 AUC 小於 0.5,要麼是預測標籤設置反了,要麼是模型效果真的很差。
一般情況下,AUC 值越高,模型效果越好。
PRCPRC (precision recall curve) 一般指 PRC 曲線,PRC 曲線的縱坐標為 precision,橫坐標為 recall。它的生成方式與 ROC 曲線類似,也是取不同的閾值(threshold)來生成不同的坐標點,最後連接起來生成。
來看下一個特殊的點(1, 1),即 recall=1,precision=1,這意味著 FN=0,FP=0,此時分類器模型的效果非常完美。由此可以知道,越靠近右上角,說明模型效果越好。
由於 recall 與 TPR 是一個意思,所以 PRC 曲線的橫坐標與 ROC 曲線的縱坐標一樣。
選擇指標為什麼要出現這麼多評估指標呢?實際上,不同的分類任務適合使用不同的指標來衡量。
例如,推薦系統中,如果希望更精準的了解客戶需求,避免推送用戶不感興趣的內容,precision 就更加重要;在疾病檢測的時候,我們不希望查漏任何一項疾病,這時 recall(TPR) 就更重要。當兩者都需要考慮時,F1-score 就是一種參考指標。
真實世界中的數據經常會面臨 class imbalance 問題,即正負樣本比例失衡,而且測試數據中的正負樣本的分布也可能隨著時間變化。根據計算公式可以推知,在測試數據出現imbalance 時 ROC 曲線能基本保持不變,而 PRC 則會出現大變化。