准确率虽然能快速概括整体正确性(即总预测中正确部分的比例),但有时它可能过于乐观地甚至误导性地展现模型表现。在处理不平衡数据集时,这种情况时常发生。不平衡问题不平衡数据集是指其中一类观测数量远少于其他类别的数据集。可以考虑以下任务:发现罕见疾病(多数患者是健康的)。识别欺诈性信用卡交易(多数交易是合法的)。过滤垃圾邮件(多数邮件可能不是垃圾邮件)。在这些情况下,一个类别(“多数”类别,如健康患者或合法交易)的数量远超另一个类别(“少数”类别,如患病患者或欺诈交易)。让我们再次考虑我们的欺诈识别例子。假设我们有1,000笔交易数据。990笔交易是合法的(多数类别)。10笔交易是欺诈的(少数类别)。{"layout": {"title": "欺诈示例中的类别分布", "xaxis": {"title": "交易类型"}, "yaxis": {"title": "交易数量"}, "bargap": 0.2, "autosize": true}, "data": [{"type": "bar", "x": ["合法", "欺诈"], "y": [990, 10], "marker": {"color": ["#1c7ed6", "#f03e3e"]}, "name": "数量"}]}绝大多数交易是合法的,而欺诈性交易很少见。现在,假设我们构建一个非常简单的(也许是朴素的)分类模型。这个模型不是很复杂;它只是简单地预测每笔交易都是合法的。它从不标记任何交易为欺诈。这个模型的准确率是多少?让我们计算:对于990笔合法交易,模型正确预测为“合法”。即990个正确预测。对于10笔欺诈交易,模型错误预测为“合法”。即10个错误预测。正确预测的总数是990。预测总数是1000。准确率是: $$ \text{准确率} = \frac{\text{正确预测数量}}{\text{总预测数量}} = \frac{990}{1000} = 0.99 $$99%的准确率!这听起来很棒,对吗?为什么99%的准确率在此处具有误导性问题在于:尽管模型达到了99%的准确率,但它完全未能完成其预期任务,即识别欺诈。它正确识别了所有合法交易,但却遗漏了每一笔欺诈交易。一个未能发现任何欺诈的模型,即使其整体准确率得分很高,也几乎是无用的。出现这种情况,是因为多数类示例的庞大数量主导了准确率的计算。模型仅通过正确识别最常见的结果就能获得高分。在少量少数类示例上产生的错误几乎不影响总体百分比。“在许多应用中,尤其涉及不平衡数据时,正确识别少数类别通常是最重要的目标。漏掉一笔欺诈交易可能比错误分类一笔合法交易的代价要大得多。同样,未能发现罕见疾病可能导致严重后果。”因此,在这种情况下仅依赖准确率可能导致部署的模型在我们最关心的任务上表现不佳。这强调了需要其他评估指标,这些指标能让我们更清楚地了解模型在每个类别,特别是少数类别上的表现。接下来我们将讨论的,从混淆矩阵中得出的指标,如精确率和召回率,有助于提供这种更全面的认识。