2016-02-26 168 views
1

我的目标是预测两个不同频道的每日注册数量。每日时间序列预测,每周和每年周期

本周的季节性很强,特别是周末,也观察到了年度效应。此外,我还有一些特别活动日,与其他日子有很大不同。

首先,我在这两个通道上应用了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. 你有什么建议如何在特定的日子里建立这个模型?

谢谢大家!

回答

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值已经被指定而不是估计,并且季节性随时间而变化,而不是被允许进化。优点是谐波回归模型趋于更稳定,并且允许包含协变量。

+0

我已经阅读了你的许多出版物,很高兴看到你是帮助我的人,谢谢@RobHyndman教授! :) 按照你的建议,我在l_holidays和f_holidays中创建了一个过去的事件和未来的事件。 /* '谐波< - 傅立叶(x2.msts,K = C(3,2)) fit2_harm < - auto.arima(x2.msts,λ-= 0, XREG = cbind(谐波,l_holidays),季节性= FALSE) f2 < - 预测(fit2_harm, xreg = cbind(fourierf(x2.msts,K = c(3,2),h = fcast_int),f_holidays))* * 模型性能和细节: http://tinyurl.com/zush5lm – ponthu

+0

你对这种模式有什么看法?以某种方式识别异常值并像事件一样在单独的协变量中处理它们会有好处吗? – ponthu