ROC曲線與AUC

基礎介紹html

  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):全部負例中,有多少被錯誤地斷定爲正。 spa

  其實 TPR 就是 查全率/召回率(recall)。 閾值取不一樣值,TPRFPR的計算結果也不一樣,最理想狀況下,咱們但願全部正例 & 負例 都被成功預測  TPR=1,FPR=0,即 全部的正例預測值 > 全部的負例預測值,此時閾值取最小正例預測值與最大負例預測值之間的值便可。.net

  TPR越大越好,FPR越小越好,但這兩個指標一般是矛盾的。爲了增大TPR,能夠預測更多的樣本爲正例,與此同時也增長了更多負例被誤判爲正例的狀況。3d

 

ROC曲線  code

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

    若當前爲真正例,則對應標記點的座標爲(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個反例在第二、3個正例前面,因此再加上區域1和區域2的面積,總體就是指望斜線與縱軸圍成的面積。這和上面說的AUC計算公式的思路實際上是同樣的。

  因此能夠獲得以下等式,即 Lrank = 1 - AUC

                           

AUC的物理意義

  假設分類器的輸出是樣本屬於正類的prob/socre,則 AUC的物理意義爲,任取一對正負樣本,正樣本的預測值大於負樣本的預測值的機率

  AUC物理意義的推導,能夠結合AUC與Rank Loss的關係來理解。Rank Loss表明的物理意義實際上是:任取一對正負樣本,負樣本的預測值大於正樣本的預測值的機率。例如,假設這時按預測值排序樣本爲 【正 負 正正 負負負 正 負負】,那麼「任取一對正負樣本,負樣本預測值大於正樣本預測值的機率P」 能夠表示爲:

      

 上面的式子能夠直接等價轉化爲 Lrank 的形式,易知 AUC = 1 - Lrank 對應的物理意義即如上所述。

 

思考問題

一、在類不平衡的狀況下,如正例90個,負例10個,直接把全部樣本分類爲正,準確率達到了90%,看似準確率很高,但這顯然沒有意義,這種全猜正算法的ROC曲線是如何的?

思考:

  全猜正算法直接預測全部樣本爲正,即便預測全部正例=1,全部負例=1,那圖上明確的標記點其實只有(0,0)和(1,1)兩個起始點,按照上面說的相同分數取指望曲線,橫軸 和 縱軸上點其實會分別均勻地從0以 1/m- 和 1/m排列到1,此時指望ROC曲線和隨機猜想是同樣的,這樣就避免了給這個傻乎乎的方法太高的正向指標。因此AUC能夠處理這種類別不平衡問題的性能指標。

二、爲何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

相關文章
相關標籤/搜索