基礎介紹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)。 閾值取不一樣值,TPR
和FPR
的計算結果也不一樣,最理想狀況下,咱們但願全部正例 & 負例 都被成功預測 TPR=1,FPR=0,即 全部的正例預測值 > 全部的負例預測值,此時閾值取最小正例預測值與最大負例預測值之間的值便可。.net
TPR越大越好,FPR越小越好,但這兩個指標一般是矛盾的。爲了增大TPR,能夠預測更多的樣本爲正例,與此同時也增長了更多負例被誤判爲正例的狀況。3d
ROC曲線 code
給定m+個正例和m−個反例,根據學習其預測結果對樣例 從大到小 進行排序,而後把分類閾值設爲最大,即把全部的樣例均預測爲反例,此時真正例率和假正例率都爲0,獲得標記點(FPR,TPR) = (0,0)。而後逐漸增大閾值,即依次將每一個樣例劃分爲正例。設前一個標記點座標爲(x,y),則xml
若當前爲真正例,則對應標記點的座標爲(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個負例,此時咱們能夠畫「指望」曲線,以下右圖所示。
上圖(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