带假期的每周预测

时间:2017-10-22 12:09:41

标签: r time-series forecasting

我使用Hyndman的forecast软件包在每周级别上产生一些准确的tbats预测,但我在假期时会出现重大错误。如何在模型中包含假期?此外,有证据表明Arima不适合我的每周数据。所以假期必须以非芳香的方式添加。

我见过两种解决方案。一个https://robjhyndman.com/hyndsight/dailydata/显示如何使用傅里叶项将假日添加为虚拟变量。问题是假变量采用1或0的形式。我知道不同的假期有不同的效果,1或0不会捕获。例如,黑色星期五与中国新年非常不同。

另一个解决方案是https://robjhyndman.com/hyndsight/forecast7-part-2/,其中协变量nnetr更改用作auto.arima的替代品,带有季节性虚拟变量。问题是我没有看到如何编写R代码来输入我的假期。一个例子很有用。

3 个答案:

答案 0 :(得分:7)

官方统计机构使用的时间序列建模的基准是美国人口普查局的x13-arima-seats。它处理季节性影响以及"参数化"假期包括中国新年和复活节。

该功能在R中通过seasonal包提供,该包安装并使用基础x13-arima-seat二进制文件。

还有一个功能齐全的interactive website可以访问大多数(如果不是全部)功能。

答案 1 :(得分:6)

您是否阅读过Facebook的prophet包裹?

没有使用它,但是通过阅读文档,它似乎是一个快速实现也可以解释假期:

https://cran.r-project.org/web/packages/prophet/prophet.pdf

  

实施基于预测时间序列数据的程序   一种附加模型,其中非线性趋势适合每年和每周   季节性,加上假期[...]

https://cran.r-project.org/web/packages/prophet/vignettes/quick_start.html

答案 2 :(得分:4)

以下做了我需要做的一切。

k=23
#forecast holidays
#bool list of future holidays
holidayf <- c(0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0)
h <- length(holidayf)

#given holidays
holiday <- df[,2] 
y <- ts(df[,1],start = 2011,frequency = 52)
z <- fourier(y, K=k)
zf <- fourier(y, K=k, h=h)
fit <- auto.arima(y, xreg=cbind(z,holiday), seasonal=FALSE)
fc <- forecast(fit, xreg=cbind(zf,holidayf), h=h)
fc %>% autoplot()
summary(fit)

为了解决不同假期有不同影响的问题,我简单地添加了额外的假日虚拟变量。例如,你可以制作一个好假期的矢量和坏假期的矢量,然后cbind将它们放在xreg中。我没有在上面的代码中显示这一点,但它很直接。