基礎介紹
ROC全稱是“受試者工作特征”(Receiver Operating Characteristic)。ROC曲線下的面積就是AUC(Area Under the Curve)。AUC用於衡量“二分類問題”機器學習算法的性能。介紹定義前,首先需要知道基礎相關概念:
1)分類閾值,即設置判斷樣本為正例的閾值thr,例如針對預測概率 P(y=1 | x) >= thr (常取thr=0.5) 或 預測分數 score >= thr (常取thr=0)則判定樣本為正例
2)混淆矩陣
真正例率 TPR (True Positive Rate):所有正例中,有多少被正確地判定為正。
假正例率 FPR (False Positive Rate):所有負例中,有多少被錯誤地判定為正。
其實 TPR 就是 查全率/召回率(recall)。 閾值取不同值,TPR
和FPR
的計算結果也不同,最理想情況下,我們希望所有正例 & 負例 都被成功預測 TPR=1,FPR=0,即 所有的正例預測值 > 所有的負例預測值,此時閾值取最小正例預測值與最大負例預測值之間的值即可。
TPR越大越好,FPR越小越好,但這兩個指標通常是矛盾的。為了增大TPR,可以預測更多的樣本為正例,與此同時也增加了更多負例被誤判為正例的情況。
ROC曲線
給定m+個正例和m−個反例,根據學習其預測結果對樣例 從大到小 進行排序,然后把分類閾值設為最大,即把所有的樣例均預測為反例,此時真正例率和假正例率都為0,得到標記點(FPR,TPR) = (0,0)。然后逐漸增大閾值,即依次將每個樣例划分為正例。設前一個標記點坐標為(x,y),則
若當前為真正例,則對應標記點的坐標為(x, y + 1/m+); 若當前為假正例,則對應標記點的坐標為(x + 1/m-, y);
最后一個閾值會將所有樣本預測為正例,則得到標記點 (FPR,TPR) = (1,1)。將這樣依次到的一系列 (FPR, TPR) 作圖於二維坐標系中得到的曲線,就是ROC曲線,因此,ROC曲線是一個單調曲線,而且肯定經過點(0,0)與(1,1)。如下左圖摘自西瓜書中的AUC曲線圖示例。基於有限樣本作ROC圖(b)時,可以看到曲線每次都是一個“爬坡”,遇到正例往上爬一格(1/m+),錯了往右爬一格(1/m-),顯然往上爬對於算法性能來說是最好的。
若分類器打分結果中,多個正負樣本得分是一樣,比如有10個實例得分相同,其中6個正例,4個負例,此時我們可以畫“期望”曲線,如下右圖所示。
ROC曲線分析
上圖(a)虛線表示隨機猜測算法的ROC曲線。
ROC曲線距離左上角越近,證明分類器效果越好。如果一條算法1的ROC曲線完全包含算法2,則可以斷定性能算法1>算法2。這很好理解,此時任做一條 橫線(縱線),任意相同TPR(FPR) 時,算法1的FPR更低(TPR更高),故顯然更優。
從上面ROC圖中的幾個標記點,我們可以做一些直觀分析:
我們可以看出,左上角的點(TPR=1,FPR=0),為完美分類,也就是這個醫生醫術高明,診斷全對。點A(TPR>FPR),說明醫生A的判斷大體是正確的。中線上的點B(TPR=FPR),也就是醫生B全都是蒙的,蒙對一半,蒙錯一半;下半平面的點C(TPR<FPR),這個醫生說你有病,那么你很可能沒有病,醫生C的話我們要反着聽,為真庸醫。
很多時候兩個分類器的ROC曲線交叉,無法判斷哪個分類器性能更好,這時可以計算曲線下的面積AUC,作為性能度量。
AUC的計算
ROC曲線下方由梯形組成,矩形可以看成特征的梯形。因此,AUC的面積可以這樣算:(上底+下底)* 高 / 2,曲線下面的面積可以由多個梯形面積疊加得到。AUC越大,分類器分類效果越好。
AUC = 1,是完美分類器,采用這個預測模型時,不管設定什么閾值都能得出完美預測。絕大多數預測的場合,不存在完美分類器。
0.5 < AUC < 1,優於隨機猜測。這個分類器(模型)妥善設定閾值的話,能有預測價值。
AUC = 0.5,跟隨機猜測一樣,模型沒有預測價值。
AUC < 0.5,比隨機猜測還差;但只要總是反預測而行,就優於隨機猜測。
Rank損失與AUC的關系
西瓜書中關於 Rank Loss 的定義如下,式子計算的是:對所有正例,得分比其高的反例數之和,對於得分和該正例相同的反例數量除以2,然后歸一化。
ROC曲線中,每遇到一個正例向上走一步,每遇到一個反例向右走一步。對於所有的正例,其橫坐標所代表的步數就是得分比其高的反例數。為了便於理解,我們修改ROC空間的坐標,對橫坐標乘以m-,對縱坐標乘以m+,在這個空間中每一步的刻度為1。
比如,上圖中我們可以知道正反例順序:【反,正,[正,正,反],反,正,反,正,反,正】。其中,[] 括起來的實例分數相同。
第1個正例,對應的區域1,區域1的面積為1*1=1,表示排在其前面的反例數為1。
第2個正例和第3個正例是特殊情況,它們和第2個反例得分是相同的。我們把這種情況一般化,假設有p個正例和q個反例的得分相同,那么有斜線對應的三角形的面積為q/2∗p,再加上第1個反例在第2、3個正例前面,所以再加上區域1和區域2的面積,整體就是期望斜線與縱軸圍成的面積。這和上面說的AUC計算公式的思路其實是一樣的。
所以可以得到如下等式,即 Lrank = 1 - AUC
AUC的物理意義
假設分類器的輸出是樣本屬於正類的prob/socre,則 AUC的物理意義為,任取一對正負樣本,正樣本的預測值大於負樣本的預測值的概率。
AUC物理意義的推導,可以結合AUC與Rank Loss的關系來理解。Rank Loss代表的物理意義其實是:任取一對正負樣本,負樣本的預測值大於正樣本的預測值的概率。例如,假設這時按預測值排序樣本為 【正 負 正正 負負負 正 負負】,那么“任取一對正負樣本,負樣本預測值大於正樣本預測值的概率P” 可以表示為:
上面的式子可以直接等價轉化為 Lrank 的形式,易知 AUC = 1 - Lrank 對應的物理意義即如上所述。
思考問題
1、在類不平衡的情況下,如正例90個,負例10個,直接把所有樣本分類為正,准確率達到了90%,看似准確率很高,但這顯然沒有意義,這種全猜正算法的ROC曲線是如何的?
思考:
全猜正算法直接預測所有樣本為正,即使預測所有正例=1,所有負例=1,那圖上明確的標記點其實只有(0,0)和(1,1)兩個起始點,按照上面說的相同分數取期望曲線,橫軸 和 縱軸上點其實會分別均勻地從0以 1/m- 和 1/m+ 排列到1,此時期望ROC曲線和隨機猜測是一樣的,這樣就避免了給這個傻乎乎的方法過高的正向指標。所以AUC可以處理這種類別不平衡問題的性能指標。
2、為什么ctr預估這類問題普遍使用AUC作為指標
思考:
ctr預估問題中並不會設置一個明確的閾值來得到強label(即轉化為1/0),預測分數會作為隨后給用戶推薦的item的重要排序依據,而AUC更加注重算法性能在排序上的質量。此外,ROC曲線還有一些其他的優點:1)對問題的類別分布差異不敏感,比較魯棒(參見ROC曲線 vs Precision-Recall曲線);2)AUC的計算比較方便(參見上面AUC計算公式)。
但是,理論上來講,當學習問題是一個負例數量遠大於正例數量的類別不平衡問題時,PRC曲線相比於ROC曲線更能真實地反映分類器的性能,為什么業界大都選擇ROC曲線而不是PRC曲線作為ctr預估的線下指標,可以參看下一篇“ROC曲線 vs Precision-Recall曲線”。
參考資料
[1] 西瓜書
[2] 知乎專欄,提到了ROC與PRC的關系 https://zhuanlan.zhihu.com/p/28482121
[3] 介紹得相對比較全面 https://blog.csdn.net/qq_37059483/article/details/78595695
[4] https://community.alteryx.com/t5/Data-Science-Blog/ROC-Curves-in-Python-and-R/ba-p/138430