sas分类模型的混淆矩阵性能评估
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sas分类模型的混淆矩阵性能评估
跑完分类模型(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 data good_bad Frequency Percent
-------------------------------------------
bad 154 25.67 good 446 74.33
Valid data good_bad Frequency Percent
--------------------------------------------
bad 146 36.50 good 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 Estimates Standard Wald Parameter DF Estimate Error Chi-Squar e Pr > ChiSq
Intercept 1 0.6032 0.4466 1 .8242 0.1768
checking 1 -0.6536 0.0931 49. 3333 <.0001
history 1 -0.4083 0.0980
17.3597 <.0001
duration 1 0.0248 0.00907 7 .4820 0.0062
savings 1 -0.2017 0.0745
7.3308 0.0068
property 1 0.3157 0.1052
9.0163 0.0027
回归方程就是:
logit[p(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*s avings+0.3157*property; p=exp(logit)/(exp(logit)+1); if p<0.5then good_bad_predicted='good'; else good_bad_predicted='bad'; keep good_bad p good_bad_predicted; run;
从下面的局部的数据valid_p可以看到,一些实际上是good的客户,根据我们的模型(阈值p取0.5),却预测他为bad(套用我们假设检验的黑话,这就犯了“弃真”的错误),对一些原本是bad的客户,却预测他为good(“取伪”错误),当然,对更多的客户,good还预测成good,bad还预测成bad:
good_bad p good_bad_predicted
bad 0.61624 bad bad 0.03607 good good 0.12437 good
good 0.21680 good
good 0.34833 good good 0.69602
bad bad 0.68873 bad
good 0.48351 good
good 0.03288 good
good 0.06789 good
good 0.61195 bad
good 0.15306 good
Confusion Matrix, 混淆矩阵
一个完美的分类模型就是,如果一个客户实际上(Actual)属于类别good,也预测成(Predicted)good,处于类别bad,也就预测成bad。但从上面我们看到,一些实际上是good的客户,根据我们的模型,却预测他为bad,对一些原本