R,时间序列,ARIMA模型,预测,每日数据。

4
我正在尝试使用2012年1月16日至2013年10月10日期间的每日数据进行需求预测。但是预测结果很糟糕。有什么线索吗?
以下是数据的图示:存在每周和每月的季节性变化。例如:工作日需求量更大,周末需求量较少。

这是预测图的样子:黑线是实际数据,蓝线是预测数据。

 x = ts(data, freq=7, start=c(3,2))
 fit <- auto.arima(x)
 pred <- forecast(fit, h=300)

我对如何使用arima模型拟合日常数据进行了大量研究。由于存在每周季节性,因此我选择了freq=7。

然而,由于预测结果不好。有人很友善地指出了Hyndman教授分享的使用多个季节性拟合模型的方法之一。

https://stats.stackexchange.com/questions/74418/frequency-of-time-series-in-r/74426#74426

所以我采纳了好心人的建议,使用上面链接中提供的两种方法来拟合模型。

方法1:使用tbats()函数。

x_new <- msts(x, seasonal.periods=c(7,7*52))
fit <- tbats(x_new)
fc <- forecast(fit, h=7*52)

我使用了每周季节性7和每年季节性7*52。由于我还没有找到获取每月季节性的简单方法,因此预测结果也不好。请注意:如果我将7 * 4用作每月的第二个季节周期,则预测结果会更差。
方法2:使用傅里叶作为xreg。
seas1 <- fourier(x, K=1)
seas2 <- fourier(ts(x,freq=7*52), K=1)
fit <- auto.arima(x, xreg=cbind(seas1,seas2))
seas1.f <- fourierf(x, K=1, h=7*52)
seas2.f <- fourierf(ts(x,freq=7*52), K=1, h=7*52)
fc1 <- forecast(fit, xreg=cbind(seas1.f, seas2.f))

我尝试使用不同的 K 值,但预测结果并未改善。
因此,我陷入了困境!由于预测偏差太大。请问有人能指出我的错误在哪里吗?或者我该如何改进我的模型?
非常感谢!

2
这个问题似乎不太适合,因为它更多地涉及统计建模而非 R 代码。 - Blue Magister
1个回答

1
你忽略了假期的影响,以及假期前后的领先或滞后影响和异常值(脉冲异常值、水平移位、趋势变化、每周影响变化(即季节性脉冲))。如果你处理这些问题,就无法正确读取每周模式。你可以将数据发布到dropbox.com,以便我查看。请指定数据开始日期和国家。

谢谢你的回复Tom。我知道像Autobox、SAS、SPSS这样的商业软件可能会完成这项工作,而要求像R这样的软件就有点过分了。不幸的是,我不能发布数据。 :( - user1489597
有些人可能这么做! :) 那么,如何通过一个因子来缩放所有数据,然后再将预测重新缩放回去呢? - Tom Reilly

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