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

时间:2018-08-15 05:53:14

标签: 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
                      )

结果(不要介意数字):

enter image description here

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

enter image description here

是否存在使用这种新型输入数据的方法(以及在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])

4 个答案:

答案 0 :(得分:3)

SARIMAX,作为SARIMA模型的概括,旨在处理此问题。在docs中,

  

参数:

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

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

答案 1 :(得分:0)

此问题具有不同的名称,例如02040202080030"BlacksCrosswicks"anomaly detection

Uber工程博客上有一些博客文章,可能有助于理解问题和解决方案。请查看herehere

答案 2 :(得分:0)

尽管它不是来自statsmodels,但是您可以使用facebook的先知库进行时间序列预测,在其中可以将带有重复事件的日期传递给模型。 参见here

答案 3 :(得分:0)

尝试一下(根据您的问题/数据,它可能会或可能不会起作用):

您可以将日期划分为多个功能,例如星期几,月份中的某天,一年中的某年,某年,是月中的最后一天?是月中的第一天?再考虑一下,然后再使用一些常规的ML算法(例如,Random Forests或Gradient Boosting Trees或Neural Networks)(特别是针对您的分类特征嵌入层)来训练模型。