模型评估指标 -1- 基础篇 -FPR/TPR/F1/ROC/AUC
导语:本文是模型评估指标系列的第一篇,将详细地介绍分类模型中基于混淆矩阵衍生出来的各个指标的计算公式,如准确率,精确率,召回率,FPR,TPR,ROC 曲线的绘制逻辑,AUC 的计算公. 本文首发在个人知乎和微信公众号:一直学习一直爽
在Evaluating Learning Algorithms: A Classification Perspective
书中有一幅模型评估指标的全局图,如下
该图基本包含了日常我们常用的各种指标,如果不想看那么详细,可以看以下总结:
混淆矩阵-Confusion Matrix
在分类模型中,假如给定的类别个数为,那么混淆矩阵的大小为,默认地,会把列作为真实的类别,行作为预测的类别,如下图举例所示:
由是我们常见的分类任务基本上为二分类,如预测商品否被点击,是否被购买,借款人是否发生逾期等,下面的计算过程就以二分类混淆矩阵来进行举例,另外,很多模型输出的预测值在[0,1]之间,并不是离散取值{0,1},为了构建混淆矩阵,需要确定一个阈值,使得预测值的样本预测为 1,否则为 0。
由于 ROC 这样的曲线来源于雷达,后面又应用到医学领域,因此常常把正样本称为阳性(Positive,P,标签为 1), 负样本称为阴性(Negative, N,标签为 0),而机器学习领域习惯用正负样本来表示,当初学二分类中的混淆矩阵时,很多同学会被 TP,FP,FN,TN 等缩写搞混,下面对其做一些方便记忆的说明:
从上图的最左边的表格,可以很清楚地显示 4 个区域内样本的含义,沿着正对角线,可知,样本的预测标签和实际标签都是一致的,因此在第二个表格中将其标记为True
,负对角线上预测标签和真实标签不一致,标记为False
,在第三个表格中,结合预测标签的类别(Positive,Negative)和各个区域的True
,False
标记,得到了经常被搞混的 4 个缩写(不需要去记忆,记住上述推演过程即可):
TP
:实际为正类,预测也为正类TN
:实际为负类,预测也为负类FP
:实际为负类,预测为正类FN
:实际为正类,预测为负类
有了上述混淆矩阵和各个区域的标识,就可以开始计算各个指标了;
准确率-Accuracy
显然,准确率为混淆矩阵中正对角线上被分类正确样本之和:正样本,模型预测也为正样本(TP
) ,负样本,模型预测也为负样本(TN
).
精确率-Precision
别名:查准率
精确率 Precision 的计算如下图所示,表示的含义为,从模型预测的角度来看,在所有预测为正样本中,标签与真实样本同为正样本的比例
, 表示模型对于预测正确的置信度:
召回率-Recall
别名:查全率
召回率 Recall 计算如下图所示,表示的含义为,从真实标签的角度来看,在所有的真实正样本中,被模型正确地预测为正样本所占的比例
:
F1-调和精确率与召回率
从上述 Precision,Recall 的计算过程可以发现(分子是相同的
),其计算都是围绕着正样本(实际类别和预测类别)来计算的,同时 Precision,Recall 天然存在着矛盾,如下图所示:
当把所有样本全部预测为正样本时(模型过分贪婪,模型分即为正样本),显然召回率可以达到最大,取值为 1,但是精确率将显著下降
当设定很大的阈值(模型过分保守,模型分才是正样本),刚好仅有一个样本预测正确,那么精确率取值为 1,但召回率将很低
因此,为了调和两者之间的矛盾,将引入 F1 指标来综合反映模型的性能:
另外,还有一个更通用的计算值的公式,当即为 F1:
真正率-TPR
别名:真阳性率
TPR(True Positive Rate)预测正确的正类占实际正类的比例(给定数据集标签后,统计出正样本个数即可作为分母
):
可以发现,TPR=Recall
假正率-FPR
别名:假阳性率
FPR(False Positive Rate)预测错误的正类占实际负类的比例(给定数据集标签后,统计出负样本个数即可作为分母
):
对比 TPR 和 FPR 的计算公式,我们发现其分母要么是全部的真实正类,或者全部的真实的负类,增加真实正类样本的个数,不会影响 FPR 的计算,反之亦然,互不干扰,因此我们常说 TPR 和 FPR 对于样本不平衡不敏感。
KS
KS(Kolmogorov-Smirnov)值,计算公式如下, KS 能够反映出模型最优的区分效果,以及对应的阈值:
灵敏度-Sensitivity
计算结果与 TPR,Recall 相同
特异度-Specificity
特异度的计算如下图所示:
从点到线-ROC 曲线
由于混淆矩阵是在确定的了一个阈值后生成的,因此,利用不同的阈值就可以得到多组(FPR,TPR)点,将这些点依次连接起来,就构成了 ROC 曲线(没有必要先遍历阈值,如从0~1之间,将阈值切分1000等分, 可以直接根据样本预测值从大到小排序,依次遍历样本即可,得到数据中的阈值
),受试者工作特征曲线 ROC 曲线的横坐标是 FPR,纵坐标是 TPR。
下面通过一个论文中的一个例子来说明 ROC 是怎么画出来的,数据如下,一共 20 个样本,正样本 10 个,负样本 10 个,每个样本具有不同的模型分,根据模型分从大到小进行排序;
ROC 曲线流程:假定为带标签和模型分的数据集,其中正样本个数为,负样本个数为,样本的模型分记为, 用存放(FPR,TPR)点:
1. 根据模型分对数据集进行从大到小排序,得到,第一个样本记为由于 TPR 和 FPR 的分母已知,故只需要初始化分子 TP,FP 为 0,模型分的阈值初始化为;
2. 依次对的样本进行遍历:
2.1)如果满足 (相邻样本模型分取值不相同),则 , 更新;
2.2)如果的真实标签和预测标签都为正样本,那么 ,否则
更新样本下标
3. 将最后一个点加入到
有了上述的计算流程,对于上述数据,前几个点的 FPR,TPR 取值如下:
1. 当阈值为, 显然 TP=0,FP=0, (0, 0),具体解释见下段内容
Tips
;2. 遍历第一个样本,阈值设置为 0.9,将样本预测值标签设为正,和真实标签相同都为正样本,因此 (0, 0.1);
3. 遍历到第二个样本,阈值设置为 0.8, , (0, 0.2);
4. 遍历到第三个样本, 阈值设置为 0.7,将样本预测值标签设为正,和真实标签不同,FP=1, , (0.1, 0.2);
5. ...
最终整个 ROC 曲线如下图所示
由于样本个数有限,可以发现 ROC 曲线其实是一个个阶跃形状,了解到这一点,有助于我们来计算 ROC 曲线下的面积(AUC)。
Tips
:
1. 如果 FPR 和 TPR 处处相等,那么 ROC 会是一条直线(理解为,模型会将一半的正样本,负样本预测错误,相当于随机猜测了);
2. 对于点,阈值为,由于样本模型分在[0,1]之间,那么所有样本被预测为正样本(混淆矩阵第二行全为 0),TP=P(正样本个数), FP=N(负样本个数);
3. 对于点, 阈值为, 所有样本被预测为负样本(混淆矩阵第一行全为 0),TP=0,FP=0;
4. 阈值越小时,召回率/TPR 就越高,FPR 也越高
从点到线-PRC 曲线
Precision-Recall 曲线,简称 PRC,其横坐标为 Recall,纵坐标为 Precision, 曲线的绘制方式与 ROC 类似,这里不做过多展开。
PRC 的横坐标是 ROC 的纵坐标(Recall VS TPR)
ROC-AUC(ROC 曲线下的面积)
计算方式 1
AUC 是 ROC 曲线下的面积,直接根据这个定义,对 ROC 计算流程进行简单改进,就可以得到 AUC 的计算流程:
1. 根据模型分对数据集进行排序,得到,第一个样本记为,由于 TPR 和 FPR 的分母已知,故只需要初始化分子为 0,由于是不断积分的过程(计算梯形面积的过程),还需要记录上一次的值, 模型分的阈值初始化为, 面积;
2. 依次对的样本进行遍历:
2.1) 如果满足(相邻样本模型分取值不相同),则 , 更新
;
2.2) 如果 的真实标签和预测标签都为正样本,那么否则
更新样本下标
3.
4. 缩放回去:
其中上述是计算梯形面积的过程:
计算方式 2
AUC 实际上是模型将正样本排在负样本前面的概率,随机从正负样本中分别选出一个样本,构成样本对,样本对中正样本的模型分大于负样本模型分的占比,即为 AUC
sklearn 计算的接口
总结
判断一个指标是否受正负样本量的影响,看这个指标在混淆矩阵中是否只利用单独某列上的数据,如果是,对正负样本采样本,不影响模型的指标;
在正负样本极不平衡的情况下,PR 曲线比 ROC 曲线更能反映模型的性能(这个在下一篇进行说明)
版权声明: 本文为 InfoQ 作者【一直学习一直爽】的原创文章。
原文链接:【http://xie.infoq.cn/article/a1b2d0bea7e513a792ec8df0d】。文章转载请联系作者。
评论