@77qingliu
2018-05-13T23:26:13.000000Z
字数 6446
阅读 1084
信用评分
这里主要回顾信用风险评分中一些常用的数据准备过程。
原则上,数据准备重点关注的是:
另外,有三项数据准备任务对于评分卡开发是十分关键的,并且也是这里讨论的重点:
上述的前两项任务也常被称为变量分群。通常,进行分段和降低基数性是为了使生成的变量的预测力最强。
当名义变量的类别数大于12个,降低基数就变得非常必要。降低名义变量的基数有三个主要策略:
SAS实现上面提到的前两种方法都是一些简单的IF-THEN-ELSE
条件的简单数据步。
这里重点介绍更先进的第三种方法:最优分群。
以下图为例:
该算法的目的是生成较少数量的类别,该变量的某些预测力指标将得到优化。
进行最优分组的算法是基于决策树模型所用的方法。在这种情况下,首先假设所有的类别都属于一个组,然后,找出最优化的二元分割方法。最优化分割标准可以用一下四个常用的预测力指标:
宏%ReduceCats可以实现上表的四项指标,降低带有字符值的名义自变量IVVAR的基数。该宏的参数如下:
该宏的运行结果是映射数据集State-Map
,它包含对状态分组的分段数。有宏%ApplyMap1可将宏%ReduceCats
生成的映射应用于数据集,该宏的参数如下:
该宏生成一系列的IF-THEN
条件,并用它们将初始类别映射到预期相等的分段数,执行宏%ApplyMap1
的SAS日志
最后,一个示例演示上述过程:
data States1;
length State $15.;
input State $1-15 Freq;
datalines;
ARIZONA 35
CALIFORNIA 33
COLORADO 66
FLORIDA 117
ILLINOIS 49
KANSAS 64
LOUISIANA 88
MARYLAND 22
MASSACHUSETTS 79
MICHIGAN 82
MINNESOTA 75
MISSISSIPPI 120
NEW JERSEY 39
NEW MEXICO 60
NEW YORK 178
OHIO 70
PENNSYLVANIA 20
TEXAS 38
VIRGINIA 139
WISCONSIN 98
;
run;
/* Also generate the default indicator (at random) */
data States2;
retain Customer_ID 0;
set states1;
do i=1 to freq;
Customer_ID=Customer_ID+1;
if (ranuni(0) >0.8) then default=1; /* DV=Bad */
else default=0; /* DV=Good */
output;
end;
drop i freq;
run;
/* Call the macro ReuceCats */
%let DSin=States2;
%let IVVar=state;
%let DVVar=default;
%let Method=1; /*Using Gini */
%let MMax=5;
%let DSVarMAp=State_Map;
%ReduceCats(&DSin, &IVVar, &DVVar, &Method, &Mmax, &DSVarMap);
/* Print the State_Map dataset to the output window */
proc print data=State_Map;
run;
/* Call the macro ApplyMaps1 to apply the reduction maps */
%let DSin=States2;
%let VarX=State;
%let NewVarX=State_Group;
%let DSVarMap=State_Map;
%let DSOut=State2_m;
/* Use: option MPRINT to view how the code for applying the maps
in the SAS Log */
/* option mprint */;
%ApplyMap1(&DSin, &VarX, &NewVarX, &DSVarMap, &DSout);
/* Use PROC FREQ to confirm the counts in the new groups */
proc freq data=State2_m;
table State_Group;
run;
连续变量必须要分段,以允许使用标准的评分卡格式。
信用评分开发中有两种常用的分段方法:等距分段和最优分段
在等距分段中,连续变量的取值范围被分为预先确定数量的等宽度区间。用宏%EqWBinn可以对连续变量进行等距分段。
而连续变量的最优分段,相当于名义变量的最优分群。实际上,最优分段和最优分群使用的算法都是基于相同的概念和方法。在下面介绍的一种方法中,连续变量被分为大量初始宽度相等的段,比如10个,然后将这些段看作名义变量,并用名义变量的最优分群程序进行分段
宏%BinContVar提供了上图算法的SAS实施。该宏先将连续变量按照最小分段百分比分成1/Acc
段,然后对这些段进行分组,直到剩余MMax
个为止。宏的参数如下:
该宏也将生成一个映射数据集,这个数据集可通过%ApplyMap2生成一组IF-THEN
语句来定义输出数据集中新变量的分段数量
示例如下
data Customers;
Input Income Default @@;
datalines;
2339.95 0 1578.3 0 1453.02 0 1398.77 1 2988.94 0 1970.5 0 1765.14 0 1016.64 1 1024.72 1 3731.1 0
1296.54 1 1375.53 1 2454.93 0 1458.21 1 3607.17 0 1137.89 1 2618.88 0 3066.08 0 1651.19 0 2122.69 0
2384.87 0 1117.99 1 3059.15 0 2632.47 0 1321.09 1 3481.08 0 2599.82 0 3421.61 0 2615.36 0 2177.07 0
3129.73 0 1597.58 0 1996.46 0 2561.42 0 1143.17 0 3517.13 0 1044.27 1 2149.7 0 1062.72 1 2802.59 0
1170.76 1 1839.54 1 1341.2 0 2687.47 0 1882.49 0 1001.02 1 1222.01 1 3773.33 0 2108.08 0 3555.37 0
3860.08 0 3471.33 0 2836.04 0 3279.11 0 3359.93 0 2661.54 0 3075.54 0 3335.51 0 3615.98 0 2608.25 0
3291.14 0 2738.75 0 3297.46 0 2329.84 0 1579.09 0 1005.38 1 3467.94 0 2460.84 0 3786.78 0 1697.54 0
1344.75 0 2546.71 0 1044.77 1 1754.39 0 3088.03 0 3190.34 0 1643.03 0 1159.4 0 1594.84 1 2195.37 0
2040.43 0 2288.39 0 1254.77 1 2177.82 0 1432.33 1 2090.93 0 1592.75 1 3649.18 0 1192.09 0 1870.53 0
1344.73 0 3112.17 0 3594.69 0 1256.47 0 1884.62 0 2804.8 0 2397.37 0 3106.19 0 2153.69 0 2901.84 0
1932.5 0 2967.7 0 3742.8 0 2741.32 0 3229.37 0 2955.23 0 3984 0 1764.69 0 3262.91 0 3556.29 0
1371.41 0 1506.34 0 3835.23 0 1017.64 1 2786.11 0 1027.96 1 2705.19 0 1112.11 1 1345.8 1 3224.26 0
3381.09 0 3564.85 0 3860.62 0 2039.35 0 2232.72 0 1755.91 1 2730.88 0 3071.92 0 3859.66 0 2728.11 0
3908.71 0 1900.97 0 2365.91 0 1173.9 1 3046.59 0 3247.21 0 1765.75 1 1851.27 0 3168.86 0 1180.68 1
1126.39 1 3716.19 0 3482.85 0 1177.04 1 2869.67 0 2112.35 0 1259.28 1 2034.07 0 2781.34 0 2650.68 0
1098.68 1 3413.67 0 3832.62 0 1446.92 0 2823.57 0 2964.95 0 3480.61 0 3982.74 0 2223.56 0 2324.61 0
1839.08 0 2816.05 0 2161.21 0 2215.25 0 1829.55 1 3088.54 0 2006.91 0 1895.16 0 3540.52 0 1159.11 1
3753.1 0 2583.6 0 1694.81 0 1800.39 0 2831.79 0 1953.42 0 2326.95 0 3963.79 0 3478.85 0 1445.58 0
1559.44 0 2785.78 0 1677.91 1 2529.97 0 1929.34 0 3347.23 0 2467.97 0 3704.05 0 1370.85 1 1324.15 0
2131.14 0 3558.72 0 3580.39 0 1241.11 1 3914.43 0 2829.92 0 2112.3 0 1990.34 0 1265.65 1 3572.18 0
;
run;
/* Call the binning macro */
%let DSin=Customers;
%let IVVar=Income;
%let DVVar=Default;
%let Method=1;
%let MMax=5;
%let Acc=0.01;
%let DSVarMap=Income_Map;
%BinContVar(&DSin, &IVVar, &DVVar, &Method, &MMax, &Acc, &DSVarMap);
/* Print the binning map dataset */
/* A simple layout */
Proc print data=Income_Map;
run;
/* A more fancy printout */
options linesize=120;
proc print data=Income_Map split='*' ;
var bin LL UL BinTotal;
label bin ='Bin*Number*========='
LL='Lower*Bound*========='
UL='Upper*Bound*========='
BinTotal='Bin*Size*=========';
format LL Comma10.2;
format UL Comma10.2;
format BinTotal Comma10.0;
title 'Mapping rules for binning variable: Income';
run;
/* Apply the mapping scheme */
/* use:
options mprint ;
to see the binning statements in the SAS Log */
%let DSin=Customers;
%let VarX=Income;
%let NewVarX=Income_bin;
%let DSVarMap=Income_map;
%let DSout=Customers_Income_b;
%ApplyMap2(&DSin, &VarX, &NewVarX, &DSVarMap, &DSout);
信用评分开发是基于对申请或交易数据库的抽样。有三种常用的抽样方法:
SAS中proc surveyselect
可用于从数据集中抽取随机样本。宏%RandomSample是surveyselect
的一个简单形式,以方便使用。
可以用宏%RandomSample
从总体中抽取两个随机样本,分别作为开发数据集和验证数据集。但是,无法保证这两个数据集是不相交的。为了从一个总体数据集中抽取两个不相交的样本,提供了宏%R2Partitions,下表是其参数:
在均衡抽样中,从总体中抽取两个样本,每个样本中违约的百分比与初始总体不同。下图表示从规模为N的总体中抽取的两个样本DS1和DS2,其规模分别是N1和N2。
总体中具有违约状态的记录数必须满足抽取两个样本的需要。这被称为一致性条件,其正式表达式如下:
Data Population;
do ID=1 to 1500;
if ID <=300 then DV=1;
else DV=0;
x=ranuni(0);
output;
end;
run;
/* Call the macro */
%let S=Population;
%let IDVar=ID;
%let DV=DV;
/* The Modeling Sample */
%let S1=Modeling;
%let N1=500;
%let P1=0.50;
/* The Validation Sample */
%let S2=Validation;
%let N2=200;
%let P2=0.20;
/* The error variable */
%let Status=;
%B2Partitions(&S,&IDVar,&DV,&S1,&N1,&P1,&S2,&N2,&P2,Status);
/* Display the status variable in the SAS log. */
%put &status;
/* Check the percentage of Bad in samples */
proc freq data=Modeling;
table DV;
run;
proc freq data=Validation;
table DV;
run;
以下表为例,理解如何对均衡样本分配权重
定义一个因子,该因子将映射样本DS1中的2500条记录以代表总体中初始的10000条记录,由此可以计算出样本中标识为违约的记录的权重。
通常要正态化这些值,使其和为1.0,具体的计算公式见下表:
宏%BSWeight计算样本权重,并创建输出变量。宏的参数如下:
应用示例:
Data Population;
do ID=1 to 1500;
if ID <=300 then DV=1; else DV=0;
x=ranuni(0);
output;
end;
drop ID;
run;
Data Modeling;
do ID=1 to 500;
if ID <=250 then DV=1; else DV=0;
x=ranuni(0);
output;
end;
drop ID;
run;
%let PopDS= Population;
%let SDS = Modeling;
%let DVVAr= DV;
%let WTVar=Weight;
%let DSout=Modeling_W;
%BSWeight(&PopDS, &SDs, &DVVar, &WTVar, &DSout);
proc freq data=Modeling_w;
table Weight * DV /norow nocol nopercent ;
run;