如何提高bsts模型的预测精度

机器算法验证 r 时间序列 bsts
2022-04-11 10:36:33

我有一个关于使用bsts包的问题。一般来说,我的问题是我的方法是否可行。因为我的坚持 MAPE 比我在我的整体中使用的所有其他方法都要糟糕得多。

这是我的代码。

library("bsts")
library("ggplot2")
library("reshape")
# split into test and train ------------------------------------------------------
date <- as.Date("2017-06-04")
horizon <- 105
model.data$DATUM <- as.Date(model.data$DATUM)
xtrain <- model.data[model.data$DATUM <= date,]
xtest <- model.data[model.data$DATUM > date,]

# building the first model ------------------------------------------------------
ss <- list()
ss <- AddSemilocalLinearTrend(ss, xtrain$ITEMS)
ss <- AddSeasonal(ss,xtrain$ITEMS,nseasons = 52,
                  season.duration = 7)

# V7 is a dummy variable for the one outlier
fit <- bsts(ITEMS ~ V7 ,
            data = xtrain,
            seed = 100,
            state.specification = ss,
            niter = 1500)

# validation --------------------------------------------------------------------
burn <- SuggestBurn(0.1,fit)
fcast.holdout <- predict(fit,
                         newdata = xtest,
                         h = horizon,
                         burn = burn)

validation.time <- data.frame("semi.local.linear.bsts" = as.numeric(fcast.holdout$mean),
                              "actual" = model.data[model.data$DATUM > date,"ITEMS"],
                              "datum" = model.data[model.data$DATUM > date,"DATUM"])

a <- melt(validation.time,id.vars = c("datum"))
ggplot(data = a,
       aes(x = datum, y = value, group = variable,color = variable))+
       geom_point()+
       geom_line()

plot(fcast.holdout)

数据可以在这里找到。数据是一家零售店的每日销售数据。稍后我想包含一些您也可以在示例数据中找到的虚拟变量。

对我来说,主要问题是:

是否正确定义了季节性部分?我的数据中有一个年度季节性,还有一个每周模式。但是在验证图中我找不到每周模式。

在此处输入图像描述

为什么我有这么高的预测间隔?我应该改变趋势部分吗? 在此处输入图像描述

2个回答

清除异常值而不是使用虚拟变量(使用 tsclean())。尝试 AddTrig 而不是 AddSeasonal 作为季节性组件,因为您的数据似乎有多个季节性。

您正在使用哪些其他方法比 BSTS 提供更好的结果?

您的方法是可行的,但您需要容纳比您拥有的更多的列(即预测器系列)。我将您的数据放入一个综合时间序列包中,该包同时处理即识别 1) 假期前后的领先和滞后效应 2) 星期几的影响和星期几的变化 3) 时间趋势和水平变化 4) 每月一天的影响 % 5) 周=每月的影响 6) 一年中的一个月的影响 7) 一年中的一周的影响 8) 长周末的影响9) 异常 10) 误差方差随时间的变化和其他包括用户指定/建议的因果关系等,当然还有任何必要的 arima 结构来处理省略的结构。

这是您应该从一个有用的模型中获得的实际/拟合和预测,在此处输入图像描述这里有模型残差在此处输入图像描述,这里有未来 365 天的预测在此处输入图像描述

等式的一部分显示在这里在此处输入图像描述和这里在此处输入图像描述

希望这有助于提高您对日常建模的期望。解决方案……

如果您能找到一种方法来为您的数据识别这些额外的“列”,那么您可能会从您当前的方法中获得一些有用的东西。当然,诀窍是像我一样自动/以编程方式执行此操作。

您的“对您的结果缺乏信心”与“对您的预测缺乏信心,即不切实际的非常广泛的预测限制”相呼应/反映

为了帮助亚历克斯,我添加了更多等式,明确显示了一些脉冲的指标系列..

我被要求提供一个清晰的预测和实际情况的图片

在此处输入图像描述

在此处输入图像描述