信用评分卡模型在国外是一种成熟的预测方法,尤为在信用风险评估以及金融风险控制领域更是获得了比较普遍的使用,其原理是将模型变量WOE编码方式离散化以后运用logistic回归模型进行的一种二分类变量的广义线性模型。html
本文重点介绍模型变量WOE以及IV原理,为表述方便,本文将模型目标标量为1记为违约用户,对于目标变量为0记为正经常使用户;ide
则WOE(weight of Evidence 证据权重)其实就是自变量取某个值的时候对违约比例的一种影响,函数
怎么理解这句话呢?我下面经过一个图标来进行说明。学习
Woe公式以下:编码
#badspa |
#good3d |
Woeorm |
|
0-10htm |
50 |
200 |
=ln((50/100)/(200/1000))=ln((50/200)/(100/1000)) |
10-18 |
20 |
200 |
=ln((20/100)/(200/1000))=ln((20/200)/(100/1000)) |
18-35 |
5 |
200 |
=ln((5/100)/(200/1000))=ln((5/200)/(100/1000)) |
35-50 |
15 |
200 |
=ln((15/100)/(200/1000))=ln((15/200)/(100/1000)) |
50以上 |
10 |
200 |
=ln((10/100)/(200/1000))=ln((10/200)/(100/1000)) |
汇总 |
100 |
1000 |
|
表中以age年龄为某个自变量,因为年龄是连续型自变量,须要对其进行离散化处理,假设离散化分为5组(至于如何分组,会在之后专题中解释),#bad和#good表示在这五组中违约用户和正经常使用户的数量分布,最后一列是woe值的计算,经过后面变化以后的公式能够看出,woe反映的是在自变量每一个分组下违约用户对正经常使用户占比和整体中违约用户对正经常使用户占比之间的差别;从而能够直观的认为woe蕴含了自变量取值对于目标变量(违约几率)的影响。再加上woe计算形式与logistic回归中目标变量的logistic转换(logist_p=ln(p/1-p))如此类似,于是能够将自变量woe值替代原先的自变量值;
讲完WOE下面来讲一下IV:
IV公式以下:
其实IV衡量的是某一个变量的信息量,从公式来看的话,至关因而自变量woe值的一个加权求和,其值的大小决定了自变量对于目标变量的影响程度;从另外一个角度来看的话,IV公式与信息熵的公式极其类似。
事实上,为了理解WOE的意义,须要考虑对评分模型效果的评价。由于咱们在建模时对模型自变量的全部处理工做,本质上都是为了提高模型的效果。在以前的一些学习中,我也总结了这种二分类模型效果的评价方法,尤为是其中的ROC曲线。为了描述WOE的意义,还真的须要从ROC提及。仍旧是先画个表格。
数据来自于著名的German credit dataset,取了其中一个自变量来讲明问题。第一列是自变量的取值,N表示对应每一个取值的样本数,n1和n0分别表示了违约样本数与正常样本数,p1和p0分别表示了违约样本与正常样本占各自整体的比例,cump1和cump0分别表示了p1和p0的累计和,woe是对应自变量每一个取值的WOE(ln(p1/p0)),iv是woe*(p1-p0)。对iv求和(能够当作是对WOE的加权求和),就获得IV(information value信息值),是衡量自变量对目标变量影响的指标之一(相似于gini,entropy那些),此处是0.666,貌似有点太大了,囧。
上述过程研究了一个自变量对目标变量的影响,事实上也能够当作是单个自变量的评分模型,更进一步地,能够直接将自变量的取值当作是某种信用评分的得分,此时须要假设自变量是某种有序变量,也就是仅仅根据这个有序的自变量直接对目标变量进行预测。
正是基于这种视角,咱们能够将“模型效果的评价”与“自变量筛选及编码”这两个过程统一块儿来。筛选合适的自变量,并进行适当的编码,事实上就是挑选并构造出对目标变量有较高预测力(predictive power)的自变量,同时也能够认为,由这些自变量分别创建的单变量评分模型,其模型效果也是比较好的。
就以上面这个表格为例,其中的cump1和cump0,从某种角度看就是咱们作ROC曲线时候的TPR与FPR。例如,此时的评分排序为A12,A11,A14,A13,若以A14为cutoff,则此时的TPR=cumsum(p1)[3]/(sum(p1)),FPR=cumsum(p0)[3]/(sum(p0)),就是cump1[3]和cump0[3]。因而咱们能够画出相应的ROC曲线。
能够看得出来这个ROC不怎么好看。以前也学习过了,ROC曲线有能够量化的指标AUC,指的就是曲线下方的面积。这种面积其实衡量了TPR与FPR之间的距离。根据上面的描述,从另外一个角度看TPR与FPR,能够理解为这个自变量(也就是某种评分规则的得分)关于0/1目标变量的条件分布,例如TPR,即cump1,也就是当目标变量取1时,自变量(评分得分)的一个累积分布。当这两个条件分布距离较远时,说明这个自变量对目标变量有较好的辨识度。
既然条件分布函数可以描述这种辨识能力,那么条件密度函数行不行呢?这就引出了IV和WOE的概念。事实上,咱们一样能够衡量两个条件密度函数的距离,这就是IV。这从IV的计算公式里面能够看出来,IV=sum((p1-p0)*log(p1/p0)),其中的p1和p0就是相应的密度值。IV这个定义是从相对熵演化过来的,里面仍然能够看到x*lnx的影子。
至此应该已经能够总结到:评价评分模型的效果能够从“条件分布函数距离”与“条件密度函数距离”这两个角度出发进行考虑,从而分别获得AUC和IV这两个指标。这两个指标固然也能够用来做为筛选自变量的指标,IV彷佛更加经常使用一些。而WOE就是IV的一个主要成分。
那么,到底为何要用WOE来对自变量作编码呢?主要的两个考虑是:提高模型的预测效果,提升模型的可理解性。
首先,对已经存在的一个评分规则,例如上述的A12,A11,A14,A13,对其作各类函数变化,能够获得不一样的ROC结果。可是,若是这种函数变化是单调的,那么ROC曲线事实上是不发生变化的。所以,想要提升ROC,必须寄但愿于对评分规则作非单调的变换。传说中的NP引理证实了,使得ROC达到最优的变换就是计算现有评分的一个WOE,这彷佛叫作“条件似然比”变换。
用上述例子,咱们根据计算出的WOE值,对评分规则(也就是第一列的value)作排序,获得新的一个评分规则。
此处按照WOE作了逆序排列(由于WOE越大则违约几率越大),照例能够画出ROC线。
能够看出来,通过WOE的变化以后,模型的效果好多了。事实上,WOE也能够用违约几率来代替,二者没有本质的区别。用WOE来对自变量作编码的一大目的就是实现这种“条件似然比”变换,极大化辨识度。
同时,WOE与违约几率具备某种线性关系,从而经过这种WOE编码能够发现自变量与目标变量之间的非线性关系(例如U型或者倒U型关系)。在此基础上,咱们能够预料到模型拟合出来的自变量系数应该都是正数,若是结果中出现了负数,应当考虑是不是来自自变量多重共线性的影响。
另外,WOE编码以后,自变量其实具有了某种标准化的性质,也就是说,自变量内部的各个取值之间均可以直接进行比较(WOE之间的比较),而不一样自变量之间的各类取值也能够经过WOE进行直接的比较。进一步地,能够研究自变量内部WOE值的变异(波动)状况,结合模型拟合出的系数,构造出各个自变量的贡献率及相对重要性。通常地,系数越大,woe的方差越大,则自变量的贡献率越大(相似于某种方差贡献率),这也可以很直观地理解。
总结起来就是,作信用评分模型时,自变量的处理过程(包括编码与筛选)很大程度上是基于对单变量模型效果的评价。而在这个评价过程当中,ROC与IV是从不一样角度考察自变量对目标变量的影响力,基于这种考察,咱们用WOE值对分类自变量进行编码,从而可以更直观地理解自变量对目标变量的做用效果及方向,同时提高预测效果。
这么一总结,彷佛信用评分的建模过程更多地是分析的过程(而不是模型拟合的过程),也正所以,咱们对模型参数的估计等等内容彷佛并不作太多的学习,而把主要的精力集中于研究各个自变量与目标变量的关系,在此基础上对自变量作筛选和编码,最终再次评估模型的预测效果,而且对模型的各个自变量的效用做出相应的评价。
转自:http://blog.sina.com.cn/s/blog_8813a3ae0102uyo3.html
R语言实现WOE转化+变量细筛
R语言中有一个woe包,能够实现WOE转化的同时,经过WOE值进行y~x的决策树创建,应用决策树的重要性来进行变量细筛。
library(woe)
IV<-iv.mult(step2_2,"y",TRUE) #原理是以Y做为被解释变量,其余做为解释变量,创建决策树模型
iv.plot.summary(IV)
summary(step2_3)
不能只看统计量,还要仔细的察看每一个变量的取值状况。通常WOE建模数据是通过抽样的,所以可能须要多建模几回,看看不一样的变量特征变化,再来进行变量细筛。