AUC原理
一、AUC起源
AUC是一種用來度量分類模型好壞的一個標準。這樣的標準其實有很多,例如:大約10年前在 machine learning文獻中一統天下的標準:分類精度;在信息檢索(IR)領域中常用的recall和precision,等等。其實,度量反應了人們對」 好」的分類結果的追求,同一時期的不同的度量反映了人們對什麼是」好」這個最根本問題的不同認識,而不同時期流行的度量則反映了人們認識事物的深度的變 化。近年來,隨著machine learning的相關技術從實驗室走向實際應用,一些實際的問題對度量標準提出了新的需求。特別的,現實中樣本在不同類別上的不均衡分布(class distribution imbalance problem)。使得accuracy這樣的傳統的度量標準不能恰當的反應分類器的performance。
舉個例子:測試樣本中有A類樣本90個,B 類樣本10個。分類器C1把所有的測試樣本都分成了A類,分類器C2把A類的90個樣本分對了70個,B類的10個樣本分對了5個。則C1的分類精度為 90%,C2的分類精度為75%。但是,顯然C2更有用些。
另外,在一些分類問題中犯不同的錯誤代價是不同的(cost sensitive learning)。這樣,默認0.5為分類閾值的傳統做法也顯得不恰當了。
為了解決上述問題,人們從醫療分析領域引入了一種新的分類模型performance評判方法——ROC分析。
ROC分析本身就是一個很豐富的內容,有興趣的讀者可以自行Google。
二、ROC曲線
roc曲線:接收者操作特徵(receiveroperating characteristic),roc曲線上每個點反映著對同一信號刺激的感受性。
橫軸:負正類率(false postive rate FPR)特異度,劃分實例中所有負例佔所有負例的比例;(1-Specificity)
縱軸:真正類率(true postive rate TPR)靈敏度,Sensitivity(正類覆蓋率)
2針對一個二分類問題,將實例分成正類(postive)或者負類(negative)。但是實際中分類時,會出現四種情況.
(1)若一個實例是正類並且被預測為正類,即為真正類(True Postive TP)
(2)若一個實例是正類,但是被預測成為負類,即為假負類(False Negative FN)
(3)若一個實例是負類,但是被預測成為正類,即為假正類(False Postive FP)
(4)若一個實例是負類,但是被預測成為負類,即為真負類(True Negative TN)
TP:正確的肯定數目
FN:漏報,沒有找到正確匹配的數目
FP:誤報,沒有的匹配不正確
TN:正確拒絕的非匹配數目
列聯表如下:
由上表可得出橫,縱軸的計算公式:
(1)真正類率(True Postive Rate)TPR: TP/(TP+FN),代表分類器預測的正類中實際正實例佔所有正實例的比例。Sensitivity
(2)負正類率(False Postive Rate)FPR: FP/(FP+TN),代表分類器預測的正類中實際負實例佔所有負實例的比例。1-Specificity
(3)真負類率(True Negative Rate)TNR: TN/(FP+TN),代表分類器預測的負類中實際負實例佔所有負實例的比例,TNR=1-FPR。Specificity
假設採用邏輯回歸分類器,其給出針對每個實例為正類的概率,那麼通過設定一個閾值如0.6,概率大於等於0.6的為正類,小於0.6的為負類。對應的就可以算出一組(FPR,TPR),在平面中得到對應坐標點。隨著閾值的逐漸減小,越來越多的實例被劃分為正類,但是這些正類中同樣也摻雜著真正的負實例,即TPR和FPR會同時增大。閾值最大時,對應坐標點為(0,0),閾值最小時,對應坐標點(1,1)。
如下圖中實線為ROC曲線,線上每個點對應一個閾值。
橫軸FPR:1-TNR,1-Specificity,FPR越大,預測正類中實際負類越多。
縱軸TPR:Sensitivity(正類覆蓋率),TPR越大,預測正類中實際正類越多。
理想目標:TPR=1,FPR=0,即圖中(0,1)點,故ROC曲線越靠攏(0,1)點,越偏離45度對角線越好,Sensitivity、Specificity越大效果越好。
三、繪製ROC曲線
假設已經得出一系列樣本被劃分為正類的概率,然後按照大小排序,下圖是一個示例,圖中共有20個測試樣本,「Class」一欄表示每個測試樣本真正的標籤(p表示正樣本,n表示負樣本),「Score」表示每個測試樣本屬於正樣本的概率。
接下來,我們從高到低,依次將「Score」值作為閾值threshold,當測試樣本屬於正樣本的概率大於或等於這個threshold時,我們認為它為正樣本(預測標籤),否則為負樣本(預測標籤)。
舉例來說,對於圖中的第4個樣本,其「Score」值為0.6,那麼樣本1,2,3,4都被認為是正樣本(預測標籤),因為它們的「Score」值都大於等於0.6,而其他樣本則都認為是負樣本(預測標籤)。每次選取一個不同的threshold,我們就可以得到一組FPR和TPR,即ROC曲線上的一點。這樣一來,我們一共得到了20組FPR和TPR的值,將它們畫在ROC曲線的結果如下圖:
AUC(Area under Curve):Roc曲線下的面積,介於0.1和1之間。Auc作為數值可以直觀的評價分類器的好壞,值越大越好。
首先AUC值是一個概率值,當你隨機挑選一個正樣本以及負樣本,當前的分類算法根據計算得到的Score值將這個正樣本排在負樣本前面的概率就是AUC值,AUC值越大,當前分類算法越有可能將正樣本排在負樣本前面,從而能夠更好地分類。
接下來,我們來具體一個實現的列子:
sklearn給出了一個計算roc的例子:
通過計算,得到的結果(TPR, FPR, 截斷點)為
(1). 分析數據
y是一個一維數組(樣本的真實分類)。數組值表示類別(一共有兩類,1和2)。我們假設y中的1表示反例,2表示正例。即將y重寫為:
score即各個樣本屬於正例的概率。
(2). 針對score,將數據排序
(3). 將截斷點依次取值為score值
將截斷點依次取值為0.1, 0.35, 0.4, 0.8時,計算TPR和FPR的結果。
3.1. 截斷點為.01
說明只要score>=0.1,它的預測類別就是正例。
此時,因為4個樣本的score都大於等於0.1,所以,所有樣本的預測類別都為P。
TPR = TP/(TP+FN) = 1
FPR = FP/(TN+FP) = 1
3.2. 截斷點為0.35
說明只要score>=0.35,它的預測類別就是P。
此時,因為4個樣本的score有3個大於等於0.35。所以,所有樣本的預測類有3個為P(2個預測正確,1一個預測錯誤);1個樣本被預測為N(預測正確)。
TPR = TP/(TP+FN) = 1
FPR = FP/(TN+FP) = 0.5
3.3. 截斷點為0.4
說明只要score>=0.4,它的預測類別就是P。
此時,因為4個樣本的score有2個大於等於0.4。所以,所有樣本的預測類有2個為P(1個預測正確,1一個預測錯誤);2個樣本被預測為N(1個預測正確,1一個預測錯誤)。
TPR = TP/(TP+FN) = 0.5
FPR = FP/(TN+FP) = 0.5
3.4. 截斷點為0.8
說明只要score>=0.8,它的預測類別就是P。所以,所有樣本的預測類有1個為P(1個預測正確);3個樣本被預測為N(2個預測正確,1一個預測錯誤)。
四、AUC的計算
1. 最直觀的,根據AUC這個名稱,我們知道,計算出ROC曲線下面的面積,就是AUC的值。事實上,這也是在早期 Machine Learning文獻中常見的AUC計算方法。由於我們的測試樣本是有限的。我們得到的AUC曲線必然是一個階梯狀的。因此,計算的AUC也就是這些階梯 下面的面積之和。這樣,我們先把score排序(假設score越大,此樣本屬於正類的概率越大),然後一邊掃描就可以得到我們想要的AUC。但是,這麼做有個缺點,就是當多個測試樣本的score相等的時候,我們調整一下閾值,得到的不是曲線一個階梯往上或者往右的延展,而是斜著向上形成一個梯形。此時,我們就需要計算這個梯形的面積。由此,我們可以看到,用這種方法計算AUC實際上是比較麻煩的。
2. 一個關於AUC的很有趣的性質是,它和Wilcoxon-Mann-Witney Test是等價的。而Wilcoxon-Mann-Witney Test就是測試任意給一個正類樣本和一個負類樣本,正類樣本的score有多大的概率大於負類樣本的score(在實際預測過程中,分類器總是分別給正負樣本一個概率(score)值,並根據設定的閾值,將樣本預測為正或負樣本標籤)。有了這個定義,我們就得到了另外一中計算AUC的辦法:得到這個概率。我們知道,在有限樣本中我們常用的得到概率的辦法就是通過頻率來估計之。這種估計隨著樣本規模的擴大而逐漸逼近真實值。這和上面的方法中,樣本數越多,計算的AUC越準確類似,也和計算積分的時候,小區間劃分的越細,計算的越準確是同樣的道理。具體來說就是統計一下所有的 M×N(M為正類樣本的數目,N為負類樣本的數目)個正負樣本對中,有多少個組中的正樣本的score大於負樣本的score。當二元組中正負樣本的 score相等的時候,按照0.5計算。然後除以MN。實現這個方法的複雜度為O(n^2)。n為樣本數(即n=M+N)
3. 第三種方法實際上和上述第二種方法是一樣的,但是複雜度減小了。它也是首先對score(預測為正標籤的概率值或得分)從大到小排序,然後令最大score對應的sample的rank為n=M+N,第二大score對應sample的rank為n-1,以此類推。然後把所有的正類樣本的rank相加,再減去M-1種兩個正樣本組合的情況。得到的就是所有的樣本中有多少對正類樣本的score大於負類樣本的score。然後再除以M×N。即
特別需要注意的是,再存在score相等的情況時,對相等score的樣本,需要 賦予相同的rank(無論這個相等的score是出現在同類樣本還是不同類的樣本之間,都需要這樣處理)。具體操作就是再把所有這些score相等的樣本 的rank取平均。然後再使用上述公式。