证据权重(Weight OF EVIDENCE,WOE)转换可以将LOGISTIC回归模型转换为标准评分卡转为标准评分卡格式 。本章,我们将介绍各种各种类型变量的WOE转换过程,即名义变量、顺序变量和连续变量。应用证据权重转换又称为粗分类。
引入WOE转换的目的并不是为了提高模型质量。正如第7章部分案例表明,一些变量不应该被纳入模型。这或者是因为它们不能增加模型值,或者是因为与模型相关系数有关的误差较大。
在介绍WOE转换之前,需要注意的是,建立标准信用评分卡也可以不采用WOE转换。在这种情况下,LOGISTIC回归模型需要处理更大数量的自变量。尽管这样会增加建模程序的复杂性,但最终得到的评分卡都是一样的。
WOE的定义
下面的例子介绍了WOE转换的基本定义
首先,计算数据库CREIDTCARD中变量RESSTATUS种类中正常和违约的频率。列表8.1中的代码将生成这些频率。
PROC FREQ DATA=CREDITCARD;
TABLE RESSTATUS*STATUS/NOCOL NOROW NOPC;
RUN;
使用这些数值,就可以计算变量RESSTATUS的WOE,详见表8.1
列GOOD DIST 和 BAD DIST分别表示变量RESSTATUS种类别中正常和违约的分布情况。它们分别由每一类别中占用率数据除以正常或违约总数而得到。例如,类别OTHER中正常的分布的计算方法是131/803=0.163
如果括号内比值小于1,WOE的负值;反之则是正值。需要注意的是,公式8.1中将违约的分布作为分子来定义WOE。公式8.1中类别顺序的选择隐含着WOE的含义。
例8.1 是计算名义变量WOE的示例。同样的定义和计算方法也可以适用于连续变量的情况。但此时,在计算WOE之前,需要将变量分段(bin)。对于名义变量,如例8.1中的变量RESSTATUS,因为这些名义变量之间不存在任何序列关系,所以不同类别的WOE值可以以任意顺序排列。然而,对于连续变量,WOE值必须按照分段的自然顺序排列,以保持连续原始变量中所包含的顺序关系。
WOE的含义
对于一个名义变量的类别I,或连续变量的某个段,WOE可以定义为:
需要记住的是,对于类别i,正常和违约的分布分别定义为:类别I的好样本/总样本的好样本。
将对这个函数与第4章中公式4.23定义的概率比进行对比,可以发现WOE是概率比一种调整形式后的对数,即第i类中违约与正常比率与整个样本中违约与正常比率的比值的对数。因此,其目的是衡量第I类对违约与正常的比率的影响程度。
接下来的例子表明,如果用一个已经过了WOE转换的自变量对LOGISTIC回归模型进行拟合,则该变量对应的模型参数正好是1.0.
列表8.7 用%EqWBinn 和 %VarBin 对连续变量分段
列表8.6
%MACRO BinVar(DSIN,IVVAR,DVVAR,METHOD,MMAX,ACC,DSVARMAP,NEWVAR,DSOUT);
/*Generate the binning map and then apply them */
%BinContVar(&DSIN,&IVVAR,&DVVAR,&METHOD,&MMAX,&ACC,&DSVVARMAP);
%APPLYMAP2(&DSIN,&IVVAR,&NEWVAR,&DSVARMAP,&DSOUT);
%MEND;
采用最优分段,通常不会得到等宽的段。
当WOE值和分段号的序列量表之间的线性关系,或更差一点单调性,不存在时,有两种可能的解释:
1、变量并没有表现出可以用LOGISTIC回归合理解释的模式。因此,不应该将该变量以现有形式纳入模型。可以尝试各种不同的转换,如不同的分段范围,以考察解决该问题的可能性。如果没有任何一种转换形式可以得到线性,或至少是单调形式,应该拒绝该变量。
2、第二种情况是,可以为WOE值观察到的行为找到业务上的解释。常见的U形曲线表示某个变量取中间值时坏账率较低,而其取高端值和低端值时坏账率较高。例如,如果申请评分卡中表示,客户年龄的变量被观察到这种模式,可以用就业率对些进行解释,中年客户的就业率水平最高,而年龄区间的两端就业率较低。
/*Customer Age:5 EQUAL WIDTH Bins */
%EqWBinn(CreditCard,CustAge,5,CustAge_b,CC1,Age_Map);
/*Bin All the continuous variables using Binvar The mothod=1 is the Gini method*/
/*Time at Address:5 bins*/
%BinVar(CC1,TmAtAddress,Status,1,5,0.01,TmAtAddress_Map,TmAtAddress_b,CC2);
/*Customer Income:5 bins*/
%BinVar(CC2,CustIncome,Status,1,5,0.01,CustIncom_Map,CustIncom_b,CC3);
/*Time with Bank:4 bins*/
%BinVar(CC3,TmWbak,Status,1,4,0.01,TmWBank_Map,TmWBank_b,CC4);
/*Average monthly balance:5 bins*/
%BinVar(CC4,AmBalance,Status,1,5,0.01,AmBalance_Map,AmBalance_b,CC5);
/*Utilization Rate:5 bins*/
%BinVar(CC5,UtilRate,Status,1,5,0.01,UtilRate_Map,UtilRate_b,CC6);
列表8.8 用%CalcWOE 计算WOE
/*Customer Age*/
%CalcWOE(CC6,CustAge_b,Status,CustAge_WOE,CustAge_WOE,CC7);
/*Time at address*/
%CalWOE(CC7,TmAtAddress_b,Status,TmAtAddress_WOE,TmAtAddress_WOE,CC8);
/*Customer Income*/
%CalcWOE(CC8,CustIncome_b,Status,CustIncome_WOE,CustIncome_WOE,CC9);
/*Time With Bank*/
%CalcWOE(CC9,TmWBank_b,Status,TmWBank_WOE,TmWbank_WOE,CC10);
/*Average Monthly Balance*/
%CalcWOE(CC10,AmBalance_b,Status,AmBalance_WOE,AmBalance_WOE,CC11);
/*Utilization Rate*/
%CalcWOE(C11,UtilRate_b,Status,UtilRate_WOE,UtilRate_WOE,CC12);
显示并绘制变量CustAge和TmAtAddress的WOE值
/*Customer Age*/
PROC SORT DATA=CustAge_WOE;
BY CustAge_b;
RUN;
PROC PRINT DATA=CustAge_WOE;
RUN;
%PlotWOE(CustAge_WOE,CustAge_b);
/*Time At Address*/
PROC SORT DATA=TmAtAddress_WOE;
BY TmAtAddress_b;
RUN;
PROC PRINT DATA=TmAtAddress_WOE;
RUN;
%PlotWOE(TmAtAddress_WOE,TmAtAddress_b);