• 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;
  • 相关阅读:
    一文让你明白Redis持久化
    spring-data-redis 2.0 的使用
    中间自适应布局的5种解法
    php实现只需要一个QQ号就可以获得用户信息
    基于LINUX下的进程管理问题
    【初码干货】记一次分布式B站爬虫任务系统的完整设计和实施
    初码-爬虫系列-文章目录
    初码-阿里云系列-文章目录
    初码-Azure系列-存储队列的使用与一个Azure小工具(蓝天助手)
    初码-Azure系列-记一次MySQL数据库向Azure的迁移
  • 原文地址:https://www.cnblogs.com/suizhixxie/p/10409110.html
Copyright © 2020-2023  润新知