機器學習:圖文詳解模型評估指標ROC/AUC
模型訓練好,必須要通過各種指標去衡量模型的好壞,也就是模型的泛化能力。模型的評估指標有很多,筆者在剛開始學習的時候,也是搞得焦頭爛額,有時候自己理解了,但又很難跟別人解釋清楚,所以寫下這邊文章。本文主要介紹分類的模型的各種評估指標以及ROC和AUC。
1.混淆矩陣
對於二分類的模型,預測結果與實際結果分別可以取0和1。我們用N和P代替0和1,T和F表示預測正確和錯誤。將他們兩兩組合,就形成了下圖所示的混淆矩陣(注意:組合結果都是針對預測結果而言的)。
P(Positive):代表1
N(Negative):代表0
T(True):代表預測正確
F(False):代表錯誤
TP:預測為1,預測正確,即實際1
FP:預測為1,預測錯誤,即實際0
FN:預測為0,預測錯確,即實際1
TN:預測為0,預測正確即,實際0
2.準確率
準確率的定義是預測正確的結果佔總樣本的百分比
公式:準確率=(TP+TN)/(TP+TN+FP+FN)
即,綠色部分和 / ( 綠色部分和 + 紅色部分和 )
實際應用場景中,由於樣本不平衡的問題,導致了得到的高準確率結果含有很大的水分。即如果樣本不平衡,準確率就會失效。這樣就衍生出了另外兩個指標:精準率和召回率。
3.精準率
精準率(Precision)又叫查準率,是指在所有被預測為正的樣本中實際為正的樣本的概率
公式:精準率=TP/(TP+FP)
即,綠色部分 / ( 綠色部分 + 紅色部分)
4.召回率
召回率(Recall)又叫查全率,是指在實際為正的樣本中被預測為正樣本的概率
公式:召回率=TP/(TP+FN)
即,綠色部分 / (綠色部分 + 紅色部分)
以信用卡逾期為背景,召回率越高,代表實際逾期使用者被預測出來的概率越高,它的含義類似:寧可錯殺一千,絕不放過一個。所以召回率的提高,往往意味著精準率的下降。
5.F1分數
前面提到,召回率和精準率,也稱查全率和查準率,這兩個指標,我們希望他們同時都很高,但是事與願違,他們是對立的、矛盾的,這就要我們去取捨,找到一個平衡點,這就是F1分數。
F1分數找到一個平衡點,讓查全率和查準率同時達到最大值。
公式:F1 = 2 * 查準率 * 查全率 / (查準率 + 查全率)
6.靈敏度、特異度、真正率、假正率
靈敏度(Sensitivity) = TP/(TP+FN),即實際為正樣本預測成正樣本的概率
特異度(Specificity) = TN/(FP+TN),即實際為負樣本預測成負樣本的概率
真正率(TPR) = 靈敏度 = TP/(TP+FN),即實際為正樣本預測成正樣本的概率
假正率(FPR) = 1- 特異度 = FP/(FP+TN),即實際為負樣本預測成正樣本的概率
我們可以看出:
召回率 = 靈敏度 = 查全率 = 真正率 = TPR = TP/(TP+FN)
都是指:實際正樣本中預測為正樣本的概率
靈敏度/真正率:綠色部分 / (綠色部分 + 紅色部分)
(1-特異度)/假正率:綠色部分 / (綠色部分 + 紅色部分)
我們可以看出:
真正率和假正率這兩個指標跟正負樣本的比例是無關的。
所以當樣本比例失衡的情況下,準確率不如這兩個指標好用。
7.ROC曲線
ROC(Receiver Operating Characteristic)曲線,又稱接受者操作特徵曲線。
這是百度百科的圖片,可以看出,ROC曲線的橫座標是假陽性比值(假正率),縱座標是真陽性比值(真正率)。
假正率反應了模型虛報的響應程度,真正率反應了模型預測響應的覆蓋程度。所以我們希望,假正率越小,真正率越高越好,即虛報的少,覆蓋的多。也就是說,TPR越高,FPR越低,模型就越好。反應到ROC圖形上,也就是取現越陡峭,越朝著左上方突出,模型效果越好。
8.AUC值
AUC是基於ROC曲線的,被稱為曲線下面積(Area Under Curve)
如下圖所示:
在ROC曲線圖上,如果我們連線對角線,它的面積正好是0.5。對角線的實際含義是:隨機判斷響應與不響應,正負樣本覆蓋率應該都是50%,表示隨機效果。ROC曲線越陡越好,所以理想值就是1,一個正方形,而最差的隨機判斷都有0.5,所以一般AUC的值是介於0.5到1之間的。
9.程式碼實現ROC/AUC
from sklearn import metrics
from sklearn.metrics import auc
import numpy as np
y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
metrics.auc(fpr, tpr)
0.75