一文徹底搞懂ROC曲線與AUC的概念

1. ROC曲線的初級含義

要了解ROC的含義,必須先搞懂混淆矩陣的含義,以及精確率、召回率的含義。

1.1 精確率和召回率

對於一個分類任務的測試集,其本身有正負兩類標籤,我們對於這個測試集有一個預測標籤,也是正負值。對於這些樣本,我們的預測是否正確?有可能正樣本我們預測成了負樣本,負樣本我們預測成了正樣本,如何用我們的預測結果來評價我們的模型呢?那麼就要有如下定義了:TP:真正例,樣本爲正,預測爲正、TN:真負例,樣本爲負,預測爲負、FP:假正例,樣本爲負,預測爲正、FN:假負例,樣本爲正,預測爲負。混淆矩陣如下圖所示。
在這裏插入圖片描述
在這裏插入圖片描述
即精確率的含義是:命中的正樣本數比所有的預測爲正的樣本數
召回率的含義是:命中的正樣本數比所有樣本集中的正樣本數
精確率衡量查得多準,召回率衡量查得多全。
這裏尤其要注意,精確率和準確率是不一樣的,準確率應該用預測正確的樣本數除以樣本總數: a c c u r a c y = T P + T N T P + T N + F P + F N accuracy=\frac{TP+TN}{TP+TN+FP+FN}

1.2 ROC曲線的含義

有了精確率和召回率,可以以精確率爲橫軸,以召回率爲縱軸,繪製P-R曲線,這個曲線使用不方便,因此提出了更綜合的指標,如F1分數,F1分數計算方式就是取準確率和召回率的調和平均數。
在這裏插入圖片描述
我們在做分類任務的時候,通常輸出的是樣本爲正類或負類的概率值,因此我們在利用精確率和召回率兩個指標時,這兩個指標是隨着我們設定的分類的閾值變化的,具有一定的主觀性,但是我們希望有更好的指標克服這個缺點,能夠客觀描述一個模型的質量。這就是ROC曲線
ROC曲線以真正例率TPR爲縱軸,以假正例率FPR爲橫軸,在不同的閾值下獲得座標點,並連接各個座標點,得到ROC曲線。

2. ROC曲線如何繪製

說了這麼多,同學要急了,你講這麼多我都知道,我就是一直不知道ROC曲線怎麼畫出來的!你的基礎知識你自己留着用吧,告訴我怎麼畫這個鬼玩意就行啦!!面試的時候老是考,我總是沒有說清楚。
好了,廢話不多說,直接開搞,我們假設測試集有10個樣本,其中5個正樣本,5個負樣本,然後我們的模型對每一個樣本都有一個預測爲正類的概率值,將概率值從高到低進行排序,然後我們的樣本就被排列出來了,結合我們已有的正負類的標籤,我們可以寫出一個序列:[1,1,0,1,1,0,0,1,0,0],這個序列是啥意思呢,順序是我們預測的,01是樣本本身的,我們當然希望這個序列1多多在前面,0多多在後面,因爲這樣就意味着我們的模型能把正樣本排在前面,負樣本排在後面,精確率和召回率不就自然而然就高了嗎?
好了,現在你知道最好的一種預測結果是什麼了,沒錯就是[1,1,1,1,1,0,0,0,0,0]了,這種情況下,5個正樣本都被預測出來,排在了前面,那麼這種情況下的ROC曲線怎麼畫呢,這就到了最關鍵的時刻,首先,我們要確定閾值,啥閾值?就是把預測結果歸類爲正樣本的閾值,這個閾值是和樣本緊密聯繫的,比如我們的預測值是[0.9,0.87,0.81,0.76,0.7,0.65,0.6,0.5,0.4,0.3],那當大於等於了0.9才認爲是正樣本時,我們的預測結果就是[1,0,0,0,0,0,0,0,0,0],而真實的標籤是[1,1,1,1,1,0,0,0,0,0],這個時候,預測的TP值是1,因此真正例率是 T P R = 1 5 TPR=\frac{1}{5}
由於預測的假正樣本是0個,假正例率是 F P R = 0 5 FPR=\frac{0}{5}
因此我們得到了第一個點(0,0.2)。
繼續,當閾值設爲0.87時,預測的結果是[1,1,0,0,0,0,0,0,0,0],因此預測的TP=2,真正例率是 T P R = 2 5 TPR=\frac{2}{5}
由於預測的假正樣本是0個,假正例率是 F P R = 0 5 FPR=\frac{0}{5}
得到第二個點(0, 0.4)
依次減少閾值,可以分別算出各自的TP和FP,計算座標點依次爲(0,0.6),(0,0.8),(0,1),
當我們的閾值爲0.65時,預測結果是[1,1,1,1,1,1,0,0,0,0],這時候TPR=1,FPR=1/5=0.2,座標點是(0.2,1),以此類推,後面的座標點是(0.4,1)(0.6,1)(0.8,1),(1,1).
連接所有的點,可以得到ROC曲線如圖:
在這裏插入圖片描述
這是一條完美的曲線,只有在理想的狀態纔會出現,現實是骨感的,我們下面再舉兩個更一般的例子:
當我們的預測排序爲[1,1,1,1,0,1,0,0,0,0]時,用同樣的方法,可以計算出各個點,然後繪製ROC曲線如圖:
在這裏插入圖片描述
總而言之,左上角的面積我們希望越小越好!這樣的ROC的曲線才受人待見~

3. ROC曲線和排序有什麼關聯?

我們剛纔已經講到了一部分排序的知識,那麼爲什麼有些大佬說:AUC值其實是一個概率,是模型將正樣本排在負樣本前面的概率。
下面我們從概率的角度來看看,ROC曲線是爲什麼能體現正樣本排負樣本前面的概率,我們知道AUC的值就是ROC曲線圍成的面積,我們希望越大越好。
當我們的排序結果是[1,1,1,1,1,0,0,0,0,0]時,顯然,正樣本全部在負樣本前面,因此,AUC=1,正樣本排負樣本前面的概率爲1,沒毛病老鐵。
當排序結果是[1,1,1,1,0,1,0,0,0,0],可以根據上文的ROC曲線,算出AUC是0.96,那我們直接從這個排序的結果,可不可以計算出相應的AUC呢,我們從概率的角度來算一下,對於這5個正樣本,每個樣本可以賦予0.2的概率值,前4個樣本都排在負樣本之前,最後一個正樣本,它有0.8的概率值排在負樣本之前,因此可以計算整體正樣本在負樣本之前的概率值:0.2*4+0.2*0.8=0.96,完美。
再舉個例子:
[1, 1, 1, 0, 1, 0, 1, 0, 0, 0]對應的ROC曲線如下:
在這裏插入圖片描述
概率值計算:0.23+0.20.8+0.2*0.6=0.88,注意圖中的面積標錯了,計算可得應爲0.12。
好的,現在你終於知道AUC怎麼可以表達正樣本排在負樣本前面的概率了吧。

4. AUC和基尼係數有什麼糾葛?

這裏的基尼係數的概念,如下圖,是 g i n i = A A + B gini=\frac{A}{A+B}
顯然,AUC=A+C,因此,通過簡單的數學代換,可得GINI=2*AUC-1。
在這裏插入圖片描述 好了,到目前爲止,總算說清楚了ROC和AUC這件事情!你懂了嗎?不懂就再看兩遍吧,你那麼聰明。所謂基礎不牢,地動山搖,諸位在學習中也要記住,知識點無小事,不可不求甚解,不可一知半解,阿彌陀佛~~