每日时间序列预测,每周和每年周期

时间:2016-02-26 10:50:25

标签: r forecasting

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

周的季节性非常强,特别是周末和观察到的年度影响。此外,我有一些特殊的活动日,与其他日子有很大不同。

首先,我在这两个渠道上应用了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. 您是否有任何建议如何在特定事件日内构建此模型?
  3. 谢谢大家!

1 个答案:

答案 0 :(得分:0)

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周和2年的谐波。调整这些以最小化模型的AICc。

这个模型实际上非常类似于您所适合的TBATS模型,除了已经指定lambda值而不是估计值,并且季节性随着时间的推移而固定而不是被允许进化。优点是谐波回归模型趋于更稳定,并允许包含协变量。