很多学习器是为测试样本产生一个实值或概率预测(比如比较简单的逻辑回归分类器),然后将这个预测值与一个分类阈值(threshold)进行比较,若大于阈值则分为正类,否则为反类。这个实值或概率预测结果的好坏,直接决定了学习器的泛化能力。我们可以根据这个实值或概率预测结果,将测试样本进行排序,“最可能”是正例的排在最前面,“最不可能”是正例的排在最后面。这样,分类过程就相当于在这个排序中以某个 “截断点”(cut point)将样本分类两部分,前一部分判作正例,后一部分则判作反例。
在不同的应用任务中,我们可以根据任务需求来采用不同的截断点,例如:
因此,排序本身的质量好坏,体现了综合考虑学习器在不同任务下的“期望泛化性能”的好坏,或者说,“一般情况下”泛化性能的好坏。ROC曲线就是从这个角度出发来研究学习器泛化性能的有力工具。
注:混淆矩阵、查准率、查全率等概念参见上一篇文章:分类问题中模型的性能度量(一)
ROC全称是“受试者工作特征”(Receiver Operating Characteristic)曲线,它源于“二战”中用于敌机检测的雷达信号分析技术。
具体来说,据说在二战期间,军队中雷达兵的任务是通过观察显示屏的雷达信号来判断是不是有敌人来了,在以下两种情况下显示屏上会有雷达信号:
这个时候不同的雷达兵就可能会报出不同的结果:
这样就有了我们针对这个问题的“混淆矩阵”:
理想情况下,希望每个雷达兵能够好好研究飞机和飞鸟信号的区别,进行准确的判断。但是现实问题是,每个雷达兵的判断标准不一,谨慎的容易出现误报,胆大的容易出现漏报。
针对以上问题,雷达兵的上级管理者汇总了每个雷达兵的汇报特点,尤其是他们的漏报和误报的概率,并将这些概率基于二维坐标系绘制成一个图形:
每个雷达兵的预报标准不同,所以得到的敏感性和特异性的组合也不同。一个雷达兵的敏感性和特异性的组合正好在一条曲线上,这条曲线就是ROC曲线。
到这里就不难理解ROC曲线为什么叫做“受试者工作特征”曲线了,在这里受试者就是指雷达兵,绘制这个曲线的目的就是观察雷达兵的工作特征,所以叫做受试者工作特征曲线。
在机器学习中,受试者就是我们的学习器了,绘制曲线的目的就是观察学习器的工作性能。
与分类问题中模型的性能度量(一)中介绍的P-R曲线类似,我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值:
结合二分类问题的混淆矩阵我们知道,TP+FN其实就是所有真实情况为正的样本数,FP+TN其实就是所有真实情况为反的样本数,那么我们令P=TP+FN,N=FP+TN,就可以得到简化版的公式(便于理解):
以FPR作为横轴、TPR作为纵轴作图,就得到了“ROC曲线”,显示ROC曲线的图叫做“ROC图”,如下所示:
对ROC图的几点解释:
现实任务中,通常是利用有限个测试样例来绘制ROC图,此时仅能获得有限个(FPR,TPR)坐标对,无法产生图(a)中光滑的ROC曲线,只能绘制出图(b)所示的近似ROC曲线。绘制过程如下:
进行学习器比较时,与P-R图类似:
从定义可知,AUC可通过对ROC曲线下各部分的面积求和而得。
假定ROC曲线是由坐标 { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } \{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\} {(x1,y1),(x2,y2),...,(xm,ym)}的点按序连接而成 ( x 1 = 0 , x m = 1 ) (x_1=0,x_m=1) (x1=0,xm=1),参见上面图(b),则AUC可估算为:
A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ∗ ( y i + y i + 1 ) AUC=\frac{1}{2}\sum_{i=1}^{m-1}(x_{i+1}-x_i)*(y_i+y_{i+1}) AUC=21i=1∑m−1(xi+1−xi)∗(yi+yi+1)
形式化地看,AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系。给定 m + m^+ m+个正例和 m − m^- m−个反例,令 D + D^+ D+和 D − D^- D−分别表示正、反例集合,则排序“损失”(loss)定义为:
l r a n k = 1 m + ∗ m − ∑ x + ∈ D + ∑ x − ∈ D − ( Ⅱ ( f ( x + ) < f ( x − ) ) + 1 2 Ⅱ ( f ( x + ) = f ( x − ) ) ) l_{rank}=\frac{1}{m^+*m^-}\sum_{x^+\in D^+}\sum_{x^- \in D^-}\left(Ⅱ(f(x^+)<f(x^-))+\frac{1}{2}Ⅱ(f(x^+)=f(x^-))\right) lrank=m+∗m−1x+∈D+∑x−∈D−∑(Ⅱ(f(x+)<f(x−))+21Ⅱ(f(x+)=f(x−))),其中Ⅱ()为指示函数,在为正和假时分别取值为1,0。
即考虑每一对正、反例,
容易看出, l r a n k l_{rank} lrank对应的是ROC曲线之上的面积:若一个正例在ROC曲线上对应标记点的坐标为(x,y),则x恰是排序在其之前的反例所占的比例,即假正例率。因此有AUC计算公式:
A U C = 1 − l r a n k AUC=1-l_{rank} AUC=1−lrank
通过AUC的定义我们知道了AUC是什么,怎么算,但是它的意义是什么呢。
实际上AUC和Mann-Whitney U test有密切的联系。从Mann-Whitney U test的角度来理解AUC:
A U C = 1 − l r a n k AUC=1-l_{rank} AUC=1−lrank
l r a n k l_{rank} lrank表示:任取一对正反例(真实情况),把(真实情况下的)正例预测为正的概率 ≤ \leq ≤把(真实情况下的)反例预测为正的概率,的概率。
那么AUC,即 1 − l r a n k 1-l_{rank} 1−lrank就相应地表示:任取一对正反例(真实情况),把(真实情况下的)正例预测为正的概率 > > >把(真实情况下的)反例预测为真的概率,的概率。
从上面两个角度总结来看,对AUC比较全面的总结:
还有一句更加简洁的总结:
AUC的优势:AUC的计算方法同时考虑了分类器对于正例和反例的分类能力,在样本不均衡的情况下,依然能够对分类器作出合理的评价。(即AUC对样本类别是否均衡并不敏感,这也是不均衡样本通常用AUC评价分类器性能的一个原因。)
例如:在反欺诈场景,设非欺诈类样本为正例,反例占比很少(假设为0.1%):
参考:
1.《机器学习》2.3,周志华
2.BAT面试官最喜欢问的问题之一:ROC曲线
3.如何理解机器学习和统计中的AUC(重点前5个回答)
4.对AUC计算公式和几何意义的理解