在输入数据中具有多个特征的时间序列预测

Sae*_*ili 5 python machine-learning time-series statsmodels

假设我们有一个时间序列数据,其中包含最近两年的每日订单计数:

我们可以使用Python的statsmodels库来预测未来的订单:

fit = statsmodels.api.tsa.statespace.SARIMAX(
                  train.Count, order=(2, 1, 4),seasonal_order=(0,1,1,7)
      ).fit()

y_hat_avg['SARIMA'] = fit1.predict(
                      start="2018-06-16", end="2018-08-14", dynamic=True
                      )
Run Code Online (Sandbox Code Playgroud)

结果(不介意数字):

在此处输入图片说明

现在假设由于公司假期或促销活动,我们的输入数据有一些异常的增加或减少。因此,我们添加了两列,分别说明每天是否是“假期”以及公司是否有“促销”。

在此处输入图片说明

是否有一种方法(以及在Python中实现它的方法)使用这种新型的输入数据,并帮助该模型理解异常值的原因,并通过提供“假期”和“ promotion_day”信息来预测未来的订单?

fit1.predict('2018-08-29', holiday=True, is_promotion=False)
# or
fit1.predict(start="2018-08-20", end="2018-08-25", holiday=[0,0,0,1,1,0], is_promotion=[0,0,1,1,0,1])
Run Code Online (Sandbox Code Playgroud)

N. *_*uda 5

SARIMAX,作为SARIMA模型的概括,旨在处理这个问题。从文档中

参数:

  • endog (array_like) – 观察到的时间序列过程 y;
  • exog (array_like, optional) – 外生回归量数组,形状为(nobs, k)

您可以将holidaypromotion_day作为大小数组传递(nobs, 2)exog,这将告知模型其中一些观察结果的外生性质。