分类模型的性能评估——以SASLogistic回归为例(3):Lift
和Gain
跟ROC类似,Lift(提升)和Gain(增益)也⼀样能简单地从以及Sensitivity、Specificity等信息中推导⽽来,也有跟⼀个baline model的⽐较,然后也是很容易画出来,很容易解释。以下先修知识,包括所需的数据集:
1.
2.
⼀些准备
豆芽儿
说,混淆矩阵(Confusion Matrix)是我们永远值得信赖的朋友:
预测
10
实1d, True Positive c, Fal Negative c+d, Actual Positive
际0b, Fal Positive a, True Negative a+b, Actual Negative
perfume是什么意思b+d, Predicted Positive a+c, Predicted Negative
⼏个术语需要随时记起:
1. Sensitivity(覆盖率,True Positive Rate)=正确预测到的正例数/实际正例总数clash of the titans
Recall (True Positive Rate,or Sensitivity) =true positive/total actual positive=d/c+d
2. PV+ (命中率,Precision, Positive Predicted Value) =正确预测到的正例数/预测正例总数
Precision (Positive Predicted Value, PV+) =true positive/ total predicted positive=d/b+d
3. Specificity (负例的覆盖率,True Negative Rate) =正确预测到的负例个数/实际负例总数
Specificity (True Negative Rate) =true negative/total actual negative=a/a+b
⾸先记我们valid数据中,正例的⽐例为pi1(念做pai 1),在我们的例⼦中,它等于c+d/a+b+c+d=0.365。单独提出pi1,是因为有时考虑oversampling后的⼀些⼩调整,⽐如正例的⽐例只有0.001,但我们把它调整为0.365(此时要在SAS proc logistic回归的score语句加⼀个priorevent=
0.001选项)。本⽂不涉及oversampling。现在定义些新变量:
Ptp=proportion of true positives=d/a+b+c+d=(c+d/a+b+c+d)*(d/c+d) =pi1* Sensitivity,正确预测到的正例个
数占总观测值的⽐例
Pfp=proportion of fal positives=b/a+b+c+d= (a+b/a+b+c+d)*(b/a+b) = (1-c+d/a+b+c+d)*(1-a/a+b) = (1-
pi1)*(1- Specificity) ,把负例错误地预测成正例的个数占总数的⽐例
Depth=proportion allocated to class 1=b+d/a+b+c+d=Ptp+Pfp,预测成正例的⽐例
PV_plus=Precision (Positive Predicted Value, PV+) = d/b+d=Ptp/depth,正确预测到的正例数占预测正例总数的
⽐例
Lift= (d/b+d)/(c+d/a+b+c+d)=PV_plus/pi1,提升值,解释见下节。
以上都可以利⽤valid_roc数据计算出来:
%let pi1=0.365;
data valid_lift;
t valid_roc;
cutoff=_PROB_;
Ptp=&pi1*_SENSIT_;
Pfp=(1-&pi1)*_1MSPEC_;
depth=Ptp+Pfp;
PV_plus=Ptp/depth;
lift=PV_plus/&pi1;
keep cutoff _SENSIT_ _1MSPEC_ depth PV_plus lift;
run;
先前我们说ROC curve是不同阈值下Sensitivity和1-Specificity的轨迹,类似,
Lift chart是不同阈值下Lift和Depth的轨迹
招生合作Gains chart是不同阈值下PV+和Depth的轨迹行尸走肉第四季3
Lift
Lift = (d/b+d)/(c+d/a+b+c+d)=PV_plus/pi1),这个指标需要多说两句。它衡量的是,与不利⽤模型相⽐,模型的预测能⼒“变好”了多少。不利⽤模型,我们只能利⽤“正例的⽐例是c+d/a+b+c+d”这个样本信息来估计正例的⽐例(baline model),⽽利⽤模型之后,我们不需要从整个样本中来挑选正例,只需要从我们预测为正例的那个样本的⼦集(b+d)中挑选正例,这时预测的准确率为d/b+d。
显然,lift(提升指数)越⼤,模型的运⾏效果越好。如果这个模型的预测能⼒跟baline model⼀样,那么d/b+d就等于
c+d/a+b+c+d(lift等于1),这个模型就没有任何“提升”了(套⼀句⾦融市场的话,它的业绩没有跑过市场)。这个概念在数据库营销中⾮常有⽤,举个:
⽐如说你要向选定的1000⼈邮寄调查问卷(a+b+c+d=1000)。以往的经验告诉你⼤概20%的⼈会把填好的问卷寄回给你,即1000⼈中有200⼈会对你的问卷作出回应(respon,c+d=200),⽤统计学的术语,我们说baline respon rate是
20%(c+d/a+b+c+d=20%)。
如果你现在就漫天邮寄问卷,1000份你期望能收回200份,这可能达不到⼀次问卷调查所要求的回收率,⽐如说⼯作⼿册规定邮寄问卷回收率要在25%以上。
通过以前的问卷调查,你收集了关于问卷采访对象的相关资料,⽐如说年龄、教育程度之类。利⽤这些数据,你确定了哪类被访问者对问卷反应积极。假设你已经利⽤这些过去的数据建⽴了模型,这个模型把这1000⼈分了类,现在你可以从你的千⼈名单中挑选出反应最积极的100⼈来(b+d=100),这10%的⼈的反应率 (respon rate)为60%(d/b+d=60%,d=60)。那么,对这100⼈的群体(我们称之为Top 10%),通过运⽤我们的模型,相对的提升(lift value)就为60%/20%=3;换句话说,与不运⽤模型⽽随机选择相⽐,运⽤模型⽽挑选,效果提升了3倍。
colour怎么读
上⾯说lift chart是不同阈值下Lift和Depth的轨迹,先画出来:
symbol i=join v=none c=black;
proc gplot data=valid_lift;
plot lift*depth;
run; quit;
上图的纵坐标是lift,意义已经很清楚。横坐标depth需要多提⼀句。以前说过,随着阈值的减⼩,更多的客户就会被归为正例,也就是depth(预测成正例的⽐例)变⼤。当阈值设得够⼤,只有⼀⼩部分观测值会归为正例,但这⼀⼩部分(⼀⼩撮)⼀定是最具有正例特征的观测值集合(⽤上⾯数据库营销的例⼦来说,这⼀部分⼈群对邮寄问卷反应最为活跃),所以在这个depth下,对应的lift值最⼤。
同样,当阈值设定得⾜够的⼩,那么⼏乎所有的观测值都会被归为正例(depth⼏乎为1)——这时分类的效果就跟baline model差不多了,相对应的lift值就接近于1。
⼀个好的分类模型,就是要偏离baline model⾜够远。在lift图中,表现就是,在depth为1之前,lift⼀直保持较⾼的(⼤于1的)数值,也即曲线⾜够的陡峭。
/*注:在⼀些应⽤中(⽐如),会根据分类模型的结果,把样本分成10个数⽬相同的⼦集,每⼀个⼦集称为⼀个decile,其中第⼀个decile 拥有最多的正例特征,第⼆个decile次之,依次类推,以上lift和depth组合就可以改写成lift和decile的组合,也称作lift图,含义⼀样。刚才提到,“随着阈值的减⼩,更
多的客户就会被归为正例,也就是depth(预测成正例的⽐例)变⼤。当阈值设得够⼤,只有⼀⼩部分观测值会归为正例,但这⼀⼩部分(第⼀个decile)⼀定是最具有正例特征的观测值集合。”*/
Gains
葡萄的英文单词Gains (增益) 与 Lift (提升)相当类似:Lift chart是不同阈值下Lift和Depth的轨迹,Gains chart是不同阈值下PV+和Depth的轨迹,⽽PV+=lift*pi1= d/b+d(见上),所以它们显⽽易见的区别就在于纵轴刻度的不同:
conrvative
symbol i=join v=none c=black;
proc gplot data=valid_lift;
plot pv_plus*depth;
run; quit;
上图阈值的变化,含义与lift图⼀样。随着阈值的减⼩,更多的客户就会被归为正例,也就是depth(预测成正例的⽐例,b+d/a+b+c+d)变⼤(b+d变⼤),这样PV+(d/b+d,正确预测到的正例数占预测正例总数的⽐例)就相应减⼩。当阈值设定得⾜够的⼩,那么⼏乎所有的观测值都会被归为正例(de
pth⼏乎为1),那么PV+就等于数据中正例的⽐例pi1了(这⾥是0.365。在Lift那⼀节⾥,我们说此时分类的效果就跟baline model差不多,相对应的lift值就接近于1,⽽PV+=lift*pi1。Lift的baline model是纵轴上恒等于1的⽔平线,⽽Gains的baline model是纵轴上恒等于pi1的⽔平线)。显然,跟lift 图类似,⼀个好的分类模型,在阈值变⼤时,相应的PV+就要变⼤,曲线⾜够陡峭。
/*注:我们⼀般看到的Gains Chart,图形是往上⾛的,咋⼀看跟上⽂相反,其实道理⼀致,只是坐标选择有差别,不提。*/
总结和下期预告:K-S
snookered以上提到的ROC、Lift、Gains,都是基于混淆矩阵及其派⽣出来的⼏个指标(Sensitivity和Specificity等等)。如果愿意,你随意组合⼏个指标,展⽰到⼆维空间,就是⼀种跟ROC平⾏的评估图。⽐如,你plot Sensitivity*Depth⼀把,就出⼀个新图了,——很不幸,这个图叫做Lorentz Curve(劳伦兹曲线),不过你还可以尝试⼀下别的组合,然后凑⼀个合理的解释。
Gains chart是不同阈值下PV+和Depth的轨迹(Lift与之类似),⽽ROC是nsitivity和1-Specificity的对应,前⾯还提
嘉华培训怎么样
到,Sensitivity(覆盖率,True Positive Rate)在欺诈监控⽅⾯更有⽤(所以ROC更适合出现在这个场合),⽽PV+在数据库营销⾥⾯更有⽤(这⾥多⽤Gains/Lift)。
混淆矩阵告⼀段落。接下来将是K-S(Kolmogorov-Smirnov)。参考资料同。