AUC指標深度理解


AUC 指標

直觀意義

AUC 指標用於評價分類器對於正、負樣例的辨別能力,對出結果的排序位置(按照預測為正例的概率)敏感。

為什么提出這個指標?

image-20200524222822650

一般來講,精確率、召回率等指標,都需要設定一個閾值去判別是屬於正類還是負類,例如預測分大於等於0.5判別為正類,小於0.5判別為負類。如何設定這個閾值,是個問題。而AUC這個指標則不需要設閾值。(或者說,每種閾值的情況都考慮了,下面介紹)

計算方式

利用ROC所圍面積計算

ROC 如何計算

要計算ROC需要明確混淆矩陣的概念

首先,混淆矩陣中有着Positive、Negative、True、False的概念,其意義如下:

  • 算法給出的,預測類別為1的為Positive(陽性),預測類別為0的為Negative(陰性)
  • 數據集中,真實類別為1的為True(真), 真實類別為0的為False(偽)

於是就有這個混淆矩陣圖:

在這里插入圖片描述

其次, ROC 使用的是True Positive Rate(真陽率)、False Positive(偽陽率)兩個概念:

\[TPR=\frac{TP}{TP+FN}=\frac{TP}{P} \]

\[FPR=\frac{FP}{FP+TN}=\frac{FP}{N} \]

其中,\(P\) 是所有真實標簽為1的數量,\(N\)是所有真實標簽為0的數量

因此,

TPRate的意義是所有真實類別為1的樣本中,預測類別為1的比例。

FPRate的意義是所有真實類別為0的樣本中,預測類別為1的比例。

這兩個指標均指出公式圍繞預測類別為1進行討論。

繪制ROC曲線:

曲線的起點和終點是(0,0)和(1,1)

如果\(TPR=FPR\) 即隨機猜測,如圖所示

image-20200322145656008

舉個簡單栗子:

img

通過上述混淆矩陣算法,我們可以得到

img

進而算得TPRate=3/4,FPRate=2/4,得到ROC曲線:

img

上述栗子是一個硬分類問題,也就是預測結果要么0,要么1. 如果給出預測概率的呢?下面的栗子:

img

這時候,我們只需要設置一個閾值,就可以把上面的預測概率轉換為0,1這樣的硬分類結果,然后套用上面的操作即可畫出當前閾值的一個點。

利用ROC面積計算AUC

  • AUC = 1,是完美分類器,采用這個預測模型時,存在至少一個閾值能得出完美預測。絕大多數預測的場合,不存在完美分類器。
  • 0.5 < AUC < 1,優於隨機猜測。這個分類器(模型)妥善設定閾值的話,能有預測價值。
  • AUC = 0.5,跟隨機猜測一樣(例:丟銅板),模型沒有預測價值。
  • AUC < 0.5,比隨機猜測還差;但只要總是反預測而行,就優於隨機猜測。

上面提到當設置一個閾值就可以得到 ROC 曲線上的一個點,對於 AUC 計算,我們實際上就是要把所有閾值都考慮進去(也就是上文提出使用AUC指標的要解決的問題)。

如下圖中,我們要設置閾值為0.8,0.6,0.5,0.3依次計算\(TPR,FPR\),進而繪制 ROC 曲線

在這里插入圖片描述

上圖給出了一個很簡單的例子。四個樣本,按預測分高到低排序,從上到下依次找到四個閾值(紅線),每個閾值的情況下,分別計算出TPR和FPR(分子只統計紅線上面的,因為紅線下面在閾值以下,也就是說都是預測為陰性的結果,不在公式的計數范圍內),並描點,再用線段相連,最后計算出曲線下面的面積(該例子AUC=0.75)。

注:

如果按照閾值排序后,有相同的閾值,那么也是重復計算,只需按照每次下移一行畫紅線即可

概率角度

一種本質的理解為: 隨機給定一個正樣本和一個負樣本,分類器輸出該正樣本為正的那個概率值 比 分類器輸出該負樣本為正的那個概率值 要大的可能性。

暴力求解

按照上面提到的,我們需要統計隨機抽取的一對樣本,按照上述含義進行計算,即一下公式

舉個栗子:

ID label probability
A 0 0.1
B 0 0.4
C 1 0.35
D 1 0.8

假設有4條樣本。2個正樣本,2個負樣本,那么\(M*N=4\)。即總共有4個樣本對。分別是:
\((D,B),(D,A),(C,B),(C,A)\)
\((D,B)\)樣本對中,正樣本\(D\)預測的概率大於負樣本\(B\)預測的概率(也就是\(D\)的得分比\(B\)高),記為1
同理,對於\((C,B)\)。正樣本\(C\)預測的概率小於負樣本\(C\)預測的概率,記為0.

最后可以算得,總共有3個符合正樣本得分高於負樣本得分,故$$AUC=\frac{1+1+0+1}{4}=0.75$$

當得分(probability)有一樣(0.4)的情況:

ID label probability
A 0 0.1
B 0 0.4
C 1 0.4
D 1 0.8

同樣本是4個樣本對,對於樣本對\((C,B)\)其I值為0.5。

\[AUC=\frac{1+1+0.5+1}{4}=0.875 \]

為什么說這個方法暴力呢?

因為,我們需要羅列出所有正例,負例的組合,相當於一個笛卡爾積,如果正例和負例都很多的情況下,那么這個笛卡爾積的集合很大,計算很費時間。

通過觀察可以發現,(D,B),(D,A)統計過程中,由於 \(D\) 的得分很高,我們可以通過一次排序直接數出來比 \(D\)小的有多少個,並不需要全部羅列出來。因此,產生下面的計算方式。

計數統計

img

ID label probability Rank
D 1 0.8 4
B 0 0.4 3
C 1 0.35 2
A 0 0.1 1

按照公式計算:

\(AUC=\frac{4+2-\frac{2(2+1)}{2}}{2\times2}=\frac{3}{4}=0.75\)

與上面計算方法得到的結果一樣,但是我們只需要排序一下,不需要笛卡爾積運算,排序的復雜度是 log 級別的

如果得分有相同的:

ID label probability Rank
G 0 0.3 1
F 1 0.5 2
E 1 0.5 3
D 0 0.5 4
C 0 0.5 5
B 1 0.7 6
A 1 0.8 7

這里需要注意的是:相等概率得分的樣本,無論正負,誰在前,誰在后無所謂。

由於只考慮正樣本的rank值:

對於正樣本A,其rank值為7

對於正樣本B,其rank值為6

對於正樣本E,其rank值為(5+4+3+2)/4

對於正樣本F,其rank值為(5+4+3+2)/4

上述公式簡單推導

經過排序后,按照概念我們只需要找出 正例得分大於負例的(正,負)對的數量即可。

首先,排序后最大的rank就是全部樣例的總數。

在所有正例中(P個),

排在第一(No1)的\(D\),統計比他小的所有負例個數,即 \(rank-1-(P-No)=4-1-(2-1)=2\)也就是 \((D,B),(D,A)\)

排在第二(No2)的\(C\), 統計比他小的所有負例個數,\(rank-1-(P-No)=2-1-(2-2)=1\)也就是\((C,A)\)

所以$$AUC=\frac{2+1}{4}=0.75$$

如果用一個公式來表示:

\[AUC=\frac{\sum_{1}^{P}{rank-1-(P-no)}}{P \times N}=\frac{\sum_{1}^{P}{rank}-(P+(P-1)+(P-2)+...+1)}{P \times N}=\frac{\sum_{1}^{P}{rank}-\frac{P(P+1)}{2}}{P \times N} \]

常數項就是一個等差數列

代碼

import numpy as np
from sklearn.metrics import roc_auc_score

y_true = np.array([1, 1, 0, 0, 1, 1, 0])
y_scores = np.array([0.8, 0.7, 0.5, 0.5, 0.5, 0.5, 0.3])
print('y_true', y_true)
print('y_score', y_scores)
print(roc_auc_score(y_true, y_scores))

y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
print('y_true', y_true)
print('y_score', y_scores)
print(roc_auc_score(y_true, y_scores))

image-20200524214553915

參考

  1. https://blog.csdn.net/weixin_37683979/article/details/87882943
  2. https://www.zhihu.com/question/39840928


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM