ROC曲線與AUC計算

ROC曲線繪製與AUC計算


聲明:

1)該博文是整理自網上很大牛和專家所無私奉獻的資料的。具體引用的資料請看參考文獻。具體的版本聲明也參考原文獻

2)本文僅供學術交流,非商用。所以每一部分具體的參考資料並沒有詳細對應,更有些部分本來就是直接從其他博客複製過來的。如果某部分不小心侵犯了大家的利益,還望海涵,並聯系老衲刪除或修改,直到相關人士滿意爲止。

3)本人才疏學淺,整理總結的時候難免出錯,還望各位前輩不吝指正,謝謝。

4)閱讀本文需要機器學習基本概念的基礎(如果沒有也沒關係了,沒有就看看,當做跟同學們吹牛的本錢)。

5)此屬於第一版本,若有錯誤,還需繼續修正與增刪。還望大家多多指點。請直接回帖,本人來想辦法處理。

6)本人手上有word版的和pdf版的,有必要的話可以上傳到csdn供各位下載

 

一.ROC曲線作用

在互聯網廣告中,評價一個model的好壞是非常重要的。

至於怎麼評價,倒是有多種辦法,如準確度,ABtest效果等。其中也產生了一些評價指標,其中最常用的莫過於AUC了。AUC有一個很好的物理意義——AUC表示拿一個正樣本和一個負樣本組成一對,模型把這一對都區分正確(正樣本的預估值比負樣本大就算對了)的概率。

然後AUC是什麼呢?怎麼計算出來的呢?按照概率的說法,應該拿無數對正負樣本,計算這無數對樣本中被分對的比例,得到的就是auc。

這樣做太耗時間了,就有了其他的辦法,如繪圖求面積,因爲概率其實是一個積分嘛。

有一堆理論去完成這個事情,後來發現AUC是ROC曲線的下面的面積。

下面開始說說ROC曲線。

其定義是:接收者操作特性曲線(receiver operating characteristic curve),它通過將連續變量設定出多個不同的臨界值,從而計算出一系列真正率和假正率,再以假正率爲縱座標、真正率爲橫座標繪製成曲線,曲線下面積越大,診斷準確性越高。在ROC曲線上,最靠近座標圖左上方的點爲假正率和真正率均較高的臨界值。

上面的話不太好看懂,需要了解的事情就是——ROC曲線下面的面積(積分)就是AUC的值。

爲啥要用AUC呢?傳統比較常用的ACC(準確度)爲啥不用呢?

在互聯網廣告裏面,點擊的數量是很少的,一般千分之幾,如果用acc,全部預測成負類(不點擊)acc也有99%以上,根本無法評價。

其實最好的評估辦法是ABtest,但是ABtest是直接小流量上線,工作量大,再說線上系統又不能沒事老折騰,所以一個model要ABtest的話,這個model務必要是評價過是有好效果的。

 

二. ROC曲線繪製

下面先給一些基本定義,再說怎麼繪製ROC曲線。

2.1基本定義

以下的內容來自博客《ROC曲線-閾值評價標準》。

考慮一個二分問題,即將實例分成正類(positive)或負類(negative)。對一個二分問題來說,會出現四種情況。如果一個實例是正類並且被預測成正類,即爲真正類(True positive),如果實例是負類被預測成正類,稱之爲假正類(False positive)。相應地,如果實例是負類被預測成負類,稱之爲真負類(True negative),正類被預測成負類則爲假負類(false negative)。

 

TP:真正類的數目;

FN:假負的數目;

FP:假正的數目;

TN:真負的數目;

列聯表如下表所示,1代表正類,0代表負類。

 

 

預測

 

 

 

1

0

合計

實際

1

True Positive(TP)

False Negative(FN)

Actual Positive(TP+FN)

0

False Positive(FP)

True Negative(TN)

Actual Negative(FP+TN)

合計

 

Predicted Positive(TP+FP)

Predicted Negative(FN+TN)

TP+FP+FN+TN

 

從列聯表引入兩個新名詞。其一是真正類率(true positive rate ,TPR), 計算公式爲TPR=TP/ (TP+ FN),刻畫的是分類器所識別出的正實例佔所有正實例的比例。另外一個是負正類率(false positive rate, FPR),計算公式爲FPR= FP / (FP + TN),計算的是分類器錯認爲正類的負實例佔所有負實例的比例。還有一個真負類率(True Negative Rate,TNR),也稱爲specificity,計算公式爲TNR=TN/ (FP+ TN) = 1-FPR。

看個例子。


在互聯網廣告的點擊率模型中,邏輯迴歸的輸出是一個[0,1]區間的連續值,這個值表示用戶點擊某廣告的概率,這裏就涉及一個取捨問題了,這個概率值大於多少歸爲正類。假如確定一個閥值,比如說 0.6,大於這個值的實例劃歸爲正類,小於這個值則劃到負類中,那麼根據這個閾值0.6能算出一對TPR和FPR來。當然,正類樣本是很重要的,因爲是點擊數據,所以ctr預估模型要求是大部分正類都要識別出來。

爲了完成這樣的工作,識別更多的正類,可以把閾值調低點,變成0.5,雖然能識別出更多的正類,也就是識別出更多的點擊數據,但也帶來了問題,把很多不點擊的樣本也識別成了正類,這樣也是不行的,有可能虧錢。從上面可以看出閾值也是很難定的,但對於某些廣告點擊率系統來說,如搜索廣告,並不需要定閾值,只需要知道排序,比如說預估的點擊率最高的那個廣告實際點擊率也比它下面的高就行了,因爲會有很多候選廣告,只要出點擊率最高的幾個,同時把點擊率最高的(最相關的搜索結果)放在第一個,其他的以此類推(按點擊率從高到低排)就夠了(當然爲了賺錢,會考慮一下價格的因素,把收益最高的廣告排在最前面)。

其實說白了,就是排序其實是很重要的,真正怎麼定那個閾值就相對沒那麼重要。所以評價這個點擊率模型的好壞也不一定對預估出來的那個概率特別在意,倒是這個概率排在第幾個位置比較重要。那麼評價某個點擊率模型好壞就不能用ACC來評估了,因爲那樣對閾值有要求。

說到排序,一時半會難說清楚,先說說ROC曲線怎麼繪製的吧。說完怎麼繪製後,再說ROC曲線怎麼用來評價一個點擊率模型(分類器)。

 

2.2 怎麼繪製

分三種情況吧。

假設有6次展示記錄,有兩次被點擊了,得到一個展示序列(1:1,2:0,3:1,4:0,5:0,6:0),前面的表示序號,後面的表示點擊(1)或沒有點擊(0)。

然後在這6次展示的時候都通過model算出了點擊的概率序列。

下面看三種情況。

一、如果概率的序列是(1:0.9,2:0.7,3:0.8,4:0.6,5:0.5,6:0.4)。

與原來的序列一起,得到序列(從概率從高到低排)

1 0.9

1 0.8

0 0.7

0 0.6

0 0.5

0 0.4

繪製的步驟是:

1)把概率序列從高到低排序,得到順序(1:0.9,3:0.8,2:0.7,4:0.6,5:0.5,6:0.4);

2)從概率最大開始取一個點作爲正類,取到點1,計算得到TPR=0.5,FPR=0.0;

3)從概率最大開始,再取一個點作爲正類,取到點3,計算得到TPR=1.0,FPR=0.0;

4)再從最大開始取一個點作爲正類,取到點2,計算得到TPR=1.0,FPR=0.25;

5)以此類推,得到6對TPR和FPR。

然後把這6對數據組成6個點(0,0.5),(0,1.0),(0.25,1),(0.5,1),(0.75,1),(1.0,1.0)。

這6個點在二維座標系中能繪出來。


看看圖中,那個就是ROC曲線。

 

二、如果概率的序列是(1:0.9,2:0.8,3:0.7,4:0.6,5:0.5,6:0.4)。

與原來的序列一起,得到序列(從概率從高到低排)

1 0.9

0 0.8

1 0.7

0 0.6

0 0.5

0 0.4

繪製的步驟是:

6)把概率序列從高到低排序,得到順序(1:0.9,2:0.8,3:0.7,4:0.6,5:0.5,6:0.4);

7)從概率最大開始取一個點作爲正類,取到點1,計算得到TPR=0.5,FPR=0.0;

8)從概率最大開始,再取一個點作爲正類,取到點2,計算得到TPR=0.5,FPR=0.25;

9)再從最大開始取一個點作爲正類,取到點3,計算得到TPR=1.0,FPR=0.25;

10)     以此類推,得到6對TPR和FPR。

然後把這6對數據組成6個點(0,0.5),(0.25,0.5),(0.25,1),(0.5,1),(0.75,1),(1.0,1.0)。

這6個點在二維座標系中能繪出來。

 

看看圖中,那個就是ROC曲線。

 

三、如果概率的序列是(1:0.4,2:0.6,3:0.5,4:0.7,5:0.8,6:0.9)。

與原來的序列一起,得到序列(從概率從高到低排)

0 0.9

0 0.8

0 0.7

0 0.6

1 0.5

1 0.4

繪製的步驟是:

11)     把概率序列從高到低排序,得到順序(1:0.4,2:0.6,3:0.5,4:0.7,5:0.8,6:0.9);

12)     從概率最大開始取一個點作爲正類,取到點6,計算得到TPR=0.0,FPR=0.25;

13)     從概率最大開始,再取一個點作爲正類,取到點5,計算得到TPR=0.0,FPR=0.5;

14)     再從最大開始取一個點作爲正類,取到點4,計算得到TPR=0.0,FPR=0.75;

15)     以此類推,得到6對TPR和FPR。

然後把這6對數據組成6個點(0.25,0.0),(0.5,0.0),(0.75,0.0),(1.0,0.0),(1.0,0.5),(1.0,1.0)。

這6個點在二維座標系中能繪出來。


看看圖中,那個就是ROC曲線。

2.3 什麼意義

如上圖的例子,總共6個點,2個正樣本,4個負樣本,取一個正樣本和一個負樣本的情況總共有8種。

上面的第一種情況,從上往下取,無論怎麼取,正樣本的概率總在負樣本之上,所以分對的概率爲1,AUC=1。再看那個ROC曲線,它的積分是什麼?也是1,ROC曲線的積分與AUC相等。

上面第二種情況,如果取到了樣本2和3,那就分錯了,其他情況都分對了;所以分對的概率是0.875,AUC=0.875。再看那個ROC曲線,它的積分也是0.875,ROC曲線的積分與AUC相等。

上面的第三種情況,無論怎麼取,都是分錯的,所以分對的概率是0,AUC=0.0。再看ROC曲線,它的積分也是0.0,ROC曲線的積分與AUC相等。

很牛吧,其實AUC的意思是——Area Under roc Curve,就是ROC曲線的積分,也是ROC曲線下面的面積。

繪製ROC曲線的意義很明顯,不斷地把可能分錯的情況扣除掉,從概率最高往下取的點,每有一個是負樣本,就會導致分錯排在它下面的所有正樣本,所以要把它下面的正樣本數扣除掉(1-TPR,剩下的正樣本的比例)。總的ROC曲線繪製出來了,AUC就定了,分對的概率也能求出來了。

 

致謝

多位博主,無私地公佈他們的成果。

參考文獻

[1] http://blog.csdn.net/chjjunking/article/details/5933105 . chjjunking的博客

[2] http://blog.csdn.net/abcjennifer/article/details/7359370 . 張睿卿的csdn博客

文章來源:http://blog.csdn.net/mytestmy/article/details/24270513

發佈了19 篇原創文章 · 獲贊 71 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章