ROC曲線 vs Precision-Recall曲線

 深刻理解對比兩個曲線各自的特性和相互的差別須要花很多時間研讀一些國外的技術博客與相關paper,暫時先列出下面這麼多,這部分後續能夠繼續補充html

 ROC曲線和AUC的定義能夠參看「ROC曲線於AUC」,Precision-Recall曲線顧名思義即Precision爲縱軸,Recall爲橫軸的曲線,做圖方法與AUC曲線一致,只是橫縱軸座標意義不一樣。python

ROC曲線的優點

  ROC曲線有個很好的特性:當測試集中的正負樣本的分佈變化的時候,ROC曲線可以保持穩定。在實際的數據集中常常會出現類不平衡現象,並且測試數據中的正負樣本的分佈也可能隨着時間變化。下圖是ROC曲線和Precision-Recall曲線的對比。web

  其中(a)和(c)爲ROC曲線,(b)和(d)爲Precision-Recall曲線。(a)和(b)展現的是分類器在原始測試集(正負樣本分佈平衡)的結果,(c)和(d)是將測試集中負樣本的數量增長到原來的10倍。能夠明顯看出,ROC曲線基本保持原貌,而Precision-Recall曲線則變化較大。算法

  PR曲線會面臨一個問題,當須要得到更高recall時,model須要輸出更多的樣本,precision可能會伴隨出現降低/不變/升高,獲得的曲線會出現浮動差別(出現鋸齒),沒法像ROC同樣保證單調性。因此,對於正負樣本分佈大體均勻的問題,ROC曲線做爲性能指標更魯棒性能

     

 PRC曲線的優點

  在正負樣本分佈得極不均勻(highly skewed datasets),負例遠大於正例時,而且這正是該問題正常的樣本分佈時,PRC比ROC能更有效地反應分類器的好壞,即PRC曲線在正負樣本比例懸殊較大時更能反映分類的真實性能。例如上面的(c)(d)中正負樣本比例爲1:10,ROC效果依然看似很好,可是PR曲線則表現的比較差。舉個例子,測試

        

  單從圖(a)看,這兩個分類器都比較完美(很是接近左上角)。而從圖(b)能夠看出,這兩個分類器仍有巨大的提高空間。那麼緣由是什麼呢? 經過看Algorithm1的點 A,能夠得出一些結論。首先圖(a)和(b中)的點A是相同的點,由於TPR就是Recall,二者是同樣的。spa

  假設數據集有100個正樣本。能夠獲得如下結論:.net

  由圖(a)點A,可得:TPR=TP/(TP+FN)=TP/全部正樣本 =TP/100=0.8,因此TP=80。3d

  由圖(b)點A,可得:Precision=TP/(TP+FP)=80/(80+FP)=0.05,因此FP=1520。htm

  再由圖(a)點A,可得:FPR=FP/(FP+TN)=FP/全部負樣本=1520/全部負樣本=0.1,因此負樣本數量是15200。

  由此,能夠得出原數據集中只有100個正樣本,卻有15200個負樣本!這就是極不均勻的數據集。直觀地說,在點A處,分類器將1600 (1520+80)個樣本預測爲positive,而其中實際上只有80個是真正的positive。 咱們憑直覺來看,其實這個分類器並很差。但因爲真正negative instances的數量遠遠大約positive,ROC的結果卻「看上去很美」,由於這時FPR由於負例基數大的緣故依然很小。因此,在這種狀況下,PRC更能體現本質。

 

 ROC曲線與PRC曲線表現差別的緣由

  爲何會有上面分析到的二者差別呢?下面摘自引用[1]的解釋很清楚,FPR 和 TPR (Recall) 只與真實的正例或負例中的一個相關(能夠從他們的計算公式中看到),而其餘指標如Precision則同時與真實的正例與負例都有關,即下面文字說的「both columns」,這能夠結合混淆矩陣和各指標的計算公式明顯看到。

      

 

思考 

 一、ctr預估顯然是負例 遠多於 正例,那爲何業界還廣泛用ROC曲線而不是PRC曲線下的面積做爲性能指標 

思考:

  個人思考是,對於ctr預估這個問題,咱們須要一個於排序強相關的衡量指標,ROC與PRC均可以,而上面介紹了相比PRC,ROC具備魯棒性的優點。ROC的缺點是對於ctr這種負例遠多於正例的問題,其顯示的圖像和對應的AUC過於「樂觀」,不能很好地反映分類器的真實性能,這意味着,即便算法的AUC約爲0.8,看起來已是一個比較好的值的,算法性能應該很不錯,可是PRC曲線告訴咱們,還沒得很呢,還有很大提高空間。

  可是,對於ctr問題自己而言,AUC的高低確實能夠衡量兩個算法的性能優劣,算法A的AUC大於算法B,那麼絕大部分狀況下能夠認爲算法A優於算法B,即以AUC爲指標進行模型的快速迭代和選擇依然是合理的。

  另外很重要的一點是,相比於PRC曲線下的面積計算,AUC的計算更容易。

 二、隨機猜想的PRC曲線是怎麼樣的?

 

參考資料

[1] https://machinelearningmastery.com/roc-curves-and-precision-recall-curves-for-classification-in-python/

    Jason 的 ML專欄系列文章,很贊,裏面包括了不少很棒的深刻閱讀連接,包括下面的補充閱讀中列出來的

[2] 知乎專欄,提到了ROC與PRC的關係  https://zhuanlan.zhihu.com/p/28482121

 

補充閱讀

[1] An introduction to ROC analysis   http://web2.utc.edu/~Dileepan/4270/4270Notes/roc.pdf 

[2] The relationship between Precision-Recall and ROC curves  https://www.researchgate.net/publication/215721831_The_Relationship_Between_Precision-Recall_and_ROC_Curves 

相關文章
相關標籤/搜索