tft每日頭條

 > 生活

 > 序列評價指标

序列評價指标

生活 更新时间:2024-09-28 15:22:19

ROC/AUC作為機器學習的評估指标非常重要,也是面試中經常出現的問題(80%都會問到)。其實,理解它并不是非常難,但是好多朋友都遇到了一個相同的問題,那就是:每次看書的時候都很明白,但回過頭就忘了,經常容易将概念弄混。還有的朋友面試之前背下來了,但是一緊張大腦一片空白全忘了,導緻回答的很差。一般筆試題遇到選擇題基本都會考這個率,那個率,或者給一個場景讓你選用哪個。面試過程中也被問過很多次,比如什麼是AUC/ROC?橫軸縱軸都代表什麼?有什麼優點?為什麼要使用它?我記得在我第一次回答的時候,我将準确率,精準率,召回率等概念混淆了,最後一團亂。回去以後我從頭到尾梳理了一遍所有相關概念,後面的面試基本都回答地很好。現在想将自己的一些理解分享給大家,希望讀完本篇可以徹底記住ROC/AUC的概念。

什麼是性能度量?

我們都知道機器學習要建模,但是對于模型性能的好壞(即模型的泛化能力),我們并不知道是怎樣的,很可能這個模型就是一個差的模型,泛化能力弱,對測試集不能很好的預測或分類。那麼如何知道這個模型是好是壞呢?我們必須有個評判的标準。為了了解模型的泛化能力,我們需要用某個指标來衡量,這就是性能度量的意義。有了一個指标,我們就可以對比不同模型了,從而知道哪個模型相對好,那個模型相對差,并通過這個指标來進一步調參逐步優化我們的模型。當然,對于分類和回歸兩類監督學習,分别有各自的評判标準。本篇我們主要讨論與分類相關的一些指标,因為AUC/ROC就是用于分類的性能度量标準。

混淆矩陣,準确率,精準率,召回率

1. 混淆矩陣

在介紹各個率之前,先來介紹一下混淆矩陣。如果我們用的是個二分類的模型,那麼把預測情況與實際情況的所有結果兩兩混合,結果就會出現以下4種情況,就組成了混淆矩陣

序列評價指标(模型評價指标ROCAUC)1

由于1和0是數字,閱讀性不好,所以我們分别用P和N表示1和0兩種結果。變換之後為PP,PN,NP,NN,閱讀性也很差,我并不能輕易地看出來預測的正确性與否。因此,為了能夠更清楚地分辨各種預測情況是否正确,我們将其中一個符号修改為T和F,以便于分辨出結果。P(positive):代表1N(Negative):代表0T(True):代表預測正确F(False):代表錯誤按照上面的字符表示重新分配矩陣,混淆矩陣就變成了下面這樣:

序列評價指标(模型評價指标ROCAUC)2

将這種表示方法總結如下,可分為兩部分:

序列評價指标(模型評價指标ROCAUC)3

因此對于這種表示方法可以這麼簡單的理解:先看 ①預測結果(P/N),再根據②實際表現對比預測結果,給出判斷結果(T/F)。按這個順序理解,這四種情況就很好記住了。TP:預測為1,預測正确,即實際1FP:預測為1,預測錯誤,即實際0FN:預測為0,預測錯确,即實際1TN:預測為0,預測正确即,實際0

2. 準确率

既然是個分類指标,我們可以很自然的想到準确率,準确率的定義是預測正确的結果占總樣本的百分比,其公式如下:準确率=(TP TN)/(TP TN FP FN)

序列評價指标(模型評價指标ROCAUC)4

雖然準确率可以判斷總的正确率,但是在樣本不平衡的情況下,并不能作為很好的指标來衡量結果。舉個簡單的例子,比如在一個總樣本中,正樣本占90%,負樣本占10%,樣本是嚴重不平衡的。對于這種情況,我們隻需要将全部樣本預測為正樣本即可得到90%的高準确率,但實際上我們并沒有很用心的分類,隻是随便無腦一分而已。這就說明了:由于樣本不平衡的問題,導緻了得到的高準确率結果含有很大的水分。即如果樣本不平衡,準确率就會失效。正因為如此,也就衍生出了其它兩種指标:精準率和召回率。

3. 精準率

精準率(Precision)又叫查準率,它是針對預測結果而言的,它的含義是在所有被預測為正的樣本中實際為正的樣本的概率,意思就是在預測為正樣本的結果中,我們有多少把握可以預測正确,其公式如下:精準率=TP/(TP FP)

序列評價指标(模型評價指标ROCAUC)5

精準率和準确率看上去有些類似,但是完全不同的兩個概念。精準率代表對正樣本結果中的預測準确程度,而準确率則代表整體的預測準确程度,既包括正樣本,也包括負樣本。

4. 召回率

召回率(Recall)又叫查全率,它是針對原樣本而言的,它的含義是在實際為正的樣本中被預測為正樣本的概率,其公式如下:精準率=TP/(TP FN)

序列評價指标(模型評價指标ROCAUC)6

召回率的應用場景:比如拿網貸違約率為例,相對好用戶,我們更關心壞用戶,不能錯放過任何一個壞用戶。因為如果我們過多的将壞用戶當成好用戶,這樣後續可能發生的違約金額會遠超過好用戶償還的借貸利息金額,造成嚴重償失。召回率越高,代表實際壞用戶被預測出來的概率越高,它的含義類似:甯可錯殺一千,絕不放過一個。

5. 精準率和召回率的關系,F1分數

通過上面的公式,我們發現:精準率和召回率的分子是相同,都是TP,但分母是不同的,一個是(TP FP),一個是(TP FN)。兩者的關系可以用一個P-R圖來展示:

序列評價指标(模型評價指标ROCAUC)7

如何理解P-R(查準率-查全率)這條曲線?有的朋友疑惑:這條曲線是根據什麼變化的?為什麼是這個形狀的曲線?其實這要從排序型模型說起。拿邏輯回歸舉例,邏輯回歸的輸出是一個0到1之間的概率數字,因此,如果我們想要根據這個概率判斷用戶好壞的話,我們就必須定義一個阈值。通常來講,邏輯回歸的概率越大說明越接近1,也就可以說他是壞用戶的可能性更大。比如,我們定義了阈值為0.5,即概率小于0.5的我們都認為是好用戶,而大于0.5都認為是壞用戶。因此,對于阈值為0.5的情況下,我們可以得到相應的一對查準率和查全率。但問題是:這個阈值是我們随便定義的,我們并不知道這個阈值是否符合我們的要求。因此,為了找到一個最合适的阈值滿足我們的要求,我們就必須遍曆0到1之間所有的阈值,而每個阈值下都對應着一對查準率和查全率,從而我們就得到了這條曲線。有的朋友又問了:如何找到最好的阈值點呢?首先,需要說明的是我們對于這兩個指标的要求:我們希望查準率和查全率同時都非常高。但實際上這兩個指标是一對矛盾體,無法做到雙高。圖中明顯看到,如果其中一個非常高,另一個肯定會非常低。選取合适的阈值點要根據實際需求,比如我們想要高的查全率,那麼我們就會犧牲一些查準率,在保證查全率最高的情況下,查準率也不那麼低。F1分數但通常,如果想要找到二者之間的一個平衡點,我們就需要一個新的指标:F1分數。F1分數同時考慮了查準率和查全率,讓二者同時達到最高,取一個平衡。F1分數的公式為 = 2*查準率*查全率 / (查準率 查全率)。我們在圖中看到的平衡點就是F1分數得來的結果。

ROC/AUC的概念

1. 靈敏度,特異度,真正率,假正率

在正式介紹ROC/AUC之前,我們還要再介紹兩個指标,這兩個指标的選擇也正是ROC和AUC可以無視樣本不平衡的原因。這兩個指标分别是:靈敏度和(1-特異度),也叫做真正率(TPR)和假正率(fpr)。靈敏度(Sensitivity) = TP/(TP FN)特異度(Specificity) = TN/(FP TN)其實我們可以發現靈敏度和召回率是一模一樣的,隻是名字換了而已。由于我們比較關心正樣本,所以需要查看有多少負樣本被錯誤地預測為正樣本,所以使用(1-特異度),而不是特異度。真正率(TPR) = 靈敏度 = TP/(TP FN)假正率(FPR) = 1- 特異度 = FP/(FP TN)下面是真正率和假正率的示意,我們發現TPR和FPR分别是基于實際表現1和0出發的,也就是說它們分别在實際的正樣本和負樣本中來觀察相關概率問題。正因為如此,所以無論樣本是否平衡,都不會被影響。還是拿之前的例子,總樣本中,90%是正樣本,10%是負樣本。我們知道用準确率是有水分的,但是用TPR和FPR不一樣。這裡,TPR隻關注90%正樣本中有多少是被真正覆蓋的,而與那10%毫無關系,同理,FPR隻關注10%負樣本中有多少是被錯誤覆蓋的,也與那90%毫無關系,所以可以看出:如果我們從實際表現的各個結果角度出發,就可以避免樣本不平衡的問題了,這也是為什麼選用TPR和FPR作為ROC/AUC的指标的原因。

序列評價指标(模型評價指标ROCAUC)8

或者我們也可以從另一個角度考慮:條件概率。我們假設X為預測值,Y為真實值。那麼就可以将這些指标按條件概率表示:精準率 = P(Y=1 | X=1)召回率 = 靈敏度 = P(X=1 | Y=1)特異度 = P(X=0 | Y=0)從上面三個公式看到:如果我們先以實際結果為條件(召回率,特異度),那麼就隻需考慮一種樣本,而先以預測值為條件(精準率),那麼我們需要同時考慮正樣本和負樣本。所以先以實際結果為條件的指标都不受樣本不平衡的影響,相反以預測結果為條件的就會受到影響。

2. ROC(接受者操作特征曲線)

ROC(Receiver Operating Characteristic)曲線,又稱接受者操作特征曲線。該曲線最早應用于雷達信号檢測領域,用于區分信号與噪聲。後來人們将其用于評價模型的預測能力,ROC曲線是基于混淆矩陣得出的。ROC曲線中的主要兩個指标就是真正率假正率,上面也解釋了這麼選擇的好處所在。其中橫坐标為假正率(FPR),縱坐标為真正率(TPR),下面就是一個标準的ROC曲線圖。

序列評價指标(模型評價指标ROCAUC)9

ROC曲線的阈值問題與前面的P-R曲線類似,ROC曲線也是通過遍曆所有阈值來繪制整條曲線的。如果我們不斷的遍曆所有阈值,預測的正樣本和負樣本是在不斷變化的,相應的在ROC曲線圖中也會沿着曲線滑動。

序列評價指标(模型評價指标ROCAUC)10

如何判斷ROC曲線的好壞?改變阈值隻是不斷地改變預測的正負樣本數,即TPR和FPR,但是曲線本身是不會變的。那麼如何判斷一個模型的ROC曲線是好的呢?這個還是要回歸到我們的目的:FPR表示模型虛報的響應程度,而TPR表示模型預測響應的覆蓋程度。我們所希望的當然是:虛報的越少越好,覆蓋的越多越好。所以總結一下就是TPR越高,同時FPR越低(即ROC曲線越陡),那麼模型的性能就越好。參考如下動态圖進行理解。

序列評價指标(模型評價指标ROCAUC)11

ROC曲線無視樣本不平衡前面已經對ROC曲線為什麼可以無視樣本不平衡做了解釋,下面我們用動态圖的形式再次展示一下它是如何工作的。我們發現:無論紅藍色樣本比例如何改變,ROC曲線都沒有影響。

序列評價指标(模型評價指标ROCAUC)12

3. AUC(曲線下的面積)

為了計算 ROC 曲線上的點,我們可以使用不同的分類阈值多次評估邏輯回歸模型,但這樣做效率非常低。幸運的是,有一種基于排序的高效算法可以為我們提供此類信息,這種算法稱為曲線下面積(Area Under Curve)。比較有意思的是,如果我們連接對角線,它的面積正好是0.5。對角線的實際含義是:随機判斷響應與不響應,正負樣本覆蓋率應該都是50%,表示随機效果。ROC曲線越陡越好,所以理想值就是1,一個正方形,而最差的随機判斷都有0.5,所以一般AUC的值是介于0.5到1之間的。AUC的一般判斷标準0.5 - 0.7:效果較低,但用于預測股票已經很不錯了0.7 - 0.85:效果一般0.85 - 0.95:效果很好0.95 - 1:效果非常好,但一般不太可能AUC的物理意義曲線下面積對所有可能的分類阈值的效果進行綜合衡量。曲線下面積的一種解讀方式是看作模型将某個随機正類别樣本排列在某個随機負類别樣本之上的概率。以下面的樣本為例,邏輯回歸預測從左到右以升序排列:

序列評價指标(模型評價指标ROCAUC)13

ROC/AUC的Python實現

Python中我們可以調用sklearn機器學習庫的metrics進行ROC和AUC的實現,簡單的代碼實現部分如下:from sklearn import metricsfrom sklearn.metrics import auc import numpy as npy = 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

以上就是所有關于ROC和AUC的講解和實現,auc面積是0.75。如今的我再去面試,最希望面試官問我這個問題了,希望看過的朋友也可以徹底理解和記住ROC/AUC,以及各種指标率的概念。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved