既然天天都在用,人家的历史还是要知道一下的。ROC曲线产生于第二次世界大战期间,最早用在信号检测领域,是一种用于评价雷达的命中率与误报率之间权衡关系的可视化方法。后来逐步应用于评价机器学习分类模型的预测效果。现在软件太发达,不用懂ROC原理,轻轻松松一点或者几行代码,漂亮的ROC曲线就出来了!但是,知其然不知其所以然,总会让人心里没底。下面,我们简要概括ROC曲线到底怎么画出来的!对于任意一个分类预测模型,大多能输出类别预测概率。有了预测概率,绘制ROC曲线就好办了。首先,将所有样本的类别预测概率按照从大到小排序;其次,按照从0~1的概率阈值进行调整,分别得到不同概率阈值下的(假阳性率/FPR,真阳性率/TPR)数值对;最后,将以上数值对绘制在坐标系中,即可得到ROC曲线。ROC曲线下的面积即为AUC,关于AUC的常用计算方式有如下两种。 (1)绘制出ROC曲线后,用微积分思想得到曲线下面积;(2)AUC的另一层含义是:一个正、负样本对,将正样本预测为正的概率比将负样本预测为正的概率大的可能性。这样好像还是比较抽象,举个例子,假设一共有a+b个样本,其中正样本为a个,负样本为b个。那么,总样本对数为a*b个。将正样本预测为正的概率大于负样本预测为正的概率的对子记作1,累计求和记作c,那么AUC就是c/(a*b)。AUC是一个综合指标,不受阈值的影响,可以综合反应模型对类别的区分能力。那么如下两种情况的AUC该如何解读? (1)AUC=1什么含义?(AUC=1,表示任意给一个样本对,即一个正一个负,正样本预测为正的概率始终都超过负样本预测为正的概率。注意,AUC=1不表示任意阈值下都能实现完美区分,但可以说,至少存在一个阈值下,可以实现完美区分);(2)AUC=0.85什么含义?(AUC=0.85,表示任意给一个样本对,即一个正一个负,正样本预测为正的概率超过负样本预测为正的概率的可能性是85%)。有的时候做的不是二分类,而是多分类任务,怎么办?能不能绘制ROC曲线?答案是可以的。那多分类ROC曲线与二分类有何区别,该怎么绘制呢?多分类ROC曲线实质与二分类类似。在训练多分类模型时,一般会采用one-versus-one或者one-versus-all策略。但无论采用何种训练策略,最终都会得到多分类中各个类别的预测概率,基于此可以(1)关注每个单一的类别,绘制每一个类别的ROC曲线(和二分类一样);(2)将3个类别混在一起,得到一条ROC曲线,常用的混合方式有macro和micro,前者表示先计算各个类别的混淆矩阵,而后再平均,后者表示将3个类别的混淆矩阵先混合在一起,而后计算。这个问题很关键,但目前没有定论。在不平衡数据中,有人说AUC好,也有人说不好。例如下文,于2022年发表在Aritificial intelligence in medicine,作者认为PR曲线容易受到不平衡影响,而ROC曲线不受不平衡影响,更建议用ROC曲线!Reference: Predicting liver cancers using skewed epidemiological data 但是,下面这篇发表在《统计与决策》的文章则表明,在不平衡情况下,AUC并不是理想的评价指标。
Reference: 不平衡数据下模型评价指标的有效性探讨 再如下文,作者发现在面对不平衡数据时,ROC可能过于乐观,即AUC挺高的,并且模型之间AUC差异很小。但是,当你用PR曲线时,会发现PR曲线下面积(AUPRC)很低,且模型AUPRC差异较大。因此,作者不建议使用ROC曲线。
Reference: The Relationship Between Precision-Recall and ROC Curves 如下这个学习链接中,作者进一步阐释了为什么ROC不适合用在不平衡数据预测中,感兴趣可进一步学习。
学习链接:https:///roc-curves-and-precision-recall-curves-for-classification-in-python/ 面对不平衡数据,用AUPRC,结果一般较低,用ROC结果一般较好。因此,大家不妨同时汇报两个指标,更加客观、科学。
|