一、混淆矩陣
T和F代表是否預測正確,P和N代表預測為正還是負
這個圖片我們見過太多次了,但其實要搞清楚我們的y值中的1定義是什么,這樣就不會搞錯TP、FP、FN、TN的順序,比如說下面的混淆矩陣:
[[198985 29]
[ 73 277]]
y(真實).value_counts():
0: 199014
1: 350
y(測試).value_counts()
0 :199058
1 : 306
我們就會先入為主認為第一個就是TP,但其實277才是我們的TP,所以首要任務是要搞清楚我們的Y值等於1是屬於哪一類,弄清楚這些,下面的就容易搞清楚了
二、模型評估指標
首先來看下這個圖片
1.准確率(accuracy):
分類正確的樣本占總樣本個數的比例
使用上面的例子就是:(198985+277)/(198985+29+73+277)=0.9994883730262234
值得注意的是,這個指標在數據極度傾斜的時候是沒有任意意義的,比如說好壞用戶是100:1,全部預測為好用戶,那么准確率就是100/101=0.9900990099009901
2.精確度(precision):
預測是1類的且真實情況也是1類/預測是1類的
使用上面的例子就是:277/306=0.9052287581699346
在數據傾斜的時候,比如說好壞用戶是100:1,全部預測為好用戶,那么精確度是0,說明還是有點用處的
簡單來說就是叫你找出壞人,你確實找出一幫人,你找出這幫人中真正是壞人的比例,着重的是你捉到的這批人,不要冤枉太多好人
3.召回率(recall):
預測是1類的且真實情況也是1類/真實情況也是1類的
使用上面的例子就是:277/350=0.7914285714285715
在數據傾斜也是有用的,這里不展開了
主要說一些召回率有什么作用:反正就類似於寧可錯殺三千,也不放一個的意思
簡單來說就是叫你找出壞人,你確實找出一幫人,捉到正確壞人 占真實總壞人占比,着重的是捉到多少個真正的壞人,多多益善,只要涵蓋的壞人足夠多,所以這二者不能單獨使用
recall是相對真實的答案而言: true positive / golden set 。假設測試集里面有100個正例,你的模型能預測覆蓋到多少,如果你的模型預測到了40個正例,那你的recall就是40%
4.F1分數
F1值是精度和召回率的調和平均值
F1-score 就是一個綜合考慮precision和recall的metric: 2*precision*recall / (precision + recall)
基本上呢,問題就是如果你的兩個模型,一個precision特別高,recall特別低,另一個recall特別高,precision特別低的時候,f1-score可能是差不多的,你也不能基於此來作出選擇。
三、精度-召回率曲線PRC curve
下面是兩個場景:
1. 地震的預測
對於地震的預測,我們希望的是RECALL非常高,也就是說每次地震我們都希望預測出來。這個時候我們可以犧牲PRECISION。情願發出1000次警報,把10次地震都預測正確了;也不要預測100次對了8次漏了兩次。
2. 嫌疑人定罪
基於不錯怪一個好人的原則,對於嫌疑人的定罪我們希望是非常准確的。及時有時候放過了一些罪犯(recall低),但也是值得的。
對於分類器來說,本質上是給一個概率,此時,我們再選擇一個CUTOFF點(閥值),高於這個點的判正,低於的判負。那么這個點的選擇就需要結合你的具體場景去選擇。反過來,場景會決定訓練模型時的標准,比如第一個場景中,我們就只看RECALL=99.9999%(地震全中)時的PRECISION,其他指標就變得沒有了意義。
如果只能選一個指標的話,肯定是選PRC了。可以把一個模型看的一清二楚。
下面就開始介紹一下數據極度傾斜時候使用的指標PRC
PRC曲線(Precision-Recall curve)和ROC曲線類似,ROC曲線是FPR和TPR的點連成的線,PRC曲線是准確率和召回率的點連成的線,如下圖所示
先看平滑不平滑(藍線明顯好些),在看誰上誰下(同一測試集上),一般來說,上面的比下面的好(綠線比紅線好)。
F1(計算公式略)當P和R接近就也越大,一般會畫連接(0,0)和(1,1)的線,線和PRC重合的地方的F1是這條線最大的F1(光滑的情況下),此時的F1對於PRC就好象AUC對於ROC一樣。一個數字比一條線更方便調模型。
四、ROC曲線和AUC
AUC是現在分類模型,特別是二分類模型使用的主要離線評測指標之一。相比於准確率、召回率、F1等指標,AUC有一個獨特的優勢,就是不關注具體得分,只關注排序結果,這使得它特別適用於排序問題的效果評估,例如推薦排序的評估。AUC這個指標有兩種解釋方法,一種是傳統的“曲線下面積”解釋,另一種是關於排序能力的解釋。例如0.7的AUC,其含義可以大概理解為:給定一個正樣本和一個負樣本,在70%的情況下,模型對正樣本的打分高於對負樣本的打分。可以看出在這個解釋下,我們關心的只有正負樣本之間的分數高低,而具體的分值則無關緊要
接下來我們考慮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上的點。這條對角線上的點其實表示的是一個采用隨機猜測策略的分類器的結果(FP = TN, TP = FN,這樣FP+TP = TN + FN,即Y = N,也就是隨機猜測了),例如(0.5,0.5),表示該分類器隨機對於一半的樣本猜測其為正樣本,另外一半的樣本為負樣本。
AUC值的高低意味着什么
那么AUC值的含義是什么呢?根據(Fawcett, 2006),AUC的值的含義是:> The AUC value is equivalent to the probability that a randomly chosen positive example is ranked higher than a randomly chosen negative example.
這句話有些繞,我嘗試解釋一下:首先AUC值是一個概率值,當你隨機挑選一個正樣本以及一個負樣本,當前的分類算法根據計算得到的Score值將這個正樣本排在負樣本前面的概率就是AUC值。當然,AUC值越大,當前的分類算法越有可能將正樣本排在負樣本前面,即能夠更好的分類。
AUC值越大的分類器,正確率越高。
從AUC判斷分類器(預測模型)優劣的標准:
Concerning the AUC, a simple rule of thumb to evaluate a classifier based on this summary value is the following:
- .90-1 = very good (A)
- .80-.90 = good (B)
- .70-.80 = not so good (C)
- .60-.70 = poor (D)
- .50-.60 = fail (F)
-
AUC = 1,是完美分類器,采用這個預測模型時,不管設定什么閾值都能得出完美預測。絕大多數預測的場合,不存在完美分類器。
-
0.5 < AUC < 1,優於隨機猜測。這個分類器(模型)妥善設定閾值的話,能有預測價值。
-
AUC = 0.5,跟隨機猜測一樣(例:丟銅板),模型沒有預測價值。
-
AUC < 0.5,比隨機猜測還差;但只要總是反預測而行,就優於隨機猜測,因此不存在AUC < 0.5的情況。
ROC曲線的PRC曲線的區別和聯系
ROC曲線和PR曲線的關系
ROC曲線越左上凸效果越好,PR曲線是右上凸效果越好。
ROC和PR曲線都被用於評估機器學習算法對一個給定數據集的分類性能,每個數據集都包含固定數目的正樣本和負樣本。
定理1:對於一個給定的包含正負樣本的數據集,ROC空間和PR空間存在一一對應的關系,也就是說,如果recall不等於0,二者包含完全一致的混淆矩陣。我們可以將ROC曲線轉化為PR曲線,反之亦然。
定理2:對於一個給定數目的正負樣本數據集,一條曲線在ROC空間中比另一條曲線有優勢,當且僅當第一條曲線在PR空間中也比第二條曲線有優勢。(這里的“一條曲線比其他曲線有優勢”是指其他曲線的所有部分與這條曲線重合或在這條曲線之下。)
ROC曲線和PRC曲線的對比
ROC曲線相對的優勢
既然已經這么多評價標准,為什么還要使用ROC和AUC呢?因為ROC曲線有個很好的特性:當測試集中的正負樣本的分布變化的時候,ROC曲線能夠保持不變。在實際的數據集中經常會出現類不平衡(class imbalance)現象,即負樣本比正樣本多很多(或者相反),而且測試數據中的正負樣本的分布也可能隨着時間變化。
roc曲線不變原因:TPR和FPR是實際label內部的操作,看混淆矩陣和tpr、fpr計算公式,無論實際label比例怎么變化,tpr、fpr計算公式都是在實際為p或者n的內部計算的。
下圖是ROC曲線和Precision-Recall曲線的對比:
在上圖中,(a)和(c)為ROC曲線,(b)和(d)為Precision-Recall曲線。(a)和(b)展示的是分類其在原始測試集(正負樣本分布平衡)的結果,(c)和(d)是將測試集中負樣本的數量增加到原來的10倍后,分類器的結果。可以明顯的看出,ROC曲線基本保持原貌,而Precision-Recall曲線則變化較大。
也就是
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。
結論:AUC用得比較多的一個重要原因是,實際環境中正負樣本極不均衡,PR曲線無法很好反映出分類器性能,而ROC受此影響小。
PRC相對的優勢
當正負樣本差距不大的情況下,ROC和PR的趨勢是差不多的,但是當負樣本很多的時候,兩者就截然不同了,ROC效果依然看似很好,但是PR上反映效果一般。解釋起來也簡單,假設就1個正例,100個負例,那么基本上TPR可能一直維持在100左右,然后突然降到0.如圖,(a)(b)分別為正負樣本1:1時的ROC曲線和PR曲線,二者比較接近。而(c)(d)的正負樣本比例為1:1,這時ROC曲線效果依然很好,但是PR曲線則表現的比較差。這就說明PR曲線在正負樣本比例懸殊較大時更能反映分類的性能。
在正負樣本分布得極不均勻(highly skewed datasets)的情況下,PRC比ROC能更有效地反應分類器的好壞。
單從圖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更能有效衡量分類器的好壞。
如果ROC曲線面積差不多時,當然使用PRC曲線來比較兩個分類算法的好壞;反之亦然。如果ROC和PRC都差不多的話那就看測試集上的PRC吧。畢竟PRC和ROC可以相互轉化有很大關聯的(見前面的“ROC曲線和PR曲線的關系”)。
但是lz建議在樣本不均衡時最好使用ROC曲線來評估,更准確也是業內常用的。prc可能也可以,但是絕對不能只使用precision或者recall!
文章參考:https://blog.csdn.net/pipisorry/article/details/51788927