r语言 - 每日时间序列预测,具有每周和年度周期



我的目标是预测两个不同渠道的每日注册数量。

一周的季节性相当强,尤其是周末,也观察到了年度影响。此外,我有几个特殊活动日,与其他日子有很大不同。

首先,我在这两个通道上应用了TBATS模型。

x.msts <- msts(Channel1_reg,seasonal.periods=c(7,365.25))
# fit model
fit <- tbats(x.msts)
fit
plot(fit)
forecast_channel1 <- forecast(fit,h=30)

第一个通道:

TBATS(0, {2,3}, -, {<7,3>, <365.25,2>})
Call: tbats(y = x.msts)
Parameters
  Lambda: 0
  Alpha: 0.0001804516
  Gamma-1 Values: -1.517954e-05 1.004701e-05
  Gamma-2 Values: -3.059654e-06 -2.796211e-05
  AR coefficients: 0.249944 0.544593
  MA coefficients: 0.215696 -0.361379 -0.21082

第二通道:

BATS(0, {2,2}, 0.929, -)
Call: tbats(y = y.msts)
Parameters
  Lambda: 0
  Alpha: 0.1652762
  Beta: -0.008057904
  Damping Parameter: 0.928972
  AR coefficients: -0.586163 -0.676921
  MA coefficients: 0.924758 0.743675

如果我预测第二个通道,我只会得到空白值而不是任何预测。

  1. 你能帮忙为什么会这样吗?
  2. 您有什么建议如何将特定事件日构建到此模型中吗?

谢谢大家!

tbatsbats偶尔不稳定,你的第二个模型显示无限预测。已经有一些关于类似问题的错误报告。

在任何情况下,由于您希望使用事件信息,因此最好构建具有 ARMA 误差的谐波回归模型。

例如,假设您的事件信息被记录为虚拟变量event1。然后模型可以拟合如下:

harmonics <- fourier(x.msts, K=c(2,2))
fit1 <- auto.arima(x.msts, lambda=0, 
   xreg=cbind(harmonics,event1), seasonal=FALSE)
f1 <- forecast(fit1, 
   xreg=cbind(fourierf(x.msts, K=c(2,2), h=200), rep(0,200)))

这假设该事件不会在接下来的 200 天内发生(因此为 200 个 0)。我已经在几周和几年中使用了 2 阶谐波。调整这些以最小化模型的 AICc。

此模型实际上与您正在拟合的 TBATS 模型非常相似,只是指定了lambda值而不是估计值,并且季节性随时间固定,而不是允许演变。优点是调和回归模型往往更稳定,并允许包含协变量。

最新更新