我的目标是预测两个不同渠道的每日注册数量。
周的季节性非常强,特别是周末和观察到的年度影响。此外,我有一些特殊的活动日,与其他日子有很大不同。
首先,我在这两个渠道上应用了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
如果我预测第二个频道,我只会获得空白值而不是任何预测值。
谢谢大家!
答案 0 :(得分:0)
tbats
和bats
偶尔不稳定,而您的第二个模型显示无限预测。已经有一些关于类似问题的错误报告。
在任何情况下,由于您希望使用事件信息,因此最好使用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
值而不是估计值,并且季节性随着时间的推移而固定而不是被允许进化。优点是谐波回归模型趋于更稳定,并允许包含协变量。