如何计算DRPS(离散等级概率得分)

时间:2020-10-09 18:08:52

标签: r probability distribution forecasting forecast

我正在复制论文Forecasting the intermittent demand for slow-moving inventories: A modelling approach

中的评分规则

本文对评分规则进行了如下描述:


enter image description here


这是我的尝试

y <- rpois(n = 100, lambda = 10) # forecasted distribution
x <- 10 # actual value

drps_score <- function(x = value, y = q){
  # x = actual value (single observation); y = quantile forecasted value (vector)
  Fy = ecdf(y) # cdf function
  indicator <- ifelse(y - x > 0, 1, 0) # Heaviside
  score <- sum((indicator - Fy(y))^2)
  return(score)
}

> drps_score(x = x, y = y)
[1] 53.028

在我提供如下所示的0的矢量之前,这似乎工作得很好:

y <- rep(x = 0, 100)
> drps_score(x = x, y = y)
[1] 0

我知道他们在本文中使用的一种方法是0s预测,其DRPS的结果未显示0。这使我认为计算已关闭。

1 个答案:

答案 0 :(得分:3)

我认为这里有一些问题。

首先,我认为您没有在计分函数中计算正确的总和。分数要求您对y的所有可能值(即所有正整数)求和,而不是对y的所有预测样本求和。

第二,我不认为上面的定义会提供理想的结果,当y = x时\ hat F(y)定义为0,那么点质量为的预测不会得到零分真正的价值。 (是的,我是说source是“错误的”,或者至少具有不能给出预期结果的定义。)这是一个重新构造的函数,我认为可以解决两个问题:

x <- 10 # actual value

drps_score <- function(x = value, y = q, nsum=100){
    # x = actual value (single observation); y = quantile forecasted value (vector)
    Fy = ecdf(y) # cdf function
    ysum <- 0:nsum
    indicator <- ifelse(ysum - x >= 0, 1, 0) # Heaviside
    score <- sum((indicator - Fy(ysum))^2)
    return(score)
}



> drps_score(x = x, y = rpois(n = 1000, lambda = 8))
[1] 1.248676
> drps_score(x = x, y = rpois(n = 1000, lambda = 9))
[1] 0.878183
> drps_score(x = x, y = rpois(n = 1000, lambda = 10))
[1] 0.692667
> drps_score(x = x, y = rep(10, 100))
[1] 0
> drps_score(x = x, y = rpois(n = 1000, lambda = 11))
[1] 0.883333

上面的结果表明,对于不是点质量的分布,以真实值(lambda = 10)为中心的分布得分最低。

相关问题