什么是连续排名概率分数 (CRPS)?

数据挖掘 Python 评估 公制
2021-09-24 17:57:21

我在 Kaggle 遇到了一些进化指标:

连续排名概率分数(CRPS)

数学上,

C=1199Nm=1Nn=9999(P(yn)H(nYm))2,

其中 P 是预测分布,N 是测试集中的播放次数,Y 是实际码数,H(x) 是 Heaviside 阶跃函数 (H(x)=1 为了 x0 否则为零)。

任何人都可以用 Python 解释这个进化指标和实现吗?

1个回答

CRPS 在某种意义上只是预测的累积密度函数 (CDF) 和真实 CDF 的均方误差 (MSE)。

CRPS 将 MAE(平均绝对误差)推广到概率预测的情况。CPRS 是涉及概率预测的最广泛使用的准确度指标之一。

CRPS 经常用于评估两种概率预测模型各自的准确性。特别是,该指标可以与回测过程相结合,以通过利用同一数据集上的多个测量值来稳定准确性评估。

该指标与 MAE 等更简单的指标明显不同,因为它的表达不对称:虽然预测是概率性的,但观察是确定性的。与 pinball 损失函数不同,CPRS 不关注概率分布的任何特定点,而是将预测的分布视为一个整体。

查找更多信息

计算CRPS的五种方法

使用python库properscoring 0.1

pip install properscoring

该库侧重于密切相关的连续排名概率分数 (CRPS) 和 Brier 分数。我们喜欢这些分数,因为它们都是可解释的(例如,CRPS 是平均绝对误差的概括)并且很容易从概率分布的有限数量的样本中计算出来。

我们将说明如何根据高斯随机变量给出的预测计算 CRPS。首先,导入properscoring

import numpy as np
import properscoring as ps
from scipy.stats import norm
  • 使用 crps_gaussian 精确计算(这是最快的方法):
ps.crps_gaussian(0, mu=0, sig=1)
  • 与 crps_quadrature 的数值积分:
ps.crps_quadrature(0, norm)
  • 从带有 crps_ensemble 的有限样本:
ensemble = np.random.RandomState(0).randn(1000)
ps.crps_ensemble(0, ensemble)
  • 使用 crps_ensemble 由 PDF 值加权:
x = np.linspace(-5, 5, num=1000)
ps.crps_ensemble(0, x, weights=norm.pdf(x))
  • 基于带有threshold_brier_score的CRPS阈值分解:
threshold_scores = ps.threshold_brier_score(0, ensemble, threshold=x)
(x[1] - x[0]) * threshold_scores.sum(axis=-1)

更多在