全面瞭解ROC曲線
一. 初識ROC曲線
1. ROC的前世今生:
ROC的全稱是“受試者工作特徵”(Receiver Operating Characteristic)曲線, 首先是由二戰中的電子工程師和雷達工程師發明的,用來偵測戰場上的敵軍載具(飛機、船艦),也就是信號檢測理論。之後很快就被引入了心理學來進行信號的知覺檢測。此後被引入機器學習領域,用來評判分類、檢測結果的好壞。因此,ROC曲線是非常重要和常見的統計分析方法。
2. “ROC 曲線”思路:
根據學習器的預測結果對樣例進行排序,按此順序逐個把樣本作爲正例進行預測,每次計算出兩個重要量的值(TPR、FPR),分別以它們爲橫、縱座標作圖。
3. AUC (Area under Curve):
ROC曲線下的面積,介於0.1和1之間,作爲數值可以直觀的評價分類器的好壞,值越大越好。
4. “混淆矩陣”:
對於二分類問題,可將樣本根據其真實類別與學習器預測類別的組合劃分爲
TP(true positive)、FP(false positive)、TN(true negative)、FN(false negative)四種情況,TP+FP+TN+FN=樣本總數。
(1)真陽性(True Positive,TP): 檢測不健康,且實際不健康;正確肯定的匹配數目;
(2)假陽性(False Positive,FP):檢測不健康,但實際健康;誤報,給出的匹配是不正確
(3)真陰性(True Negative,TN):檢測健康,且實際健康;正確拒絕的非匹配數目;
(4)假陰性(False Negative,FN):檢測健康,但實際不健康;漏報,沒有正確找到的匹配的數目。
二 .深入瞭解ROC曲線
ROC曲線其實是多個混淆矩陣的結果組合。
以疾病檢測爲例,這是一個有監督的二分類模型,模型對每個樣本的預測結果爲一個概率值,我們需要從中選取一個閾值來判斷健康與否。
定好一個閾值之後,超過此閾值定義爲不健康,低於此閾值定義爲健康,可以得出混淆矩陣。
而如果在上述模型中我們沒有定好閾值,而是將模型預測結果從高到低排序,將每次概率值依次作爲閾值,那麼就可以得到多個混淆矩陣。
對於每個混淆矩陣,我們計算兩個指標TPR和FPR,以FPR爲x軸,TPR爲y軸畫圖,就得到了ROC曲線。
一般來說,如果ROC是光滑的,那麼基本可以判斷沒有太大的overfitting,AUC面積越大一般認爲模型越好。
三 .AUC值作爲評價標準
1. AUC (Area Under Curve)
被定義爲ROC曲線下的面積,取值範圍一般在0.5和1之間。
使用AUC值作爲評價標準是因爲很多時候ROC曲線並不能清晰的說明哪個分類器的效果更好,而作爲一個數值,對應AUC更大的分類器效果更好。
2.AUC 的計算方法
非參數法:(兩種方法實際證明是一致的)
(1)梯形法則:早期由於測試樣本有限,我們得到的AUC曲線呈階梯狀。
曲線上的每個點向X軸做垂線,得到若干梯形,這些梯形面積之和也就是AUC。
(2)Mann-Whitney統計量: 統計正負樣本對中,有多少個組中的正樣本的概率大於負樣本的概率。這種估計隨着樣本規模的擴大而逐漸逼近真實值。
參數法:
(3)主要適用於二項分佈的數據,即正反樣本分佈符合正態分佈,可以通過均值和方差計算。
3.從AUC判斷分類器(預測模型)優劣的標準
·AUC = 1,是完美分類器,採用這個預測模型時,存在至少一個閾值能得出完美預測。絕大多數預測的場合,不存在完美分類器。
·0.5 < AUC < 1,優於隨機猜測。這個分類器(模型)妥善設定閾值的話,能有預測價值。
·AUC = 0.5, 跟隨機猜測一樣(例:丟銅板),模型沒有預測價值。
·AUC < 0.5, 比隨機猜測還差;但只要總是反預測而行,就優於隨機猜測。
三種AUC值示例:
總結:AUC值越大的分類器,正確率越高
4. 不同模型AUC的比較
總的來說,AUC值越大,模型的分類效果越好,疾病檢測越準確;
不過兩個模型AUC值相等 並不代表 模型效果相同,例子如下:
下圖中有三條ROC曲線,A模型比B和C都要好
下面兩幅圖中兩條ROC曲線相交於一點,AUC值幾乎一樣:
當需要高Sensitivity時,模型A比B好;
當需要高Speciticity時,模型B比A好;
四 最優零界點咋麼找
說人話,就是保證TPR高的同時FPR要儘量的小,建立max(TPR+(1-FPR))的模型。同樣有三種方法:找到距離(0,1)最近的點、Youden index和最小損耗(cost criterion)。
1.如果說Sn和Sp 分別對應於sensitivity和specificity,所有ROC曲線上的點到ROC的距離可以表示爲,讓d最小就好啦;
2.Youden index:最大化ROC曲線上的點到x軸的垂直距離(最大化TPR(Sn)和FPR(1-Sp)的差異);
3.考慮人力物力和財力(第三種方法很少用,因爲很難評估)
五.ROC的好基友——PR曲線
1.介紹
PR曲線和ROC曲線類似,ROC曲線是FPR和TPR的點連成的線,PR曲線是準確率和召回率的點連成的線,如下圖所示。
我們又知道,Recall=TPR,因此PRC的橫座標爲ROC的縱座標。
2. ROC曲線與PR曲線的取捨
相對來講ROC曲線會穩定很多,在正負樣本量都足夠的情況下,ROC曲線足夠反映模型的判斷能力。因此,對於同一模型,PRC和ROC曲線都可以說明一定的問題,而且二者有一定的相關性,如果想評測模型效果,也可以把兩條曲線都畫出來綜合評價。
對於有監督的二分類問題,在正負樣本都足夠的情況下,可以直接用ROC曲線、AUC、KS
評價模型效果。
在確定閾值過程中,可以根據Precision、Recall或者F1來評價模型的分類效果。
對於多分類問題,可以對每一類分別計算Precision、Recall和F1,綜合作爲模型評價指標。
在上圖中,(a)和(c)爲ROC曲線,(b)和(d)爲Precision-Recall曲線。
(a)和(b)展示的是分類其在原始測試集(正負樣本分佈平衡)的結果,
(c)和(d)是將測試集中負樣本的數量增加到原來的10倍後,分類器的結果。
可以明顯的看出,ROC曲線基本保持原貌,而Precision-Recall曲線則變化較大。
參考資料
https://en.wikipedia.org/wiki/Receiver_operating_characteristic
https://www.zhihu.com/question/30643044
http://www.it610.com/article/4964856.htm
http://zhwhong.ml/2017/04/14/ROC-AUC-Precision-Recall-analysis/
http://www.medicalbiostatistics.com/
ROC和AUC介紹以及如何計算AUC
ROC(Receiver Operating Characteristic)曲線和AUC常被用來評價一個二值分類器(binary classifier)的優劣。這篇博文簡單介紹ROC和AUC的特點,以及更爲深入地,討論如何作出ROC曲線圖以及計算AUC。
一.ROC曲線
需要提前說明的是,我們這裏只討論二值分類器。
對於分類器,或者說分類算法,評價指標主要有precision,recall,F-score1,以及我們今天要討論的ROC和AUC。下圖是一個ROC曲線的示例2。
正如我們在這個ROC曲線的示例圖中看到的那樣,
ROC曲線的橫座標爲false positive rate(FPR),縱座標爲true positive rate(TPR)。下圖中詳細說明了FPR和TPR是如何定義的。
接下來我們考慮ROC曲線圖中的四個點和一條線。
第一個點,(0,1)即FPR=0,TPR=1,即FN(false negative=0且FP(false positive)=0。這是一個完美的分類器,它將所有的樣本都正確分類。
第二個點,(1,0),即FPR=1,TPR=0,
類似地分析可以發現這是一個最糟糕的分類器,因爲它成功避開了所有的正確答案。
第三個點,(0,0),即FPR=TPR=0,即FP(false positive)=TP(true positive)=0,
可以發現該分類器預測所有的樣本都爲負樣本(negative)。
第四個點(1,1),分類器實際上預測所有的樣本都爲正樣本。
經過以上的分析,我們可以斷言,ROC曲線越接近左上角,該分類器的性能越好。
下面考慮ROC曲線圖中的虛線y=x上的點。
這條對角線上的點其實表示的是一個採用隨機猜測策略的分類器的結果,
例(0.5,0.5),表示該分類器隨機對於一半的樣本猜測其爲正樣本,另外一半的樣本爲負樣本。
二.如何畫ROC曲線
對於一個特定的分類器和測試數據集,顯然只能得到一個分類結果,即一組FPR和TPR結果,而要得到一個曲線,我們實際上需要一系列FPR和TPR的值,這又是如何得到的呢?
我們先來看一下Wikipedia上對ROC曲線的定義:
In signal detection theory, a receiver operating characteristic (ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.
問題在於“as its discrimination threashold is varied”。
如何理解這裏的“discrimination threashold”呢?
我們忽略了分類器的一個重要功能“概率輸出”,即表示分類器認爲某個樣本具有多大的概率屬於正樣本(或負樣本)。
通過更深入地瞭解各個分類器的內部機理,我們總能想辦法得到一種概率輸出。
通常來說,是將一個實數範圍通過某個變換映射到(0,1)區間3。
假如我們已經得到了所有樣本的概率輸出(屬於正樣本的概率),現在的問題是如何改變“discrimination threashold”?
我們根據每個測試樣本屬於正樣本的概率值從大到小排序。
下圖是一個示例,圖中共有20個測試樣本,“Class”一欄表示每個測試樣本真正的標籤(p表示正樣本,n表示負樣本),“Score”表示每個測試樣本屬於正樣本的概率4。
接下來,我們從高到低,依次將“Score”值作爲閾值threshold,當測試樣本屬於正樣本的概率大於或等於這個threshold時,我們認爲它爲正樣本,否則爲負樣本。
舉例來說,對於圖中的第4個樣本,其“Score”值爲0.6,那麼樣本1,2,3,4都被認爲是正樣本,因爲它們的“Score”值都大於等於0.6,而其他樣本則都認爲是負樣本。 每次選取一個不同的threshold,我們就可以得到一組FPR和TPR,即ROC曲線上的一點。這樣一來,我們一共得到了20組FPR和TPR的值,將它們畫在ROC曲線的結果如下圖:
當我們將threshold設置爲1和0時,分別可以得到ROC曲線上的(0,0)和(1,1)兩個點。 將這些(FPR,TPR)對連接起來,就得到了ROC曲線。當threshold取值越多,ROC曲線越平滑。
其實,我們並不一定要得到每個測試樣本是正樣本的概率值,只要得到這個分類器對該測試樣本的“評分值”即可(評分值並不一定在(0,1)區間)。
評分越高,表示分類器越肯定地認爲這個測試樣本是正樣本,而且同時使用各個評分值作爲threshold。我認爲將評分值轉化爲概率更易於理解一些。
三.AUC值的計算
AUC(Area Under Curve)被定義爲ROC曲線下的面積,顯然這個面積的數值不會大於1。又由於ROC曲線一般都處於y=x這條直線的上方,所以AUC的取值範圍在0.5和1之間。使用AUC值作爲評價標準是因爲很多時候ROC曲線並不能清晰的說明哪個分類器的效果更好,而作爲一個數值,對應AUC更大的分類器效果更好。
在瞭解了ROC曲線的構造過程後,編寫代碼實現並不是一件困難的事情。
相比自己編寫代碼,有時候閱讀其他人的代碼收穫更多,當然過程也更痛苦些。
在此推薦scikit-learn中關於計算AUC的代碼。
四.AUC意味着什麼
那麼AUC值的含義是什麼呢?根據(Fawcett, 2006),AUC的值的含義是: > The AUC value is equivalent to the probability that a randomly chosen positive example is ranked higher than a randomly chosen negative example.
這句話有些繞,我嘗試解釋一下:
首先AUC值是一個概率值,當你隨機挑選一個正樣本以及一個負樣本,當前的分類算法根據計算得到的Score值將這個正樣本排在負樣本前面的概率就是AUC值。
當然,AUC值越大,當前的分類算法越有可能將正樣本排在負樣本前面,即能夠更好的分類。
五.爲什麼使用ROC曲線
既然已經這麼多評價標準,爲什麼還要使用ROC和AUC呢?因爲ROC曲線有個很好的特性:當測試集中的正負樣本的分佈變化的時候,ROC曲線能夠保持不變。
在實際的數據集中經常會出現類不平衡(class imbalance)現象,即負樣本比正樣本多很多(或者相反),而且測試數據中的正負樣本的分佈也可能隨着時間變化。
下圖是ROC曲線和Precision-Recall曲線5的對比:
在上圖中,(a)和(c)爲ROC曲線,(b)和(d)爲Precision-Recall曲線。
(a)和(b)展示的是分類其在原始測試集(正負樣本分佈平衡)的結果,
(c)和(d)是將測試集中負樣本的數量增加到原來的10倍後,分類器的結果。
可以明顯的看出,ROC曲線基本保持原貌,而Precision-Recall曲線, 則變化較大。
說明,文中除了第一張圖來自Wikipedia外,其他的圖都來自論文(Fawcett, 2006)6截圖.
引用及其他鏈接:
1.維基百科中對ROC的介紹: http://en.wikipedia.org/wiki/Receiver_operating_characteristic
2.ROC曲線及AUC評價指標 by 冒泡的崔:http://bubblexc.com/y2011/148/
我避免將precision,recall等評價指標翻譯成中文,因爲它們可能對應多箇中文解釋,極易產生混淆。 ↩
3.圖片來源:http://en.wikipedia.org/wiki/File:Roccurves.png ↩
4.這種映射不一定都是可靠的,即你不一定真的得到了某個樣本是正樣本的概率。 ↩
5.注意這裏使用了“Score”,而不是概率,我們暫且可以認爲“Score”值就是是正樣本的概率。 ↩
6.Davis, J., & Goadrich, M. (2006, June). The relationship between Precision-Recall and ROC curves. In Proceedings of the 23rd international conference on Machine learning (pp. 233-240). ACM. ↩
7.(Fawcett, 2006),Fawcett, T. (2006). An introduction to ROC analysis. Pattern recognition letters, 27(8), 861-874.