我正在尝试使用每日数据进行一些需求预测,从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
所以我接受了好人的建议,并使用上面链接中给定的2种方法拟合模型。
方法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尝试了它,并没有改善预测。
因此,我被卡住了!由于预测很远。谁能指出我的错误在哪里?或者我应该如何改进我的模型?
非常感谢!
答案 0 :(得分:1)
您正在错过假期和假期和异常值的主要因素影响(脉冲异常值,水平偏移,趋势变化,一周影响的变化(即季节性脉冲))。如果你处理这些事情,那么你就无法在一周的日常模式中得到很好的解读。你可以把你的数据发布到dropbox.com,这样我可以看看吗?指定开始日期和数据所在的国家/地区。