? ? ? 每次做完二值分類模型(eg: Logistic Regression, Decision Tree, Neural Network etc.),我們經常會面對一連串的模型驗證指標,最常用的有ROC&AUC、Gini、PS、K-S等等。那我們不禁會問:
1. 這個指標怎么定義?
2.?怎么實現指標計算?
3.?為什么用這個指標?
4. 怎么用它評價模型?
?事實上,如果不明白這些評估指標的背后的直覺,就很可能陷入一種機械的解釋中,不敢多說一句,就怕哪里說錯。在這里就通過這篇文章,針對上述4個問題,介紹一下ROC&AUC。
問題1: ROC&AUC的定義分別是什么?
ROC曲線全稱為受試者工作特征曲線 (receiver operating characteristic curve),它是根據一系列不同的二分類方式(分界值或決定閾),以真陽性率(敏感性)為縱坐標,假陽性率(1-特異性)為橫坐標繪制的曲線。
???? AUC(Area Under Curve)被定義為ROC曲線下的面積。我們往往使用AUC值作為模型的評價標準是因為很多時候ROC曲線并不能清晰的說明哪個分類器的效果更好,而作為一個數值,對應AUC更大的分類器效果更好。
注意:ROC是一條曲線是一條曲線啊,并不是一個值啊!真正通過計量手段比較模型功效的是AUC!!
問題2: AUC是如何計算得到的?
? ? ? 既然我們已經了解到AUC其實就是ROC曲線下的面積,那我們首先要理解ROC曲線從何而來,這其中必定蘊含了ROC&AUC蘊含的價值。
作為理解ROC曲線的鋪墊,我們還要先了解一下混淆矩陣(Confusion Matrix)。顯然,一個完美的二分類模型就是,如果一個客戶實際上屬于類別good,也預測成good(True Positive類),處于類別bad,也就預測成bad(True Negative類),也就是完全預測準確。但從實際模型情況來看,往往會有一些實際上是good的客戶,經過我們的模型,被預測為bad(False Negative類),對一些bad的客戶,卻預測他為good(False Positive類)。事實上,我們需要知道所建的模型到底預測對了多少,預測錯了多少,然而混淆矩陣就把所有這些信息,都歸到這樣一個表里。
實際數據中,客戶只有good/bad兩種可能,模型預測結果同樣也只有這兩種可能,可能匹配可能不匹配。匹配的好說,Negative預測為Negative,或者?Positive預測為Positive,這就是True Negative(其中Negative是指預測成Negative)和True Positive(其中Positive是指預測成Positive)的情況。
? ? ? ?同樣,犯錯也只有兩種情況。實際是Positive,預測成Negative ,這就是False Negative;實際是Negative,預測成Positive,這就是False Positive;
明白這些概念后,不難理解以下幾組常用的評估指標:
(事實上ROC曲線只用到其中的3和4)
1. 準確率accuracy: 針對整個預測情況。預測正確的/總實例數 = (TP+TN)/(P+N)
2. 誤分類率error rate: 針對整個情況。預測錯誤的/總實例數 = (FP+FN)/(P+N)
3. 召回率recall/敏感性sensitivity: 針對good的正確覆蓋了。預測對的good實例/實際good的實例 = TP/P
4. 特異性specificity: 針對bad的預測正確率。預測對的bad實例/實際的bad實例數 = TN/N
5. 命中率precision: 針對good的預測正確率。預測對的good實例/預測的good實例數 = TP/(TP+FP)
6. Type I error: False Discovery Rate(FDR, false alarm) = 1- precision
7. Type II error: miss rate = 1- sensitivity
? ? ? 理解了混淆矩陣后,ROC曲線就不難理解了。事實上,ROC曲線就是不同的閾值下,敏感性(Sensitivity)和1-特異性(Specificity)的關系曲線。其中ROC曲線的橫軸為(1-特異性),即1-預測對的bad實例/實際的bad實例數;縱軸為敏感性,即預測對的good實例/實際good的實例,易知ROC曲線的橫軸縱軸的值域均為[0,1]。
下面我們從ROC曲線橫軸值從0到1取三個點進行展示,以計算對應的縱軸值:
1. 1-特異性=0
?1-特異性=0 意味著預測對的bad實例/實際的bad實例數=1,也就是說所有bad都被預測為bad,如上圖所示。此時,對應的縱軸值敏感性=TP/P=0.45。因此對應ROC曲線上的點(0,0.45)。
2. 0<1-特異性<1
? ? ? 隨著橫軸值從0到1的增加,通過上圖可以表達為分割線的左移,如下圖。
?可以看到,隨著分割線的左移,也就是特異性逐漸減小,敏感性則逐漸增加。此時1-特異性=0.2,對應的敏感性=0.85。因此對應ROC曲線上的點(0.2,0.85)。
3. 1-特異性—>1
?隨著分界線的繼續左移,達到樣本分數最小值時,所有樣本都被預測為good,此時1-特異性=0.98,對應的縱軸值敏感性=,1。對應ROC曲線上的點(0.98,1)。
? ? ? 好了,每個點都能畫了,那ROC曲線也就不在話下了,AUC的計算也就順其自然的進行了。
? ? ? 實際應用中,對于最常用的Logistic regression,SAS的PROC LOGISTIC可以輕松解決ROC圖像繪制以及AUC計算的問題。
代碼如下
proc logistic?data=dataname?plots(only)=roc;
model?y=x1 x2 x3... xn;
run;
、
運行程序即可得到ROC曲線以及相應AUC=0.8005。
問題3: AUC值和模型功效有何關系?
?我們不妨先固定某一橫軸值,也就是說固定了分割線相對bad樣本的位置關系,根據敏感性的定義(敏感性=預測對的good實例/實際good的實例 ),不難發現在有相等橫軸值的情況下,縱軸值(敏感度)越大,模型功效越好。
? ? ??下圖中,對于相同的橫軸值(固定壞樣本分布和分割線),若模型的好樣本結果的分布情況為Distribution2,其相應的縱軸值顯然大于Distribution1的情況,也就是y2>y1。 同樣,任意移動分割線(也就是對任意橫軸值),都可以得到Distribution2的縱軸值大于等于Distribution1。那也很顯然情況2的模型比情況1具備更強的區分能力。這是最簡單的比較情況,如果兩個模型并不是對于任意橫軸值都存在一致的縱軸值大小區分,我們該怎么比較呢?
這里我們再來回顧一下AUC是什么。AUC事實上是ROC曲線下的面積,事實上也是敏感性在x屬于[0,1]區間內的積分!既然對于每個固定橫軸值,都存在縱軸值越大模型功效越好這個說法,那么通過計量面積來比較模型的功效依舊成立,同時AUC還簡化了指標的維度,將2維的ROC圖轉化為1維數值,簡化的同時還提供了模型與模型之間比較的契機,這也就很容易理解我們為什么要使用AUC值來展示模型的區分能力了!
問題4: 如何使用AUC值評價模型?
? ? ? ROC曲線下的面積值(AUC)正常情況下在0.5和1之間。應用中通常使用以下標準評價模型功效。
AUC?評價
? ? ? ?0.9-1? ? ? ? ? ? 高準確性
? ? ?0.7-0.9? ? ? ? 有一定準確性
? ? ?0.5-0.7? ? ? ? 有較低準確性
? ? ? ?0-0.5? ? ? 不符合真實情況
? ? ? ?事實上,當模型的ROC=1時,模型將所有好壞樣本完全分離,也就是說低分區全是bad樣本,高分區全是good樣本,兩組樣本在得分上沒有交集,這也被成為“完美模型”。當然,在實際建模中,“完美模型”顯然是不存在的。
? ? ? ?當模型的ROC=0.5時,模型實際上相當于一個隨機排序模型,也就是和說生成隨機數評分沒啥區別,因此無法對我們的模型使用場景提供支持。