分类算法评价准则

1 分类算法评价准则

分类评价准则有Recall, Precision, ROC,AUC, Lift 曲线,KS曲线等。

1.1 基础指标

为了描绘的简单,在此给出一个实例:
Table 3.1 样例图

index Score true label Predict label index Score true label Predict label
1 0.9 T T 11 0.4 T N
2 0.8 T T 12 0.39 N N
3 0.7 N T 13 0.38 T N
4 0.6 T T 14 0.37 N N
5 0.55 T T 15 0.36 N N
6 0.54 T T 16 0.35 N N
7 0.53 N T 17 0.34 T N
8 0.52 N T 18 0.33 N N
9 0.51 T T 19 0.3 T N
10 0.505 N T 20 0.1 N N

假设有一个样本总数为20的数据集,实际样例中,正例和负例的比例为1:1
为了简便说明,在这里,以2分类为例。

1.1.1 混淆矩阵

在2分类问题中,预测值跟实际值有4种组合情况:

预测
1 0
实际 1 TP FN(伪阴性) Sensitivity=TP/(TP+FN)
0 FP(伪阳性) TN Specificity=TN/(FP+TN)
合计 Precision=TP/(TP+FP) (Positive predictive value, PPV) NPV =TN/(FN+TN) (Negative predictive value, NPV)

说明:
TP: 实际为正,预测也为正
FN(伪阴性):预测为负例,实际为正例
FP(伪阳性):预测为正例,实际为反例
TN: 实际为反例,预测为反例

1.1.2 基本公式

  • True Positive Rate (TPR真正率): 正样本中被预测对比例,也称之为敏感度(Sensitivity)
    TPR=TPTP+FNTPR =\frac{TP}{TP+FN}
  • False Negative Rate(FNR假负率):正样本被预测错的比例
    FNR=FNTN+FNFNR =\frac{FN}{TN+FN}
  • False Positive Rate(FPR假正率):负样本被预测错的比例
  • FPR=FPTN+FPFPR =\frac{FP}{TN+FP}
  • True Negative Rate(TNR真负率):负样本被预测对的比例,也称之为特异度(Specificity)
    TNR=TNTN+FPTNR =\frac{TN}{TN+FP}
  • Positive predictive value(PPV)
    PPV=TPTP+FPPPV =\frac{TP}{TP+FP}
  • Negative predictive value (NPV)
    NPV=TNTN+FNNPV =\frac{TN}{TN+FN}
  • Accuracy(准确率):就是精度
    Accuracy=TP+TNTP+FP+TN+FNAccuracy =\frac{TP+TN}{TP+FP+TN+FN}
  • Average per-class accuracy(平均准确率):每个类别下的准确率的算术平均

averageaccuracy=TPTP+FN+TNTN+FP2average_accuracy =\frac{\frac{TP}{TP+FN}+\frac{TN}{TN+FP}}{2}

  • Balanced Error Rate (BER)
    BER=FNTP+FN+FPTN+FP2BER =\frac{\frac{FN}{TP+FN}+\frac{FP}{TN+FP}}{2}

1.1.3 Recall & TPR & Precision

(1) Recall Recall,召回率,也称之为查全率

Recall=TPTP+FN(Sensitivity)Recall = \frac{TP}{TP+FN}(也叫Sensitivity)
TPR=TPTP+FNTPR =\frac{TP}{TP+FN}
从形式上看,Recall和TPR的公式是一样的。二者描绘的都是,预测为正例并且实际为正例的样本数/实际为正例的样本数(所有的正例中,有多少实际为正例的样本被挑中)。从定义上看,只要预测到了尽可能多的正例,Recall就会越大,那么所需要查找的正例也就越完全,也就是所谓的查全率。
观察Table 3.1 样例图,其中:

TP=6 FN=4
FP=4 TN=6
$$Recall =\frac{TP}{TP+FN}=\frac{6}{6+4}$$

那么仅观察Recall这一个指标会不会有什么问题呢?
通过公式,我们可以看出,Recall的分母是一个定值,只和原始数据的真实label有关,为了使Recall越大,只需要使得分子越大,那么把所有的负例预测成正例这事就解决了,从直观上感觉,这事儿,好像不太对。例如:给癌症分类时,把所有未患癌症的健康人,诊断为癌症,这会引起患者严重的心理和生理不适。
所以引进了准确率这个概念

(2) Precision

Precision精确率,也叫查准率,衡量的是,选中的正例中,真正正例的占比。通俗的来讲,就是预测为正的样例中,真正为正的样例占得比例,公式为:
Precision=TP(TP+FP) Precision = \frac {TP} { (TP + FP)}
依据Table 3.1 样例图,有
KaTeX parse error: Expected '}', got 'EOF' at end of input: …+FP\frac{6}{10}

(3) P-R曲线

P-R曲线,是以Recall 为横轴,Precision为纵轴绘制的曲线。它直观的显示了学习器在样本总体上的查全率和查准率。在进行比较时,若一个学习器的P-R图,能被另一个P-R图包住,则断言,后者优于前者。

分类算法评价准则

如图,学习器A优于B,而A和B的性能难以度量,只能在具体的查全率或者查准率上进行度量,为了综合评价查全率和查准率的关系,人们设计出了平衡点(Break-Even Point, BEP), BEP即是y=x与P-R曲线相交的点(“查准率=查全率”的数值),但BEP还是过于简单了一些,于是便有了F1度量。
(4) F1度量
F1是基于查全率和查准率的一个调和平均数: 1F1=1P+1R\frac{1}{F1}=\frac{1}{P}+\frac{1}{R}
F1=2PRP+RF1=\frac{2*P*R}{P+R}

在实际项目中,由于对查准率和查全率侧重不同,如在地震预测中,本着宁可错杀一千,也不可放过一个的原则,更加注重查全率,为了能让F1公示表达出对P和R的不同偏好,引进 值,定义如下:
Fb=(1+b2)PRb2P+RF_b=\frac{(1+b^2)*P*R}{b^2*P+R}

b=1b=1,退化为标准的F1, 当b>1b>1 对查全率的影响更大, 对查准率影响更大

1.1.4 ROC 曲线

根据预测概率(得分)由大到小排序作为阈值,可分割为不多于样本个数n个阈值。将这n个Recall和FPR把这些点连成线即为ROC曲线。
TPR=TPTP+FN(Sensitivity)TPR =\frac{TP}{TP+FN} (也叫Sensitivity)
FPR=FPFP+F=TN(1Specificity)FPR =\frac{FP}{FP+F=TN} (也叫1-Specificity)

(1-Specificity)
其中 横轴为FPR, 纵轴为TPR
分类算法评价准则

观察Table 3.1 样例图,对概率值依次进行descending排序。假设以score(index=1)=0.9为阈值,大于0.9为正样本,小于0.9为负样本,按照概率值划分,可得 FPR 和TPR,依次类推,当以score (index=2)=0.8时,也可计算FPR 和TPR,如此不断的进行计算,可得如下表:
Table 2 TPR-FPR 表

index Score FPR TPR index Score FPR TPR
1 0.9 0 0.1 11 0.4 0.4 0.7
2 0.8 0 0.2 12 0.39 0.5 0.7
3 0.7 0.1 0.2 13 0.38 0.5 0.8
4 0.6 0.1 0.3 14 0.37 0.6 0.8
5 0.55 0.1 0.4 15 0.36 0.7 0.8
6 0.54 0.1 0.5 16 0.35 0.8 0.8
7 0.53 0.2 0.5 17 0.34 0.8 0.9
8 0.52 0.3 0.5 18 0.33 0.9 0.9
9 0.51 0.3 0.6 19 0.3 0.9 1
10 0.505 0.4 0.6 20 0.1 1 1

将表中数据绘制成图,以FPR为横轴,以TPR为纵轴,则:

分类算法评价准则
ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。

(1) AUC

AUC(Area under Curve):ROC曲线下的面积,介于0.1和1之间。AUC作为数值可以直观的评价分类器的好坏,值越大越好。AUC = 1 ,完美分类,对应于ROC可以完全做到(1,1)的点。0.5<AUC<1,优于随机猜测。

AUC的物理意义是任取一个正例和任取一个负例,正例排序在负例之前的概率(AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类)。AUC反应的是分类器对样本的排序能力。
注意: AUC对样本类别是否均衡并不敏感,这也是不均衡样本通常用AUC评价分类器性能的一个原因。
参考链接
[1] https://blog.csdn.net/chocolate_chuqi/article/details/81162244
[2] https://www.cnblogs.com/dlml/p/4403482.html
[3] https://www.cnblogs.com/futurehau/p/6109772.html

1.1.5 KS曲线

KS(Kolmogorov-Smirnov, KS)值越大,表示模型能够将正、负客户区分开的程度越大。KS值的取值范围是[0,1]
KS指标衡量的是好坏样本累计分部之间的差值。好坏样本累计差异越大,KS指标越大,那么模型的风险区分能力越强。
分类算法评价准则

KS是根据预测概率(由大到小排序)作为阈值,横轴为0到1的阈值,纵轴分别绘制两条曲线,一条是TPR,另一条是FPR,然后在两条曲线分隔最开的地方,横轴对应的就是最好的阈值(KS值)。如上图对应最好的KS值是0.42。
KS的计算步骤如下:
i. 按照分类模型返回的概率降序排列 ,也可以直接是数据,根据某一阈值判断为1或0即可
ii. 把0-1之间等分N份,等分点为阈值,计算TPR、FPR (可以将每一个都作为阈值)
iii. 对TPR、FPR描点画图即可 (以10%*k(k=1,2,3,…,9)为横坐标,分别以TPR和FPR的值为纵坐标,就可以画出两个曲线,这就是KS曲线。)
iv. KS值即为Max(TPR-FPR)
参考链接
[1] https://blog.csdn.net/sinat_30316741/article/details/80018932
[2]https://blog.csdn.net/u013421629/article/details/78217498
[3] AUC的计算方法可参考周志华的西瓜书,或者链接:https://blog.csdn.net/u011331731/article/details/72834115

1.1.6 Lorenz 曲线

lorenz曲线的横轴对应的是正例集百分比(score值降序排序,对应的样本比例),也就是:将样本的预测为1的概率从大到小排序后,取前百分之几。通常会简化成十分位点,0%, 10%,20%, …, 90%, 100%。而曲线的纵轴其实就是相对应的TPR
TPR=TPTP+FNTPR=\frac{TP}{TP+FN}
分类算法评价准则
TPR=TPTP+FN=1320=65%TPR=\frac{TP}{TP+FN}=\frac{13}{20}=65\%

形象地说,就是我们面对着一群人(1000个),其中有20是坏人,我们的目标就是抓坏人。通过模型计算,我们把这堆人按照可能是坏人的概率从大到小地排序,假设取某个阈值,按照阈值划分,大于阈值的为坏人,小于阈值的为好人,然后按照该阈值取出坏人数(100人),假设这100人中,实际只有13个坏人(因为这100人的是坏人的概率比较高),也就是说我们只抓取10%的样本,但是抓到了65%的目标。

从lift的角度也可以很好地理解这种提升效果,而lorenz则更形象地展示了这种投入产出比的含义。
伦兹曲线的本意是描述社会财富的不平均分配。百度的解释:洛伦兹曲线(Lorenz curve),就是在一个总体(国家、地区)内,以最贫穷的人口计算起一直到最富有人口的人口百分比对应各个人口百分比的收入百分比的点组成的曲线(需要逆序排序。)
换一种更通俗的说法,这就是20/80原则——20%的人占据了80%的财富。lorenze曲线体现了这一点,通常是很早(20%)就达到比较高的水平(80%),然后再缓慢上升。当然,为了社会稳定,我们并不希望财富分布在少数人手里,但从精准营销的角度看,我们希望在尽可能圈出少的人,而这些人反馈率还尽可能高。
注意:如果社会财富是平均分配的,那么lorenz曲线将会是一条对角线。(这条对角线跟ROC里面一样,是我们的对照组。)与之类似地,当没有模型的时候,坏人在人群中是平均分布的,这时的lorenz曲线也是一条对角线(也就是我们随机抓50%的人,这里面会抓到坏人的50%)。因此,lorenz曲线本质上是衡量了我们的模型对概率大小的排序的准确性——排序越准确,lorenz曲线就越远离对角线并凸向左上角(模型的效果也越好)。

参考链接
[1] https://blog.csdn.net/mousever/article/details/46944547

1.1.7 Gain曲线(Cumulative Gains Curve)

累计增益图全称是Cumulative Gains Curve,简称Gains图,它是描述整体精准率的指标。Gains公式为:
Gains=TPTP+FNGains=\frac{TP}{TP+FN}
按照模型预测出的概率(score)从高到低排列,将每一个score区间的TP值计算出来,并与原始数据中所有正例的数据进行对比,得到其百分比,就是累计增益值。该曲线衡量的是模型按照score值划分,圈出一定比例的数据,该模型预测正例的个数(实际也为正例)占总正例数的比例。
依据table 1中数据,可计算得:

index score true label gains index true label score gains
1 0.9 T 0.1=1/10 11 T 0.4 0.7
2 0.8 T 0.2=2/10 12 N 0.39 0.7
3 0.7 N 0.2=2/10 13 T 0.38 0.8
4 0.6 T 0.3=3/10 14 N 0.37 0.8
5 0.55 T 0.4=4/10 15 N 0.36 0.8
6 0.54 T 0.5=5/10 16 N 0.35 0.8
7 0.53 N 0.5 17 T 0.34 0.9
8 0.52 N 0.5 18 N 0.33 0.9
9 0.51 T 0.6 19 T 0.3 1
10 0.505 N 0.6 20 N 0.1 1

按照上表,绘制出的累计增益曲线为:
分类算法评价准则

(1) 何为累计增益

该曲线名为累计增益,那么累计增益从何而来呢?我们知道,当score得分越低,圈出的正例占总样本数的比例越高,那么随着score得分的越来越低,后面的样本其实就是叠加之前score比较高的TP值,此为累积;
但还可从另一种角度解释:
我们以直接营销示例:
假设直接业务目标为:预测目标样本中每个客户的响应概率
使用拟合模型,我们可以比较历史营销活动中观察到的结果,即响应者和未响应者,以及针对该活动中联系的每个客户的预测响应概率。(请注意,在实践中,我们会将模型拟合到我们的数据子集中,并使用此模型来预测“保留”样本中每个客户的响应概率,以便更准确地评估模型的模型为新客户表演。)
我们首先按照预测的概率对客户进行排序,从最高(最接近一)到最低(最接近零)的顺序递减。将客户拆分为同等大小的细分市场,我们创建包含相同数量客户的组,例如,10个十分位组,每个组包含10%的客户群。因此,我们预测的最有可能响应的客户是十分位数组1,其次是十分位数第二组,依此类推。检查每个十进制组,我们可以生成十进制摘要,如表1所示,总结每个十分位数中客户和响应者的数量和比例。
注意:在实际中,数据可能没有这么
历史数据可能显示整体,因此当随机邮寄客户群时,大约5%的客户响应(10,000个客户中的506个)。因此,如果您邮寄1,000个客户,您希望看到大约50个响应者。但是,如果我们看一下表1中每个十分位组的响应率,我们看到*组的响应率高于此,它们是我们最好的前景。

Decile Group 预测的概率范围 客户数量 累计客户数量 客户累计百分比 回应-ERS 反应速度 响应者的累计数量 响应者的累积百分比 Lift
1 0.129-1.000 1000 1000 10.0% 143 14.3% 143 28.3% 2.83
2 0.105-0.129 1000 2000 20.0% 118 11.8% 261 51.6% 2.58
3 0.073-0.105 1000 3000 30.0% 96 9.6% 357 70.6% 2.35
4 0.040-0.073 1000 4000 40.0% 51 5.1% 408 80.6% 2.02
5 0.025-0.040 1000 5000 50.0% 32 3.2% 440 87.0% 1.74
6 0.018-0.025 1000 6000 60.0% 19 1.9% 459 90.7% 1.51
7 0.015-0.018 1000 7000 70.0% 17 1.7% 476 94.1% 1.34
8 0.012-0.015 1000 8000 80.0% 14 1.4% 490 96.8% 1.21
9 0.006-0.012 1000 9000 90.0% 11 1.1% 501 99.0% 1.10
10 0.000-0.006 1000 10000 100.0% 15 0.5% 506 100.0% 1.00

表 十进制摘要
我们发现在十等分组1中,响应率为14.3%(1,000个客户中有143个响应者),而总体响应率为5.1%。我们还可以在瀑布图中可视化十分位汇总的结果,如图所示。这说明十分位组1, 2和3中的所有客户使用预测模型具有更高的响应率。
分类算法评价准则

累积收益图表比较达到的响应者的累积百分比(纵轴)与联系的客户的累积百分比(横轴)。
表中的数据如何计算呢,以Decile Group1, Decile Group2为例:
Decile Group 1
响应者的累积百分比28.3% =143/506
Lift2.83=143/1000(506/10000) Lift 2.83=\frac{143/1000}{(506/10000)}
Decile Group2
响应者的累积百分比51.6% =261/506
Lift2.58=261/2000(506/10000)Lift 2.58=\frac{261/2000}{(506/10000)}
分类算法评价准则

上图描述的是分别对应类别1和类别2的累计增益值,对角线是基线。您可以使用累积增益图表通过选择与所需增益相对应的百分比来帮助选择分类截止值,然后将该百分比映射到适当的截止值。
参考链接:
[1] https://www.jianshu.com/p/4e6f37ea540d
[2]https://www.ibm.com/support/knowledgecenter/en/SSLVMB_23.0.0/spss/tutorials/mlp_bankloan_outputtype_02.html
[3]https://select-statistics.co.uk/blog/cumulative-gains-and-lift-curves-measuring-the-performance-of-a-marketing-campaign/

1.1.8 Lift 曲线

对应的中文名为:提升度。Lift曲线对应的公式为:
Lift=TPTP+FPTP+FNTP+FP+TN+FNLift=\frac{\frac{TP}{TP+FP}}{\frac{TP+FN}{TP+FP+TN+FN}}

极端情况:当 FN=0,TN=0FN=0, TN=0时,即所有负例预测为正例, Lift=1
TP=0FP=0TP=0,FP=0时,即所有正例预测为负例,Lift=0
FPFN=TPTNFP*FN=TP*TN时,Lift=1
从公式中,我们可看出,分子对应Precision,分母对应,原始数据中正样本占总样本的比例。Lift衡量的是,与不利用模型相比,模型的预测能力“变好”了多少,Lift(提升指数)越大,模型的运行效果越好。不利用模型时,我们只能利用“正例的比例是(TP+FN)/(TP+FP+FN+TN)”这个样本信息来估计正例的比例(baseline model),而利用模型之后,我们不需要从整个样本中来挑选正例,只需要从我们预测为正例的那个样本的子集TP+FP中挑选正例,这时预测的准确率为TP/(TP+FP)。
为了更好的解释Lift曲线,我们利用Table 3.1 样例图数据计算分子分母,如:

index score true label (TP+FN)(TP+FP+TN+FN)\frac{(TP+FN)}{(TP+FP+TN+FN)} precision LIFT index true label (TP+FN)(TP+FP+TN+FN)\frac{(TP+FN)}{(TP+FP+TN+FN)} score precision LIFT
1 0.9 T 0.5 1 2 11 T 0.5 0.4 0.636363636 1.2727
2 0.8 T 0.5 1 2 12 N 0.5 0.39 0.583333333 1.1667
3 0.7 N 0.5 0.66667 1.333333 13 T 0.5 0.38 0.615384615 1.2308
4 0.6 T 0.5 0.75 1.5 14 N 0.5 0.37 0.571428571 1.1429
5 0.55 T 0.5 0.8 1.6 15 N 0.5 0.36 0.533333333 1.0667
6 0.54 T 0.5 0.83333 1.666667 16 N 0.5 0.35 0.4375 0.875
7 0.53 N 0.5 0.71429 1.428571 17 T 0.5 0.34 0.529411765 1.0588
8 0.52 N 0.5 0.625 1.25 18 N 0.5 0.33 0.5 1
9 0.51 T 0.5 0.66667 1.333333 19 T 0.5 0.3 0.526315789 1.0526
10 0.51 N 0.5 0.6 1.2 20 N 0.5 0.1 0.5 1

依据上述数据绘制Lift图,有:
分类算法评价准则

该图纵轴轴对应的是Lift值,横轴对应的是正例集百分比(score值降序排序,对应的样本比例)。随着阈值(score)的减小,更多的客户就会被归为正例,也就是预测成正例的比例变大。当阈值设得够大,只有一小部分观测值会归为正例。

(1) Lift业务解读

当不采用模型的时候,原始数据的正例占总数据的比例为0.5,当采用模型,并且按照score=0.54划分时,precision=0.83333,此时的Lift值为1.666667,客户的响应率提升至原先的1.67倍,提高了投入产出比。也就是说,我们只需圈出原始数据的30%,就能得到83.333%的准确率。当采用模型后,再也不用从整个数据集中挑选正例,只需要从圈出的数据中去挑选正例就行。

该图为catboost跑出来的Lift 图。

参考链接
[1] https://www.jianshu.com/p/6ffa3df3ec86
[2] https://blog.csdn.net/shy19890510/article/details/79501582

1.2 指标综合对比

指标综合对比
1)从绘图上看,Lorenz曲线只绘制了TPR一个指标,而KS曲线绘制TPR和FPR两个指标的同时,还给出了KS值,所以二者选其一就好(KS曲线会更丰富,视具体业务情况而定)。
2) 以上介绍中,除了P-R曲线,ROC曲线,其他曲线,KS曲线,Lift曲线,Lorenz曲线Gains曲线,KS曲线的横轴都一值,都是按照score排序后,样本的占比;
3)Gains曲线,KS曲线(TPR),Lorenz曲线的纵轴都是TPR;
Lift曲线,Gains曲线,ROC曲线,KS曲线等指标的对比图如下:
分类算法评价准则

参考链接
[1] https://blog.csdn.net/Orange_Spotty_Cat/article/details/82425113

Writed by Eshter YUU
Email: [email protected]
Date: 2018/12/27