roc曲线怎么绘制_理解AUC-ROC

0c23cd8cade0635e449b959feac62b91.png

背景

AUC-ROC(Area Under Curve)是机器学习中常用的一个分类器评价指标,但是,想彻底理解这个指标并不是那么容易,本文希望通过一个例子彻底说明AUC-ROC到底是什么。

常见指标

在使用tensorflow的内建的"分类"模型完成一次训练及验证时,通常会有如下输出

'loss': 11.080771,
 'accuracy_baseline': 0.5389375,
 'global_step': 2000,
 'recall': 0.8013452,
 'auc': 0.50163,
 'prediction/mean': 0.5355787,
 'precision': 0.53824586,
 'label/mean': 0.5389375,
 'average_loss': 0.6925482,
 'auc_precision_recall': 0.53178287,
 'accuracy': 0.5224375

上面包含了若干指标,用于评价该"分类器"的好坏,简要描述一下这些指标的含义。

label/mean

这是个二分类问题的输出,正例(positive)标记为1,负例(negative)标记为0,label/mean的意义就是验证集中所有标记的平均数。这里的`0.5389375`说明验证集中,正例略多一些,所以平均数大于0.5。类似的,`prediction/mean`的意思就是模型预测的结果的平均数,也是略倾向于正例的。

accuracy

刚学习机器学习时,总是分不清什么准确度,精度等概念。后来我终于想明白了,混淆这些概念的根本原因是中文里准确度,精确度,精准度往往表达的是一个意思。所以为了不混淆,这些指标还是尽量用英文表示。

accuracy是最直观,最常用的指标,说白了,就是该模型有多少比例的结果预测对了,无论预测对了正例(TP)还是反例(TN)。accuracy是一个简单指标,不是什么时候都适用:

  • 如果模型用于辨识性别,由于世界上男女数量大致相等,如果accuracy高,说明这个模型是可以正确分辨性别的。
  • 如果模型用于辨识游戏中的作弊用户。假设1万名玩家中,有1位是作弊用户(TP),即便模型什么都没有学习到,模型只用回答所有玩家都不是作弊玩家,那么accuracy依然高达9999/10000=99.99%。

由此可见,如果分类A和分类B的数量非常不平衡时,accuracy无法衡量模型性能的,因此,AUC-ROC指标应运而生。

precision和recall

在使用AUC-ROC之前,这两个指标也需要理解。以下矩阵,被成为混淆矩阵

ced2ea3eb331b0e3c97f94535e79e884.png

借用这张图说明一下,True Positive(TP), True Negative(TN) 都是正确的预测。False Positive(FP), False Negative(FN) 都是错误的预测。

precision:在全部被预测为正例(P)的数据中,有多少是真正的正例(TP)?即TP/(TP + FP),主要用来预测的准不准确了,体现为"准"。

recall:全部正例(P)中,有多少被正确的预测?即TP/(TP + FN) ,主要用来观察在全部正例集合中,有多少能被预测出来,体现为"全"。

如果实在记不住英文单词,我也见过一些不错的翻译。accuracy翻译为准确率,这个比较好理解。precision和recall分别是查准率和查全率,这两个指标放在一起比较好记。至于把recall翻译成召回率,我是怎么都想不通的

AUC-ROC的例子

以检测游戏中的作弊玩家为例,模型的输出是0~1的闭区间中的一个数字yy,我们认为当yy大于某个threshold值时,该玩家被预测为作弊玩家。反之,yy小于该threshold值,该玩家为非作弊玩家。

f1a9b26430ca95ea9d28ddbb381974ea.png

我们选用不同的threshold,得到的accuracy,recall,precision都是不一样的。在二分类问题中,输出yy的值介于0~1之间,但是谁也没说threshold的值必须是0.5。比如我可以假设threshold=0.7,上面表格中加黑斜体的部分就是TP,用户id3,4,5,6就是FP。套用前面介绍过的公式,当threshold=0.7时,

  • accuracy =(3 + 13)/20 = 0.8
  • recall = 3 / 3 = 1
  • precision = 3 / (3+4)= 0.43

AUC就是为了反映在不同的threshold下,得到的TP rate(TPR) 和 FP rate(FPR)的情况。具体来说,被我简称为AUC的指标,其实应该是AUC-ROC,ROC代表(Receiver Operating Characteristics)。 如图,ROC是通过将不同threshold的x轴(FPR)和y轴(TPR)的点连接而成的曲线, AUC就是ROC下的面积。其中

  • TPR = TP / P = recall
  • FPR = FP / N (某种程度上,FPR是错误分类的"recall")

b347f6e9f0a64a2c2c04cc08216cb999.png

那么,我们设置不同的threshold,可以得到如下结果

91aff86f28c9f497b30e88d17da046cb.png

将FPR当作x轴,TPR当作Y轴,可以绘制出

1c4732aacc7f292682f95cd3385c4ef1.png

上面的曲线,就是ROC曲线。TPR,FPR的值也都是0~1之间,故AUC的最大值为1。在实际使用中,类似tensorflow/sklearn/R之类的类库或语言,都会自动调整threshold来计算AUC。最终得到的AUC数值,即ROC曲线下的面积,AUC越接近于1,说明这个二分类器越好。

综上所述,我们可以得到一些结论:

  • 上图中,threshold=0.7和0.5时,具有同样的TPR。但是threshold=0.7的FPR更低一些,所以threshold=0.7是最优的选择。这也就是说AUC-ROC可以帮我们寻找到最优的threshold。
  • AUC能解决两个分类的数据不平衡的问题,虽然我没有构造极端的数据,但是不难想象,如果模型无脑预测全部结果为N或P,TPR和FPR即全为0或全为1(ROC是从坐标(0,0)到(1,1)的线段),此时绘制出的AUC面积仍然是0.5,证明二分类器毫无作用。
  • AUC用于二分类器
  • 没有万能的指标去评价模型,必须结合业务场景,选取最适合的指标。

除了ROC曲线可以计算AUC之外,PR曲线也可以有类似的AUC计算,本文所述AUC特指AUC-ROC。一般来说,PR曲线中的precision和recall是一对trade off(互相平衡,此消彼长的),可以想象,如果对正样本,模型只成功预测出1个,并且预测对了,那么precision是100%,因为还有其他的正样本没有被发现,故recall比较低。相反,recall高了,那么预测错误的样本也就多了,precision就低了。

到底如何选用评价指标,还是看具体的业务。比如你的模型是从3000支股票里挑选上涨的股票,那么precison高就足够你吃鸡的了,不需要把所有上涨的股票都跳出来,可以无视recall。相反,你的模型用于打击违法犯罪,希望抓获更多的坏人,就要考虑recall了,当然,precision也不能太低。

参考文献:

1. [https://towardsdatascience.com/understanding-auc-roc-curve-68b2303cc9c5](https://towardsdatascience.com/understanding-auc-roc-curve-68b2303cc9c5)

2. [Accuracy, Precision, Recall & F1 Score: Interpretation of Performance Measures - Exsilio Blog](Accuracy, Precision, Recall & F1 Score: Interpretation of Performance Measures - Exsilio Blog)

3. [What you wanted to know about AUC](What you wanted to know about AUC)

4. https://medium.com/datadriveninvestor/accuracy-trap-pay-attention-to-recall-precision-f-score-auc-d02f28d3299c

原创不易,请保护版权。如需转载,请联系获得授权,并注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值