用ROC曲线解析预测模型
数据科学是一个在过去几年里真正成长的术语,似乎每个人都想加入。最具吸引力的目标之一是利用数据资产的力量来创建能够预测各种结果的机器学习模型。通过定义明确的模型,可以确定能够预测结果的最重要影响因素,为战略假设开发有价值的洞察力,甚至可以通过友好的用户界面将模型的逻辑实现到软件应用程序中。
然而,在任何这种魔法发生之前,我们需要知道模型创建的预测是否有益!例如,如果我们的电子邮件程序的垃圾邮件分类器只能检测到50%的不需要的电子邮件或请求,我们都会非常愤怒。在这篇文章中,我将讨论如何使用每个数据科学家应该熟悉的经典工具来评估预测模型:接收器操作特性(ROC)曲线。
说明性实例:预测冠状动脉疾病
我在这篇文章中使用的数据集来自Bom等人对“疑似冠状动脉疾病患者冠状动脉斑块形态的靶向蛋白质组学的预测价值”。
这项研究检查了两种不同的结果,我将重点关注这篇文章的是没有冠状动脉疾病(CAD)。作者评估了蛋白质组学生物标志物在有症状患者中检测CAD缺失的预测能力。确定一组可以区分无CAD患者和需要立即干预的蛋白质的蛋白质组将提供更准确和成本有效的非侵入性诊断测试。
该数据集是测试多个数据科学主题的绝佳来源。通过少量观察,它很容易使用,但它还包含大量变量以增加复杂性。结果(使用冠状动脉计算机断层扫描血管造影术,或CCTA)的可行“黄金标准”被提供来测试预测。对于这篇文章,我将主要关注从单一模型构建ROC曲线,但可以在后面的帖子中使用此数据集深入研究更高级的主题。
预测精度测量概述
在开始创建曲线之前,了解一些评估预测准确性的常用指标非常重要。
积极类:我将正类定义为我试图检测的结果类。在这种情况下,缺少 CAD。虽然我意识到这可能会导致诊断测试领域中的“积极”和“消极”这两个术语混淆,但这种方式定义积极类更能推广到其他情况。
在这种情况下处理有症状患者的默认方法是让他们接受进一步的测试和程序。通过充分检测没有CAD的患者,我们将不再需要不必要的,更具侵入性的手术。
一般准确性:简单地说,有多少科目正确分类?
敏感性:正确识别真阳性的比例。在这种情况下,健康患者的比例由诊断工具正确识别。这有时被称为“召回”。
- SN =真阳性/(真阳性+假阴性)
- 逆(1灵敏度)= 假负率。未被该工具检测到的健康患者被错误地识别为患有CAD。假阴性也称为II型错误。
特异性:正确识别真阴性的比例。在这种情况下,通过诊断工具正确识别CAD患者的比例。
- SP =真阴性/(真阴性+误报)
- 逆(1-特异性)= 假阳性率。CAD患者被错误地识别为无CAD。误报也称为I型错误。
积极预测价值:该工具报告的阳性比例,实际上是积极的。对于诊断工具报告缺乏CAD的患者组,PPV是实际上没有患病的患者的比例。这有时被称为“精确度”。
- PPV =真阳性/(真阳性+误报)
负面预测值:该工具报告的负面影响的比例,实际上是负面的。对于诊断工具报告存在CAD的患者组,NPV是实际上没有CAD的患者的比例。
- NPV =真阴性/(真阴性+假阴性)
不要担心,如果你的大脑试图理清所有这些指标。这些术语很容易混淆,特别是在第一次学习它们时。我发现在2x2表中可视化内容最容易。
二进制类的混淆矩阵(正=没有CAD,负= CAD)
曲线的解剖
ROC曲线的优点在于它是一种易于理解的图形工具,可应用于您创建的任何预测模型。以下是曲线的基础知识:
轴:灵敏度和误报率
首先,我们需要为情节创造空间。通过将灵敏度与1-特异性(或假阳性率)作图来建立ROC曲线。
预测概率
现在我们需要绘制一些东西。回想一下,预测模型会将每个观察分配给最可能的类(在这种情况下,没有CAD与CAD的存在)。模型实际上在做的是计算属于特定类的概率。在0和1之间选择截止值,并且如果计算的概率超过该阈值,则将观察值分配给该类。
您可能会发现在大多数软件包中,默认截止值设置为0.5,逻辑是,在二进制类中,可以将观察值分配给最可能的类。但是,正如我们所看到的,最好在考虑灵敏度和特异性之间的权衡之后选择截止值。
通过绘制所有可能的截止值来生成ROC曲线,所述截止值是分配给每个观察的概率。选择不同的截止值将改变预测工具的灵敏度和特异性,因此,可以使用相关的灵敏度和1-特异性作为坐标在图的空间中绘制每个截止概率。最靠近左上角的点(SN = 1,FPR = 0)提供精度度量之间的最大平衡。
曲线下面积(AUC)
AUC是一个类似于二元模型的一致性或c统计量的度量。这是具有正类的观察将具有比在负类中的观察更大的预测概率的概率。
如果AUC = 1,则表示模型有完美的预测。如果AUC = 0.5,则意味着模型无法区分类。它在逻辑回归中的行为与r平方相似,因为添加更多预测因子会增加AUC。因此,在分析中包括对外部数据的交叉验证或验证非常重要。
AUC可用于评估不同的预测模型。
参考线
绘制参考线通常是个好主意,其中AOC = 0.5在ROC图上。这提供了比较曲线的基线视觉效果。
生成ROC曲线
虽然可以使用几个不同的程序来开发预测模型和ROC曲线,但我已经在R中实现了分析。
为了预测结果,我使用xgboost创建了一个分类模型,其中蛋白质生物标记物作为预测因子,并使用重新取代方法来预测数据集中的结果。使用预测的概率,我可以形成上面显示的ROC曲线。
注意:该程序也设置为使用k-fold交叉验证,或者可以更新以利用外部验证,例如列车和测试集的70/30分割(尽管我想要更多数据)。
解释曲线
AUC为0.738,实际上低于作者用他们的机器学习方法所发现的(堆叠可能提高了分类器的准确性)。但是,我更关心的是选择合适的截止值并权衡工具的成本和收益。
模型的总体准确性是不错的,但是当发生假阳性结果时,会发生CAD患者而不是通过必要的程序?让我们同意这不会是一件好事。
为了安全起见,尽可能减少诊断工具的误报率可能是个好主意。在生成混淆矩阵时,很容易选择保持低误报率的概率截止值。这将作为谁被标记为无CAD的决定标准。
通过选择保持90%特异性(10%假阳性率)的概率截止值,分类工具能够检测到42%没有CAD的患者(敏感性= 0.42)。在这种情况下,这实际上是一个非常好的结果,因为现状是让所有有症状的患者接受更具侵入性的诊断程序。尽管42%的灵敏度可能听起来很低,但在这种特定情况下,这是一个很有希望的结果。
在开发用于预测有症状患者的CAD状态的分类器时,最重要的是在保持低误报率的同时实现尽可能高的灵敏度。
ROC曲线的优点在于您可以从单个图像中可视化所有这些性能指标。将曲线与竞争模型进行比较是一种快速简便的方法,可以选择合适的分类或诊断工具。
我只研究了使用ROC曲线和二进制分类工具,但它可以很容易地扩展到多类方案。在同一图形上,可以绘制与每个特定类别中的概率相对应的多条曲线。
在撰写本文时,我详细介绍了如何构建ROC曲线,目的是增加对预测精度度量的理解,以及如何评估您可能正在构建的这些数据科学分类工具。
标题:Illustrating Predictive Models with the ROC Curve