共计 3233 个字符,预计需要花费 9 分钟才能阅读完成。
间断分级概率评分(Continuous Ranked Probability Score, CRPS)或“间断概率排位分数”是一个函数或统计量,能够将散布预测与实在值进行比拟。
机器学习工作流程的一个重要局部是模型评估。这个过程自身能够被认为是常识:将数据分成训练集和测试集,在训练集上训练模型,并应用评分函数评估其在测试集上的性能。
评分函数(或度量)是将实在值及其预测映射到一个繁多且可比拟的值 [1]。例如,对于间断预测能够应用 RMSE、MAE、MAPE 或 R 平方等评分函数。如果预测不是逐点预计,而是散布呢?
在贝叶斯机器学习中,预测通常不是逐点预计,而是值的散布。例如预测能够是散布的预计参数,或者在非参数状况下,来自 MCMC 办法的样本数组。
在这种状况下,传统的评分函数不适宜统计设计; 预测的散布聚合成它们的平均值或中值会导致对于预测散布的扩散和形态的大量信息的损失。
CRPS
间断分级概率评分 (CRPS) 是一个分数函数,它将单个实在值与累积散布函数 (CDF) 进行比拟:
它于 70 年代首次引入 [4],次要用于天气预报,当初在文献和行业中从新受到关注 [1] [6]。当指标变量是间断的并且模型预测指标的散布时,它能够用作评估模型性能的指标;示例包含贝叶斯回归或贝叶斯工夫序列模型 [5]。
通过应用 CDF,CRPS 对于参数和非参数预测都很有用:对于许多散布,CRPS [3] 都有一个解析表达式,对于非参数预测,CRPS 应用教训累积散布函数 (eCDF)。
在计算测试集中每个察看值的 CRPS 后,还须要将后果聚合成一个值。与 RMSE 和 MAE 相似,应用(可能是加权的)平均值对它们进行汇总:
将单个值与散布进行比拟的次要挑战是如何将单个值转换成为散布的示意。CRPS 通过将根本真值转换为带有指标函数的进化散布来解决这一问题。例如如果真值是 7,咱们能够用:
指标函数是一个无效的 CDF,能够满足 CDF 的所有要求。而后就能够将预测散布与真值的进化散布进行比拟。咱们必定心愿预测的散布尽可能靠近真实情况;所以能够通过测量这两个 CDF 之间的(平方)面积来数学示意:
MAE 与 MAE 关系
CRPS 与驰名的 MAE(均匀绝对误差)密切相关。如果采纳逐点预测将其视为进化 CDF 并将其注入 CRPS 方程能够失去:
所以如果预测散布是进化散布(例如逐点预计),则 CRPS 会升高为 MAE。这有助于咱们从另一个角度了解 CRPS:它能够被视为将 MAE 推广到散布的预测中,或者说当预测散布进化时,MAE 是 CRPS 的特例。
当模型的预测是参数散布时(例如须要预测散布参数),CRPS 对一些常见的散布有一个解析表达式 [3]。如果模型预测正态分布的参数 μ 和 σ,则能够应用以下公式计算 CRPS:
这个计划能够解决已知的散布,如 Beta, Gamma, Logistic,对数正态分布和其余[3]。
当预测是非参数的,或者更具体地说——预测是一系列模仿时,计算 eCDF 是一项沉重的工作。然而 CRPS 也能够示意为:
其中 X, X’ 是 F 独立同散布。这些表达式尽管依然须要一些计算量,但更易于计算。
Python 实现
importnumpyasnp
# Adapted to numpy from pyro.ops.stats.crps_empirical
# Copyright (c) 2017-2019 Uber Technologies, Inc.
# SPDX-License-Identifier: Apache-2.0
defcrps(y_true, y_pred, sample_weight=None):
num_samples=y_pred.shape[0]
absolute_error=np.mean(np.abs(y_pred-y_true), axis=0)
ifnum_samples==1:
returnnp.average(absolute_error, weights=sample_weight)
y_pred=np.sort(y_pred, axis=0)
diff=y_pred[1:] -y_pred[:-1]
weight=np.arange(1, num_samples) *np.arange(num_samples-1, 0, -1)
weight=np.expand_dims(weight, -1)
per_obs_crps=absolute_error-np.sum(diff*weight, axis=0) /num_samples**2
returnnp.average(per_obs_crps, weights=sample_weight)
依据 NRG 模式 [2] 实现的 CRPS 函数。改编自 pyroppl[6]
importnumpyasnp
defcrps(y_true, y_pred, sample_weight=None):
num_samples=y_pred.shape[0]
absolute_error=np.mean(np.abs(y_pred-y_true), axis=0)
ifnum_samples==1:
returnnp.average(absolute_error, weights=sample_weight)
y_pred=np.sort(y_pred, axis=0)
b0=y_pred.mean(axis=0)
b1_values=y_pred*np.arange(num_samples).reshape((num_samples, 1))
b1=b1_values.mean(axis=0) /num_samples
per_obs_crps=absolute_error+b0-2*b1
returnnp.average(per_obs_crps, weights=sample_weight)
下面代码是依据 PWM 模式 [2] 实现 CRPS。
总结
间断分级概率评分 (CRPS) 是一种评分函数,用于将单个实在值与其预测散布进行比拟。此属性使其与贝叶斯机器学习相干,其中模型通常输入散布预测而不是逐点预计。它能够看作是家喻户晓的 MAE 对散布预测的推广。
它具备用于参数预测的解析表达式,并且能够针对非参数预测进行简略计算。CRPS 可能会成为评估具备间断指标的贝叶斯机器学习模型性能的新规范办法。
援用:
- Strictly Proper Scoring Rules, Prediction, and Estimation, Gneiting & Raftery (2007)
- Estimation of the Continuous Ranked Probability Score with Limited Information and Applications to Ensemble Weather Forecasts, Zamo & Naveau (2017)
- Calibrated Ensemble Forecasts Using Quantile Regression Forests and Ensemble Model Output Statistics, Taillardat, Zamo & Naveau (2016)
- Scoring Rules for Continuous Probability Distributions, Matheson & Winklers (1976)
- Distributional Regression and its Evaluation with the CRPS: Bounds and Convergence of the Minimax Risk, Pic, Dombry, Naveau & Taillardat (2022)
- CRPS Implementation in Pyro-PPL, Uber Technologies, Inc.
- CRPS Implementation in properscoring, The Climate Corporation
https://avoid.overfit.cn/post/302f7305a414449a9eb2cfa628d15853
作者:Itamar Faran