SAS学习 day10

逻辑回归

基本流程

模型开发阶段:数据处理 ——变量筛选和压缩——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;

 

数据填缺

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

 

 

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)

如何压缩

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

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

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

 

响应概率相近的归为一类

 聚类分析

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

 

需要把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;

 

 

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

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

proc cluster和proc tree一般同时使用

 

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

 

posted @ 2019-02-20 20:47  碎纸屑  阅读(342)  评论(0编辑  收藏  举报