在构建完分类模型后,面临的首要问题是:如何评估模型的性能?即模型在预测结果时的表现如何?为了回答这些问题,让通过一个简单的案例来理解评估分类模型时使用的指标。
在当前COVID-19疫情时期,人们经常需要从一个地点移动到另一个地点。机场可能是一个风险点,因为乘客在排队等待、办理登机手续、访问餐饮供应商以及使用洗手间等设施时可能会接触病毒。在机场追踪COVID-19阳性乘客可以帮助防止病毒的传播。
假设有一个机器学习模型,用于将乘客分类为COVID-19阳性和阴性。在进行分类预测时,可能会发生四种结果:
当预测一个观测值属于某个类别,而它实际上确实属于该类别时。在这个案例中,一个被分类为COVID-19阳性的乘客实际上也是阳性的。
当预测一个观测值不属于某个类别,而它实际上确实不属于该类别时。在这个案例中,一个被分类为非COVID-19阳性(阴性)的乘客实际上也不是COVID-19阳性(阴性)。
当预测一个观测值属于某个类别,而它实际上不属于该类别时。在这个案例中,一个被分类为COVID-19阳性的乘客实际上不是COVID-19阳性(阴性)。
当预测一个观测值不属于某个类别,而它实际上属于该类别时。在这个案例中,一个被分类为非COVID-19阳性(阴性)的乘客实际上是COVID-19阳性。
为了更好地可视化模型的性能,这四种结果被绘制在混淆矩阵上。
是的,希望模型能够专注于真正例和真负例。准确率是一个指标,它给出了模型预测正确的比例。正式地,准确率的定义如下:
准确率= 正确预测的数量 / 总预测数量。
现在,假设每天平均有50,000名乘客出行,其中10人实际上是COVID-19阳性。
提高准确率的一个简单方法是将每个乘客都分类为COVID-19阴性。这样混淆矩阵看起来像这样:
这种情况下的准确率将是:
准确率 = 49,990/50,000 = 0.9998 或 99.98%
令人印象深刻!对吧?但这真的解决了正确分类COVID-19阳性乘客的目的吗?在这个特别的例子中,试图标记乘客为COVID-19阳性和阴性,希望正确识别出阳性乘客。
可以通过简单地将每个人标记为COVID-19阴性来获得99.98%的准确率。显然,这比在任何模型中见过的准确率都要高得多。但这并没有解决问题。这里的目的是识别COVID-19阳性乘客。
在这个场景中,不标记10个实际上是阳性的乘客的代价要大得多。因此,准确率在这种情况下是一个糟糕的衡量标准,因为它很容易获得极高的准确率,但那并不是感兴趣的。
召回率给出了所有阳性中正确识别的比例。
这是一个重要的衡量标准。在所有阳性乘客中,正确识别了多少比例。回到之前将每个乘客都标记为阴性的策略,这将导致召回率为零。
召回率= 0/10 = 0
所以,在这种情况下,召回率是一个好衡量标准。它表明将每个乘客都识别为COVID-19阴性的糟糕策略导致召回率为零。希望最大化召回率。
精确度给出了所有预测为阳性中正确识别的比例。
考虑第二个糟糕策略,将每个乘客都标记为阳性,精确度将是:
精确度= 10 / (10 + 49990) = 0.0002
虽然这个糟糕的策略有一个好的召回值1,但它有一个糟糕的精确度值0.0002。
这表明仅凭召回率不是一个好衡量标准,需要考虑精确度值。
F1分数定义为模型精确度和召回率的调和平均值。
可能会想,为什么使用调和平均值而不是简单平均值?方向是对的。
使用调和平均值是因为它不像简单平均值那样对极大值敏感。假设有一个模型,精确度为1,召回率为0,简单平均值为0.5,而F1分数为0。如果其中一个参数很低,那么在F1分数中第二个参数就不再重要了。F1分数倾向于那些精确度和召回率相似的分类器。因此,如果寻求在精确度和召回率之间取得平衡,F1分数是更好的衡量标准。
接收者操作特征(ROC)是另一个常用的评估工具。它为模型的每个可能的决策规则截止值(0到1之间)绘制敏感度和特异性。对于具有概率输出的分类问题,阈值可以将概率输出转换为分类。有能力稍微控制混淆矩阵。因此,通过改变阈值,混淆矩阵中的一些数字可以改变。但最重要的问题是,如何找到正确的阈值?当然,不想每次改变阈值时都查看混淆矩阵,因此这里就使用了ROC曲线。
对于每个可能的阈值,ROC曲线绘制假正例率与真正例率。
假正例率:错误分类为阳性的负例比例。
真正例率:正确预测为阳性的正例比例。
现在,考虑设置一个低阈值。在所有按升序排列的概率中,低于0.1的被认为是阴性,高于0.1的被认为是阳性。通过选择这个,非常宽容。
但如果将阈值设置为高,比如说0.9。
以下是同一模型在不同阈值下的ROC曲线。
从上述图表中可以看出,真正例率以更高的速率增加,但在某个阈值时,TPR开始趋于平稳。对于TPR的每一次增加,都要付出代价,代价是FPR的增加。在初始阶段,TPR的增加高于FPR。
因此,可以选择TPR高且FPR低的阈值。