ROC曲线及AUC计算.doc

上传人:最*** 文档编号:1575767 上传时间:2019-10-28 格式:DOC 页数:32 大小:240.17KB
返回 下载 相关 举报
ROC曲线及AUC计算.doc_第1页
第1页 / 共32页
ROC曲线及AUC计算.doc_第2页
第2页 / 共32页
ROC曲线及AUC计算.doc_第3页
第3页 / 共32页
点击查看更多>>
资源描述
ROC曲线及AUC计算(转帖)(2012-03-23 10:04:31) 转载ref http:/blog.csdn.net/chjjunking/article/details/5933105让我们从头说起,首先AUC是一种用来度量分类模型好坏的一个标准。这样的标准其实有很多,例如:大约10年前在machine learning文献中一统天下的标准:分类精度;在信息检索(IR)领域中常用的recall和precision,等等。其实,度量反应了人们对” 好”的分类结果的追求,同一时期的不同的度量反映了人们对什么是”好”这个最根本问题的不同认识,而不同时期流行的度量则反映了人们认识事物的深度的变化。近年来,随着machine learning的相关技术从实验室走向实际应用,一些实际的问题对度量标准提出了新的需求。特别的,现实中样本在不同类别上的不均衡分布(class distribution imbalance problem)。使得accuracy这样的传统的度量标准不能恰当的反应分类器的performance。举个例子:测试样本中有A类样本90个,B 类样本10个。分类器C1把所有的测试样本都分成了A类,分类器C2把A类的90个样本分对了70个,B类的10个样本分对了5个。则C1的分类精度为 90%,C2的分类精度为75%。但是,显然C2更有用些。另外,在一些分类问题中犯不同的错误代价是不同的(cost sensitive learning)。这样,默认0.5为分类阈值的传统做法也显得不恰当了。为了解决上述问题,人们从医疗分析领域引入了一种新的分类模型performance评判方法ROC分析。ROC分析本身就是一个很丰富的内容,有兴趣的读者可以自行Google。由于我自己对ROC分析的内容了解还不深刻,所以这里只做些简单的概念性的介绍。ROC的全名叫做Receiver Operating Characteristic,其主要分析工具是一个画在二维平面上的曲线ROC curve。平面的横坐标是false positive rate(FPR),纵坐标是true positive rate(TPR)。对某个分类器而言,我们可以根据其在测试样本上的表现得到一个TPR和FPR点对。这样,此分类器就可以映射成ROC平面上的一个点。调整这个分类器分类时候使用的阈值,我们就可以得到一个经过(0, 0),(1, 1)的曲线,这就是此分类器的ROC曲线。一般情况下,这个曲线都应该处于(0, 0)和(1, 1)连线的上方。因为(0, 0)和(1, 1)连线形成的ROC曲线实际上代表的是一个随机分类器。如果很不幸,你得到一个位于此直线下方的分类器的话,一个直观的补救办法就是把所有的预测结果反向,即:分类器输出结果为正类,则最终分类的结果为负类,反之,则为正类。虽然,用ROC curve来表示分类器的performance很直观好用。可是,人们总是希望能有一个数值来标志分类器的好坏。于是Area Under roc Curve(AUC)就出现了。顾名思义,AUC的值就是处于ROC curve下方的那部分面积的大小。通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的performance。好了,到此为止,所有的前续介绍部分结束,下面进入本篇帖子的主题:AUC的计算方法总结。最直观的,根据AUC这个名称,我们知道,计算出ROC曲线下面的面积,就是AUC的值。事实上,这也是在早期Machine Learning文献中常见的AUC计算方法。由于我们的测试样本是有限的。我们得到的AUC曲线必然是一个阶梯状的。因此,计算的AUC也就是这些阶梯下面的面积之和。这样,我们先把score排序(假设score越大,此样本属于正类的概率越大),然后一边扫描就可以得到我们想要的AUC。但是,这么做有个缺点,就是当多个测试样本的score相等的时候,我们调整一下阈值,得到的不是曲线一个阶梯往上或者往右的延展,而是斜着向上形成一个梯形。此时,我们就需要计算这个梯形的面积。由此,我们可以看到,用这种方法计算AUC实际上是比较麻烦的。一个关于AUC的很有趣的性质是,它和Wilcoxon-Mann-Witney Test是等价的。这个等价关系的证明留在下篇帖子中给出。而Wilcoxon-Mann-Witney Test就是测试任意给一个正类样本和一个负类样本,正类样本的score有多大的概率大于负类样本的score。有了这个定义,我们就得到了另外一中计算AUC的办法:得到这个概率。我们知道,在有限样本中我们常用的得到概率的办法就是通过频率来估计之。这种估计随着样本规模的扩大而逐渐逼近真实值。这和上面的方法中,样本数越多,计算的AUC越准确类似,也和计算积分的时候,小区间划分的越细,计算的越准确是同样的道理。具体来说就是统计一下所有的 MN(M为正类样本的数目,N为负类样本的数目)个正负样本对中,有多少个组中的正样本的score大于负样本的score。当二元组中正负样本的 score相等的时候,按照0.5计算。然后除以MN。实现这个方法的复杂度为O(n2)。n为样本数(即n=M+N)第三种方法实际上和上述第二种方法是一样的,但是复杂度减小了。它也是首先对score从大到小排序,然后令最大score对应的sample 的rank为n,第二大score对应sample的rank为n-1,以此类推。然后把所有的正类样本的rank相加,再减去正类样本的score为最小的那M个值的情况。得到的就是所有的样本中有多少对正类样本的score大于负类样本的score。然后再除以MN。即AUC=(所有的正例位置相加)-M*(M+1)/(M*N)另外,特别需要注意的是,再存在score相等的情况时,对相等score的样本,需要赋予相同的rank(无论这个相等的score是出现在同类样本还是不同类的样本之间,都需要这样处理)。具体操作就是再把所有这些score相等的样本的rank取平均。然后再使用上述公式。分类模型的性能评估以SAS Logistic回归为例(1): 混淆矩阵Posted on 2008/12/25 by 胡江堂 跑完分类模型(Logistic回归、决策树、神经网络等),我们经常面对一大堆模型评估的报表和指标,如Confusion Matrix、ROC、Lift、Gini、K-S之类(这个单子可以列很长),往往让很多在业务中需要解释它们的朋友头大:“这个模型的Lift是4,表明模型运作良好。啊,怎么还要解释ROC,ROC如何如何,表明模型表现良好”如果不明白这些评估指标的背后的直觉,就很可能陷入这样的机械解释中,不敢多说一句,就怕哪里说错。本文就试图用一个统一的例子(SAS Logistic回归),从实际应用而不是理论研究的角度,对以上提到的各个评估指标逐一点评,并力图表明:1. 这些评估指标,都是可以用白话(plain English, 普通话)解释清楚的;2. 它们是可以手算出来的,看到各种软件包输出结果,并不是一个无法探究的“黑箱”;3. 它们是相关的。你了解一个,就很容易了解另外一个。本文从混淆矩阵(Confusion Matrix,或分类矩阵,Classification Matrix)开始,它最简单,而且是大多数指标的基础。数据本文使用一个在信用评分领域非常有名的免费数据集,German Credit Dataset,你可以在UCI Machine Learning Repository找到(下载;数据描述)。另外,你还可以在SAS系统的Enterprise Miner的演示数据集中找到该数据的一个版本(dmagecr.sas7bdat)。以下把这个数据分为两部分,训练数据train和验证数据valid,所有的评估指标都是在valid数据中计算(纯粹为了演示评估指标,在train数据里计算也未尝不可),我们感兴趣的二分变量是good_bad,取值为good, bad:Train datagood_bad Frequency Percent-bad 154 25.67good 446 74.33Valid datagood_bad Frequency Percent-bad 146 36.50good 254 63.50信用评分指帮助贷款机构发放消费信贷的一整套决策模型及其支持技术。一般地,信用评分技术将客户分为好客户与坏客户两类,比如说,好客户(good)能够按期还本付息(履约),违约的就是坏客户(bad)。具体做法是根据历史上每个类别(履约、违约)的若干样本,从已知的数据中考察借款人的哪些特征对其拖欠或违约行为有影响,从而测量借款人的违约风险,为信贷决策提供依据。Logistic回归是信用评分领域运用最成熟最广泛的统计技术。约定在我们的示例数据中,要考察的二分变量是good_bad,我们把感兴趣的那个取值bad(我们想计算违约的概率),称作正例(Positive, 1),另外那个取值(good)称作负例(Negative, 0)。在SAS的Logistic回归中,默认按二分类取值的升序排列取第一个为positive,所以默认的就是求bad的概率。(若需要求good的概率,需要特别指定)。模型如果没有特别说明,以下所有的SAS代码都在SAS 9.1.3 SP4系统中调试并运行成功(在生成ROC曲线时,我还会提到SAS9.2的新功能)。proc logistic data=train;model good_bad=checking history duration savings property;run;这个数据很整齐,能做出很漂亮的模型,以下就直接贴出参数估计的结果:Analysis of Maximum Likelihood EstimatesStandard WaldParameter DF Estimate Error Chi-Square Pr ChiSqIntercept 1 0.6032 0.4466 1.8242 0.1768checking 1 -0.6536 0.0931 49.3333 .0001history 1 -0.4083 0.0980 17.3597 .0001duration 1 0.0248 0.00907 7.4820 0.0062savings 1 -0.2017 0.0745 7.3308 0.0068property 1 0.3157 0.1052 9.0163 0.0027回归方程就是:logitp(bad)=log(p/1-p) =0.6032-0.6536*checking-0.4083*history+0.0248*duration -0.2017*savings+0.3157*property用下面的公式就可以求出正例的概率(bad的概率):p=exp(logit)/(exp(logit)+1)上式求出的是概率值,如何根据概率值把各个客户归类,还需要一个阈值,比如,这里我们简单地规定,违约概率超过0.5的就归为bad,其余为good。把上述公式代入valid数据中,data valid_p;set valid;logit=0.6032-0.6536*checking-0.4083*history+0.0248*duration-0.2017*savings+0.3157*property;p=exp(logit)/(exp(logit)+1);if p0)2. b是把负例预测成正例的数量, False Positive(FP, 0-1)3. c是把正例预测成负例的数量, False Negative(FN, 1-0)4. d是正确预测到的正例的数量, True Positive(TP, 1-1)5. a+b是实际上负例的数量,Actual Negative6. c+d是实际上正例的个数,Actual Positive7. a+c是预测的负例个数,Predicted Negative8. b+d是预测的正例个数,Predicted Positive以上似乎一下子引入了许多概念,其实不必像咋一看那么复杂,有必要过一下这里的概念。实际的数据中,客户有两种可能good, bad,模型预测同样这两种可能,可能匹配可能不匹配。匹配的好说,0-0(读作,实际是Negative,预测成Negative),或者 1-1(读作,实际是Positive,预测成Positive),这就是True Negative(其中Negative是指预测成Negative)和True Positive(其中Positive是指预测成Positive)的情况。同样,犯错也有两种情况。实际是Positive,预测成Negative (1-0) ,这就是False Negative;实际是Negative,预测成Positive (0-1) ,这就是False Positive;我们可以通过SAS的proc freq得到以上数字:proc freq data=valid_p;tables good_bad*good_bad_predicted/nopercent nocol norow;run;对照上表,结果如下:预测10实1,badd, True Positive,48c, False Negative,98c+d, Actual Positive,146际0,goodb, False Positive,25a, True Negative,229a+b, Actual Negative,254b+d, Predicted Positive,73a+c, Predicted Negative,327400根据上表,以下就有几组常用的评估指标(每个指标分中英文两行):1. 准确(分类)率VS.误分类率准确(分类)率=正确预测的正反例数/总数Accuracy=true positive and true negative/total cases= a+d/a+b+c+d=(48+229)/(48+98+25+229)=69.25%误分类率=错误预测的正反例数/总数Error rate=false positive and false negative/total cases=b+c/a+b+c+d=1-Accuracy=30.75%2. (正例的)覆盖率VS. (正例的)命中率覆盖率=正确预测到的正例数/实际正例总数,Recall(True Positive Rate,or Sensitivity)=true positive/total actual positive=d/c+d=48/(48+98)=32.88%/*注:覆盖率(Recall)这个词比较直观,在数据挖掘领域常用。因为感兴趣的是正例(positive),比如在信用卡欺诈建模中,我们感兴趣的是有高欺诈倾向的客户,那么我们最高兴看到的就是,用模型正确预测出来的欺诈客户(True Positive)cover到了大多数的实际上的欺诈客户,覆盖率,自然就是一个非常重要的指标。这个覆盖率又称Sensitivity, 这是生物统计学里的标准词汇,SAS系统也接受了(谁有直观解释?)。 以后提到这个概念,就表示为, Sensitivity(覆盖率,True Positive Rate)。 */命中率=正确预测到的正例数/预测正例总数Precision(Positive Predicted Value,PV+)=true positive/ total predicted positive=d/b+d=48/(48+25)=65.75%/*注:这是一个跟覆盖率相对应的指标。对所有的客户,你的模型预测,有b+d个正例,其实只有其中的d个才击中了目标(命中率)。在数据库营销里,你预测到b+d个客户是正例,就给他们邮寄传单发邮件,但只有其中d个会给你反馈(这d个客户才是真正会响应的正例),这样,命中率就是一个非常有价值的指标。 以后提到这个概念,就表示为PV+(命中率,Positive Predicted Value)*。/3.SPECIFICITY VS. PV-负例的覆盖率=正确预测到的负例个数/实际负例总数Specificity(True Negative Rate)=true negative/total actual negative=a/a+b=229/(25+229)=90.16%/*注:Specificity跟Sensitivity(覆盖率,True Positive Rate)类似,或者可以称为“负例的覆盖率”,也是生物统计用语。以后提到这个概念,就表示为Specificity(负例的覆盖率,True Negative Rate) 。*/负例的命中率=正确预测到的负例个数/预测负例总数Negative predicted value(PV-)=true negative/total predicted negative=a/a+c=229/(98+229)=70.03%/*注:PV-跟PV+(命中率,Positive Predicted value)类似,或者可以称为“负例的命中率”。 以后提到这个概念,就表示为PV-(负例的命中率,Negative Predicted Value)。*/以上6个指标,可以方便地由上面的提到的proc freq得到:proc freq data=valid_p;tables good_bad*good_bad_predicted ;run;其中,准确率=12.00%+57.25%=69.25% ,覆盖率=32.88% ,命中率=65.75% ,Specificity=90.16%,PV-=70.03% 。或者,我们可以通过SAS logistic回归的打分程序(score)得到一系列的Sensitivity和Specificity,proc logistic data=train;model good_bad=checking history duration savings property;score data=valid outroc=valid_roc;run;数据valid_roc中有几个我们感兴趣的变量: _PROB_:阈值,比如以上我们选定的0.5 _SENSIT_:sensitivity(覆盖率,true positive rate) _1MSPEC_ :1-Specificity,为什么提供1-Specificity而不是Specificity,下文有讲究。_PROB_ _SENSIT_ _1MSPEC_0.54866 0.26712 0.070870.54390 0.27397 0.078740.53939 0.28767 0.086610.52937 0.30137 0.090550.51633 0.31507 0.094490.50583 0.32877 0.098430.48368 0.36301 0.102360.47445 0.36986 0.10630如果阈值选定为0.50583,sensitivity(覆盖率,true positive rate)就为0.32877,Specificity就是1-0.098425=0.901575,与以上我们通过列联表计算出来的差不多(阈值0.5)。下期预告:ROC以上我们用列联表求覆盖率等指标,需要指定一个阈值(threshold)。同样,我们在valid_roc数据中,看到针对不同的阈值,而产生的相应的覆盖率。我们还可以看到,随着阈值的减小(更多的客户就会被归为正例),sensitivity和1-Specificity也相应增加(也即Specificity相应减少)。把基于不同的阈值而产生的一系列sensitivity和Specificity描绘到直角坐标上,就能更清楚地看到它们的对应关系。由于sensitivity和Specificity的方向刚好相反,我们把sensitivity和1-Specificity描绘到同一个图中,它们的对应关系,就是传说中的ROC曲线,全称是receiver operating characteristic curve,中文叫“接受者操作特性曲线”。欲知后事如何,且听下回分解。参考资料:1. Mithat Gonen. 2007. Analyzing Receiver Operating Characteristic Curves with SAS. Cary, NC: SAS Institute Inc.2. Dan Kelly, etc. 2007. Predictive Modeling Using Logistic Regression Course Notes. Cary, NC: SAS Institute Inc.3. Confusion Matrix, see http:/www2.cs.uregina.ca/dbd/cs831/notes/confusion_matrix/confusion_matrix.htmlThis entry was posted in 数据挖掘与机器学习, 生物与医学统计, 统计软件 and tagged Confusion Matrix, Logistic回归, SAS, Sensitiveity, Specificity, 分类模型, 命中率, 数据挖掘, 混淆矩阵, 覆盖率 by 胡江堂. Bookmark the permalink.分类模型的性能评估以SAS Logistic回归为例(2): ROC和AUCPosted on 2008/12/31 by 胡江堂 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曲线,横轴是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)。预测10实1d, True Positivec, False Negativec+d, Actual Positive际0b, False Positivea, True Negativea+b, Actual Negativeb+d, Predicted Positivea+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:如果不用模型,对因变量的最好估计就是样本的均值(上图水平红线)。绿线是回归线(模型),回归线与水平线之间的偏离,称作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 CurveROC曲线是根据与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;这个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_characteristic5. The magnificent ROC, see http:/www.anaesthetist.com/mnm/stats/roc/Findex.htmdel.icio.us Tags: Wilcoxon-Mann-Whitney,Confusion Matrix,覆盖率,Logistic回归,SAS,Sensitiveity,Specificity,分类模型,命中率,数据挖掘,混淆矩阵,ROC,AUC,Receiver Operating Characteristic Curve,接受者操作特性曲线This entry was posted in 数据挖掘与机器学习, 生物与医学统计, 统计图形 and tagged AUC, Confusion Matrix, Logistic回归, Receiver Operating Characteristic Curve, ROC, SAS, Sensitiveity, Specificity, Wilcoxon-Mann-Whitney, 分类模型, 命中率, 接受者操作特性曲线, 数据挖掘, 混淆矩阵, 覆盖率 by 胡江堂. Bookmark the permalink.1. 总的不错,只是LZ对医学诊断试验不清楚,有些名词就译的不够专业,如Sensitivity是灵敏度、Specificity是特异度。ROC曲线纵轴是真阳性率(即灵敏度),横轴是假阳性率(1-特异度);AUC(曲线下的面积)反映了诊断试验效率好坏的重要指标,其可以计算标准误(反映抽样误差),两个诊断试验的比较就是比较两个AUC。2. 齐韬 on 2008/12/26 at 12:02 said: 很好的文章,读了很受启发。谢谢。对于类似于SARS病例的医学诊断中,如果除了test positive(阳性) 和test negative(阴性) 外还有test suspected(疑似)的情形,有什么好的方法没有。也就是说,Truth只有两种(感染和未感染两种),但是诊断(Test)却有三种(感染,未感染,疑似)的情况,应该怎么分析呢,这时的ROC曲线又如何设计呢?如果Truth也有三种,比如(SARS一型、SARS二型、SARS三型),又有什么方法可以处理呢?谢谢。Reply 3. . on 2008/12/26 at 12:49 said: 有一个问题撒如果两个class 的training data是不平衡的,或者test data是不平衡的,那怎么去描述你所说的这些指标呢。很明显,好用户应该是比坏用户多一些的,而且,最关键的是,辨别出一个坏用户的作用比辨别出一个好用户的经济价值要大很多,那confusion matrix还有用没?Reply 4. . on 2008/12/26 at 12:57 said: 对于齐同学的第一个问题,确实是个很有意思的问题哈。一般来说,在疑似的病例来说,直接丢掉不管,有点可惜,因为它可能藏有感染者的一般信息。但是直接把感染的和疑似的病例并到一块分析,又违反了统计学上的基本假设iid。 所以这一块的信息怎么利用一直是一个很有意思,而且能拿到funding的课题。根据我的经验,在这一块来说,主要有三个思路。一是来自meta analysis,属于生物统计学,这一派比较古老,用的方法也比较经典。另一派来自cs中的multi-kernel learning, 这一派主张用多个kernel来实现比较high level的信息整合,而且目前来看已经获得了一定的成功。还有一派就是来自贝叶斯学派,bayesian hierarchical model, multilevel model 也是一个经常拿来说的东西。你可以google这些关键词,一找一大砣Reply 5. 胡江堂 on 2008/12/26 at 13:27 said: to齐韬:我没做过医药方面的项目,讲个我熟悉的例子吧,信用评分,本文的例子也是这块。在建立个人信用评分模型时,一般要求数据的包含了贷款者的还款历史,拥有还款历史的贷款者才能被清除地归为“好”或“坏”这两个类别。如果还款期尚在模型建立的时间窗口内,对各种类别的划分就不是那么直接了,这时一些账户就不能够确定地归为“好”或“坏”这两个类别。比如,在还款期内,一个有三笔或以上欠账的账户是“坏”的账户,而“好”账户则没有欠账,那么一个有两笔欠款的账户,只要它还没有达到三笔欠款,就不能把它归为“坏”的一类。这种“中间”账户(indeterminate,或者poor)的存在会给信用评分模型的建立带来很多麻烦,一种解决方案是直接剔除掉这些“中间”账户,但无疑这会失去很多有意义的信息。看过一些研究,一般会有这么几种处理办法。把个人消费信贷的申请人分为三种:好的(good)、坏的(bad)和中间者(indeterminate,或者poor),按照这三个输出属性的不同组合,就产生了以下5 个模型:模型1:多项模型,输出属性分为以上3 类模型2:二项模型,输出属性分为good、bad(直接删除poor)模型3:二项模型,输出属性分为good(包含poor)、bad模型4:二项模型,输出属性分为good、bad(包含poor)模型5:二项模型,输出属性为为good、bad,这两个类别都包括了根据模型2 估计出来的poor 类别,这些poor 或者被估计为good,或者被估计为bad。跟上文提到的类似,可以定义一个总命中率(total hit rate),它测量的是在验证样本中,模型正确分类的个数占总数的百分比,还有平均命中率(average hit rate)指good、bad、poor 三个类别的命中率的平均。这两个指标应该也挺好用。一些实证研究表明(见下),在命中率方面,径向基网络至少给出了不弱于Logistic 回归的结果,但处理“坏”账户的能力更强一些。在以上5 个模型中,多项模型(把poor 作为单独的一类)的命中率最低,表明有必要在建立模型时把“中间”账户归为“好”账户或者“坏”账户。另外,神经网络模型倾向于把 “中间”归为“坏”账户,而Logistic 回归模型则倾向于把它归于“好”账户,所以模型2(直接删除掉“中间”账户)和模型5(poor 类别的账户根据模型2 而指派到good或者bad 类别)似乎更稳定一些。参见:N.Sarlija, M.Bensic, and M.Zekic-Susac. A neural network classification of credit applicants in consumer credit scoring.Proceedings of the 24th IASTED International Multi-Conference,2006Reply 6. 胡江堂 on 2008/12/26 at 13:36 said: to 2楼,Oversampling的情形吧?这可以很方便地做些调整啊。Reply 7. . on 2008/12/26 at 14:13 said: Not oversampling。oversampling只是一种虚假的增加样本的手段。你现在所说的忽略了银行为什么拿钱给你干这活的真实目的。我本身为美国银行做过这样一个项目,实际上,他们最关心的就是outlier的诊断。这就是说,模型应该放更多的cost在风险大的客户上面,多诊断出一个坏账比多诊断出十个好客户都要好。我们当时面临的一个问题就是,既然事实是这样的事实,怎么样来选择模型?这个问题我反正是没有做出满意的结果。另外,其实银行不care到底是用ann还是logistic回归,也不可能说哪个模型就一定要好数据决定一切,具体事情具体分析。事实上为什么会有银行信用数据的处理,最关键的就是我们无法得到最想要得到的信息income. 客户的收入直接决定了他的信用能力,但是这个信息只能从其他方面去推算。所以,选什么样的模型,关键在于你手头的数据类型和多少。我当时就用的比较简单的pca,当然在具体应用过程中有一些trick,效果比那些复杂的ann和非线性回归要好得多,而且容易理解。Reply 8. 胡江堂 on 2008/12/26 at 22:45 said: to 6楼:可能我们关注的点不一样吧。我提到的信用评分例子,比如申请人评分,需要找出风险高的申请人,从而拒绝其贷款申请。但同时不能“错杀三千”,因为拒绝了优质客户也是损失。分类模型可以把这些决策成本考虑在内,是综合考虑了这些tradeoff的。你说的极值诊断,应该更有讲究,但显然不在分类模型的考究之内。上面提到的几个指标,像覆盖率,应该是欺诈诊断喜欢的东西。Reply 9. . on 2008/12/27 at 02:48 said: 可能我没说清楚。其实一个分类器交给客户以后,人家只是拿来当辅助工具,既然要当辅助工具,言下之意就是在坏的客户上面具有比常人灵敏度要高的性质,这样才能给客户提个醒。当然,诊断到了风险大的客户,银行看到以后他们自己还要具体事情具体分析的嘛。但是如果这个分类器对于坏的客户诊断能力太差,而主要的精度都在好的客户那一边的话,这个分类器就没有那么大的辅助作用了。所以在这里有一个tradeoff,我觉得confusion matrix在这样的情况下作用就不大了。因为它weight the two sides equally。Reply 10. xjx on 2008/12/27 at 17:24 said: 呵呵, 楼主辛苦辛苦. 学习了.我来做个脚注:Sensitivity就是灵敏度, 是疾病发生后出现症状的概率.specificity就是特异度, 是疾病不发生时不出现症状的概率.假设肺癌中90%抽烟, 没有肺癌的30%抽烟. 此处疾病为肺癌, 症状为抽烟. 灵敏度为肺癌中抽烟的概率为0.9, 特异度为没有肺癌的不抽烟的概率0.7.(参考文献: Bernard Rosner. 孙尚拱 译. 生物统计学基础(Fundamentals ofBiostatistics), 第五版. 科学出版社, 2004.)Reply 11. Pingback: | 统计之都12. 胡江堂 on 2008/12/29 at 09:15 said: to xjx: 多谢补充。看来我手头也得备一部生统的书了。to 8楼:“confusion matrix weight the two sides equally”,却是不必。前面我提到“分类模型可以把这些决策成本考虑在内,是综合考虑了这些tradeoff的”,下面展开些来讲吧。上面提到,“随着阈值的减小(更多的客户就会被归为正例),Sensitivity和1-Specificity也相应增加(也即Specificity相应减少)”,Sensitivity和Specificity之间有个tradeoff的关系。如果目标是增加Sensitivity(如果银行想要,“在坏的客户上面具有比常人灵敏度要高”),最佳的分类器就倾向于把客户归为类别positive(这里是bad),这样阈值就要选小些;同样,如果目标是要增加Specificity(文中提到的数据库营销例子),阈值就要大些。要选择一个最优的阈值,可以根据业务规则,利用Misclassification Costs Matrix,最优的决策将是达到(预期)成本最小 。或者,如果信息足够,最优决策还可以基于Profit Matrix。无论如何,这样提供的confusion matrix都是有意义的。Reply 13. Pingback: 分类模型的性能评估以SAS Logistic回归为例(2): ROC和AUC | 统计之都14. Pingback: 胡江堂: 分类模型的性能评估以SAS Logistic回归为例(3): Lift和Gain | 统计之都15. Saint13 on 2009/03/19 at 13:17 said: 学习了。有个小地方有疑问:这里bad是作为关注事件,所以,good被预测为bad是相当于第二类错误,应该是取伪错误,bad预测为good应该是第一类错误,也就是去真错误.=共同探讨下,呵呵._Saint13Reply 16. ni on 2009/05/12 at 11:18 said: 你好,胡江堂。你的文章写得很好,浅显直白。实在是很缺这方面的知识,谢谢!这篇文章最后写“为什么提供1-Specificity而不是Specificity,下文有讲究。 ”可是我看了半天还是没看懂为什么选1-Specificity而不是Specificity?在下愚钝,还望包涵。Reply 17. xiaohua on 2009/08/12 at 15:54 said: 您好!我也用您提到的数
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!