『勿枉勿縱』:混淆矩陣、precision、recall 及其他

如果設計一個偵測對象是不是『狗』的模型,把狗錯認成蛋糕就是 false negative,把蛋糕認成狗就是 false positive。

我們都聽過『勿枉勿縱』這個說法。一般來說我們希望模型給出答案的『正確率』最高,但是有些情況下,『正確率』不是唯一的標準。本篇介紹與『正確率』(以及『錯誤率』)相關的一些術語和概念,無論是平常工作、生活都會碰到,也是資料分析面試常常出現的考題。


混淆矩陣(confusion matrix)

簡單舉例,對於一個較為罕見的現象(例如 1/10,000 的受測者才會有的疾病),如果追求『正確率』,只要讓模型全部猜『陰性』(沒有疾病),就可以達到很高的正確率,但是這樣做是完全沒有意義的。測試的『正確』,應該要分兩個情況考慮:

  1. 實際上是『陽性』,被正確測出(True Positive)
  2. 實際上是『陰性』,被正確測出(True Negative)

同樣的,錯誤也可以分為 False Positive 和 False Negative 兩種。

這四種案例可以以『混淆矩陣』(confusion matrix)表達。

『混淆矩陣』(confusion matrix)。依照實際情況和模型給出的答案,可以將所有案例歸類為真陽性,假陽性,真陰性,假陰性四種。

一般說的『正確率』(accuracy),指的是兩種正確案例數佔所有案例的比例:(TN + TP)/ (TN + TP + FN + FN)。

所謂『陰性』、『陽性』是由我們自己定義的,通常偵測為某種目標以 『陽性』表示,例如常見的疾病測試。如果設計一個偵測對象是不是『狗』的模型,也可能會用『陽性』表示是狗。但沒有絕對標準,例如偵測『詐欺行為』的模行就用『陽性』表示詐欺行為,同樣的模型也可以說成是偵測『非詐欺行為』並用陽性表示『非詐欺行為』。

Precision vs. Recall

除了正確率,我們通常還會關心模型或是測試的兩種表現。

Precision:所有模型說是陽性的案例中,多少是真的陽性。也就是 TP/(TP + FP)

Recall:所有真的陽性案例中,有多少被模型正確指出。也就是 TP/(TP + FN)

當樣本不平衡(sample imbalance;例如前面說的疾病測試案例)嚴重時,只看正確率可能會很有誤導性。理想的測試,應該要在 Precision vs. recall 兩種指標中取得平衡。至於具體怎麼做,應該要考慮實際情況,在商業環境中,可以估計 precision 和recall 各自的重要性(例如對某個關鍵 kpi 的影響),分別給予權重,設計一個綜合指標。

F1-score 就是綜合指標的一個例子。F1 就是 precision 和 recall 的調和平均數(harmonic mean)。調和平均數的特點就是受到『很小的數』的影響較大。當你希望兩種指標都表現不錯,尤其是不要有一個太差時,就可以使用 F1-score。

ROC curve and AUC

類似的概念,在不同領域(機器學習)也常以 ROC curve(receiver operating characteristic curve)表示。ROC 以兩個指標構成:

False Positive Rate:(FP)/(FP + TN) 也就是所有實際上是陰性案例會被錯誤歸類為陽性的比例,越高表示測試越不準。

True Positive Rate:(TP)/(TP + FN) 也就是所有實際上為陽性的案例,會被正確歸類的比例,越高表示測試越準確。

同一套測試方法,可以使用不同的參數門檻,而得到很多個 False Positive Rate 和 True Positive Rate 的組合;把這些組合畫在一個平面上,就可以得到 ROC curve。

ROC 曲線的一定會經過兩個點:(0, 0),即設置很高的門檻,不管怎樣都測試結果都是陰性,以及(1, 1),即設置很低的門檻,不管怎樣測試結果都為陽性。而曲線中間的表現為測試的特質之一。

上圖中,灰色線和綠色線可以代表兩種不同測試法,例如:用 BMI 或是 『家用體重計測出的體脂肪率』來判定一個人是否屬於『肥胖』。可以看出,在 false positive rate 同樣處於中間值的條件下,綠色線 true positive rate 越高,所以看起來綠色線代表的測試是比較好的測試。

每一種測試都可以有一個 ROC,而 AUC,Area Under the ROC Curve,就可以用來量化比較不同測試的表現。AUC 越高,大約表示測試越好。

其他術語

Type I vs. type II error

Type I error:也就是 False Positive,假陽性。Alpha = FP/(TN + FP),表示假陽性的機率,也就是其實是陰性被認為是陽性的機率。 

Type II error:也就是 False Negative,假陰性。Beta = FN/(TP +FN),表示假陽性的機率,也就是其實是陽性被認為是陰性的機率。

Specificity and sensitivity

Specificity:True positive rate = TP/(TP+ FN),有病的人被正確測出的機率。

Sensitivity:True negative rate = TN/(TN+ FP),沒病的人被正確排除的機會。