天天看點

小白都能了解的ROC曲線與AUC值

項目github位址:bitcarmanlee easy-algorithm-interview-and-practice

歡迎大家star,留言,一起學習進步

1.ROC曲線

在信号檢測理論中,接收者操作特征曲線(receiver operating characteristic curve,或者叫ROC曲線)是一種坐标圖式的分析工具,用于 (1) 選擇最佳的信号偵測模型、舍棄次佳的模型。 (2) 在同一模型中設定最佳門檻值。

在做決策時,ROC分析能不受成本/效益的影響,給出客觀中立的建議。

ROC曲線首先是由二戰中的電子工程師和雷達工程師發明的,用來偵測戰場上的敵軍載具(飛機、船艦),也就是信号檢測理論。之後很快就被引入了心理學來進行信号的知覺檢測。數十年來,ROC分析被用于醫學、無線電、生物學、犯罪心理學領域中,而且最近在機器學習(machine learning)和資料挖掘(data mining)領域也得到了很好的發展。(參考文獻1)

2.ROC曲線解釋

一個二分類問題,可以将執行個體分成正類(postive)或者負類(negative)。但是實際中分類時,會出現四種情況

1.某一個執行個體是正類,并且預測結果也為正類,此為真正類(True Positive, TP)

2.某一個執行個體是正類,被預測為負類,此為假負類(False Negative, FN)

3.某一個執行個體是負類,被預測為正類,此為假正類(False Positive, FP)

4.某一個執行個體為負類,并且預測結果也為負類,此為真負類(True Negative, TN)

ROC曲線的縱坐标是真正率(TPR)

T P R = T P T P + F N TPR = \frac{TP}{TP + FN} TPR=TP+FNTP​

用通俗的語言解釋就是預測的正例中,實際上也為正的在所有正例中的占比,這個比例自然是越大越好。

ROC曲線的橫坐标是假正率(FPR)

F P R = F P F P + T N FPR = \frac{FP}{FP + TN} FPR=FP+TNFP​

用通俗的語言解釋就是預測的正例中,實際上為負的在所有負例中的占比。這個比例是越小越好。

很明顯,這兩個名額是互斥的,無法同時達到最優效果。

圖檔來自wiki百科。

小白都能了解的ROC曲線與AUC值

3.ROC曲線中的兩個特殊點

上面曲線中有兩個特殊點(0,0), (1,1)

其中(0,0)點表示TPR,FPR均為0。此時門檻值無為無窮大,所有樣本被預測為負類,TP = 0, FP = 0,樣本的預測結果隻能是TN或者FN,是以TPR=FPR=0。

其中(1,1)點表示TPR, FPR均為1。此時門檻值為0,所有樣本被與預測為正類,樣本的預測結果隻能為TP或者FP,TN或者FN均為0,是以TPR = TP / (TP + FN) = 1,FPR同樣為1。

4.如何畫ROC曲線

假設已經得出一系列樣本被劃分為正類的機率,然後按照大小排序,下圖是一個示例,圖中共有20個測試樣本,“Class”一欄表示每個測試樣本真正的标簽(p表示正樣本,n表示負樣本),“Score”表示每個測試樣本屬于正樣本的機率。

小白都能了解的ROC曲線與AUC值

接下來,我們從高到低,依次将“Score”值作為門檻值threshold,當測試樣本屬于正樣本的機率大于或等于這個threshold時,我們認為它為正樣本,否則為負樣本。舉例來說,對于圖中的第4個樣本,其“Score”值為0.6,那麼樣本1,2,3,4都被認為是正樣本,因為它們的“Score”值都大于等于0.6,而其他樣本則都認為是負樣本。每次選取一個不同的threshold,我們就可以得到一組FPR和TPR,即ROC曲線上的一點。這樣一來,我們一共得到了20組FPR和TPR的值,将它們畫在ROC曲線的結果如下圖:

小白都能了解的ROC曲線與AUC值

(以上例子來自網絡)

5.AUC值的含義

AUC值指的是ROC曲線下的面積。AUC常常被用來作為模型排序好壞的名額,原因在于AUC可以看做随機從正負樣本中選取一對正負樣本,其中正樣本的得分大于負樣本的機率。是以,AUC常用在排序場景的模型評估,比如搜尋和推薦等場景。

6.AUC的計算方法

在有M個正樣本,N個負樣本的資料集裡。一共有MN對樣本(一對樣本即,一個正樣本與一個負樣本)。統計這MN對樣本裡,正樣本的預測機率大于負樣本的預測機率的個數。

∑ I ( P 正 , P 負 ) M ∗ N \frac{\sum I(P_{正}, P_負)}{M*N} M∗N∑I(P正​,P負​)​

其中,

I ( P 正 , P 負 ) = { 1 , P 正 > P 負 0.5 , P 正 = P 負 0 , P 正 < P 負 I(P_{正}, P_負)=\left\{ \begin{aligned} 1, P_正>P_負 \\ 0.5,P_正=P_負 \\ 0,P_正<P_負 \end{aligned} \right. I(P正​,P負​)=⎩⎪⎨⎪⎧​1,P正​>P負​0.5,P正​=P負​0,P正​<P負​​

舉個例子來看:

index label pro
A 0.1
B 0.5
C 1 0.3
D 1 0.7

上面的例子有4個樣本,其中兩個為正兩個為負,則M*N=4,總共4個樣本對。

(D,B), (D,A), (C,B), (C,A)

其中,I(D,B)=I(D,A)=I(C,A)=1, I(C,B)=0

最後AUC的值為(1+1+1+0)/4 = 0.75

參考文獻

1.https://zh.wikipedia.org/wiki/ROC%E6%9B%B2%E7%BA%BF

繼續閱讀