模型和策略效果衡量常用指标——LIFT提升度
The following article is from 分析与建模 Author xixi
一、什么是lift
Lift是评估一个预测模型是否有效的一个度量;它衡量的是一个模型(或规则)对目标中“响应”的预测能力优于随机选择的倍数,以1为界线,大于1的Lift表示该模型或规则比随机选择捕捉了更多的“响应”,等于1的Lift表示该模型的表现独立于随机选择,小于1则表示该模型或规则比随机选择捕捉了更少的“响应”。维基百科中提升度被解释为“Target response divided by average response”。
二、信用模型中的lift
在模型评估中,我们常用到增益/提升(Gain/Lift)图来评估模型效果,其中的Lift是“运用该模型”和“未运用该模型”所得结果的比值。以信用评分卡模型的评分结果为例,我们通常会将打分后的样本按分数从低到高排序,取10或20等分(有同分数对应多条观测的情况,所以各组观测数未必完全相等),并对组内观测数与坏样本数进行统计。用评分卡模型捕捉到的坏客户的占比,可由该组坏样本数除以总的坏样本数计算得出;而不使用此评分卡,以随机选择的方法覆盖到的坏客户占比,等价于该组观测数占总观测数的比例(分子分母同时乘以样本整体的坏账率)。对两者取累计值,取其比值,则得到提升度Lift,即该评分卡抓取坏客户的能力是随机选择的多少倍。
下表是一个提升表(Lift Table)的示例:
以分数段为横轴,以捕捉到的“坏”占比为纵轴,可绘制出提升图,示例如下:
以分数段为横轴,以提升度为纵轴,可绘制出累计提升图,示例如下:
有了累计提升图,我们就能直观地去比较不同模型或策略给我们带来的区分能力增益程度。
三、SAS code
/*数据集SCORE中包含目标TARGET、分数SCORE、权重WEIGHT*/
/*排序*/
PROCSORTDATA=LIFT.SCORE;
BYSCORE;
RUN;
/*取出分数的deciles,存入宏变量D1~D9*/
PROCUNIVARIATEDATA=LIFT.SCORE;
VARSCORE;
WEIGHTWEIGHT;
OUTPUTOUT=DCL PCTLPTS=102030405060708090PCTLPRE=DC PCTLNAME=L1L2 L3 L4 L5 L6 L7 L8 L9;
RUN;
PROCSQLNOPRINT;
SELECTDCL1,DCL2,DCL3,DCL4,DCL5,DCL6,DCL7,DCL8,DCL9 INTO:D1,:D2,:D3,:D4,:D5,:D6,:D7,:D8,:D9FROM DCL;
QUIT;
/*将decile对应到数据集中*/
DATADS1;
SETLIFT.SCORE;
IFSCORE<&D1.THENDECILE=1;
ELSEIF SCORE<&D2.THEN DECILE=2;
ELSEIF SCORE<&D3.THEN DECILE=3;
ELSEIF SCORE<&D4.THEN DECILE=4;
ELSEIF SCORE<&D5.THEN DECILE=5;
ELSEIF SCORE<&D6.THEN DECILE=6;
ELSEIF SCORE<&D7.THEN DECILE=7;
ELSEIF SCORE<&D8.THEN DECILE=8;
ELSEIF SCORE<&D9.THEN DECILE=9;
ELSEDECILE=10;
RUN;
/*统计各分段中的观测数、坏个数*/
DATADS2;
SETDS1;
RETAINN 0 BAD 0;
BYDECILE;
IFFIRST.DECILE THENDO;
N=0;BAD=0;
END;
IFUPCASE(TARGET) IN ('B') THENBAD=BAD+WEIGHT;
N=N+WEIGHT;
IFLAST.DECILE THENOUTPUT;
DROPTARGET WEIGHT SCORE;
RUN;
/*计算总的样本数、坏样本数*/
PROCSQL;
SELECTSUM(BAD) INTO:TTL_BAD FROMDS2;
SELECTSUM(N) INTO:TTL_N FROMDS2;
QUIT;
/*生成Lift Table*/
DATADS3;
SETDS2;
MODEL_CAPTURE=BAD/&TTL_BAD.;
RANDOM_CAPTURE=N/&TTL_N.;
RETAINMODEL_CAPTURE_CUM 0 RANDOM_CAPTURE_CUM 0;
MODEL_CAPTURE_CUM=MODEL_CAPTURE_CUM+MODEL_CAPTURE;
RANDOM_CAPTURE_CUM=RANDOM_CAPTURE_CUM+RANDOM_CAPTURE;
LIFT=MODEL_CAPTURE_CUM/RANDOM_CAPTURE_CUM;
RUN;
/*生成Lift Chart*/
GOPTIONSRESET=ALL BORDER;
PROCSGPLOTDATA=DS3;
TITLE"CUMULATIVE LIFT CHART";
SERIESX=DECILE Y=LIFT;
RUN;
PROCSGPLOTDATA=DS3;
TITLE"LIFT CHART";
VBARDECILE/RESPONSE=RANDOM_CAPTURE TRANSPARENCY=0.5;
VBARDECILE/RESPONSE=MODEL_CAPTURE TRANSPARENCY=0.4;
RUN;
来源|分析与建模
作者|xixi
更多精彩,戳这里:
阅读原文,即可报名