Brier Score
了解 Brier Score 如何衡量概率预测的准确性、校准度和分辨率。探索公式、示例、相关指标以及 YOLO26 评估工作流。
Brier Score 通过计算每个预测概率与实际发生结果之间的平方差的平均值,来衡量概率预测的准确性。分数为 0 表示完美预测;更大的值则表明预测准确性较低、校准较差,或两者兼有。与仅基于最终类别标签的指标不同,Brier Score 用于评估机器学习模型是否能给出合理的概率。
Brier Score 的工作原理#
对于二分类问题,当事件发生时将结果编码为 1,未发生时编码为 0。对于每个样本,计算 (predicted probability - outcome) squared,然后对这些值求平均值。
假设某个模型预测图像包含缺陷的概率为 80%:
- 如果缺陷存在,平方误差为
(0.8 - 1) squared,即 0.04。 - 如果不存在缺陷,误差为
(0.8 - 0) squared,即 0.64。
第二个预测受到的惩罚要大得多,因为该模型错得很有自信。这使得 Brier Score 成为一个严格恰当的评分规则:平均而言,预测者通过报告其真实的概率估计能够获得最佳得分。scikit-learn Brier score loss 文档提供了一个标准实现。
对于二分类问题,常规范围是 0 到 1。多分类版本会对每个类别的平方误差求和,因此除非除以二,否则其范围可能是 0 到 2。由于各个库使用不同的缩放约定(例如 yardstick 的多分类 Brier Score 中的重新缩放方法),进行比较时应使用相同的实现和设置。
如何解释一个好的 Brier Score#
分数越低越好,但对于“好”的 Brier Score 并没有通用的阈值。其含义取决于事件发生率、数据集难度以及合理基线的质量。
例如,如果某个事件在 10% 的情况下发生,一个总是预测 0.10 的模型的期望得分为 0.09。一个有用的模型通常应该在此基于发生率的基线上有显著改进。评估时应使用具有代表性的验证数据,并对重要类别、运行环境或人口统计群体进行单独报告。
该分数反映了两个相关的属性:
- 校准性: 预测为 0.80 的情况应该大约有 80% 的时间是正确的。概率校准方法和可靠性图表可以揭示系统性的过度自信或信心不足。
- 分辨率: 预测应该有意义地将可能发生的事件与不可能发生的事件区分开来。一个总是预测基础概率的模型可能在整体上是校准的,但几乎提供不到针对具体情况的信息。
单个汇总分数可能会掩盖局部问题。请将其与校准曲线、子群分析以及更广泛的不确定性量化结合使用。
Brier Score 与相关指标的对比#
-
准确率、精确率和召回率: 这些指标用于评估应用阈值后的离散决策。而 Brier Score 在应用阈值之前评估概率,从而区分了较为谨慎的 0.51 正确预测与充满信心的 0.99 正确预测。
-
ROC AUC: AUC 衡量的是排序能力——即正样本是否往往比负样本获得更高的分数。模型可能对情况进行正确的排序,却产生校准不良的概率。
-
对数损失 (Log loss): 两者都是恰当的评分规则,但对数损失对极其自信的错误惩罚更为严厉。Brier Score 的平方误差解释通常更容易解释。
-
置信度: 标记为“置信度”的模型输出并不自动就是校准过的事件概率。在应用 Brier Score 之前,必须对其含义进行验证。
实际应用#
在医学图像分诊中,图像分类模型可能会估计扫描包含异常的概率。当转诊规则对 90% 的估计和 55% 的估计采取不同处理时,Brier Score 可以评估这些概率是否与观察到的诊断相符。
在制造视觉检测中,模型可能会估计产品有缺陷的概率。经过良好校准的预测支持基于风险的路由:高概率情况可以被拒绝,不确定的情况送交人工检查,低概率情况则被接受。校准不良会导致缺陷漏检或不必要的浪费。NIST AI 风险管理框架核心强调在已部署的系统中衡量不确定性和监控性能。
实际评估工作流#
以下示例计算模型的得分并将其与恒定发生率基线进行比较:
from sklearn.metrics import brier_score_loss
# Binary outcomes and predicted event probabilities
y_true = [0, 1, 1, 0, 1, 0]
y_probability = [0.10, 0.75, 0.60, 0.30, 0.90, 0.40]
model_score = brier_score_loss(y_true, y_probability)
# Compare against always predicting the observed event rate
event_rate = sum(y_true) / len(y_true)
baseline_probability = [event_rate] * len(y_true)
baseline_score = brier_score_loss(y_true, baseline_probability)
print(f"Model: {model_score:.3f}")
print(f"Baseline: {baseline_score:.3f}")对于计算机视觉,Ultralytics YOLO26 分类预测通过预测模式公开类别概率。在计算分数之前,在标记的保留图像上收集这些概率。将该结果与 Ultralytics 验证模式以及YOLO 性能指标指南结合使用,而不是将其视为特定任务指标的替代品。
部署后,当新的真实标签可用时,重新计算分数。Ultralytics 平台部署监控可以支持周围的操作工作流,而定期的带标签评估有助于检测由数据漂移引起的校准变化。






