逻辑回归

基本流程

模型开发阶段:数据处理 ——变量筛选和压缩——logit图——模型开发

模型验证:数据处理——误分类矩阵——ROC图——模型比较——模型确认

模型测试:收益矩阵——打分——决策

模型实施:

数据采样:

1、总体已知,反应数据过少,保留所有反应数据,使得反应数据在采样后的数据集占有一定的比例

2、总体未知,知道反应的先验概率  注意对采样数据的概率调整

重点看是否有缺失

data develop;
set lg.develop;  将数据目录转移到work下
run;

 proc contents data=develop;   展示所有变量名称
 run;


 %let inputs=ACCTAGE DDA DDABAL DEP DEPAMT CASHBK
 CHECKS DIRDEP NSF NSFAMT PHONE TELLER
 SAV SAVBAL ATM ATMAMT POS POSAMT CD
 CDBAL IRA IRABAL LOC LOCBAL INV
 INVBAL ILS ILSBAL MM MMBAL MMCRED MTG
 MTGBAL CC CCBAL CCPURC SDB INCOME
 HMOWN LORES HMVAL AGE CRSCORE MOVED
 INAREA;


 %put &inputs;
 proc means data = develop n nmiss mean min max;  看变量信息  缺失值个数
 var &inputs;    连续变量的处理
 run;

 

 

 分类变量的处理

proc freq data = develop;
tables ins branch res;
run;

 

数据填缺

在数据填缺后,保留原有变量和缺失向量进入模型

SAS学习 day10

 

 

proc print data=develop(obs=30);
   var ccbal ccpurc income hmown;
run;

/*创建缺失变量指示器*/
data develop1(drop=i);
   set develop;
   /* name the missing indicator variables */
   array mi{*} MIAcctAg MIPhone MIPOS MIPOSAmt 
  缺失变量的  数组    MIInv MIInvBal MICC MICCBal 
               MICCPurc MIIncome MIHMOwn MILORes
               MIHMVal MIAge MICRScor;
   /* select variables with missing values */
   array x{*} acctage phone pos posamt 
              inv invbal cc ccbal
              ccpurc income hmown lores 
              hmval age crscore;
   do i=1 to dim(mi);
      mi{i}=(x{i}=.);循环如果为空 赋值为1
   end;
run;

/*输入缺失值*/
proc stdize data=develop1  
            reponly 
            method=median  中位数填缺
            out=imputed;
   var &inputs;
run;

proc print data=imputed(obs=12);
   var ccbal miccbal ccpurc miccpurc 
       income miincome hmown mihmown;
run;

 

 属性变量压缩

 1、变成哑变量:变量水平较少时使用

2、变成连续变量:WOE  (银行信用卡)

3、压缩属性值:卡方统计量 

 WOE:表示某一变量(通常已经离散化)中某一属性的预测力,WOE在变量属性中的变动趋势形成变量的

 预测力。变量的预测力用IV(information value)度量;

假设目标变量只有“好”和“坏”两种,则: WOE = LN(好的分布/坏的分布)

其中 好的分布 =好的个数/总好的个数 = pi/p

 坏的分布 = 坏的个数/总坏的个数 = (1-pi)/(1-p)

SAS学习 day10

SAS学习 day10

如何压缩

求各分行对响应变量的响应概率

proc means data = imputed noprint nway;
class branch;
var ins;
output out = level mean=prop;
run;

  proc print data=level;
  run;   打印出来

 

SAS学习 day10

响应概率相近的归为一类

 聚类分析

proc cluster data=level method=ward
  outtree = fortree;
  freq _freq_;  加上频数权重
  var prop;  对prop进行聚类
  id branch;
run;

 SAS学习 day10

需要把rsquare作为惩罚项加进来

计算branch和ins总的卡方值

proc freq data = imputed noprint;
table branch*ins /chisq;   预测变量 *响应变量y 
output out=chi(keep=_pchi_) chisq;
run;

 

 把rsquare作为惩罚项加进来 计算最好的分类

data cutoff;
   if _n_ = 1 then set chi;
   set cluster;
   chisquare=_pchi_*rsquared; 总的卡方*rsquared
   degfree=numberofclusters-1;
   logpvalue=logsdf('CHISQ',chisquare,degfree); 加入了一个自由度的惩罚项
run;

 

 SAS学习 day10

画图来判断  取抛物线最低端

proc plot data=cutoff;
   plot logpvalue*numberofclusters/vpos=30;
run; quit;

SAS学习 day10

proc cluster和proc tree一般同时使用

 SAS学习 day10

proc tree data=fortree h=rsq
          nclusters=&ncl out=clus;
   id branch;
run;

 

相关文章: