跟ROC类似,Lift(提升)和Gain(增益)也一样能简单地从以前的ConfusionMatrix以及Sensitivity、Specificity等信息中推导而来,也有跟一个baselinemodel的比较,然后也是很容易画出来,很容易解释。以下先修知识,包括所需的数据集:
- 分类模型的性能评估——以SAS Logistic回归为例(1): 混淆矩阵
- 分类模型的性能评估——以SAS Logistic回归为例(2): ROC和AUC
一些准备
说,混淆矩阵(Confusion Matrix)是我们永远值得信赖的朋友:
预测 | ||||
1 | 0 | |||
实 | 1 | d, True Positive | c, False Negative | c+d, Actual Positive |
际 | 0 | b, False Positive | a, True Negative | a+b, Actual Negative |
b+d, Predicted Positive | a+c, Predicted Negative |
几个术语需要随时记起:
1.Sensitivity(覆盖率,TruePositive Rate)=正确预测到的正例数/实际正例总数
Recall (True Positive Rate,or Sensitivity) =true positive/totalactual positive=d/c+d
2. PV+ (命中率,Precision,PositivePredicted Value) =正确预测到的正例数/预测正例总数
Precision (Positive Predicted Value, PV+) =true positive/ totalpredicted positive=d/b+d
3.Specificity(负例的覆盖率,TrueNegative Rate) =正确预测到的负例个数/实际负例总数
Specificity (True Negative Rate) =true negative/total actualnegative=a/a+b
首先记我们valid数据中,正例的比例为pi1(念做pai1),在我们的例子中,它等于c+d/a+b+c+d=0.365。单独提出pi1,是因为有时考虑oversampling后的一些小调整,比如正例的比例只有0.001,但我们把它调整为0.365(此时要在SASproclogistic回归的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 false 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 class1=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;
datavalid_lift;
set 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的轨迹