1

开发信用风险记分卡过程的第一步是评估哪些变量是可预测的。

为此,计算变量的信息值。在 Excel 中非常简单:信息值是 iv*1000 的总和。iv=woe*(%Goods-%Bads) woe=ln(%Goods/%Bads)

因此,在下面的示例中,我的变量有 3 个值 (1,2,3)。根据显示的分布,信息值计算为 22.738。

属性 % 坏品占总数 % 商品占总祸害 iv 1 59% 66% 0.114653893 0.008 2 36% 30% -0.168842887 0.009 3 5% 4% -0.33749397 0.005 总计 100% 100% 22.738

在构建记分卡时,我将查看 100 到 300 个变量之间的任何变量,以找到最具预测性的变量。因此需要一个宏。理想情况下,我还希望自动将诸如收入之类的连续变量带入例如 10 个相等的带中,以便信息值更有意义。

我在 SAS 中有一些代码来执行上述操作(但是,自动绑定是单独完成的)。我开始将其转换为 SPSS 语言,但我无法理解如何替换 CALL SYMPUT 行。我希望有人可以轻松查看 SAS 代码并将其转换为 SPSS。

这是SAS代码。

/* calculating total values for goods, bads and total */
/* the values are output to a data set and called later in a macro */

PROC MEANS DATA=test NOPRINT MAXDEC=4;              
VAR GOOD BAD ;                        

OUTPUT OUT=TOTALS SUM = GTC BTC ;              
RUN;

DATA TOTALS;                                              
SET TOTALS;                                              

TTC = SUM(OF GTC BTC);                                

CALL SYMPUT('GTC',GTC);                                   
CALL SYMPUT('BTC',BTC);                                   
CALL SYMPUT('TTC',TTC); 
run;

/* Calculation of information value */

%macro infov(var);

PROC SUMMARY DATA=test;                        
CLASS &var;                                        
VAR GOOD BAD ;                                        
OUTPUT OUT=RESULTS SUM=GC BC;                             
RUN;

DATA RESULTS;                                            
SET RESULTS;                                             
BY &var;                                               

IF _TYPE_=1;                                             

IF GC=. THEN GC=0;                                      
IF GC NE 0 THEN GP= GC/&GTC*100;                        
ELSE GP=0;                                              
GCP + GP;                                               

IF BC=. THEN BC=0;                                      
IF BC NE 0 THEN BP= BC/&BTC*100;             
ELSE BP=0;                                   
BCP + BP;                                    

format iv&var 5.2;                          
iv&var=0;
IV&var=(GP-BP)*log(GP/BP);

run; 

PROC MEANS DATA=results NOPRINT MAXDEC=4;              
VAR iv&var;                        
OUTPUT OUT=iv&var SUM = ivTC&var;              
RUN;

DATA IV&VAR (KEEP = &VAR); SET IV&VAR; 
RENAME IVTC&VAR=&VAR;
RUN;


%mend infov;
%infov(app_1_age);
%infov(app_1_employment_status);
%infov(app_1_marital_status);



DATA ALL; MERGE IV:;
RUN;

PROC TRANSPOSE DATA=ALL OUT=ALL;  RUN;
DATA ALL; SET ALL; RENAME COL1=iv _name_=Variable; RUN;
PROC SORT DATA=ALL;
BY DESCENDING iv;
RUN; 
PROC PRINT; 
title 'Information Value';RUN;

谢谢你。伊丽莎白

4

1 回答 1

1

SPSS Statistics 中类似的基本功能是用于创建宏定义的 DEFINE 命令,但通过使用 Python 可编程性,您将获得更多的灵活性和强大的功能。Python Essentials 可通过 SPSS 社区网站 (www.ibm.com/developerworks/spssdevcentral) 免费下载,对于 Statistics V21,可从您下载 Statistics 本身的站点免费下载。

从同一个站点,您可以从书籍和文章部分下载编程和数据管理书籍。它展示了许多在 SPSS 上下文中使用该技术的示例。完整的 api 文档可从 IBM Info Center 获得,该站点已在站点上添加了书签。

甚至可以使用 Python 可编程性来创建宏,以便以后的代码可以使用内置的宏工具。

HTH,乔恩·派克

于 2013-05-20T17:28:00.273 回答