• 综合主站
  • 分类模型的性能评估——以SAS Logistic回归为例(1): 混淆矩阵

很好的文章,读了很受启发。谢谢。
对于类似于SARS病例的医学诊断中,如果除了test positive(阳性) 和test negative(阴性) 外还有test suspected(疑似)的情形,有什么好的方法没有。也就是说,Truth只有两种(感染和未感染两种),但是诊断(Test)却有三种(感染,未感染,疑似)的情况,应该怎么分析呢,这时的ROC曲线又如何设计呢?
如果Truth也有三种,比如(SARS一型、SARS二型、SARS三型),又有什么方法可以处理呢?谢谢。
有一个问题撒
如果两个class 的training data是不平衡的,或者test data是不平衡的,那怎么去描述你所说的这些指标呢。。很明显,好用户应该是比坏用户多一些的,而且,最关键的是,辨别出一个坏用户的作用比辨别出一个好用户的经济价值要大很多,那confusion matrix还有用没?

对于齐同学的第一个问题,确实是个很有意思的问题哈。一般来说,在疑似的病例来说,直接丢掉不管,有点可惜,因为它可能藏有感染者的一般信息。但是直接把感染的和疑似的病例并到一块分析,又违反了统计学上的基本假设iid。 所以这一块的信息怎么利用一直是一个很有意思,而且能拿到funding的课题。根据我的经验,在这一块来说,主要有三个思路。一是来自meta analysis,属于生物统计学,这一派比较古老,用的方法也比较经典。另一派来自cs中的multi-kernel learning, 这一派主张用多个kernel来实现比较high level的信息整合,而且目前来看已经获得了一定的成功。还有一派就是来自贝叶斯学派,bayesian hierarchical model, multilevel model 也是一个经常拿来说的东西。你可以google这些关键词,一找一大砣

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,2006
to 2楼,

Oversampling的情形吧?这可以很方便地做些调整啊。
Not oversampling。。oversampling只是一种虚假的增加样本的手段。你现在所说的忽略了银行为什么拿钱给你干这活的真实目的。我本身为美国银行做过这样一个项目,实际上,他们最关心的就是outlier的诊断。这就是说,模型应该放更多的cost在风险大的客户上面,多诊断出一个坏账比多诊断出十个好客户都要好。我们当时面临的一个问题就是,既然事实是这样的事实,怎么样来选择模型?这个问题我反正是没有做出满意的结果。。

另外,其实银行不care到底是用ann还是logistic回归,也不可能说哪个模型就一定要好--数据决定一切,具体事情具体分析。事实上为什么会有银行信用数据的处理,最关键的就是我们无法得到最想要得到的信息---income. 客户的收入直接决定了他的信用能力,但是这个信息只能从其他方面去推算。所以,选什么样的模型,关键在于你手头的数据类型和多少。我当时就用的比较简单的pca,当然在具体应用过程中有一些trick,效果比那些复杂的ann和非线性回归要好得多,而且容易理解。。
to 6楼:

可能我们关注的点不一样吧。我提到的信用评分例子,比如申请人评分,需要找出风险高的申请人,从而拒绝其贷款申请。但同时不能“错杀三千”,因为拒绝了优质客户也是损失。分类模型可以把这些决策成本考虑在内,是综合考虑了这些tradeoff的。你说的极值诊断,应该更有讲究,但显然不在分类模型的考究之内。

上面提到的几个指标,像覆盖率,应该是欺诈诊断喜欢的东西。
可能我没说清楚。。。
其实一个分类器交给客户以后,人家只是拿来当辅助工具,既然要当辅助工具,言下之意就是在坏的客户上面具有比常人灵敏度要高的性质,这样才能给客户提个醒。当然,诊断到了风险大的客户,银行看到以后他们自己还要具体事情具体分析的嘛。。但是如果这个分类器对于坏的客户诊断能力太差,而主要的精度都在好的客户那一边的话,这个分类器就没有那么大的辅助作用了。。
所以在这里有一个tradeoff,我觉得confusion matrix在这样的情况下作用就不大了。因为它weight the two sides equally。
呵呵, 楼主辛苦辛苦. 学习了.

我来做个脚注:
Sensitivity就是灵敏度, 是疾病发生后出现症状的概率.specificity就是特异度, 是疾病不发生时不出现症状的概率.

假设肺癌中90\%抽烟, 没有肺癌的30\%抽烟. 此处疾病为肺癌, 症状为抽烟. 灵敏度为肺癌中抽烟的概率为0.9, 特异度为没有肺癌的不抽烟的概率0.7.

(参考文献: Bernard Rosner. 孙尚拱 译. 生物统计学基础(Fundamentals of
Biostatistics), 第五版. 科学出版社, 2004.)
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都是有意义的。
3 个月 后
学习了。
有个小地方有疑问:
<q cite="从下面的局部的数据valid_p可以看到,一些实际上是good的客户,根据我们的模型(阈值p取0.5),却预测他为bad(套用我们假设检验的黑话,这就犯了“弃真”的错误),对一些原本是bad的客户,却预测他为good(“取伪”错误),当然,对更多的客户,good还预测成good,bad还预测成bad:">
这里bad是作为关注事件,所以,good被预测为bad是相当于第二类错误,应该是取伪错误,bad预测为good应该是第一类错误,也就是去真错误.
==共同探讨下,呵呵.^_^
Saint13
2 个月 后
你好,胡江堂。你的文章写得很好,浅显直白。实在是很缺这方面的知识,谢谢!
这篇文章最后写“为什么提供1-Specificity而不是Specificity,下文有讲究。 ”

可是我看了半天还是没看懂为什么选1-Specificity而不是Specificity?

在下愚钝,还望包涵。
3 个月 后
您好!我也用您提到的数据做过信用评分模型的研究,有两个问题想请教您一下:
(1)您是怎样从20个特征变量中挑选出checking history duration savings property这5个变量的?
(2)在预测的结果中为什么对于坏客户的预测结果相对较差,有将近2/3的坏客户被预测成了好客户?这是由于样本数据中的坏客户数量太少的原因造成的吗?
请您多多指教!
1 年 后
对楼上的第一个问题也很有兴趣。当然楼主的目的在解说验证评估指标,模型建立过程略说也可理解,不过要能细讲讲就最好了。
对第二个问题,个人感觉跟违约阀值的设定有关系。阀值设为50%,说明对坏客户的认定较为保守,许多违约概率在50%下的坏客户被认定为是好客户,从而导致对坏客户的预测能力较差,同时对好客户的预测能力极强。如果降低阀值(比如30%),那么第I类错误(坏认为好)会下降许多,但同时第II类错误(好认为坏)也会上升。
我自己算的例子(阀值从50%降为30%)中(跟楼主的公式有些差异——数据集划分的误差),第I类错误会从63%降至35%,第II类错误从8%上升至23%。这么看的话,似乎要均衡了许多,也许楼主设的50%可能更多是偏向业务扩张型的。
2 年 后
有个问题请教江堂兄,sas logistic回归中可以预测出两类的概率,如果信用评分好的概率大于信用评分差的概率,那么就应该视为good,没必要去设定阀值啊??
2 年 后
[未知用户] 这个就变成了3X3的confusion matrix了,理解方式和2X2的一样,只是更多了而已。
9 个月 后
我觉得也不对,checking这个变量就是,是不是应该改成dummy 再来建模?