Data defines the model by dint of genetic programming, producing the best decile table.


Decile Analysis - the Basic
Bruce Ratner, Ph.D.


decTable
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%let data_in=IN;
%let depvar=Y;
%let indvars=X1 X2 X3;

data &data_in;
input &depvar &indvars wt;
cards;
1 63.28405135 -62.89590924 0.31725 1
1 -7.965165127 9.077917498 0.29397 1
1 -40.8721149 41.85990786 0.40705 1
1 108.8084024 -107.6672824 0.25316 1
1 3.071713061 -2.215322147 0.40705 1
1 44.96645653 -44.18664467 0.25316 1
1 2.328170141 -1.89973146 0.24562 1
1 89.08870743 -88.21705972 0.42732 1
1 30.1080088 -29.0253107 0.24562 1
1 -11.14966201 11.97082199 0.25316 1
1 24.6912264 -23.85538734 0.25316 1
1 33.46889223 -32.68556731 0.40705 1
1 51.82377813 -51.4138173 0.40705 1
1 70.28970224 -69.42221865 0.24562 1
1 -95.85890655 97.00002655 0.40705 1
1 77.53692092 -77.19292134 0.26126 1
0 3.309578275 -3.261180349 0.24562 1
0 10.12748375 -9.549172853 0.25316 1
0 -12.88207239 13.97592671 0.29397 1
0 -17.32877567 18.18516658 0.31111 1
0 -70.59773747 71.24695425 0.31111 1
0 43.27915239 -42.13803238 0.24562 1
0 -7.880514668 8.995154718 0.25316 1
0 40.93399103 -40.09173673 0.25316 1
0 81.07550795 -80.35859121 0.24562 1
0 -7.965165127 9.063100546 0.24562 1
0 36.93492473 -35.95553062 0.28211 1
0 23.23610469 -22.80766601 0.25339 1
0 0 1.141120008 0.24562 1
0 0 0.939629385 0.25316 1
0 81.17218438 -80.76633346 0.24562 1
0 21.67949378 -20.97110166 0.24562 1
0 61.36545177 -60.91557128 0.25316 1
0 61.36545177 -60.95549093 0.31725 1
0 77.90838509 -77.58149603 0.28481 1
0 77.90838509 -77.60466917 0.24562 1
0 77.90838509 -77.08023514 0.32738 1
0 16.48495995 -15.88724129 0.40705 1
0 39.74610442 -38.99089853 0.24562 1
0 30.7499237 -29.94045894 0.24562 1
;
run;

proc logistic data=&data_in nosimple des outest=coef;
model &depvar = &indvars;
freq wt;
run;

proc score data=&data_in predict type=parms score=coef
out=score;
var &indvars;
run;

data score;
set score;
estimate=&depvar.2; run;

data notdot;
set score ;
if estimate ne .;

proc means data=notdot sum noprint;var wt;
output out=samsize (keep=samsize) sum=samsize;
run;

data scoresam (drop=samsize);
set samsize score;
retain n;
if _n_=1 then n=samsize;
if _n_=1 then delete;
run

proc sort data=scoresam;by descending estimate;
run;

data score;
set scoresam;
if estimate ne . then cum_n+wt;
if estimate = . then dec=.;
else dec=floor(cum_n*10/(n+1));
run;

proc summary data=score missing;class dec;
var &depvar wt;
output out=sum_dec sum=sum_can sum_wt;

data sum_dec;
set sum_dec;
avg_can=sum_can/sum_wt;
run;

data avg_rr;
set sum_dec;
if dec=.;
keep avg_can;
run;

data sum_dec1;
set sum_dec;
if dec=. or dec=10 then delete;
cum_n +sum_wt;
r =sum_can;
cum_r +sum_can;
cum_rr=(cum_r/cum_n)*100;
avg_cann=avg_can*100;
run;

data avg_rr;
set sum_dec1;
if dec=9;
keep avg_can;
avg_can=cum_rr/100;
run;

data scoresam;
set avg_rr sum_dec1;
retain n;
if _n_=1 then n=avg_can;
if _n_=1 then delete;
lift=(cum_rr/n);
if dec=0 then decc=' top ';
if dec=1 then decc=' 2 ';
if dec=2 then decc=' 3 ';
if dec=3 then decc=' 4 ';
if dec=4 then decc=' 5 ';
if dec=5 then decc=' 6 ';
if dec=6 then decc=' 7 ';
if dec=7 then decc=' 8 ';
if dec=8 then decc=' 9 ';
if dec=9 then decc='bottom';
if dec ne .;
run;

title1 ' ';
title2' Decile Analysis based on ';
title3" &depvar (RESPONSE) regressed on &indvars ";

proc print data=scoresam d split='*' noobs;
var decc sum_wt r avg_cann cum_rr lift;
label decc='DECILE'
sum_wt ='NUMBER OF*INDIVIDUALS'
r ='NUMBER OF*RESPONDERS'
cum_r ='CUM No. CUSTOMERS w/* RESPONSES'
avg_cann ='RESPONSE *RATE (%)'
cum_rr ='CUM RESPONSE * RATE'
lift =' C U M *LIFT (%)'
;
sum sum_wt r;
format sum_wt r cum_n cum_r comma10.;
format avg_cann cum_rr 5.2;
format lift 3.0;
run;

For more information about this article, call Bruce Ratner at 516.791.3544 or 1 800 DM STAT-1; or e-mail at br@dmstat1.com.
Sign-up for a free GenIQ webcast: Click here.