ROC曲線與AUC


基礎介紹

  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)。 閾值取不同值,TPRFPR的計算結果也不同,最理想情況下,我們希望所有正例 & 負例 都被成功預測  TPR=1,FPR=0,即 所有的正例預測值 > 所有的負例預測值,此時閾值取最小正例預測值與最大負例預測值之間的值即可。

  TPR越大越好,FPR越小越好,但這兩個指標通常是矛盾的。為了增大TPR,可以預測更多的樣本為正例,與此同時也增加了更多負例被誤判為正例的情況。

 

ROC曲線  

  給定m+個正例和m個反例,根據學習其預測結果對樣例 從大到小 進行排序,然后把分類閾值設為最大,即把所有的樣例均預測為反例,此時真正例率和假正例率都為0,得到標記點(FPR,TPR) = (0,0)然后逐漸增大閾值,即依次將每個樣例划分為正例。設前一個標記點坐標為(x,y),則

    若當前為真正例,則對應標記點的坐標為(xy + 1/m+);   若當前為假正例,則對應標記點的坐標為(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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM