我希望分解具有严重季节性成分的每日销售数据(使 365 天的季节性对于 ARIMA 过程来说太长了)。但是,时间序列的某些部分由其他因素解释,包括影响数据的常规营销事件。我想以stl
类似于在 ARIMA 中包含外生变量的方式使用 R 的函数,但我没有看到任何地方可以将外生变量放入其中。相反,我在单独的回归中将外生变量应用于“剩余”部分,但担心stl
由于上述常规营销事件,所获取的季节性会出现错误。
有关如何解决此问题的任何建议?
我希望分解具有严重季节性成分的每日销售数据(使 365 天的季节性对于 ARIMA 过程来说太长了)。但是,时间序列的某些部分由其他因素解释,包括影响数据的常规营销事件。我想以stl
类似于在 ARIMA 中包含外生变量的方式使用 R 的函数,但我没有看到任何地方可以将外生变量放入其中。相反,我在单独的回归中将外生变量应用于“剩余”部分,但担心stl
由于上述常规营销事件,所获取的季节性会出现错误。
有关如何解决此问题的任何建议?
STL 有点受限,因为它一次只能处理一种季节性,并且您可能有两个季节性(每周和每年)。此外,它不允许外生变量。
一种可能的方法是使用具有 ARMA 误差的回归模型,其中数据的季节性周期设置为 7(对于每周季节性)。您可以使用傅立叶项 ( http://robjhyndman.com/hyndsight/longseasonality/ ) 作为回归变量来处理年度季节性。营销事件可以使用参数中包含的虚拟变量来处理xreg
。您甚至可以使用auto.arima
从预测包中选择错误的顺序,包括您是否需要考虑任何每周季节性。只需使用傅里叶项和虚拟变量设置 xreg,然后调用
auto.arima(y, xreg=xreg)
使用傅立叶级数处理季节性假设它的形状不变。但是,除非您拥有多年的数据,否则这并不是真正的问题,因为它不太可能在不到 20 年的时间内发生太大变化,并且 ARIMA 误差无论如何都会针对微小的变化进行调整。
如果数据中有显着趋势,您还应该在模型的回归部分中考虑到这一点。添加一些 B 样条项应该可以处理它。
我可以推荐Hyndman的cran上的预测包。在那里,bats 或 tbats 模型应该允许复杂的季节性和代表营销事件的虚拟变量。