每周节假日预测

9
我使用Hyndman的“forecast”包在每周级别上生成了相对准确的“tbats”预测,但是在假期期间存在显著误差。如何在模型中包括假期?此外,已经证明Arima不适合我的每周数据。因此,必须以非arima的方式添加假期。
我看到了两个解决方案。其中一个https://robjhyndman.com/hyndsight/dailydata/展示了如何将假期作为傅里叶项的虚拟变量添加。问题是虚拟变量采用1或0的形式。我知道不同的假期有不同的影响,而1或0无法捕捉到这些影响。例如,黑色星期五与中国新年非常不同。
另一种解决方案是在这里看到的https://robjhyndman.com/hyndsight/forecast7-part-2/,其中使用协变量nnetr更改作为替代auto.arima与季节虚拟变量。问题是我不知道如何编写R代码来输入我的假期。一个例子会很有用。
3个回答

7
"时间序列建模的基准,用于官方统计机构的使用,是由美国人口调查局开发的 x13-arima-seats。它处理季节效应以及包括中国新年和复活节在内的“参数”假期。 该功能可通过 seasonal 包在 R 中使用,该包安装并使用底层 x13-arima-seats 二进制文件。同时也有一个功能齐全的 交互式网站,可以访问大部分功能。"

{btsdaf} - DataTx
{btsdaf} - Dirk Eddelbuettel
它是否支持每周数据?我记得好像不支持。 - Jan van der Laan
每周使用arima通常比较困难,因为365(或366)不能被7整除 - 但并非不可能。我有时会在圣诞节前后调整年末数据以适应52 * 7 \约1年的情况。 - Dirk Eddelbuettel

6

我也没有使用过这个,但我参加过一个讲座,有人从使用forecast包转向使用prophet,因为它内置了更友好的方式来编程节假日,所以更容易。 - DataJack
用过它。在需要快速组合和与闪亮的集成时非常方便。 - amrrs

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中。虽然我没有在上面的代码中展示这个过程,但是这很容易实现。

好或坏的假日并不存在。如果当天有节假日,则会显示1;如果当天没有节假日,则会显示0。 - Alex
不同的节日对预测会产生不同的影响。例如黑色星期五的销售增长将比春节等其他节日更大。我们应该考虑这一点,还是模型可以从训练数据中融入这一点?另外,您是如何选择K值的? - Ritesh Sinha
K的值必须进行调整。该模型将估计假期的影响。 - Alex
明白了,谢谢。您能否分享一些确定k值的代码或指向一些资源? - Ritesh Sinha
基本上是最小化AIC吗?应该在0/1的假日矩阵数据上进行还是实际数据上进行?我找到了这篇文章,它展示了类似的东西,你认为这样做好吗? - Ritesh Sinha
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接