禁止转载,谢谢!
分类模型作为使用场景最为广泛的机器学习模型,常用的二分类模型的模型评估指标有准确率(Accuracy),召回率(Recall)、F1指标(F1-Score)、受试者特征曲线(ROC-AUC)、KS曲线等
一、二分类混淆矩阵(Confusion matrix)与F1-Score
- 准确率 A C C = T P + T N T P + T N + F P + F N ACC=\frac{TP+TN}{TP+TN+FP+FN} ACC=TP+TN+FP+FNTP+TN
整体来看,准确率作为最为通用,也是较好的理解评估指标;但同时也存在一定的局限:
一方面主要体现在偏态样本中重点识别某类样本时表现不足,例如,假设总共有100样本,其中0类有99条,1类有1条,则此时就算模型判别此100条样本全都为0类,准确率也将达到99%,但很多时候可能我们希望的是模型能够将这些1识别出来,例如癌症病患数据中癌症患者、金融风控中欺诈用户等,从这些场景中,将0错判为1、和将1错判为0,其实实际付出的代价是不一样的,例如如果将1样本误判为0的代价非常大,而将0样本误判为1的代价并不大,则会采用“宁可错杀一千、不可放过一个”的激进策略来识别1。
另外一方面局限则哪怕是均衡的分类样本数据集,准确率有时也无法很好的衡量分类模型的分类性能、尤其是模型本身的泛化能力。例如,假设对下述5条样本的二分类数据集,构建A、B两个逻辑回归模型进行判别,模型判结果如下所示:
index | labels | A-predicts | B-predicts | predicts_results |
---|---|---|---|---|
1 | 1 | 0.8 | 0.6 | 1 |
2 | 0 | 0.6 | 0.9 | 1 |
3 | 0 | 0.2 | 0.4 | 0 |
4 | 1 | 0.9 | 0.7 | 1 |
5 | 1 | 0.9 | 0.6 | 1 |
在阈值为0.5情况下,准确率都为80%,但对于判断正确的1类,A模型的概率预测分别为0.8、0.9、0.9,非常肯定这些样本属于1类,而B模型的概率预测结果为0.6、0.7、0.6,不是特别的肯定。在实际建模过程中,类似A模型的模型,即对判断正确的样本有较高的肯定、对判断错误的样本不太肯定,这类模型其实是更加准确的捕捉到了数据规律,在后续对于新数据集预测时,也将拥有更强的泛化能力。
- 召回率(Recall)= T P T P + F N \frac{TP}{TP+FN} TP+FNTP
也称为sensitivity(敏感度)、hit rate(命中率)、true positive rate (TPR)以及查全率
召回率侧重于关注全部的1类样本中别准确识别出来的比例。在偏态数据中,相比准确率,召回率对于1类样本能否被正确识别的敏感度要远高于准确率,但对于是否牺牲了0类别的准确率却无法直接体现。
- 精确度(Precision)= T P T P + F P \frac{TP}{TP+FP} TP+FPTP
也被称为positive predictive value (PPV)、查准率
精确度更加关注对1类样本的识别里,能否成功识别出1的概率。
由于这种力求每次出手都尽可能成功的策略,使得当我们在以精确度作为模型判别指标时,模型整体对1的判别会趋于保守,只对那些大概率确定为1的样本进行1类的判别,从而会一定程度牺牲1类样本的准确率,在每次判别成本较高、而识别1样本获益有限的情况可以考虑使用精确度。
对于偏态样本,相比准确率,精确度能够一定程度反应是否成功识别出1类样本(尽管敏感度不如召回率),并且能够较好的反应对0类样本准确率的牺牲程度。
查准率和查全率是一对矛盾的度量,一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低;在围绕1类样本的识别过程中,召回率力求尽可能更多的将1识别出来,而精确度则力求每次对1样本的判别都能获得一个正确的结果。
希望获得一个更加“均衡”的模型判别指标,即我们既不希望模型太过于激进、也不希望模型太过于保守,并且对于偏态样本,既可以较好的衡量1类样本是否被识别,同时也能够兼顾考虑到0类样本的准确率牺牲程度,此时,我们可以考虑使用二者的调和平均数(harmonic mean)作为模型评估指标,即F1-Score。
- F1-Score 调和平均数
F 1 − S c o r e = 2 1 R e c a l l + 1 P r e c i s i o n = 2 ⋅ R e c a l l ⋅ P r e c i s i o n R e c a l l + P r e c i s i o n = 2 ⋅ T P R ⋅ P P V T P R + P P V = 2 ⋅ T P 2 ⋅ T P + F P + F N \begin{aligned} F1-Score &= \frac{2}{\frac{1}{Recall}+\frac{1}{Precision}}\\ &=\frac{2 \cdot Recall \cdot Precision}{Recall+Precision} \\ &= \frac{2\cdot TPR \cdot PPV}{TPR+PPV}\\ &= \frac{2\cdot TP}{2\cdot TP+FP+FN} \end{aligned} F1−Score=Recall1+Precision12=Recall+Precision2⋅Recall⋅Precision=TPR+PPV2⋅TPR⋅PPV=2⋅TP+FP+FN2⋅TP
- balanced accuracy,简称BA,即查全率与查准率平均值:
B A = R e c a l l + P r e c i s i o n 2 BA = \frac{Recall+Precision}{2} BA=2Recall+Precision
调和平均数和均值相比,其实会更大程度受到短板数据影响,从这个角度来看,F1-Score其实会更加严格,即只要参与计算的Recall和Precision其中一个指标较小,F1-Score指标就会整体偏小,而当F1-Score结果较大时,则说明模型整体分类性能较强,并且哪怕是极端不平衡数据,只要F1-Score计算结果较大,就说明模型对少数类别样本也具有很好的分类性能,从这个角度来说,F1-Score是个比ACC更全面的评估指标,并且,为了能够更严格的要求模型训练过程以期达到一个更好的建模效果,我们往往更倾向于采用F1-Score作为模型评估指标,而不是BA。
- 加权调和平均 F β F_\beta Fβ:
F
β
=
(
1
+
β
2
)
p
r
e
c
i
s
i
o
n
⋅
r
e
c
a
l
l
(
β
2
⋅
p
r
e
c
i
s
i
o
n
)
+
r
e
c
a
l
l
F_\beta=(1+\beta ^2)\frac{precision \cdot recall}{(\beta ^2 \cdot precision)+recall}
Fβ=(1+β2)(β2⋅precision)+recallprecision⋅recall
其中
β
\beta
β度量了查全率和查准率的相对重要性,当
β
\beta
β=1时退化为标准的F1;
β
\beta
β>1时查全率有更大的影响;
β
\beta
β<1时查准率有更大的影响。
例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容是用户感兴趣的,此时查准率更重要;而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率更重要;
- 特异度(Specificity)称为true negative rate (TNR)
用来衡量0类被正确识别比例的特异度,该指标类似召回率,都是较为激进的评估指标,只考虑关注的类(0类或者1类)被识别出来的比例,而不考虑在识别过程中是否牺牲了另外一类的准确率。该指标计算公式如下:
S p e c i f i c i t y = T N T N + F P Specificity = \frac{TN}{TN+FP} Specificity=TN+FPTN
- 阴性预测值(negative predictive value)
同样,类似Precision,对于0类样本的衡量,也有一个相对保守评估指标,用于衡量对0类样本进行判别的所有判别结果中正确识别的0类样本所占得比例,也就是阴性预测值指标,往往也被称为NPV(negative predictive value)。其计算公式如下:
N P V = T N T N + F N NPV = \frac{TN}{TN+FN} NPV=TN+FNTN
不过,需要注意的是,尽管有一套和识别1类镜像的识别0类的指标,但是,通常来说,我们还是会倾向于将重点识别的类别划为1类,然后采用围绕1类构建的指标来进行模型评估,而不是将其任意划为1类或者0类,然后选取对应类别评估指标来进行模型评估。
此外,对于F1-Score指标来说,尽管其能够间接兼顾0类别的判别情况,但归根结底,F1-Score仍然还是围绕类别1的识别建立起来的评估指标,因此如果重点识别类别是0类,那么还是建议先将其改为1类,然后再利用F1-Score进行建模。
F1-Score构造一个由TNR和NPV的调和平均数计算结果指标,通过验证该指标和F1-Score计算结果的不同,来证明F1-Score其实并非0-1类别对称指标。F1-Score指标的非对称性主要是受到不同类别样本数量影响。
- 伪阳率(false positive rate)
F
P
R
=
1
−
s
p
e
c
i
f
i
c
i
t
y
=
F
P
F
P
+
T
N
FPR = 1-specificity=\frac{FP}{FP+TN}
FPR=1−specificity=FP+TNFP
即表示在所有预测为0类的样本中,错误样本所占比例。
二、ROC曲线与AUC值
-
ROC (全称为Receiver operating characteristic,意为受试者特征曲线)是一个二维平面空间中的一条曲线,纵轴是“真正例率”(True Positive Rate,简称TPR),横轴是"假正例率"(False Positive Rate ,简称FPR),两者分别定义为:
T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP
F P R = F P F P + T N FPR=\frac{FP}{FP+TN} FPR=FP+TNFP -
AUC (Area Under Curve)是指ROC曲线下面积
eg:假设逻辑回归对某一组数据分类结果如下,有20条数据,11条1类样本,9条0类样本;先按照预测概率从大到小进行排序:将阈值从1逐渐降低到0的过程中的所有计算结果放在数据表中进行观察:
当阈值完整从1移动0之后,我们即可把上述所有由(FPR,TPR)所组成的点绘制成一张折线图,该折线图就是ROC曲线图:而此时,ROC曲线下方面积就是AUC值。
2.1 ROC-AUC基本性质
-
1、ROC曲线越靠近左上方、ROC曲线下方面积越大,则模型分类性能越好。
-
2、根据点的移动轨迹构成ROC曲线角度来理解,刚开始移动时,是朝向X还是Y轴正向移动,其实是有模型输出概率最高的几个样本决定的,如果这几个样本被判别错了(即实际样本类别为0),则刚开始从原点移动就将朝着X轴正方向移动,此时曲线下方面积会相对更小(相比刚开始朝着Y轴正方向移动的情况),并且根据此前介绍的理论,此时由于模型对于“非常肯定”的样本都判错了,证明模型本身判别性能欠佳;而反之,如果输出概率最高的头部几条样本都判断正确,样本真实类别确实属于1,则点开始移动时将朝向Y轴正方向移动,此时曲线下方面积就将相对更大,模型判别性能也将相对较好。
-
ROC的概率敏感特性与偏态数据判别:由于ROC是对概率敏感的判别曲线(根据概率结果而非类别判别结果进行识别),因此ROC能够对模型对于偏态数据中少量样本的识别能力进行评估。
则对于这两个模型来说,在阈值为0.5的情况下,准确率都是60%,且F1-Score都是0.33,但由于ROC是概率敏感的评估指标,对于不同的两个模型,只要在不同类别的概率计算结果分布上有所差异,最终ROC的绘制情况都会不同。
很明显,从最终AUC面积来看,模型A效果好于模型B。而对概率敏感,也使得ROC在很多情况下具有比F1-Score更加敏感的模型性能的识别精度。并且从上述结果中能够看出,ROC和F1-Score类似,少数的1类样本的判别结果会很大程度影响AUC的计算结果,因此ROC-AUC也能用于判别模型在偏态样本上的分类能力。
可以拓展讨论的一个点是,ROC-AUC对于模型在偏态样本上分类能力的评判,其实也会受到偏态样本“偏态”程度的影响,其实就上述案例来说,在A、B模型对唯一的一个1类样本判别概率为0.8、0.6的差异情况下,模型AUC值的差异其实会受到剩余0类样本数量的影响,剩余0类样本数量越多、两个模型AUC值的差异越大。正是这种AUC值的差异会被0类样本“稀释”的性质,导致如果我们在利用偏态数据建模时,可以通过减少0类样本的样本量(如欠采样、数据聚类等)来提升1类样本在AUC计算结果时的权重。
- ROC排序敏感:ROC-AUC其实是对根据模型预测的概率结果降序排序后的数据真实标签的各元素位置敏感,例如,对于下述A、B两个模型,尽管在部分样本的预测概率不同,但由于最终的按照预测概率降序排序的真实标签排序相同,因此两个模型最终绘制的ROC曲线相同。
交叉熵计算结果越小、模型本身判别能力越强,我们尝试在阈值为0.5下借助交叉熵计算公式来计算两个模型输出结果的交叉熵:
B C E A = − l o g 2 ( 0.9 ) − l o g 2 ( 0.8 ) − l o g 2 ( 0.44 ) − l o g 2 ( 0.4 ) − l o g 2 ( 0.7 ) 5 = 0.48 BCE_A = \frac{-log_2(0.9)-log_2(0.8)-log_2(0.44)-log_2(0.4)-log_2(0.7)}{5} = 0.48 BCEA=5−log2(0.9)−log2(0.8)−log2(0.44)−log2(0.4)−log2(0.7)=0.48
B C E B = − l o g 2 ( 0.7 ) − l o g 2 ( 0.6 ) − l o g 2 ( − 0.44 ) − l o g 2 ( 0.4 ) − l o g 2 ( 0.7 ) 5 = 0.59 BCE_B = \frac{-log_2(0.7)-log_2(0.6)-log_2(-0.44)-log_2(0.4)-log_2(0.7)}{5} = 0.59 BCEB=5−log2(0.7)−log2(0.6)−log2(−0.44)−log2(0.4)−log2(0.7)=0.59
通过BCE函数计算结果,可以看出模型A输出结果的交叉熵是要小于模型B的,因此模型A其实拥有对既定样本更强的判别能力。ROC的概率敏感特性虽然不如交叉熵,ROC这种排序特性会导致其在某些情况下失去判别效力,但这种情况也不必过于担心。首先,在以交叉熵作为损失函数建模时,对于性能较好的模型有时会有过拟合倾向,而由于ROC只对排序敏感,因此有时也会消除这种过拟合倾向;其次,我们也可以通过适当调整阈值来手动让其变得概率敏感。
既然能够通过交叉熵观察模型判别能力,那为何我们不选取交叉熵作为模型评估指标?
其实交叉熵一般不作为模型评估指标的主要原因有两个方面,其一是交叉熵的取值并不在一个固定的区间范围内,交叉熵=相对熵+信息熵,由于相对熵大于等于0的特性,所以交叉熵实际上是在[信息熵, +∞)内取值,而不在一个固定区间内取值就导致交叉熵数值很难进行不同模型、数据之间的横向对比;其二则是尽管在建模的时候我们是通过梯度下降求解交叉熵损失函数的最小值,此时我们希望交叉熵的值越小越好,但其实有的时候,一味追求交叉熵更小的值也有可能导致模型过拟合,因此实际上交叉熵的值也不是越小越好,此时甚至会需要结合准确率来综合调参,寻找一个准确率较高、但交叉熵不是特别小的模型,来削弱过拟合倾向。
因此,在绝大多数时候,交叉熵的主要功能还是作为指导模型进行参数求解的损失函数。
2.2 ROC的类别对称性与F1-Score指标的比较
F1-Score并不是类别对称的,而是更加侧重于评估模型在识别1类样本时的整体性能,但ROC却是类别对称的,即如果我们将数据中的0和1类互换,而模型原先预测1的类概率就变成了现在预测0类的概率,此时ROC曲线会参照 x + y = 1 x+y=1 x+y=1的直线进行对称变换,但AUC面积不变,即模型性能评估数值仍然不会发生变化。
因此,尽管同样是衡量模型整体评估性能,但相比之下,F1-Score更加倾向于判别模型对1类样本的识别能力,而ROC-AUC则没有这方面的倾向性。因此,ROC-AUC和F1-Score之间的选取问题,同样也需要根据业务需要来进行选择,如果需要重点考虑1类是否被正确识别,则更加倾向选择F1-Score,但如果没有其他特殊要求,则一般会考虑使用ROC-AUC作为模型评估指标。
三、多分类混淆矩阵
一般来说混淆矩阵常用于二分类问题,对于多分类问题,例如构建如下形式的混淆矩阵:
此时,如果要进行Recall、Precision的计算,则需要先采用此前介绍的OVR策略进行“划分”、然后采用均值策略进行“集成”,依次将A、B、C视为1类,其余类别视为0类来进行计算,例如,A、B、C三类的Recall为:
R
e
c
a
l
l
A
=
6
6
+
2
+
2
=
0.6
Recall_A = \frac{6}{6+2+2} = 0.6
RecallA=6+2+26=0.6
R
e
c
a
l
l
B
=
3
3
+
1
+
3
=
3
7
=
0.42
Recall_B = \frac{3}{3+1+3} = \frac{3}{7} = 0.42
RecallB=3+1+33=73=0.42
R
e
c
a
l
l
C
=
2
2
+
2
+
6
=
0.2
Recall_C = \frac{2}{2+2+6} = 0.2
RecallC=2+2+62=0.2
然后,进行均值计算,即可算得此时模型整体Recall:
R
e
c
a
l
l
=
0.6
+
0.42
+
0.2
3
=
0.4
Recall = \frac{0.6+0.42+0.2}{3} = 0.4
Recall=30.6+0.42+0.2=0.4
类似,可以算得
P
r
e
c
i
s
i
o
n
A
=
6
13
=
0.46
Precision_A = \frac{6}{13} = 0.46
PrecisionA=136=0.46,
P
r
e
c
i
s
i
o
n
B
=
3
7
=
0.42
Precision_B = \frac{3}{7} = 0.42
PrecisionB=73=0.42,
P
r
e
c
i
s
i
o
n
C
=
2
7
=
0.28
Precision_C = \frac{2}{7} = 0.28
PrecisionC=72=0.28,随后利用三者均值求出模型整体
P
r
e
c
i
s
i
o
n
=
0.38
Precision=0.38
Precision=0.38。
当然,我们也可以计算模型整体F1-Score,此时仍然需要分别计算A、B和C三个模型的F1-Score,然后利用均值进行集成即可。