超越准确率(Accuracy):精确率(Precision)和召回率(Recall)

为分类任务选择正确的度量标准

如果有人声称能够完全在脑子里构建一个模型,可以以超过99%的准确率来识别试图登机的恐怖分子,你会相信吗?模型是这样的:简单的把每个从美国机场起飞的人都标记为非恐怖分子。考虑到每年平均有8亿乘客乘坐美国航班,而2000年到2017年间经过确认的登上了美国航班的恐怖分子一共是19人,这个模型能够达到惊人的99.9999999%的准确率!这听上去好像很棒,但是我怀疑美国国土安全部应该不会购买这个模型。尽管这个方法有着近乎完美的准确率,但这个问题很显然是一个不好用准确率来度量的问题。

恐怖分子检测任务是一个不平衡的(imbalanced)分类任务:我们有两个类别需要区分——恐怖分子和非恐怖分子——其中一个类别代表了压倒性多数。另一个不平衡分类任务的例子是检测某种在人群中发病率很低的疾病。上述两个例子中,阳性类——患病或恐怖分子——的数量远远大于阴性类。这种类型的问题在数据科学中相当常见,此时准确率就不再是评估模型性能的一个好的测量方法。


从直觉上讲,我们知道在恐怖分子识别任务中把所有的数据点都标称为阴性并没有什么用。相反,我们应该把注意力集中在识别阳性案例上。我们的直觉告诉我们应该最大化的度量标准在统计学上被称为召回率(Recall),它表示一个模型在一个数据集中找出所有相关样本的能力。召回率的准确定义是:真阳性的个数除以真阳性的个数加上假阴性的个数。真阳性指的是被模型判定为阳性且确实是阳性的数据点,假阴性指的是被模型判定为阴性但实际上是阳性的数据点。在恐怖分子的例子中,真阳性是被正确识别出来的恐怖分子,而假阴性则是模型认为不是恐怖分子,但实际上真的是恐怖分子的人。召回率可以被认为是一个模型在数据集中找出所有感兴趣点的能力。

                                                  \large \begin{aligned} recall &= \frac{true\ positives}{true\ positives + false\ negatives} \\\\ &= \frac{terrorists\ correctly\ identified}{terrorists\ correctly\ identified + terrorists\ incorrectly\ labeled\ as\ not\ terrorists } \end{aligned}

观察这个公式或许你会发现:如果我们把所有的人都标记为恐怖分子,那我们的召回率就会是1.0。那我们是有了一个完美的分类器了吗?并不是。就像数据科学中的很多概念一样,在我们最大化所选择的度量准则时往往需要进行权衡。在召回率的这个例子中,当我们增加召回率时,就会降低精确率(Precision)。我们从直觉上知道一个把所有乘客都标记为恐怖分子的模型可能是没有用的,因为这意味着我们不得不禁止所有人飞行。统计学提供了词汇来表达我们的直觉:这个模型有较低的精确率(Precision),也即一个分类模型仅仅识别相关数据点的能力。

精确率的定义是真阳性的个数除以真阳性的个数加上假阳性的个数。假阳性是指被模型错误地识别为阳性,而实际上是阴性的样本,在我们上面的例子中就是被识别为恐怖分子的普通乘客。召回率代表的是在数据集中找到所有相关样本的能力,精确率则表示在我们的模型认为是相关的样本中真正相关的样本比例。

\large \begin{aligned} precision &= \frac{true\ positives}{true\ positives\ +\ false\ positives} \\\\ &= \frac{terrorists\ correctly\ identified}{terrorists\ correctly\ identified\ +\ individuals\ incorrectly\ labeled\ as\ terrorists} \end{aligned}

至此,我们可以看到我们最开始那个把所有人都标记为非恐怖分子的模型并没有什么用。尽管它有着近乎完美的准确率,但是它的精确率和召回率都是0, 因为根本就没有真阳性!现在我们把模型稍微进行一些修改,然后把一个人正确地识别为恐怖分子。此时,我们的精确率将会是1.0(没有假阳性),但是召回率将会非常低,因为假阴性的个数还很多。如果我们走另一个极端,把所有人都识别为恐怖分子,那我们的召回率将会是1.0——我们会抓住所有的恐怖分子——但是我们的精确率会很低,我们将逮捕很多无辜的人。换句话说,我们提高精确率时就会降低召回率,反之亦然。

精确率与召回率的权衡

 

 精确率和召回率的组合

在某些场景下,即使会使得另一个指标变差,我们可能想要最大化精确率或者召回率。例如,在对病人进行初步疾病筛查时,我们可能想要召回率接近1.0——我们想把确实患病的病人全部找出来——如果后续检查的费用不是很高的话,我们可以接受一个较低的精确率。但是,在我们想要找到最优的精确率和召回率组合时,我们可以使用所谓的F分数来组合这两个指标。F分数是精确率和召回率的调和平均值,如下式所示,其综合了这两个指标:

                                       \large F score = \frac{(\beta^2 + 1)precision * recall}{\beta ^2precision + recall}

当β=1时,称为F1分数(F1 Score)。这时,精确率和召回率都很重要,权重相同。当有些情况下,我们认为精确率更重要些,那就调整β的值小于1;如果我们认为召回率更重要些,那就调整β的值大于1。

                                         \large F1\ score = 2 * \frac{precision\ *\ recall}{precision\ +\ recall}

我们之所以使用调和平均值而不是简单的均值的原因是调和平均值会惩罚极值。一个精确率为1.0,召回率为0.0的分类器,它的简单平均值是0.5,但是F1分数是0。还有结合了精确率和召回率的其他度量准则,例如精确率和召回率的几何平均值,但是F1分数是用的最多的。如果我们想要构建一个在精确率和召回率之间达到最佳平衡的分类模型,那么我们应该努力去最大化F1分数。

精确率和召回率实例

在介绍了一堆新名词之后我们将通过一个例子展示它们在实践中是如何使用的。在此之前,我们还需要简短地介绍两个概念。

首先是混淆矩阵。在给定了一个模型给出的预测标签时,混淆矩阵可以快速地计算精确率和召回率。二元分类的混淆矩阵有四个结果:真阳性、假阳性、真阴性、假阴性。实际值在列方向上,预测值在行方向上。行和列的交汇处便形成了上述四个结果。举个例子,如果我们把一个数据点推断为阳性,而实际上它是阴性,这便是一个假阴性。

由混淆矩阵计算精确率和召回率,只需要把相应的值填入公式即可:

                                           \large \begin{aligned} recall &= \frac{true\ positives}{true\ positives\ +\ false\ negatives} \\ precison &= \frac{true\ positives}{true\ positives\ +\ false\ positives} \end{aligned}

显示分类模型性能的另一个主要的可视化技术是接收器操作特性(ROC)曲线。不要被这个复杂的名字吓到,它的想法其实很简单:我们在模型中会使用一个阈值,超过这个阈值的数据点会被判定为阳性,ROC曲线就展示了当我们调整这个阈值时,精确率和召回率是如何变化的。假如我们有一个判断疾病的模型,这个模型可能会针对每个病人输出一个介于0到1之间的分数,我们可以在这个范围内设定一个阈值以标示某个病人是否患病(即阳性标签)。通过调整这个阈值, 我们就可以正确的平衡精确率和召回率了。

ROC曲线的纵轴是真阳性率,横轴为假阳性率。真阳性率(True Positive Rate, TPR)就是召回率,假阳性率(False Positive Rate, FPR)是指误报的概率。两者都可以利用混淆矩阵进行计算:

                                      \large \begin{aligned} TPR &= \frac{true\ positives}{true\ positives\ +\ false\ negatives} \\ FPR &= \frac{false\ positvies}{false\ positives\ +\ true\ negatives} \end{aligned}

一个典型的ROC曲线如下图所示:

黑色的对角线代表的是一个随机分类器,红色和蓝色曲线则是两个不同的分类模型。对于某一个确定的模型,我们只能有一条曲线与之对应,但是我们可以通过调整阈值在这个曲线上移动。一般来说,当我们降低阈值时,我们会沿着曲线往右上方移动。如果我们把阈值定为1.0,我们就会在图的左下角,因为我们不会把任何数据点识别为阳性,也就没有了真阳性和假阳性,TPR和FPR均为0;当我们降低阈值时,我们会把更多的数据点识别为阳性,导致真阳性增多,但假阳性也会增多,即TPR和FPR都变大;最后,当把阈值降为0时,所有的数据点都被识别为阳性,也就到了ROC曲线的右上角,此时TPR和FPR都为1.0。

最后,我们可以通过计算曲线下面积(Area Under the Curve, AUC)来量化一个模型的ROC曲线。AUC的值介于0和1之间,值越大表明模型的分类性能越好。在上图中,蓝色曲线的AUC大于红色曲线,表示蓝色模型更好的平衡了精确率和召回率。一个随机分类器(黑线)的AUC为0.5。

要点回顾

二元分类的四种结果

  • 真阳性:被标记为阳性且确实为阳性的点
  • 假阳性:被标记为阳性但实际是阴性的点
  • 真阴性:被标记为阴性且确实是阴性的点
  • 假阴性:被标记为阴性但实际是阳性的点

精确率和召回率

  • 精确率:分类模型只识别相关样例的能力
  • 召回率:分类模型识别所有相关样例的能力
  • F1分数:用调和平均值组合了精确率和召回率的单一度量

精确率和召回率的可视化

  • 混淆矩阵:显示分类问题的实际的和模型判别的标签
  • 接收器操作特性(ROC)曲线:以划分阳性样本的阈值为参数,绘制真阳性率(TPR)和假阳性率(FPR)曲线
  • 曲线下面积(AUC):基于ROC曲线计算分类模型总体性能的指标

 

上述内容主要翻译自:

Beyond Accuracy: Precision and Recall

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值