寻找 MAPE 的置信区间

机器算法验证 置信区间 马佩
2022-03-30 00:17:20

第一次发帖。我有两列数据,一列用于模型输出,另一列用于输入的实际数据。我计算了 MAPE 并得到了一个百分比。我进行了以下分析,您能告诉我它是否有任何错误?我计算了绝对百分比误差的样本标准偏差,然后将其除以我的样本数的平方根,以计算样本均值的抽样分布的标准偏差的估计。 在此处输入图像描述=一个

然后我使用 T 分布(我只有 4 个数据点,因此 T 分布)来计算 95% 置信区间的双尾 T 分布标准差:=T.INV(97.5%,3) = B

我可以有把握地说,总体 MAPE 在我的 MAPE(正负)A*B 内有 95% 的变化吗?

1个回答

有趣的问题。我在学术和应用预测方面一直很活跃,我不记得有人讨论过 MAPE 的 CI。

我不认为你的计算很有帮助。作为一个例子,假设真正的坚持实际是对数正态分布的 log-mean和 log-SD进一步假设我们的点预测是一个固定的(这是一个期望预测,不是MAPE-minimal对数正态数据的预测)。μ=1σ=1y^=exp(μ+σ22)

回想一下 CI 的定义:它是一种算法,当整个实验经常重复时,它将包含具有预先指定频率的真实参数值。(请注意,这与“任何给定 CI 有 95% 的可能性包含参数”不同。)

我们可以通过模拟来运行我们的实验。实际值得到真正的 MAPE ,然后反复(次)绘制你拥有的观察值。在每种情况下,我都会计算 APE,取它们的平均值和 SD,然后像你一样计算 95% CI。最后,我记录下这个模拟 CI 是否包含真正的 MAPE。n=106105n=4

命中率只有76%,而不是95%。

代码:

set.seed(2020)
fcst <- exp(mm)
actuals <- rlnorm(1e6,meanlog=mm,sdlog=sqrt(ss.sq))
true_MAPE <- mean(abs(fcst-actuals)/actuals)

n_reps <- 1e5
hit <- rep(NA,n_reps)
n_obs <- 4
pb <- winProgressBar(max=n_reps)
for ( ii in 1:n_reps ) {
    setWinProgressBar(pb,ii,paste(ii,"of",n_reps))
    set.seed(ii)    # for replicability
    actuals <- rlnorm(n_obs,meanlog=mm,sdlog=sqrt(ss.sq))
    APEs <- abs(fcst-actuals)/actuals
    CI <- mean(APEs)+qt(c(.025,.975),n_obs-1)*sd(APEs)/sqrt(n_obs)
    hit[ii] <- CI[1]<=true_MAPE & true_MAPE<=CI[2]
}
close(pb)
summary(hit)

顺便说一句,我们可以将实验更改如下:我们可以模拟独立同分布的“历史”观察,而不是固定点预测,将点预测计算为它们的平均值(同样,这是一个期望预测,而不是 MAPE-新观察值上评估该点预测,计算如上的 CI。命中率几乎没有变化。n=100n=4

您可能会发现平均绝对百分比误差 (MAPE) 的缺点是什么?有帮助。