摘要:精準(zhǔn)率代表對正樣本結(jié)果中的預(yù)測準(zhǔn)確程度,而準(zhǔn)確率則代表整體的預(yù)測準(zhǔn)確程度,既包括正樣本,也包括負(fù)樣本。分?jǐn)?shù)同時考慮了查準(zhǔn)率和查全率,讓二者同時達(dá)到最高,取一個平衡。接受者操作特征曲線曲線,又稱接受
作者:xiaoyu
微信公眾號:Python數(shù)據(jù)科學(xué)
知乎:python數(shù)據(jù)分析師
ROC/AUC作為機(jī)器學(xué)習(xí)的評估指標(biāo)非常重要,也是面試中經(jīng)常出現(xiàn)的問題(80%都會問到)。其實,理解它并不是非常難,但是好多朋友都遇到了一個相同的問題,那就是:每次看書的時候都很明白,但回過頭就忘了,經(jīng)常容易將概念弄混。還有的朋友面試之前背下來了,但是一緊張大腦一片空白全忘了,導(dǎo)致回答的很差。
我在之前的面試過程中也遇到過類似的問題,我的面試經(jīng)驗是:一般筆試題遇到選擇題基本都會考這個率,那個率,或者給一個場景讓你選用哪個。面試過程中也被問過很多次,比如什么是AUC/ROC?橫軸縱軸都代表什么?有什么優(yōu)點?為什么要使用它?
我記得在我第一次回答的時候,我將準(zhǔn)確率,精準(zhǔn)率,召回率等概念混淆了,最后一團(tuán)亂。回去以后我從頭到尾梳理了一遍所有相關(guān)概念,后面的面試基本都回答地很好。現(xiàn)在想將自己的一些理解分享給大家,希望讀完本篇可以徹底記住ROC/AUC的概念。
什么是性能度量?我們都知道機(jī)器學(xué)習(xí)要建模,但是對于模型性能的好壞(即模型的泛化能力),我們并不知道是怎樣的,很可能這個模型就是一個差的模型,泛化能力弱,對測試集不能很好的預(yù)測或分類。那么如何知道這個模型是好是壞呢?我們必須有個評判的標(biāo)準(zhǔn)。為了了解模型的泛化能力,我們需要用某個指標(biāo)來衡量,這就是性能度量的意義。有了一個指標(biāo),我們就可以對比不同模型了,從而知道哪個模型相對好,那個模型相對差,并通過這個指標(biāo)來進(jìn)一步調(diào)參逐步優(yōu)化我們的模型。
當(dāng)然,對于分類和回歸兩類監(jiān)督學(xué)習(xí),分別有各自的評判標(biāo)準(zhǔn)。本篇我們主要討論與分類相關(guān)的一些指標(biāo),因為AUC/ROC就是用于分類的性能度量標(biāo)準(zhǔn)。
混淆矩陣,準(zhǔn)確率,精準(zhǔn)率,召回率 1. 混淆矩陣在介紹各個率之前,先來介紹一下混淆矩陣。如果我們用的是個二分類的模型,那么把預(yù)測情況與實際情況的所有結(jié)果兩兩混合,結(jié)果就會出現(xiàn)以下4種情況,就組成了混淆矩陣。
由于1和0是數(shù)字,閱讀性不好,所以我們分別用P和N表示1和0兩種結(jié)果。變換之后為PP,PN,NP,NN,閱讀性也很差,我并不能輕易地看出來預(yù)測的正確性與否。因此,為了能夠更清楚地分辨各種預(yù)測情況是否正確,我們將其中一個符號修改為T和F,以便于分辨出結(jié)果。
P(Positive):代表1
N(Negative):代表0
T(True):代表預(yù)測正確
F(False):代表錯誤
按照上面的字符表示重新分配矩陣,混淆矩陣就變成了下面這樣:
將這種表示方法總結(jié)如下,可分為兩部分:
因此對于這種表示方法可以這么簡單的理解:先看 ①預(yù)測結(jié)果(P/N),再根據(jù)②實際表現(xiàn)對比預(yù)測結(jié)果,給出判斷結(jié)果(T/F)。按這個順序理解,這四種情況就很好記住了。
TP:預(yù)測為1,預(yù)測正確,即實際1
FP:預(yù)測為1,預(yù)測錯誤,即實際0
FN:預(yù)測為0,預(yù)測錯確,即實際1
TN:預(yù)測為0,預(yù)測正確即,實際0
2. 準(zhǔn)確率既然是個分類指標(biāo),我們可以很自然的想到準(zhǔn)確率,準(zhǔn)確率的定義是預(yù)測正確的結(jié)果占總樣本的百分比,其公式如下:
準(zhǔn)確率=(TP+TN)/(TP+TN+FP+FN)
雖然準(zhǔn)確率可以判斷總的正確率,但是在樣本不平衡的情況下,并不能作為很好的指標(biāo)來衡量結(jié)果。舉個簡單的例子,比如在一個總樣本中,正樣本占90%,負(fù)樣本占10%,樣本是嚴(yán)重不平衡的。對于這種情況,我們只需要將全部樣本預(yù)測為正樣本即可得到90%的高準(zhǔn)確率,但實際上我們并沒有很用心的分類,只是隨便無腦一分而已。這就說明了:由于樣本不平衡的問題,導(dǎo)致了得到的高準(zhǔn)確率結(jié)果含有很大的水分。即如果樣本不平衡,準(zhǔn)確率就會失效。
正因為如此,也就衍生出了其它兩種指標(biāo):精準(zhǔn)率和召回率。
3. 精準(zhǔn)率精準(zhǔn)率(Precision)又叫查準(zhǔn)率,它是針對預(yù)測結(jié)果而言的,它的含義是在所有被預(yù)測為正的樣本中實際為正的樣本的概率,意思就是在預(yù)測為正樣本的結(jié)果中,我們有多少把握可以預(yù)測正確,其公式如下:
精準(zhǔn)率=TP/(TP+FP)
精準(zhǔn)率和準(zhǔn)確率看上去有些類似,但是完全不同的兩個概念。精準(zhǔn)率代表對正樣本結(jié)果中的預(yù)測準(zhǔn)確程度,而準(zhǔn)確率則代表整體的預(yù)測準(zhǔn)確程度,既包括正樣本,也包括負(fù)樣本。
4. 召回率召回率(Recall)又叫查全率,它是針對原樣本而言的,它的含義是在實際為正的樣本中被預(yù)測為正樣本的概率,其公式如下:
召回率=TP/(TP+FN)
召回率的應(yīng)用場景:比如拿網(wǎng)貸違約率為例,相對好用戶,我們更關(guān)心壞用戶,不能錯放過任何一個壞用戶。因為如果我們過多的將壞用戶當(dāng)成好用戶,這樣后續(xù)可能發(fā)生的違約金額會遠(yuǎn)超過好用戶償還的借貸利息金額,造成嚴(yán)重償失。召回率越高,代表實際壞用戶被預(yù)測出來的概率越高,它的含義類似:寧可錯殺一千,絕不放過一個。
5. 精準(zhǔn)率和召回率的關(guān)系,F(xiàn)1分?jǐn)?shù)通過上面的公式,我們發(fā)現(xiàn):精準(zhǔn)率和召回率的分子是相同,都是TP,但分母是不同的,一個是(TP+FP),一個是(TP+FN)。兩者的關(guān)系可以用一個P-R圖來展示:
如何理解P-R(查準(zhǔn)率-查全率)這條曲線?
有的朋友疑惑:這條曲線是根據(jù)什么變化的?為什么是這個形狀的曲線?其實這要從排序型模型說起。拿邏輯回歸舉例,邏輯回歸的輸出是一個0到1之間的概率數(shù)字,因此,如果我們想要根據(jù)這個概率判斷用戶好壞的話,我們就必須定義一個閾值。通常來講,邏輯回歸的概率越大說明越接近1,也就可以說他是壞用戶的可能性更大。比如,我們定義了閾值為0.5,即概率小于0.5的我們都認(rèn)為是好用戶,而大于0.5都認(rèn)為是壞用戶。因此,對于閾值為0.5的情況下,我們可以得到相應(yīng)的一對查準(zhǔn)率和查全率。
但問題是:這個閾值是我們隨便定義的,我們并不知道這個閾值是否符合我們的要求。因此,為了找到一個最合適的閾值滿足我們的要求,我們就必須遍歷0到1之間所有的閾值,而每個閾值下都對應(yīng)著一對查準(zhǔn)率和查全率,從而我們就得到了這條曲線。
有的朋友又問了:如何找到最好的閾值點呢?首先,需要說明的是我們對于這兩個指標(biāo)的要求:我們希望查準(zhǔn)率和查全率同時都非常高。但實際上這兩個指標(biāo)是一對矛盾體,無法做到雙高。圖中明顯看到,如果其中一個非常高,另一個肯定會非常低。選取合適的閾值點要根據(jù)實際需求,比如我們想要高的查全率,那么我們就會犧牲一些查準(zhǔn)率,在保證查全率最高的情況下,查準(zhǔn)率也不那么低。
F1分?jǐn)?shù)
但通常,如果想要找到二者之間的一個平衡點,我們就需要一個新的指標(biāo):F1分?jǐn)?shù)。F1分?jǐn)?shù)同時考慮了查準(zhǔn)率和查全率,讓二者同時達(dá)到最高,取一個平衡。F1分?jǐn)?shù)的公式為 = 2查準(zhǔn)率查全率 / (查準(zhǔn)率 + 查全率)。我們在圖中看到的平衡點就是F1分?jǐn)?shù)得來的結(jié)果。
ROC/AUC的概念 1. 靈敏度,特異度,真正率,假正率在正式介紹ROC/AUC之前,我們還要再介紹兩個指標(biāo),這兩個指標(biāo)的選擇也正是ROC和AUC可以無視樣本不平衡的原因。這兩個指標(biāo)分別是:靈敏度和(1-特異度),也叫做真正率(TPR)和假正率(FPR)。
靈敏度(Sensitivity) = TP/(TP+FN)
特異度(Specificity) = TN/(FP+TN)
其實我們可以發(fā)現(xiàn)靈敏度和召回率是一模一樣的,只是名字換了而已。
由于我們比較關(guān)心正樣本,所以需要查看有多少負(fù)樣本被錯誤地預(yù)測為正樣本,所以使用(1-特異度),而不是特異度。
真正率(TPR) = 靈敏度 = TP/(TP+FN)
假正率(FPR) = 1- 特異度 = FP/(FP+TN)
下面是真正率和假正率的示意,我們發(fā)現(xiàn)TPR和FPR分別是基于實際表現(xiàn)1和0出發(fā)的,也就是說它們分別在實際的正樣本和負(fù)樣本中來觀察相關(guān)概率問題。正因為如此,所以無論樣本是否平衡,都不會被影響。還是拿之前的例子,總樣本中,90%是正樣本,10%是負(fù)樣本。我們知道用準(zhǔn)確率是有水分的,但是用TPR和FPR不一樣。這里,TPR只關(guān)注90%正樣本中有多少是被真正覆蓋的,而與那10%毫無關(guān)系,同理,F(xiàn)PR只關(guān)注10%負(fù)樣本中有多少是被錯誤覆蓋的,也與那90%毫無關(guān)系,所以可以看出:如果我們從實際表現(xiàn)的各個結(jié)果角度出發(fā),就可以避免樣本不平衡的問題了,這也是為什么選用TPR和FPR作為ROC/AUC的指標(biāo)的原因。
或者我們也可以從另一個角度考慮:條件概率。我們假設(shè)X為預(yù)測值,Y為真實值。那么就可以將這些指標(biāo)按條件概率表示:
精準(zhǔn)率 = P(Y=1 | X=1)
召回率 = 靈敏度 = P(X=1 | Y=1)
特異度 = P(X=0 | Y=0)
從上面三個公式看到:如果我們先以實際結(jié)果為條件(召回率,特異度),那么就只需考慮一種樣本,而先以預(yù)測值為條件(精準(zhǔn)率),那么我們需要同時考慮正樣本和負(fù)樣本。所以先以實際結(jié)果為條件的指標(biāo)都不受樣本不平衡的影響,相反以預(yù)測結(jié)果為條件的就會受到影響。
2. ROC(接受者操作特征曲線)ROC(Receiver Operating Characteristic)曲線,又稱接受者操作特征曲線。該曲線最早應(yīng)用于雷達(dá)信號檢測領(lǐng)域,用于區(qū)分信號與噪聲。后來人們將其用于評價模型的預(yù)測能力,ROC曲線是基于混淆矩陣得出的。
ROC曲線中的主要兩個指標(biāo)就是真正率和假正率,上面也解釋了這么選擇的好處所在。其中橫坐標(biāo)為假正率(FPR),縱坐標(biāo)為真正率(TPR),下面就是一個標(biāo)準(zhǔn)的ROC曲線圖。
ROC曲線的閾值問題
與前面的P-R曲線類似,ROC曲線也是通過遍歷所有閾值來繪制整條曲線的。如果我們不斷的遍歷所有閾值,預(yù)測的正樣本和負(fù)樣本是在不斷變化的,相應(yīng)的在ROC曲線圖中也會沿著曲線滑動。
如何判斷ROC曲線的好壞?
改變閾值只是不斷地改變預(yù)測的正負(fù)樣本數(shù),即TPR和FPR,但是曲線本身是不會變的。那么如何判斷一個模型的ROC曲線是好的呢?這個還是要回歸到我們的目的:FPR表示模型虛報的響應(yīng)程度,而TPR表示模型預(yù)測響應(yīng)的覆蓋程度。我們所希望的當(dāng)然是:虛報的越少越好,覆蓋的越多越好。所以總結(jié)一下就是TPR越高,同時FPR越低(即ROC曲線越陡),那么模型的性能就越好。參考如下動態(tài)圖進(jìn)行理解。
ROC曲線無視樣本不平衡
前面已經(jīng)對ROC曲線為什么可以無視樣本不平衡做了解釋,下面我們用動態(tài)圖的形式再次展示一下它是如何工作的。我們發(fā)現(xiàn):無論紅藍(lán)色樣本比例如何改變,ROC曲線都沒有影響。
3. AUC(曲線下的面積)為了計算 ROC 曲線上的點,我們可以使用不同的分類閾值多次評估邏輯回歸模型,但這樣做效率非常低。幸運(yùn)的是,有一種基于排序的高效算法可以為我們提供此類信息,這種算法稱為曲線下面積(Area Under Curve)。
比較有意思的是,如果我們連接對角線,它的面積正好是0.5。對角線的實際含義是:隨機(jī)判斷響應(yīng)與不響應(yīng),正負(fù)樣本覆蓋率應(yīng)該都是50%,表示隨機(jī)效果。ROC曲線越陡越好,所以理想值就是1,一個正方形,而最差的隨機(jī)判斷都有0.5,所以一般AUC的值是介于0.5到1之間的。
AUC的一般判斷標(biāo)準(zhǔn)
0.5 - 0.7:效果較低,但用于預(yù)測股票已經(jīng)很不錯了
0.7 - 0.85:效果一般
0.85 - 0.95:效果很好
0.95 - 1:效果非常好,但一般不太可能
AUC的物理意義
曲線下面積對所有可能的分類閾值的效果進(jìn)行綜合衡量。曲線下面積的一種解讀方式是看作模型將某個隨機(jī)正類別樣本排列在某個隨機(jī)負(fù)類別樣本之上的概率。以下面的樣本為例,邏輯回歸預(yù)測從左到右以升序排列:ROC/AUC的Python實現(xiàn)
Python中我們可以調(diào)用sklearn機(jī)器學(xué)習(xí)庫的metrics進(jìn)行ROC和AUC的實現(xiàn),簡單的代碼實現(xiàn)部分如下:
from sklearn import metrics from sklearn.metrics import auc import numpy as np y = np.array([1, 1, 2, 2]) scores = np.array([0.1, 0.4, 0.35, 0.8]) fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2) metrics.auc(fpr, tpr) 0.75
以上就是所有關(guān)于ROC和AUC的講解和實現(xiàn),auc面積是0.75。如今的我再去面試,最希望面試官問我這個問題了,希望看過的朋友也可以徹底理解和記住ROC/AUC,以及各種指標(biāo)率的概念。
參考:
1.機(jī)器學(xué)習(xí),周志華
2.Python數(shù)據(jù)科學(xué)技術(shù)詳解與商業(yè)實踐,常國珍
3.https://developers.google.com...
4.https://lukeoakdenrayner.word...
關(guān)注微信公眾號:Python數(shù)據(jù)科學(xué),發(fā)現(xiàn)更多精彩內(nèi)容。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/19831.html
摘要:精準(zhǔn)率代表對正樣本結(jié)果中的預(yù)測準(zhǔn)確程度,而準(zhǔn)確率則代表整體的預(yù)測準(zhǔn)確程度,既包括正樣本,也包括負(fù)樣本。分?jǐn)?shù)同時考慮了查準(zhǔn)率和查全率,讓二者同時達(dá)到最高,取一個平衡。接受者操作特征曲線曲線,又稱接受 作者:xiaoyu 微信公眾號:Python數(shù)據(jù)科學(xué) 知乎:python數(shù)據(jù)分析師 ROC/AUC作為機(jī)器學(xué)習(xí)的評估指標(biāo)非常重要,也是面試中經(jīng)常出現(xiàn)的問題(80%都會問到)。其實,理解它并...
閱讀 2949·2021-11-24 09:39
閱讀 2858·2021-09-29 09:34
閱讀 3549·2021-09-24 10:23
閱讀 1731·2021-09-22 15:41
閱讀 1690·2019-08-30 15:55
閱讀 3506·2019-08-30 13:58
閱讀 2614·2019-08-30 13:11
閱讀 1662·2019-08-29 12:31