Accelerate your business – Even in a weak Economy

Accelerate Your Business–Even in a Weak Economy

Learn how you can use business intelligence to accelerate your company’s growth, even in this difficult economy.  This free webinar from SAP Business Objects will help you discover how you can become a faster, leaner, more agile business by using BI focused on three core strategies:  Cutting operating expenses and discretionary spending; using technology to eliminate inefficiencies, and giving  first priority to your existing customers.  LEARN MORE…

http://events.businessobjects.com/forms/Q109/road/web/index.php?partner=SMtoday1

 

Here ‘s  a nice webinar to attend if you have time.

Modeling Visualization Macros

Here is a nice SAS Macro from Wensui’s blog at http://statcompute.spaces.live.com/blog/

Its particularly useful for Modelling chaps, I have seen a version of this Macro sometime back which had curves also plotted but this one is quite nice too

SAS MACRO TO CALCULATE GAINS CHART WITH KS

%macro ks(data = , score = , y = );

options nocenter mprint nodate;

data _tmp1;
  set 
&data;
  where &score ~= . and y in (1, 0);
  random = ranuni(1);
  keep &score &y random;
run;

proc sort data = _tmp1 sortsize = max;
  by descending &score random;
run;

data _tmp2;
  set _tmp1;
  by descending &score random;
  i + 1;
run;

proc rank data = _tmp2 out = _tmp3 groups = 10;
  var i;
run;

proc sql noprint;
create table
  _tmp4 as
select
  i + 1       as decile,
  count(*)    as cnt,
  sum(&y)     as bad_cnt,
  min(&score) as min_scr format = 8.2,
  max(&score) as max_scr format = 8.2
from
  _tmp3
group by
  i;

select
  sum(cnt) into :cnt
from
  _tmp4;

select
  sum(bad_cnt) into :bad_cnt
from
  _tmp4;    
quit;

data _tmp5;
  set _tmp4;
  retain cum_cnt cum_bcnt cum_gcnt;
  cum_cnt  + cnt;
  cum_bcnt + bad_cnt;
  cum_gcnt + (cnt – bad_cnt);
  cum_pct  = cum_cnt  / &cnt;
  cum_bpct = cum_bcnt / &bad_cnt;
  cum_gpct = cum_gcnt / (&cnt &bad_cnt);
  ks       = (max(cum_bpct, cum_gpct) – min(cum_bpct, cum_gpct)) * 100;

  format cum_bpct percent9.2 cum_gpct percent9.2
         ks       6.2;
  
  label decile    = ‘DECILE’
        cnt       = ‘#FREQ’
        bad_cnt   = ‘#BAD’
        min_scr   = ‘MIN SCORE’
        max_scr   = ‘MAX SCORE’
        cum_gpct  = ‘CUM GOOD%’
        cum_bpct  = ‘CUM BAD%’
        ks        = ‘KS’;
run;

title "%upcase(&score) KS";
proc print data  = _tmp5 label noobs;
  var decile cnt bad_cnt min_scr max_scr cum_bpct cum_gpct ks;
run;    
title;

proc datasets library = work nolist;
  delete _: / memtype = data;
run;
quit;

%mend ks;    

data test;
  do i = 1 to 1000;
    score = ranuni(1);
    if score * 2 + rannor(1) * 0.3 > 1.5 then y = 1;
    else y = 0;
    output;
  end;
run;

%ks(data = test, score = score, y = y);

/*
SCORE KS              
                                MIN         MAX
DECILE    #FREQ    #BAD       SCORE       SCORE     CUM BAD%    CUM GOOD%        KS
   1       100      87         0.91        1.00      34.25%        1.74%      32.51
   2       100      78         0.80        0.91      64.96%        4.69%      60.27
   3       100      49         0.69        0.80      84.25%       11.53%      72.72
   4       100      25         0.61        0.69      94.09%       21.58%      72.51
   5       100      11         0.51        0.60      98.43%       33.51%      64.91
   6       100       3         0.40        0.51      99.61%       46.51%      53.09
   7       100       1         0.32        0.40     100.00%       59.79%      40.21
 &#
160; 8       100       0         0.20        0.31     100.00%       73.19%      26.81
   9       100       0         0.11        0.19     100.00%       86.60%      13.40
  10       100       0         0.00        0.10     100.00%      100.00%       0.00
*/

Its particularly useful for Modelling , I have seen a version of this Macro sometime back which had curves also plotted but this one is quite nice too.

Here is another example of a SAS Macro for ROC Curve  and this one comes from http://www2.sas.com/proceedings/sugi22/POSTERS/PAPER219.PDF

APPENDIX A
Macro
/***************************************************************/;
/* MACRO PURPOSE: CREATE AN ROC DATASET AND PLOT */;
/* */;
/* VARIABLES INTERPRETATION */;
/* */;
/* DATAIN INPUT SAS DATA SET */;
/* LOWLIM MACRO VARIABLE LOWER LIMIT FOR CUTOFF */;
/* UPLIM MACRO VARIABLE UPPER LIMIT FOR CUTOFF */;
/* NINC MACRO VARIABLE NUMBER OF INCREMENTS */;
/* I LOOP INDEX */;
/* OD OPTICAL DENSITY */;
/* CUTOFF CUTOFF FOR TEST */;
/* STATE STATE OF NATURE */;
/* TEST QUALITATIVE RESULT WITH CUTOFF */;
/* */;
/* DATE WRITTEN BY */;
/* */;
/* 09-25-96 A. STEAD */;
/***************************************************************/;
%MACRO ROC(DATAIN,LOWLIM,UPLIM,NINC=20);
OPTIONS MTRACE MPRINT;
DATA ROC;
SET &DATAIN;
LOWLIM = &LOWLIM; UPLIM = &UPLIM; NINC = &NINC;
DO I = 1 TO NINC+1;
CUTOFF = LOWLIM + (I-1)*((UPLIM-LOWLIM)/NINC);
IF OD > CUTOFF THEN TEST="R"; ELSE TEST="N";
OUTPUT;
END;
DROP I;
RUN;
PROC PRINT;
RUN;
PROC SORT; BY CUTOFF;
RUN;
PROC FREQ; BY CUTOFF;
TABLE TEST*STATE / OUT=PCTS1 OUTPCT NOPRINT;
RUN;
DATA TRUEPOS; SET PCTS1; IF STATE="P" AND TEST="R";
TP_RATE = PCT_COL; DROP PCT_COL;
RUN;
DATA FALSEPOS; SET PCTS1; IF STATE="N" AND TEST="R";
FP_RATE = PCT_COL; DROP PCT_COL;
RUN;
DATA ROC; MERGE TRUEPOS FALSEPOS; BY CUTOFF;
IF TP_RATE = . THEN TP_RATE=0.0;
IF FP_RATE = . THEN FP_RATE=0.0;
RUN;
PROC PRINT;
RUN;
PROC GPLOT DATA=ROC;
PLOT TP_RATE*FP_RATE=CUTOFF;
RUN;
%MEND;

VERSION 9.2 of SAS has a macro called %ROCPLOT http://support.sas.com/kb/25/018.html

SPSS also uses ROC curve and there is a nice document here on that

http://www.childrensmercy.org/stats/ask/roc.asp

Here are some examples from R with the package ROCR from

http://rocr.bioinf.mpi-sb.mpg.de/

 

image

Using ROCR’s 3 commands to produce a simple ROC plot:
pred <- prediction(predictions, labels)
perf <- performance(pred, measure = "tpr", x.measure = "fpr")
plot(perf, col=rainbow(10))

The graphics are outstanding in the R package and here is an example

Citation:

Tobias Sing, Oliver Sander, Niko Beerenwinkel, Thomas Lengauer.
ROCR: visualizing classifier performance in R.
Bioinformatics 21(20):3940-3941 (2005).

 

New Search Engine ?

Here is a new search engine called Kosmix which claims to help make the world more organized. Now I gave it the Google story test which means I compared it’s results to Google’s results for

1) Google / Kosmix

2) Jim Goodnight /Sergey Brin

3) Regression

4) Data Mining

Results were frighteningly good. Some screenshots are below. What Kosmix does is aggregate searches across various platforms like the Net, and adds Images, Videos Results so it looks like a report compiled on specific search word rather than a list of links like Google does.

Take a look.

 

image image

image image

Clearly Kosmix is the winner because it adds Google Search, You Tube search and Google Blog Search results as well to its results. I have talked a long time back on the need for Google to give more customization especially for business research users ( see item 10 b).

Google continues to be a list of Ranked web pages, while Kosmix is a new organized information source.I just hope it does not end up like www.cuil.com which started with a  big hype and is now claiming to be the biggest search engine in the world with the largest index  , but not the biggest users I guess.

http://www.cuil.com/info/features/

Any search engine that places a category of Indian film actors when you search for “Ajay Ohri” can not do too well ! Period.

image

A Farewell to Guns

A 17 yr old teenage German shot and killed 15 people at his former high school and was killed himself. In Alabama ten people are dead including a family that was wiped out. A mentally disturbed ethnic Korean student killed 30 people in Virginia tech before shooting himself. Supporters of guns including the NRA, ex Army types , plain rural hunting people continue to cling to guns and will do more so as the economic environment worsens.

These people abuse the semantics of the American Second Amendment which provided for arms for a militia , but my friend ,teenagers do not constitute militia nor do mentally disturbed students.With the worlds most expensive and powerful army do they still need a militia. While applying to and getting bailouts   from the Government do they still need individual gun rights.

In California an ethic Chinese engineer shot and killed his boss and head of Hr before surrendering. Bad Bosses are nothing new yet this marks a new low in free availability and abuse of weapons.Violence and anger have no creed , or ethnicity.

A gun in the hand of a person untrained in the implications of gun shot wounds is as lethal a weapon like a deadly poison snake whose fangs have been temporarily been trimmed. If you ask a layman to operate surgery without teaching him how to use a scalpel he could do much less damage than semi automatic weapons in immature and still malleable minds , who resort to binges of violence and outbursts.

The gun trade has thrived on the misery of a few victims and the mirth of many supporters. Researchers use billions of dollars to find cures to diseases that kill people, yet the common sense cure for shot gun ,hand gun , automatic domestic guns is missing- Ban these guns. They are of no use in the military at all –hand guns lack effective offensive ranges and they are increasingly killing too many innocent people.

Charlton Heston is dead- and it is time to pry the guns  from his cold dead hands.

A Constitutional Farewell to Ammo

Here is a solution to the latest outbreak of random shootings by young male

shooters –

Dont ban Guns , but regulate the ammunition. Most shooters generally build

up ammunition before going on shooting binges.

If credit history can electronically track each tiny credit purchase, then why

cant an extra variable ot two be added for number of guns purchased in that

social id, previous medical history, previous ammunition used.

Restricting ammunition to say two per hand gun, and two per shot gun per

month , and making new sale of ammunition  dependent on return of old

ammunition is NOT in breach of the Second Amendment- and the militia men

can still technically have arms , correct ? 

 

Whats the flaw with this plan legally ….?

More Ways to get a Scoring Model wrong

I got the following answer from Linkedin groups http://www.linkedin.com/groupAnswers?viewQuestionAndAnswers=&gid=53432&discussionID=1946379&commentID=2213879&goback=.mgr_false_0_DATE.mgr_true_1_DATE.mid_1066685320#commentID_2213879

 

on my Ten Ways to get a Scoring Model Wrong.

  1.  Typo 
  2. Refuse to use central tendency to patch missing values. Instead, assign highest response rate because WOE says so 
  3. Marketing people tell me to force the variable into the model 
  4.  Selection bias 
  5.  Forgot to segment 
  6. Solely rely on data to segment without consulting the biz side 
  7.  Just delete observations with missing values, OK, without studying geometricl boundaries 
  8.  Using oversampling, but refuse to weight it back. That boosts lift, right? Let us do 50-50 
  9. Insist random sampling is sufficient, while stratified sampling is critical 
  10. Binning too much, or two little 
  11. Selecting variables without repeated sampling 
  12. Forgot to exclude numeric customer id from the candidate variables. AND,it pops….Well, both Unica and Kxen accepted it, So I see no problem 
  13. When the same variable is sourced by different vendors, did not look up the scales under the same name. Just combine them 
  14.  Well, SAS Enterprise Miner gave me this model yesterday 
  15. The binary variable is statistically significant, but there are only 27 event=1, out of ~1mm, since only 27 made some purchases.. 
  16. Well, I only have 250 events=1. But I think I can use exact logistic to make it up, all right? I got a PHD in Statistics, Trust me, my professor is OK with it. I just called her. 
  17.  Build two-stage model without Heckman adjustment 
  18. Use global mean over the WHOLE customer base to replace missing value on a much smaller universe/subset. So average networth of a high networth client group has 22% worth only 225K 
  19. I just spent the past two days boosting R-square. Now it is 92. Great. 
  20. Forgot to set descending option in proc logistic in SAS 
  21. I think we should hold out missing values when conducting EDA. 
  22. Without proper separation of ‘treatment and control 
  23. Treat business entities and individuals as equal and mix them in the same universe
  24. Runing clustering without validation 
  25. Running discriminant model without validation. So correct classification rate on development is 89% and that over validation is …35%.(no wonder you finished it in two hours and came here to ask me for a raise) 
  26. Disregard link function in multi-nomil models 
  27. I think this is a better variable: xnew=y*y*y*. It is the top variable dominating others. 
  28. Use standardized coefficient to calculate relative importance, because many people are doing and marketing loves it. 
  29. I tried Goolge Analtyics last Friday. It recommends this variable: click stream density over Thanksgivning weekend, on my web portal, on this item 
  30.  Let us treat this matrix as unary so we can apply Euclidean, since that runs faster and has a lot of optimal properties. It makes our life easier 
  31. Let us use score from that model to boost this model and use score from this model to boost it back. Is that what they call neural nets, Jia? 

Enough?

 

31 Ways to get a model wrong – and Hats off to a fellow mate in suffering -Jia

Coming up – One Way to get a scoring model correct