输入数据中包含多个特征的时间序列预测

假设我们有一组时间序列数据,包含了过去两年的每日订单数量:

我们可以使用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                      )

结果(不必在意具体数字):

enter image description here

现在假设我们的输入数据由于节假日或公司促销活动而出现了一些异常的增加或减少。因此,我们添加了两个列,分别表示每一天是否为“节假日”和公司是否有“促销活动”。

enter image description here

是否有方法(以及在Python中实现的方法),可以使用这种新类型的输入数据,帮助模型理解异常值的原因,并在提供“节假日”和“促销日”信息的情况下预测未来的订单?

fit1.predict('2018-08-29', holiday=True, is_promotion=False)# orfit1.predict(start="2018-08-20", end="2018-08-25", holiday=[0,0,0,1,1,0], is_promotion=[0,0,1,1,0,1])

回答:

SARIMAX作为SARIMA模型的扩展,设计上正是为了处理这种情况。根据文档

参数:

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

你可以将holidaypromotion_day作为大小为(nobs, 2)的数组传递给exog,这将告知模型这些观察值的外部性质。

Related Posts

关于k折交叉验证的直观问题

我在使用交叉验证检查预测能力时遇到了一些直观问题,我认…

调整numpy数组大小以使用sklearn的train_test_split函数?

我正在尝试使用sklearn中的test_train_…

如何转换二维张量和索引张量以便用于torch.nn.utils.rnn.pack_sequence

我有一组序列,格式如下: sequences = to…

模型预测值的含义是什么?

我在网上找到一个数字识别器的CNN模型并进行了训练,当…

锯齿张量作为LSTM的输入

了解锯齿张量以及如何在TensorFlow中使用它们。…

如何告诉SciKit的LinearRegression模型预测值不能小于零?

我有以下代码,尝试根据非价格基础特征来估值股票。 pr…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注