精確率、召回率、F1 值、ROC、AUC 各自的優缺點是什麼?

在看到的幾個項目中都是用AUC來評價分類器的好壞,而不是使用精確率,召回率,F1值,請問這是什麼原因呢?他們各自有什麼優缺點和使用場景啊?

本題已加入圓桌 ? 數據挖掘應用,更多「數據挖掘」相關的話題歡迎關注討論


先說ROC,ROC(receiver operating characteristic curve)是曲線。也就是下圖中的曲線。同時我們也看裡面也上了AUC也就是是面積。一般來說,如果ROC是光滑的,那麼基本可以判斷沒有太大的overfitting(比如圖中0.2到0.4可能就有問題,但是樣本太少了),這個時候調模型可以只看AUC,面積越大一般認為模型越好。

再說PRC, precision recall curve。和ROC一樣,先看平滑不平滑(藍線明顯好些),在看誰上誰下(同一測試集上),一般來說,上面的比下面的好(綠線比紅線好)。F1(計算公式略)當P和R接近就也越大,一般會畫連接(0,0)和(1,1)的線,線和PRC重合的地方的F1是這條線最大的F1(光滑的情況下),此時的F1對於PRC就好象AUC對於ROC一樣。一個數字比一條線更方便調模型。

以上兩個指標用來判斷模型好壞,圖有些不恰當。。。但是有時候模型沒有單純的誰比誰好(比如圖二的藍線和青線),那麼選擇模型還是要結合具體的使用場景。

下面是兩個場景:
1. 地震的預測
對於地震的預測,我們希望的是RECALL非常高,也就是說每次地震我們都希望預測出來。這個時候我們可以犧牲PRECISION。情願發出1000次警報,把10次地震都預測正確了;也不要預測100次對了8次漏了兩次。
2. 嫌疑人定罪
基於不錯怪一個好人的原則,對於嫌疑人的定罪我們希望是非常準確的。及時有時候放過了一些罪犯(recall低),但也是值得的。

對於分類器來說,本質上是給一個概率,此時,我們再選擇一個CUTOFF點(閥值),高於這個點的判正,低於的判負。那麼這個點的選擇就需要結合你的具體場景去選擇。反過來,場景會決定訓練模型時的標準,比如第一個場景中,我們就只看RECALL=99.9999%(地震全中)時的PRECISION,其他指標就變得沒有了意義。

如果只能選一個指標的話,肯定是選PRC了。可以把一個模型看的一清二楚。

能想到的暫時就這些了,希望對你有幫助!有錯誤望糾正。


精確率、召回率、F1、AUC和ROC曲線其實都是評價模型好壞的指標,而且相互之間是有關係的,只是側重點不同,題主如果理解了各指標的定義就能找出他們的區別與聯繫,下面就用一個例子解釋這些指標。

以白條的逾期預測模型為例,這是一個有監督的二分類模型,模型對每個樣本的預測結果為一個概率值,我們需要從中選取一個閾值來區分好用戶和壞用戶。

如果我們已經定好了一個閾值,超過此閾值定義為壞用戶(1),低於此閾值定義為好用戶(0),就可以計算出混淆矩陣(Confusion matrix)。

根據混淆矩陣我們可以得到TP,FN,FP,TN四個值,TP即為預測正確的壞用戶的個數,FN為預測錯誤(預測為好用戶)的壞用戶個數,根據這四個值即可計算精確率、召回率和F1。

精確率(Precision)為TP/(TP+FP),即為在預測為壞人的人中,預測正確(實際為壞人)的人佔比。

召回率(Recall)為TP/(TP+FN),即為在實際為壞人的人中,預測正確(預測為壞人)的人佔比。

F1值是精確率和召回率的調和均值,即F1=2PR/(P+R),相當於精確率和召回率的綜合評價指標。

另外還有Fα值,為F1值的變體, Fα=(α^2+1)PR/(α^2 P+R) ,利用α給P和R賦予不同的權重,若α=1則為F1值。

接著來說ROC曲線(Receiver operating characteristic curve),ROC曲線其實是多個混淆矩陣的結果組合,如果在上述模型中我們沒有定好閾值,而是將模型預測結果從高到低排序,將每個概率值依次作為閾值,那麼就有多個混淆矩陣。

對於每個混淆矩陣,我們計算兩個指標TPR(True positive rate)和FPR(False positive rate),TPR=TP/(TP+FN)=Recall,TPR就是召回率。FPR=FP/(FP+TN),FPR即為實際為好人的人中,預測為壞人的人佔比。我們以FPR為x軸,TPR為y軸畫圖,就得到了ROC曲線。

在畫ROC曲線的過程中,若有一個閾值,高於此閾值的均為壞人,低於此閾值的均為好人,則認為此模型已完美的區分開好壞用戶。此時壞用戶的預測準確率(TPR)為1,同時好用戶的預測錯誤率(FPR)為0,ROC曲線經過(0,1)點。

AUC(Area Under Curve)的值為ROC曲線下面的面積,若如上所述模型十分準確,則AUC為1。

但現實生活中尤其是工業界不會有如此完美的模型,一般AUC均在0.5到1之間,AUC越高,模型的區分能力越好,上圖AUC為0.81。

若AUC=0.5,即與上圖中紅線重合,表示模型的區分能力與隨機猜測沒有差別。若AUC真的小於0.5,請檢查一下是不是好壞標籤標反了,或者是模型真的很差。。。

也有人會用Gini係數來評價模型,其實Gini係數與AUC所表示的意義相同,只是計算方式不同。Gini係數指ROC曲線與中線(上圖紅線)圍成的面積和中線(上圖紅線)之上的面積(0.5)的比例,兩者之間換算公式為Gini=2*AUC-1。

除此之外,在評價模型時還會用到KS(Kolmogorov-Smirnov)值,KS=max(TPR-FPR),即為TPR與FPR的差的最大值,KS值可以反映模型的最優區分效果,此時所取的閾值一般作為定義好壞用戶的最優閾值。

上圖ROC曲線的KS值為0.45,此時TPR=0.79,FPR=0.34。

當然,閾值的選取還要考慮應用場景及業務要求,對於FPR不敏感而對TPR敏感的場景,可以適當減少閾值以增加TPR。

如精準營銷領域的商品推薦模型,模型目的是盡量將商品推薦給感興趣的用戶,若用戶對推薦的商品不感興趣,也不會有很大損失,因此此時TPR相對FPR更重要。

再比如反欺詐領域的欺詐預測模型,由於模型結果會對識別的壞人進行一定的處置措施,FPR過高會對好人有一定干擾,造成誤殺,影響客戶體驗,因此模型需保證在低於一定FPR的基礎上盡量增加TPR。

了解了這些指標定義後可以發現,對於分類模型,AUC、KS、ROC曲線是綜合評價模型區分能力和排序能力的指標,而精確率、召回率和F1值是在確定最佳閾值之後計算得到的指標。

當然,PR曲線(Precision-Recall curve)和ROC曲線類似,ROC曲線是FPR和TPR的點連成的線,PR曲線是準確率和召回率的點連成的線,如下圖所示。

我們又知道,Recall=TPR,因此PRC的橫坐標為ROC的縱坐標。

TPR、FPR、Precision、Recall的定義來對比,TPR、Recall的分母為樣本中壞客戶的個數,FPR的分母為樣本中好客戶的個數,樣本一旦確定分母即為定值,因此三個指標的變化隨分子增加單調遞增。

但是Precision的分母為預測為壞客戶的個數,會隨著閾值的變化而變化,因此Precision的變化受TP和FP的綜合影響,不單調,變化情況不可預測。

而且TP和FP的值分別受樣本中好壞客戶個數的制約,若樣本極不均衡,比如好客戶過多,則隨Recall的增加,FP會遠大於TP的值,Precision會變化很大。

相對來講ROC曲線會穩定很多,在正負樣本量都足夠的情況下,ROC曲線足夠反映模型的判斷能力。

因此,對於同一模型,PRC和ROC曲線都可以說明一定的問題,而且二者有一定的相關性,如果想評測模型效果,也可以把兩條曲線都畫出來綜合評價。

對於有監督的二分類問題,在正負樣本都足夠的情況下,可以直接用ROC曲線、AUC、KS評價模型效果。在確定閾值過程中,可以根據Precision、Recall或者F1來評價模型的分類效果。

對於多分類問題,可以對每一類分別計算Precision、Recall和F1,綜合作為模型評價指標。

當然,評價模型的指標不止以上幾種,同時對於不同的應用場景及業務要求會有不同的側重,根本上需要根據建模目的進行具體分析。

本文作者:ZRobot金融科技公司數據科學家 崔雅麗

p.s. 想了解更多精彩文章,請關注 ZRobot金融科技公司微信公眾號:ZROBOT


在正負樣本分布得極不均勻(highly skewed datasets)的情況下,PRC比ROC能更有效地反應分類器的好壞。
(圖及解釋均來自References)

單從圖a看,這兩個分類器都接近完美(非常接近左上角)。圖b對應著相同分類器的PR space。而從圖b可以看出,這兩個分類器仍有巨大的提升空間。
那麼原因是什麼呢? 通過看Algorithm1的點 A,可以得出一些結論。首先圖a和b中的點A是相同的點,只是在不同的空間里。因為TPR=Recall=TP/(TP+FN),換言之,真陽性率(TPR)和召回率(Recall)是同一個東西,只是有不同的名字。所以圖a中TPR為0.8的點對應著圖b中Recall為0.8的點。
假設數據集有100個positive instances。由圖a中的點A,可以得到以下結論:
TPR=TP/(TP+FN)=TP/actual positives=TP/100=0.8,所以TP=80
由圖b中的點A,可得:
Precision=TP/(TP+FP)=80/(80+FP)=0.05,所以FP=1520
再由圖a中點A,可得:
FPR=FP/(FP+TN)=FP/actual negatives=1520/actual negatives=0.1,所以actual negatives是15200。
由此,可以得出原數據集中只有100個positive instances,卻有15200個negative instances!這就是極不均勻的數據集。直觀地說,在點A處,分類器將1600 (1520+80)個instance分為positive,而其中實際上只有80個是真正的positive。 我們憑直覺來看,其實這個分類器並不好。但由於真正negative instances的數量遠遠大約positive,ROC的結果卻「看上去很美」。所以在這種情況下,PRC更能體現本質。
結論: 在negative instances的數量遠遠大於positive instances的data set里, PRC更能有效衡量分類器的好壞。References:
Davis, Jesse, and Mark Goadrich. "The relationship between Precision-Recall and ROC curves." Proceedings of the 23rd International Conference on Machine Learning (ICML). ACM, 2006.


------------更正-----------

精確率(Precision)是指在所有系統判定的「真」的樣本中,確實是真的的佔比,就是TP/(TP+FP)。

召回率(Recall)是指在所有確實為真的樣本中,被判為的「真」的佔比,就是TP/(TP+FN)。

FPR(False Positive Rate),又被稱為「Probability of False Alarm」,就是所有確實為「假」的樣本中,被誤判真的樣本,或者FP/(FP+TN)

錯誤已更正,感謝指出~

------------------------------

在不談具體任務的前提下談指標就是耍流氓。

當然在談具體任務之前,我們可以簡單解釋一下這些指標的概念。

假定有一個二分類問題,比如判定商品是否是假貨。給系統一個樣本,系統將會判斷該樣本為「真」(Predicted positive),或「假」(Predicted Negative)。但是當然,系統的判斷與真實判斷(actual positive/negative)是有誤差的,將原本是真的判為真,就是TP(True Positive),原本真的判為假,就是FN(False Negative),原本假的判為真,就是FP(False Positive),原本假的判為假,就是TN(True Negative)。

精確率(Precision)是指在所有系統判定的「真」的樣本中,確實是真的的佔比,就是TP/(TP+FP)。

召回率(Recall)是指在所有確實為真的樣本中,被判為的「真」的佔比,就是TP/(TP+FN)。

TPR(True Positive Rate)的定義,跟Recall一樣。

FPR(False Positive Rate),又被稱為「Probability of False Alarm」,就是所有確實為「假」的樣本中,被誤判真的樣本,或者FP/(FP+TN)

F1值是為了綜合考量精確率和召回率而設計的一個指標,一般公式為取P和R的harmonic mean:2*Precision*Recall/(Precision+Recall)。

ROC=Receiver Operating Characteristic,是TPR vs FPR的曲線;與之對應的是Precision-Recall Curve,展示的是Precision vs Recall的曲線。

顯而易見的,當TN=FN=0的時候,也就是我們將100%的樣本都認為是「真」的,TPR=FPR=1:這就是我們「完全放水」的情形;反之,當TP=FP=0的時候,也就是我們將100%的樣本都認為是「假」的時候,TPR=FPR=0,這就是「寧可錯殺一萬,不可放過一個」的情形。

我們在下圖觀察幾個點。首先,FPR=0, TPR=1的那個點,可以推測FN=0, FP=0:一個錯誤都沒有,所以是Perfect Classification。

中間這條紅線,我們觀察TPR=FPR,所以TP(FP+TN)=FP(TP+FN),所以TP/FN = FP/TN:換言之,無論樣本是真是假,我們將它們判為「真」或「假」的概率都相當,或者說,我們的猜測是完全隨機的。

在紅線上方,偏Perfect Classification的區域,我們認為是優於隨機猜測。因為,在紅線上的任意一點垂直向上的點,都有同樣的FPR,但總是得到更高的TPR:在錯誤不變的情況下,我們的Recall變高了。反之,在紅線下方的點,都認為是劣於隨機猜測。

那麼聰明的你一定想得到,ROC曲線下方所包圍的面積越大,那麼分類器的性能越優越。這個曲線下的面積,就叫做AUC(Area Under the Curve)。因為整個正方形的面積為1,所以0&<=AUC&<=1。

同理,Precision與Recall的關係也可以畫成一條曲線,就是上面的PR curve,其中,Precision隨著Recall的提高而降低。

好了,那麼回答題主的問題:這些指標的優缺點各自在哪裡?

先看二分類問題指標的好壞主要取決於分類器的目標。比方說,電子郵件的垃圾過濾,你是希望它更全面(查出所有的垃圾,但是會有大量有用信息也被判為垃圾)呢,還是希望它盡量精準(不要老是將有用的郵件判為垃圾)呢?在這個例子里,顯然,我們認為False Positive的傷害要大於False Negative:重要郵件要是被判成垃圾所造成的損失,遠大於收件箱里還有一部分的垃圾郵件——前者可能會讓你錯過重要的工作,後者僅僅是讓你在閱讀的時候皺皺眉頭。在這種情況下,我們會認為Precision的指標會比較重要,或者反應在ROC圖上,FPR盡量的小——自然,在保證FPR的基礎上,Recall依然還是重要的——畢竟用戶購買的是垃圾過濾,如果只是過濾了1條垃圾但是Precision=100%,這樣的東西看起來也沒什麼用——那麼綜合起來,我們也可以通過ROC的AUC來進行比較,面積較大的代表同樣的FPR下面,recall比較高。

但是,ROC的曲線——如上面幾位已經說過——有數據均衡的問題。在數據極度不平衡的情況下,譬如說1萬封郵件中只有1封垃圾郵件,那麼如果我挑出10封,50封,100,。。封垃圾郵件(假設全部包含真正的那封垃圾郵件),Recall都是100%,但是FPR分別是9/9999, 49/9999, 99/9999(數據都比較好看:FPR越低越好),而Precision卻只有1/10,1/50, 1/100 (數據很差:Precision越高越好)。所以在數據非常不均衡的情況下,看ROC的AUC可能是看不出太多好壞的,而PR curve就要敏感的多。(不過真實世界中,垃圾郵件也許與你的有用的郵件一樣多——甚至比有用的還更多。。。)

其次是搜索問題。搜索問題其實是一個排序問題,但我們往往會定義Precision@Top K這樣的指標,即正確的答案有沒有被排在Top K中,如果是的話,就相當於判斷為「真」,反之則為「否」。這樣搜索問題就轉化為了一個二分類問題,唯一的問題是,這是一個典型的數據不均衡的case。很顯然,所有的候選集的數量是非常巨大的,但是K的數量不會很大(比如Top 10, Top 20)。

所以,在這個問題中,我們會主要看Precision-Recall curve。

更重要的是,一般而言,人們看搜索結果都不會太有耐心,所以希望Top K中的有用信息盡量多,換言之,Precision@Top K的指標,是最核心的。

我們再考慮一個任務,機器閱讀理解(Machine Reading Comprehension, MRC),機器閱讀一篇文章以後人類向它提問,由機器回答。這時候,所謂的Precision,是指機器回答的答案中,正確的比例。但是在這個任務中,Recall同樣重要:機器也有可能回答不出來問題,但是「回答不出」,其實和「回答錯誤」是沒有差別的。在這樣的任務中,我們希望能夠公平的Balance Precision和Recall的一個數字,所以我們認為F1 Score是一個好的衡量指標。

然而如果我們的問題是多分類的問題,實際上這些指標就不適合了,我們需要看的是Confusion Matri:

在上圖中,對於某一類別(比如貓)而言,錯誤會分為被誤判成狗或誤判成兔子兩種情形,共記9種不同的類別,其中三類(對角線上的元素)是分類正確的。顯然,僅僅用TP/TN/FP/FN這四類已經不足以分析這樣的問題了。

當然,指標也不僅限題主所列這幾種,這裡就不展開了。需要提一下的是,很多時候,能否有效的分析實驗結果,比單純演算法上幾個點的差異,對結果的影響來的大得多。在沒有指定具體情況的時候談指標,是沒有任何意義的。

Reference:

The Relationship Between Precision-Recall and ROC Curves, http://pages.cs.wisc.edu/~jdavis/davisgoadrichcamera2.pdf

Differences between Receiver Operating Characteristic AUC (ROC AUC) and Precision Recall AUC (PR AUC) http://www.chioka.in/differences-between-roc-auc-and-pr-auc/

本回答來自竹間智能 深度學習科學家趙寧遠。


正好最近剛做了個項目是關於imbalanced data的,又深入研究了一把各種evaluation metric,在這兒分享一下。

為了方便,以下專業名詞都用英文替代了。本人留學狗,腦子不好使容易蹦英文單詞,不喜勿噴哈。

準確率 - accuracy

精確率 - precision

召回率 - recall

F1值 - F1-score

ROC曲線下面積 - ROC-AUC (area under curve)

PR曲線下面積 - PR-AUC

首先,accuracy是最常見也是最基本的evaluation metric。但在binary classification 且正反例不平衡的情況下,尤其是我們對minority class 更感興趣的時候,accuracy評價基本沒有參考價值。什麼fraud detection(欺詐檢測),癌症檢測,都符合這種情況。舉個栗子:

在測試集里,有100個sample,99個反例,只有1個正例。如果我的模型不分青紅皂白對任意一個sample都預測是反例,那麼我的模型的accuracy是 正確的個數/總個數 = 99/100 = 99%

你拿著這個accuracy高達99%的模型屁顛兒屁顛兒的去預測新sample了,而它一個正例都分不出來,有意思么。。。

也有人管這叫accuracy paradox。

那麼,除了accuracy以外有沒有什麼別的更有用的metric呢?

有,precision 和 recall。上個圖幫助說明一下。

我的理解呢,就是,

  • recall是相對真實的答案而言: true positive / golden set 。假設測試集裡面有100個正例,你的模型能預測覆蓋到多少,如果你的模型預測到了40個正例,那你的recall就是40%。
  • precision是相對你自己的模型預測而言:true positive /retrieved set。假設你的模型一共預測了100個正例,而其中80個是對的正例,那麼你的precision就是80%。我們可以把precision也理解為,當你的模型作出一個新的預測時,它的confidence score 是多少,或者它做的這個預測是對的的可能性是多少。
  • 一般來說呢,魚與熊掌不可兼得。如果你的模型很貪婪,想要覆蓋更多的sample,那麼它就更有可能犯錯。在這種情況下,你會有很高的recall,但是較低的precision。如果你的模型很保守,只對它很sure的sample作出預測,那麼你的precision會很高,但是recall會相對低。

這樣一來呢,我們可以選擇只看我們感興趣的class,就是minority class的precision,recall來評價模型的好壞。

F1-score 就是一個綜合考慮precision和recall的metric: 2*precision*recall / (precision + recall)

基本上呢,問題就是如果你的兩個模型,一個precision特別高,recall特別低,另一個recall特別高,precision特別低的時候,f1-score可能是差不多的,你也不能基於此來作出選擇。

在multi-class classification的情況下,如果非要用一個綜合考量的metric的話,macro-average(宏平均) 會比 micro-average(微平均) 好一些哦,因為macro會受minority class影響更大,也就是說更能體現在small class上的performance。macro and micro

除了precision,recall,還有別的metric哦。基本上就是把true positive,true negative,false positive,false negative各種瞎JB組合。。

這裡介紹兩個ROC curve會見到的:sensitivity和specificity。

sensitivity = recall = true positive rate

specificity = 1- false positive rate

這兩個metric有什麼高級的呢?且聽我細細說來。

假設我們的minority class,也就是正例,是1。反例,為0。

是真實label Y的估計(estimate)。

看出來沒有,sensitivity和specificity是條件於真實label Y的概率的。我們講這個叫條件概率嘛。那麼意思就是說,無論Y的真實概率是多少,都不會影響sensitivity和specificity。也就是說,這兩個metric是不會受imbalanced data 影響的,那就很客觀了啊,是不是!而precision呢,就會隨著你的測試集裡面的正反比例而變化哦。

好了,終於說到我們的ROC curve了。這個曲線呢,就是以true positive rate 和 false positive rate為軸,取不同的threshold點畫的啦。有人問了,threshold是啥子哦。這麼說吧,每個分類器作出的預測呢,都是基於一個probability score的。一般默認的threshold呢都是0.5,如果probability&>0.5,那麼這個sample被模型分成正例了哈,反之則是反例。

關於這個曲線,大家答的已經很充分了。基本上,曲線下的面積(AUC)越大,或者說曲線更接近左上角(true positive rate=1, false positive rate=0),那麼模型就越理想,越好。ROC curve 可以很好的回答什麼問題呢——「不論class的基本概率怎麼樣,我的模型in general能表現得多好?」

一般來說呢,最優的threshold就是橙色曲線離藍色虛線(基準線)最遠的一點啦,或者橙色曲線上離左上角最近的一點,再或者是根據用戶自己定義的cost function來的。這裡有詳細的具體怎麼實現。http://www.medicalbiostatistics.com/roccurve.pdf

相對的, 還有一個PR curve,就是以precision recall為軸,取不同的threshold畫的哈。剛才說的魚與熊掌不可兼得的trade-off也可以看的出來哈。

同樣的,曲線下的面積(AUC)越大,或者說曲線更接近右上角(precision=1, recall=1),那麼模型就越理想,越好。

如果在我們所說的fraud detection 或者癌症檢測這一類應用中,我們的傾向肯定是「寧可錯殺一千,不可放過一個」呀。所以我們可以設定在合理的precision下,最高的recall作為最優點,找到這個對應的threshold點。

總結,我們可以根據具體的應用或者偏好,在曲線上找到最優的點,得到相對應的precision,recall,sensitivity,specificity,去調整模型的threshold,從而得到一個符合具體應用的模型。

以上。

Reference:

Accuracy paradox

Precision and recall

Sensitivity and specificity


Calculation formula:

Precision:P=TP/(TP+FP)
Recall:R=TP/(TP+FN)
F1-score:2/(1/P+1/R)
ROC/AUC:TPR=TP/(TP+FN), FPR=FP/(FP+TN)

What"s the difference:

  • AUC是ROC的積分(曲線下面積),是一個數值,一般認為越大越好,數值相對於曲線而言更容易當做調參的參照。
  • PR曲線會面臨一個問題,當需要獲得更高recall時,model需要輸出更多的樣本,precision可能會伴隨出現下降/不變/升高,得到的曲線會出現浮動差異(出現鋸齒),無法像ROC一樣保證單調性。
  • real world data經常會面臨class imbalance問題,即正負樣本比例失衡。根據計算公式可以推知,在testing set出現imbalance時ROC曲線能保持不變,而PR則會出現大變化。引用圖(Fawcett, 2006),(a)(c)為ROC,(b)(d)為PR,(a)(b)樣本比例1:1,(c)(d)為1:10。

  • 結合個人的經驗:學術論文在假定正負樣本均衡的時候多用ROC/AUC,實際工程更多存在數據標籤傾斜問題一般使用F1。

反駁某些答案以及評論。混淆矩陣如下,對於召回率recall,準確度precision,以及兩者相關的f1,都是與threshold的選擇相關,有的時候因為threshold的原因,不用這三個指標,如果非要用的話,threshold一般就選0.5,f1的threshold也很靈活,比如可以選擇使得f1最大的那個,也可以選擇roc曲線上距離(0,1)點最近的點對應的threshold。對於roc曲線,就是recall(tpr)-fpr的曲線,其與x軸的面積為auc,這是一個與threshold無關的值,一般情況還是很好用的,但是有兩個例外:
1. 對於 @qian lv 提到的不對稱的數據集分布,舉一個軟體工程中很常見的例子,一個模塊集,有bug的10個,沒有bug的10000個,現在對於某一個threshold,預測有bug的有5000個,其中真正有bug的有9個,那麼recall=9/10,即roc的縱坐標,橫坐標fpr為4991/10000approx 0.5,這樣感覺還不錯,大家可以意淫此時的roc曲線,但實際上你卻為了找到9個有bug的不得不多看4991個沒有bug的,這樣其實是很不好的一個模型,而如果使用prc,即把fpr改為precision,即為9/5000,這樣就說明這個模型不好了,所以完全贊同 @Charlotte 的評論。

2. 另外一個場景是軟體工程特有的,就是人工去檢查每一個樣本(即模塊)是否有bug,對於不同的模塊它的代價是不一樣的,很簡單,比如有個模塊只有10行,有個模塊有10000行,肯定第二個模塊的工作量大大得多,所以軟工裡面提出ce的指標,即roc曲線的橫坐標由fpr=FP/(TN+FP)改為frac{sum_iFP_i	imes LOC_i}{sum~of~lines~of~unbuggy~modules},其中LOC_i為模塊i的代碼行數。

至於什麼時候選用recall和precision, @金戈戈說的很清楚了,對於某些安全部門,比如地震預測,鐵路鼓掌預測之類的,我們是寧可錯殺一萬,也不能漏過一個,即要求很高的recall;而對於某些需要很慎重的場景,比如嫌疑人預測,不能亂開到,然而好像實際上不是這樣的。。。。


基本原理周志華老師的《機器學習》書上介紹差不多了,相關關係的話推薦paper:The Relationship Between Precision-Recall and ROC Curves(ICML06) http://pages.cs.wisc.edu/~jdavis/davisgoadrichcamera2.pdf
更細節的可以參考:[導讀]精確率、召回率、F1 值、ROC、AUC 各自的優缺點是什麼?


以上的觀點大多數是從純理論的角度來看的,我來說一個在業界AUC(ROC)用得比較多的原因:
如果CTR發生了變化,AUC不會發生變化而PR,Recall, Precision都會發生變化。
一般做學術研究使用的大都是固定的固定的數據集,並不會遇到CTR發生變化的問題。而在實際應用中,由於數據很多來自產品中收集的數據,CTR會經常發生變化(新產品發布,周末,突發重大事件等等),其他的幾種評價方式在這種情況下數值都會發生變化。這就會導致即使模型沒有任何變化, 對模型的評價卻會波動,波動的幅度甚至會超過對模型的改進所帶來的提升的幅度。使用AUC(ROC)可以避免這個問題。

至於PRC和ROC的優劣,我不同意上面大部分的人的意見。上面提到的「The relationship between Precision-Recall and ROC curves"已經提到了,」對於一個給定數目的正負樣本數據集,一條曲線在ROC空間中比另一條曲線有優勢,當且僅當第一條曲線在PR空間中也比第二條曲線有優勢「,而當這兩個曲線在圖形中有交錯的時候, 無論是ROC還是PRC都不能確定地告訴你哪個模型的好壞,你只能用AUC來比較兩個模型。但很多問題中ROC/PRC曲線不同位置的面積並不能簡單等價。
上面給到的大部分的例子之所以PRC比AUC更好,本質上不是因為樣本數量不平衡,而是損失函數L(y, hat{y})L(y=0, hat{y}=0) = 0,也就是true negative是沒有價值的。這種情況你需要做的是明確你需要的recall/precision的 tradeoff應該是多少。這種情況下當然PRC更好用。我可以舉出個樣本數量不平很但是AUC更好用的情況:在業界的產品中,模型輸出的概率直接被用於ranking,這種情況AUC是比PRC更好的。(你可以思考下是為什麼)


看來主要焦點在於ROC和PRC的對比和取捨上。

我覺得具體應用的時候,主要考慮的點是:

1. ROC和PRC背後是3個指標。所以選擇的時候可以先根據你的問題給這3個指標重要性排個序,然後再選擇使用ROC和PRC。

    • ROC對應的指標是: a. TPR 正樣本預測準確率(就是召回率Recall),評價的是模型在正樣本集合上的表現。 b. FPR,負樣本預測錯誤率。評價的是模型在負樣本集合上的表現。
    • PRC對應的指標是: a. 召回率Recall(同ROC的TPR) b. 準確率P,所有預測樣本的準確率(包括正樣本和負樣本)。最關鍵的就是這個,其他兩個都是單獨評價正樣本集合或者負樣本集合的。只有它是綜合評價整體結果。所以,哪總類型(正或者負)樣本多,權重就大。也就是通常說的『對樣本不均衡敏感』,『容易被多的樣品帶走』

拿樓上的『地震預測』舉例子。我的理解是,對模型的要求是不能漏報(recall一定要高),但是不能老是誤報(FPR不能太高)。混合的準確率其實沒有太大的意義。所以,我會選擇ROC。『犯罪檢測』也是一樣的。要求一樣,數據分布也類似(正樣本&<&<負樣本)

很多imbalance的數據,整體準確率都沒多大意義,1000次地震預測全部都判斷不是地震,導致漏報了一次真地震,準確率99.9%。又有什麼意義呢

2. ROC評價的是排序的質量,且ROC下的面積AUC有『把正樣本排在負樣本前的概率』這樣的意義在。而且,值(AUC)在實際操作中比曲線好用多了。所以平時ROC-AUC用的還是比較多的。

所以:

(1)如果指標重要性差別不是很大,並且用一個值來調參的話,AUC還是比較方便的。

(2)如果需要注重排序質量(比如LR預測CTR)可以選用ROC-AUC。(不過這裡的排序是不加權的,像要求『top3排序比bottom3排序重要』這樣的加權排序評價請用NDCG之類的指標)。


在周志華老師的《機器學習》第一章里講得很清楚易懂,題主可以看下。


更新:上次的用markdown整理完之後,複製到知乎不支持圖片的展示,其中一些指標的理解結合圖片會容易很多,本次更新:將圖片附在了最下方,需要看圖片解釋的,可以直接拉到下面看。

一、指標定義

準確率:策略命中的所有相關訂單/策略命中的所有訂單
召回率:策略命中的所有相關訂單/所有的相關訂單(包括策略未被命中的)
F1-score(F1-分數):2×準確率×召回率/(準確率+召回率),是模型準確率和召回率的一種加權平均,它的最大值是1,最小值是0。(詳細介紹見下)
ROC:ROC曲線的橫坐標為false positive rate(FPR,假正率),縱坐標為true positive rate(TPR,真正率,召回率)
AUC:被定義為ROC曲線下的面積,顯然這個面積的數值不會大於1。又由於ROC曲線一般都處於y=x這條直線的上方,所以AUC的取值範圍在0.5和1之間。

二、 召回率和準確率示意圖

1.recall 假定:從一個大規模數據集合中檢索文檔的時,可把文檔分成四組:

  • 系統檢索到的相關文檔(A)(TP)
  • 系統檢索到的不相關文檔(B)(FP)
  • 相關但是系統沒有檢索到的文檔(C)(FN)
  • 不相關且沒有被系統檢索到的文檔(D)(TN)
    則:
  • 召回率R:用檢索到相關文檔數作為分子,所有相關文檔總數作為分母,即R = A / ( A + C )
  • 準確率P:用檢索到相關文檔數作為分子,所有檢索到的文檔總數作為分母.即P = A / ( A + B ).

2.舉例來說:
一個資料庫有500個文檔,其中有50個文檔符合定義的問題。系統檢索到75個文檔,但是只有45個符合定義的問題。
召回率R=45/50=90%
精度P=45/75=60%
本例中,系統檢索是比較有效的,召回率為90%。但是結果有很大的噪音,有近一半的檢索結果是不相關。研究表明:在不犧牲精度的情況下,獲得一個高召回率是很困難的

三、ROC曲線和AUC

正如我們在這個ROC曲線的示例圖中看到的那樣,ROC曲線的橫坐標為false positive rate(FPR),縱坐標為true positive rate(TPR)。
接下來我們考慮ROC曲線圖中的四個點和一條線。第一個點,(0,1),即FPR=0, TPR=1,這意味著FN(false negative)=0,並且FP(false positive)=0。Wow,這是一個完美的分類器,它將所有的樣本都正確分類。第二個點,(1,0),即FPR=1,TPR=0,類似地分析可以發現這是一個最糟糕的分類器,因為它成功避開了所有的正確答案。第三個點,(0,0),即FPR=TPR=0,即FP(false positive)=TP(true positive)=0,可以發現該分類器預測所有的樣本都為負樣本(negative)。類似的,第四個點(1,1),分類器實際上預測所有的樣本都為正樣本。經過以上的分析,我們可以斷言,ROC曲線越接近左上角,該分類器的性能越好。

下面考慮ROC曲線圖中的虛線y=x上的點。這條對角線上的點其實表示的是一個採用隨機猜測策略的分類器的結果,例如(0.5,0.5),表示該分類器隨機對於一半的樣本猜測其為正樣本,另外一半的樣本為負樣本。

如何畫ROC曲線

對於一個特定的分類器和測試數據集,顯然只能得到一個分類結果,即一組FPR和TPR結果,而要得到一個曲線,我們實際上需要一系列FPR和TPR的值,這又是如何得到的呢?我們先來看一下Wikipedia上對ROC曲線的定義:

In signal detection theory, a receiver operating characteristic (ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.

問題在於「as its discrimination threashold is varied」。如何理解這裡的「discrimination threashold」呢?我們忽略了分類器的一個重要功能「概率輸出」,即表示分類器認為某個樣本具有多大的概率屬於正樣本(或負樣本)。通過更深入地了解各個分類器的內部機理,我們總能想辦法得到一種概率輸出。通常來說,是將一個實數範圍通過某個變換映射到(0,1)區間3。

假如我們已經得到了所有樣本的概率輸出(屬於正樣本的概率),現在的問題是如何改變「discrimination threashold」?我們根據每個測試樣本屬於正樣本的概率值從大到小排序。下圖是一個示例,圖中共有20個測試樣本,「Class」一欄表示每個測試樣本真正的標籤(p表示正樣本,n表示負樣本),「Score」表示每個測試樣本屬於正樣本的概率4。

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

當我們將threshold設置為1和0時,分別可以得到ROC曲線上的(0,0)和(1,1)兩個點。將這些(FPR,TPR)對連接起來,就得到了ROC曲線。當threshold取值越多,ROC曲線越平滑。

其實,我們並不一定要得到每個測試樣本是正樣本的概率值,只要得到這個分類器對該測試樣本的「評分值」即可(評分值並不一定在(0,1)區間)。評分越高,表示分類器越肯定地認為這個測試樣本是正樣本,而且同時使用各個評分值作為threshold。我認為將評分值轉化為概率更易於理解一些。

相關名詞

TP —— True Positive (真正, TP)被模型預測為正的正樣本;可以稱作判斷為真的正確率
TN —— True Negative(真負 , TN)被模型預測為負的負樣本 ;可以稱作判斷為假的正確率
FP ——False Positive (假正, FP)被模型預測為正的負樣本;可以稱作誤報率
FN—— False Negative(假負 , FN)被模型預測為負的正樣本;可以稱作漏報率
True Positive Rate(真正率 , TPR)或靈敏度(sensitivity)
   TPR = TP /(TP + FN)
  正樣本預測結果數 / 正樣本實際數
True Negative Rate(真負率 , TNR)或特指度(specificity)
   TNR = TN /(TN + FP)
  負樣本預測結果數 / 負樣本實際數
False Positive Rate (假正率, FPR)
  FPR = FP /(FP + TN)
  被預測為正的負樣本結果數 /負樣本實際數
False Negative Rate(假負率 , FNR)
  FNR = FN /(TP + FN)
  被預測為負的正樣本結果數 / 正樣本實際數

附:

對於一個策略為很么會有ROC曲線

一個相關訂單並不一定,一定會被策略命中,只是一個概率值,不過通常相比一個不想關訂單被命中的概率越大。
因此一批樣本被輸入進策略中,返回的TPR和FPR並不固定。
針對這個問題,我們將一批樣本中的每個樣本輸入策略中,策略命中這個樣本的概率座位一個score分值。這樣每一個樣本就對應一個SCORE值。

AUC代表什麼意思

這句話有些繞,我嘗試解釋一下:首先AUC值是一個概率值,當你隨機挑選一個正樣本以及一個負樣本,當前的分類演算法根據計算得到的Score值將這個正樣本排在負樣本前面的概率就是AUC值。當然,AUC值越大,當前的分類演算法越有可能將正樣本排在負樣本前面,即能夠更好的分類。
score值的閾值代表了對這個策略的認可度。只有當這個策略認為某樣本在90%以上的概率是真時,我們才認為這個樣本是真。

F1-score(F1-分數)詳細介紹

1. 的物理意義就是將準確率和召回率這兩個分值合併為一個分值,在合併的過程中,召回率的權重是準確率的
倍[1] 。
分數認為召回率和準確率同等重要,
分數認為召回率的重要程度是準確率的2倍,而
分數認為召回率的重要程度是準確率的一半。
2.G分數
G分數是另一種統一準確率和召回率的系統性能評估標準。
F分數是準確率和召回率的調和平均數,G分數被定義為準確率和召回率的幾何平均數。

為什麼使用ROC曲線

既然已經這麼多評價標準,為什麼還要使用ROC和AUC呢?因為ROC曲線有個很好的特性:當測試集中的正負樣本的分布變化的時候,ROC曲線能夠保持不變。在實際的數據集中經常會出現類不平衡(class imbalance)現象,即負樣本比正樣本多很多(或者相反),而且測試數據中的正負樣本的分布也可能隨著時間變化。下圖是ROC曲線和Precision-Recall曲線5的對比:

在上圖中,(a)和(c)為ROC曲線,(b)和(d)為Precision-Recall曲線。(a)和(b)展示的是分類其在原始測試集(正負樣本分布平衡)的結果,(c)和(d)是將測試集中負樣本的數量增加到原來的10倍後,分類器的結果。可以明顯的看出,ROC曲線基本保持原貌,而Precision-Recall曲線則變化較大。


本回答將以機器學習領域的"Hello World"數據集——MNIST為背景,來梳理一下關於分類問題模型評估的知識。分類問題有很多種,比如二分類(Binary Classification)、多類別分類(Multiclass Classification)、多類別分類(Multilabel Classification)和多輸出分類(Multioutput Classification)等,本文以二分類問題為主要研究對象來展開介紹分類問題模型的評估方法及評估指標。

MNIST數據集

Google實驗室的Corinna Cortes和紐約大學柯朗研究所的Yann LeCun建有一個手寫數字資料庫,MNIST一共有70000個手寫數字圖片,從Scikit-Learn中可以方便的獲取該數據。(註:在用下面的代碼獲取數據集的時候是聯網下載的,有時候可能因為網路問題使得數據集下載的不完整而導致錯誤,文末我已給出完整的文件:mnist-original.mat)

每張圖片都是28*28像素的,每個像素點都是一個特徵,所以mnist數據集里的data有784個特徵,本文以識別一個圖片是否是5這樣一個二分類問題來介紹模型評估方法k折交叉驗證發(k-fold Cross-Validation)和一些評價指標精度(Precision)、查全率(Recall)、F1 score、P-R曲線以及ROC曲線。

將70000組數據按照6:1的比例分為訓練集和數據集,為了保證在後續交叉驗證中的每個驗證集中都不缺少數字,將分好的數據打亂重排(shuffle)。

方便起見,本文以識別一個圖片是否為數字5這樣一個二分類問題為例,訓練了一個隨機梯度下降分類器(SGD Classifier)

性能評估方法:k折交叉驗證法(k-fold Cross-Validation)

在一個問題的建模上,我們可以選擇多種學習演算法,甚至一個學習演算法使用不同參數配置的時候也會產生差別明顯的模型,那我們該選擇哪種學習演算法、使用哪個參數配置呢?這就是機器學習中「模型選擇」問題,理想的解決方法當然是選擇泛化誤差最小的那個模型,但是我們無法直接獲得泛化誤差[1],通常我們通過實驗測試的方法來對學習器的泛化誤差來進行評估並作出選擇,周志華老師在《機器學習》中提到了三個方法:留出法交叉驗證法自助法。本文主要介紹常用的交叉驗證法(也稱k折交叉驗證法)。

一般我們將數據集分為訓練集(training set)和測試集(test set),在樣本量不充足的情況下,為了充分利用數據集對演算法效果進行測試,將數據集D隨機(分層抽樣)分為k個包,每次將其中一個包作為測試集,剩下k-1個包作為訓練集進行訓練。如上圖所示

利用sklearn可以方面的實現:

其中參數cv就是將數據分為3份,即k折交叉驗證的k,分數是不是看起來很高,平均在95%以上了,使用的評價標準是accuracy,即正確預測的比例,但是事情並不那麼簡單,因為5這個數字,在所有數據集里大概只佔了10%左右,即使我寫一個演算法,碰到的所有圖片都認為不是5精度也可以達到90%!所以評價的指標非常重要,根據sklearn的文檔,scoring參數可以有很多選擇,詳情見這裡。下面主要介紹一些評價一個模型的指標。

性能評估指標

在介紹一些指標之前,首先要介紹一下混淆矩陣(Confusion Matrix)

TN(true negatives):實際這個數字不是5,預測值也不是5

FN(false negatives):實際這個數字不是5,預測值卻是5

FP(false positives):實際這個數字是5,預測值卻不是5

TP(true positives):實際這個數字是5,預測值也是5

查准率(Precision)

公式:

查准率反映了被分類器判定的正例中真正的正例樣本的比重,即目前預測出的所有為5的圖片中,實際是5的比例。根據上面的混淆矩陣,可以算出precision = 4344/(4344+1307) = 76.87%,是不是比剛才的accuracy少了很多,因為accuracy = (53272+4344)/60000 = 96.03%,如果我還是沒有說清楚,請再仔細看看上面那張混淆矩陣的圖。

查全率(Recall)

公式:

查全率反映了被正確判定的正例佔總的正例的比重,即在所有實際是5的圖片中,我的分類器預測到了多少個(所佔比例)。

F1 度量

公式:

F1 score即precision和recall的調和平均數,它同時兼顧了分類模型的查准率和查全率

為什麼要有這麼多度量指標呢?這是由我們的分類任務的性質所決定的,比如在商品推薦系統中,希望更精準的了解客戶需求,避免推送用戶不感興趣的內容,查准率就更加重要;在疾病檢測的時候,我們不希望查漏任何一項疾病,這時查全率就更重要。當兩者都需要考慮時,F1度量就是一種參考指標。

為了更直觀的分析,也可以採用作圖的方式來評估:

P-R圖

顧名思義,即以precision和recall為坐標的圖

ROC曲線

ROC(receiver operating characteristic)是反映敏感性和特異性連續變數的綜合指標,是用構圖法揭示敏感性和特異性的相互關係,它通過將連續變數設定出多個不同的臨界值,從而計算出一系列敏感性和特異性,再以敏感性為縱坐標、(1-特異性)為橫坐標繪製成曲線,曲線下面積(AUC)越大,診斷準確性越高。在ROC曲線上,最靠近坐標圖左上方的點為敏感性和特異性均較高的臨界值。

ROC曲線的橫軸是「假正例率」(FPR),公式為:

縱軸是「真正例率」(TPR),公式為:

AUC(Area under Curve):Roc曲線下的面積,介於0.1和1之間。AUC作為數值可以直觀的評價分類器的好壞,值越大越好。

首先AUC值是一個概率值,當你隨機挑選一個正樣本以及負樣本,當前的分類演算法根據計算得到的Score值將這個正樣本排在負樣本前面的概率就是AUC值,AUC值越大,當前分類演算法越有可能將正樣本排在負樣本前面,從而能夠更好地分類。

那什麼時候用P-R曲線,什麼時候用ROC曲線去評價模型呢?當正負樣本差距不大的情況下,ROC和PR的趨勢是差不多的,但是當負樣本很多的時候,兩者就截然不同了,ROC曲線能夠保持不變,但是P-R曲線上反映出的變化就比較大了。另一方面,當我們更關心FP(false positives)而不是FN(false negatives)時,也應該用P-R曲線來評價。

參考

[1]周志華. 機器學習[M]. 清華大學出版社, 2016.

[2]機器學習之分類器性能指標之ROC曲線、AUC值

[3]ROC曲線和PR曲線

[3]Hands On Machine Learning with Scikit Learn and TensorFlow

--------------------------------------------------------------------------------------------------------------------------

本文相關文件和思維導圖:

鏈接:http://pan.baidu.com/s/1o8SJq6A 密碼:ssnj

收錄於專欄:機器學習筆記


準確和召回評價的是兩個不同的方面,不好比較,個人感覺在召回方面,工業界比學術界關注得更多。F1是對兩者的綜合。ROC和AUC是一回事,通常用於二分類的評價,AUC用得比較多的一個重要原因是,實際環境中正負樣本極不均衡,PR曲線無法很好反映出分類器性能,而ROC受此影響小。


推薦閱讀:

TAG:數據挖掘 | 機器學習 | 推薦系統實現 |