分类模型的性能评估——以SAS Logistic回归为例(2): ROC和AUC

By 胡江堂 @ 2008/12/31
关键词, , , , , , , , , , , , , , 分类数据挖掘与机器学习, 生物与医学统计, 统计图形
作者信息:胡江堂,行业/职业:医药/SAS程序员;教育背景:经济学->软件工程;学术兴趣:数据挖掘-商务智能,信用评分-数量金融、SAS-应用统计;个人主页:http://jiangtanghu.com/
版权声明:本文版权归原作者所有,未经许可不得转载。原文可能随时需要修改纰漏,全文复制转载会带来不必要的误导,若您想推荐给朋友阅读,敬请以负责的态度提供原文链接;点此查看如何在学术刊物中引用本文

ROC

上回我们提到,ROC曲线就是不同的阈值下,以下两个变量的组合(如果对Sensitivity和Specificity两个术语没有概念,不妨返回,分类模型的性能评估——以SAS Logistic回归为例(1): 混淆矩阵,强烈建议读者对着看):

Sensitivity(覆盖率,True Positive Rate)

1-Specificity (Specificity, 负例的覆盖率,True Negative Rate)

二话不说,先把它画出来(以下脚本的主体是标红部分,数据集valid_roc,还是出自上面提到的那篇):

axis order=(0 to 1 by .1) label=none length=4in;

symbol i=join v=none c=black;

symbol2 i=join v=none c=black;

proc gplot data = valid_roc;

plot _SENSIT_*_1MSPEC_ _1MSPEC_*_1MSPEC_

/ overlay vaxis=axis haxis=axis;

run; quit;

roc

上图那条曲线就是ROC曲线,横轴是1-Specificity,纵轴是Sensitivity。以前提到过,随着阈值的减小(更多的客户就会被归为正例),Sensitivity和1-Specificity也相应增加(也即Specificity相应减少),所以ROC呈递增态势(至于ROC曲线凹向原点而非凸向原点,不知道有无直观的解释,不提)。那条45度线是作为参照(baseline model)出现的,就是说,ROC的好坏,乃是跟45度线相比的,怎么讲?

回到以前,我们分析valid数据,知道有36.5%的bad客户(Actual Positive )和63.5%的good客户(Actual Negative)。这两个概率是根据以往的数据计算出来的,可以叫做“先验概率”( prior probability)。后来,我们用logistic回归模型,再给每个客户算了一个bad的概率,这个概率是用模型加以修正的概率,叫做“后验概率”(Posterior Probability)。

预测
1 0
1 d, True Positive c, False Negative c+d, Actual Positive
0 b, False Positive a, True Negative a+b, Actual Negative
b+d, Predicted Positive a+c, Predicted Negative

如果不用模型,我们就根据原始数据的分布来指派,随机地把客户归为某个类别,那么,你得到的True Positive对False Positive之比,应该等于Actual Positive对Actual Negative之比(你做得跟样本分布一样好)——即,d/b=(c+d)/(a+b),可以有(d/c+d)/(b/a+b)=1,而这正好是Sensitivity/(1-Specificity)。在不使用模型的情况下,Sensitivity和1-Specificity之比恒等于1,这就是45度线的来历。一个模型要有所提升,首先就应该比这个baseline表现要好。ROC曲线就是来评估模型比baseline好坏的一个著名图例。这个可能不够直观,但可以想想线性回归的baseline model:

clip_image003

如果不用模型,对因变量的最好估计就是样本的均值(上图水平红线)。绿线是回归线(模型),回归线与水平线之间的偏离,称作Explained Variability, 就是由模型解释了的变动,这个变动(在方差分析里,又称作model sum of squares, SSM)越大,模型表现就越好了(决定系数R-square标准)。同样的类比,ROC曲线与45度线偏离越大,模型的效果就越好。最好好到什么程度呢?

在最好的情况下,Sensitivity为1(正确预测到的正例就刚好等于实际的正例总数),同时Specificity为1(正确预测到的负例个数就刚好等于实际的负例数),在上图中,就是左上方的点(0,1)。因此,ROC曲线越往左上方靠拢,Sensitivity和Specificity就越大,模型的预测效果就越好。同样的思路,你还可以解释为什么ROC曲线经过点(0,0)和(1.1),不提。

AUC, Area Under the ROC Curve

ROC曲线是根据与45度线的偏离来判断模型好坏。图示的好处是直观,不足就是不够精确。到底好在哪里,好了多少?这就要涉及另一个术语,AUC(Area Under the ROC Curve,ROC曲线下的面积),不过也不是新东西,只是ROC的一个派生而已。

回到先前那张ROC曲线图。45度线下的面积是0.5,ROC曲线与它偏离越大,ROC曲线就越向左上方靠拢,它下面的面积(AUC)也就应该越大。我们就可以根据AUC的值与0.5相比,来评估一个分类模型的预测效果。

SAS的Logistic回归能够后直接生成AUC值。跑完上面的模型,你可以在结果报告的Association Statistics找到一个叫c的指标,它就是AUC(本例中,c=AUC=0.803,45度线的c=0.5)。

/*注:以上提到的c不是AUC里面那个’C'。这个c是一个叫Wilcoxon-Mann-Whitney 检验的统计量。这个说来话长,不过这个c却等价于ROC曲线下的面积(AUC)。*/

ROC、AUC:SAS9.2一步到位

SAS9.2有个非常好的新功能,叫ODS Statistical Graphics,有兴趣可以去它主页看看。在SAS9.2平台提交以下代码,Logistic回归参数估计和ROC曲线、AUC值等结果就能一起出来(有了上面的铺垫,就不惧这个黑箱了):

ods graphics on;

proc logistic data=train plots(only)=roc;

model good_bad=checking history duration savings property;

run;

ods graphics off;

ROCCurve

这个ROC图貌似还漂亮些,眼神好能看见标出来的AUC是0.8029。 最后提一句,ROC全称是Receiver Operating Characteristic Curve,中文叫“接受者操作特性曲线”,江湖黑话了(有朋友能不能出来解释一下,谁是Receiver,为什么Operating,何谓Characteristic——这个看着好像是Sensitivity和Specificity),不过并不妨碍我们使用ROC作为模型评估的工具。

下期预告:Lift和Gain

不多说,只提一句,跟ROC类似,Lift(提升)和Gain(增益)也一样能简单地从以前的Confusion Matrix以及Sensitivity、Specificity等信息中推导而来,也有跟一个baseline model的比较,然后也是很容易画出来,很容易解释。

参考资料

  1. Mithat Gonen. 2007. Analyzing Receiver Operating Characteristic Curves with SAS. Cary, NC: SAS Institute Inc.
  2. Mike Patetta. 2008. Categorical Data Analysis Using Logistic Regression Course Notes. Cary, NC: SAS Institute Inc.
  3. Dan Kelly, etc. 2007. Predictive Modeling Using Logistic Regression Course Notes. Cary, NC: SAS Institute Inc.
  4. Receiver operating characteristic, see http://en.wikipedia.org/wiki/Receiver_operating_characteristic
  5. The magnificent ROC, see http://www.anaesthetist.com/mnm/stats/roc/Findex.htm

相关文章

11 Responses to “ 分类模型的性能评估——以SAS Logistic回归为例(2): ROC和AUC ”

  1. Sunstone on 2008/12/31 at 23:23

    写得不错,说得很清楚,赞!

  2. 胡江堂 on 2008/12/31 at 23:31

    to Sunstone:

    多谢多谢。这几年来我是一直跟踪你的博客,受益匪浅。

  3. simon on 2009/01/03 at 22:33

    很好的文章,多谢多谢啊。
    不知关于Lift(提升)和Gain(增益)的文章出来了没有?我找了很长时间,没有找到,呵呵

  4. 胡江堂 on 2009/01/03 at 23:37

    to simon,多谢捧场哈。Lift和Gains,计划是在下一篇,但时间不定,不妨先看看这里,http://johnthu.spaces.live.com/blog/cns!2053CD511E6D5B1E!308.entry,关于lift的,前年做的一个读书笔记,但愿有用。

  5. [...] 分类模型的性能评估——以SAS Logistic回归为例(2): ROC和AUC [...]

  6. kuhasu on 2009/02/03 at 03:31

    Receiver Operating Characteristic Curve的叫法是因为比较了TPR和FPR

  7. [...] 书接前文。跟ROC类似,Lift(提升)和Gain(增益)也一样能简单地从以前的Confusion Matrix以及Sensitivity、Specificity等信息中推导而来,也有跟一个baseline model的比较,然后也是很容易画出来,很容易解释。以下先修知识,包括所需的数据集: [...]

  8. eyre on 2009/03/17 at 11:03

    不知用SPSS能做出ROC曲线吗?我不是专业的,冒犯了。

  9. ni on 2009/05/12 at 20:58

    所谓的ROC曲线,是不是可以这么理解:
    假定对于一个两类分类问题,根据预测模型,可以得出一个预测概率,选取不同的阈值,判定为正例或副例,得到不同的Sensitivity和Specificity。选取不同的阈值,画出Sensitivity和1-Specificity的关系曲线,就是ROC曲线了。
    还有些问题不清楚:
    (1)是不是所有的分类器都可以作出ROC曲线,如决策树、SVM。有些分类器没有这样的预测概率表达式,例如k近邻分类器,是根据紧邻样本占多数的类别判决的,怎样转化出ROC曲线?

    (2)ROC曲线对最佳阈值选定有没有参考作用,应该如何考虑?

  10. biotat on 2009/06/05 at 22:39

    总的不错,只是LZ对医学诊断试验不清楚,有些名词就译的不够专业,如Sensitivity是灵敏度、Specificity是特异度。
    ROC曲线纵轴是真阳性率(即灵敏度),横轴是假阳性率(1-特异度);
    AUC(曲线下的面积)反映了诊断试验效率好坏的重要指标,其可以计算标准误(反映抽样误差),两个诊断试验的比较就是比较两个AUC。

  11. ever on 2010/04/28 at 15:22

    现在正在研究ROC曲线,有一个问题想请教博主,就是两条ROC曲线如何绘制在同一个坐标图里面呢?用STATA操作的话,程序怎样写?或者用sas或者R怎样实现呢?非常感谢。

Leave a Reply

搜索

推荐阅读

有边界区间上的核密度估计

一、一个例子
核密度估计应该是大家常用的一种非参数密度估计方法,从某种程度上来说它的性质比直方图更好,可以替代直方图来展示数据的密度分布。但是相信大家会经常遇到一个问题,那就是有些数据是严格大于或等…阅读全文 »

相关文章

用R也能做精算—actuar包学习笔记(一)

By 李皞

本文是对R中精算学专用包actuar使用的一个简单教程。actuar项目开始于2005年,在2006年2月首次提供公开下载,其目的就是将一些常用的精算函数引入R系统。目前,提供的函数主要涉及风险理论,…阅读全文 »

相关文章

分月存档