所有模型都要进行前期数据准备工作。在此,假设所有数据都已经准备完毕。
注:该系列文章都是学习马姆杜 雷法特著的《信用风险评分卡研究——基于SAS的开发与实施》一书时的学习记录和练手,供以后自己查看。毕竟,。如有不准确或不清楚的地方,请查找原著。
WOE证据权重法
1.WOE计算方法
- 计算该变量不同类别的正常、违约占比分布。(=该类别的正常频数/该变量的正常频数)
- 该类别的WOE=ln(违约分布/正常分布)。
2.不同变量的WOE
- 连续变量——最有分段、等宽分段
3.基于SAS的等宽分段
- 代码如下:
%macro EqwBin(Dsin,Xvar,Nb,XBvar,Dsout,Dsmap);
/*通过Sql语句获得连续变量的最值,并存储*/
proc sql noprint;
select max(&Xvar) into :Vmax from &Dsin;
select min(&Xvar) into :Vmin from &Dsin;
run;
quit;
%let Bs=%sysevalf((&Vmax-&Vmin)/&Nb);
/*获得每个连续变量所在的区间*/
data &Dsout;
set &Dsin;
%do i=1 %to &Nb;
%let Bin_R=%sysevalf(&Vmin+&i*&Bs);
%let Bin_L=%sysevalf(&Bin_R-&Bs);
%if &i=1 %then %do;
if &Xvar>=&Bin_L and &Xvar<=&Bin_R then &XBvar=&i;
%end;
%if &i>1 %then %do;
if &Xvar>&Bin_L and &Xvar<=&Bin_R then &XBvar=&i;
%end;
%end;
run;
/*存储变量分区*/
proc sql noprint;
create table &Dsmap(Bin_no num,Bin_min num,Bin_max num);
%do i=1 %to &Nb;
%let Bin_R=%sysevalf(&Vmin+&i*&Bs);
%let Bin_L=%sysevalf(&Bin_R-&Bs);
insert into &Dsmap values(&i,&Bin_L,&Bin_R);
%end;
run;
quit;
%mend;
</pre><pre class="html" name="code">/*调用宏*/
%EqwBin(Ccmodel.Creditcard,CustAge,5,CustAge_b,Ccmodel.CC1,Ccmodel.Age_Map);
%EqwBin(Ccmodel.CC1,TmAtAddress,5,TmAtAddress_b,Ccmodel.CC2,Ccmodel.TmAtAddress_Map);
%EqwBin(Ccmodel.CC2,CustIncome,5,CustIncome_b,Ccmodel.CC3,Ccmodel.CustIncome_Map);
%EqwBin(Ccmodel.CC3,TmWBank,5,TmWBank_b,Ccmodel.CC4,Ccmodel.TmWBank_Map);
%EqwBin(Ccmodel.CC4,AmBalance,5,AmBalance_b,Ccmodel.CC5,Ccmodel.AmBalance_Map);
%EqwBin(Ccmodel.CC5,UtliRate,5,UtliRate_b,Ccmodel.CC6,Ccmodel.UtliRate_Map);
run;
- quit与run:
SAS的过程从寿命来分有两大类,一大类是过程运行完后自动退出,大多数的SAS过程都是这样,过程直接加Run就可以了;另一大类是交互性质的过程,过程启动后不会主动退出,可以后续接着运行这个过程的一些其它命令,最后需要用Qiut命令退出这个过程,如:Proc SQL,Proc IML等。本文来自: 人大经济论坛 SAS专版 版,详细出处参考:http://bbs.pinggu.org/forum.php?mod=viewthread&tid=1189280&page=1