AUC(Area under curve)是機器學習常用的二分類評測手段,直接含義是ROC曲線下的面積, 對於二分類模型,還有很多其他評價指標,比如 logloss,accuracy,precision。如果你經常關注數據挖掘比賽,比如 kaggle,那你會發現 AUC 和 logloss 基本是最常見的模型評價指標。
-
AUC = 1,是完美分類器;
-
AUC = [0.85, 0.95], 效果很好;
-
AUC = [0.7, 0.85], 效果一般;
-
AUC = [0.5, 0.7], 效果較低,但用於預測股票已經很不錯了;
-
AUC = 0.5,跟隨機猜測一樣(例:丟銅板),模型沒有預測價值;
-
AUC < 0.5,比隨機猜測還差。
為什么 AUC 和 logloss 比 accuracy 更常用呢?
因為很多機器學習的模型對分類問題的預測結果都是概率,如果要計算 accuracy,需要先把概率轉化成類別,這就需要手動設置一個閾值,如果對一個樣本的預測概率高於這個預測,就把這個樣本放進一個類別里面,低於這個閾值,放進另一個類別里面。
所以這個閾值很大程度上影響了 accuracy 的計算。使用 AUC 或者 logloss 可以避免把預測概率轉換成類別。
如何計算
ROC曲線下面積:
橫坐標正是 FPR (False Positive Rate),縱坐標是 TPR (True Positive Rate),計算公式:
(梯形面積計算:上底+下底的合 * 高 /2,例如上圖中的某個i下對應的面積)
由此引出True Positive Rate(真陽率)、False Positive(偽陽率)兩個概念:
- TPRate的意義是所有真實類別為1的樣本中,預測類別為1的比例。
- FPRate的意義是所有真實類別為0的樣本中,預測類別為1的比例。
相關指標:
實際1,預測1:真正類(tp)
實際1,預測0:假負類(fn)
實際0,預測1:假正類(fp)
實際0,預測0:真負類(tn)
真實負樣本總數=n=fp+tn
真實正樣本總數=p=tp+fn
概率角度:
AUC 考慮的是樣本的排序質量,它與排序誤差有密切關系,在此,AUC可以在一定程度上理解為正樣本排在負樣本前面的概率,可得到計算公式:
其中,rank 為樣本排序位置從 1 開始,∣P∣ 為正樣本數,∣N∣ 為負樣本數。
對該公式的解釋:
舉個例子:這里,我們將所有樣本得到的值從小到大排列(這個不必特別強調升序降序,主要看rank怎么定義==> 小的probs具有小的rank值),rank我們定義為樣本在這個排序序列中的index。
probs | rank | label |
0.1 | 1 | 0 |
0.2 | 2 | 0 |
0.5 | 3 | 0 |
0.6 | 4 | 1 |
0.7 | 5 | 0 |
0.8 | 6 | 1 |
0.9 | 7 | 1 |
這里,probs為預測得到的概率,P(正例個數,即原本label=1的樣本個數) 為3,N(負例個數,即原本label=0的樣本個數)為4。
我們要求的是AUC正例的rank比負例的rank大的概率,即P(rank正>rank負)。對於P個正例、N個負例,共有P*N(12)對(正例,負例)的組合對,我們要求AUC,需要求的是在所有組合對中,Rank正例大於Rank負例的比例是多少
我們看上表標紅的正例:
對於rank為7的正例,共有rank-P個 rank正大於rank負的組合對:
rank7: (7, 7) (7,6) (7,5) (7,4) (7,3) (7,2) (7,1) : rank7 - P = 4
以此類推:
rank6:rank6-P+1 = 6-3+1 = 4
rank4:rank4-P+2 = 4-3+2 = 3
最后求得AUC = 正例rank大於負例的組合對/所有組合對 = 4 + 4 + 3 / 12 = 0.9167
觀察可得,我們把ranki的部分加和加和就得到了公式中的,把后面減去的1, 2.....P(等差數列)加和就得到了公式中的
。
AUC的優點
它不受類別不平衡問題的影響,不同的樣本比例不會影響AUC的評測結果。
- 例如在反欺詐場景,設欺詐類樣本為正例,正例占比很少(假設0.1%),如果使用准確率評估,把所有的樣本預測為負例,便可以獲得99.9%的准確率。
- 但是如果使用AUC,把所有樣本預測為負例,TPRate和FPRate同時為0(沒有Positive),(0,0) 與 (1,1)連接,得出AUC僅為0.5,成功規避了樣本不均勻帶來的問題。
在訓練時,可以直接使用AUC作為損失函數。
AUC指標本身和模型預測 score 絕對值無關,只關注排序效果,因此特別適合排序業務。
在python中,可直接調用sklearn中計算auc的方法~