我们可以使用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 )
结果(不必在意具体数字):
现在假设我们的输入数据由于节假日或公司促销活动而出现了一些异常的增加或减少。因此,我们添加了两个列,分别表示每一天是否为“节假日”和公司是否有“促销活动”。
是否有方法(以及在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)
。
你可以将holiday
和promotion_day
作为大小为(nobs, 2)
的数组传递给exog
,这将告知模型这些观察值的外部性质。