我们可以使用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中实现该方法的方法),并帮助该模型理解异常值的原因,并通过提供“假期”和“ 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])
答案 0 :(得分:3)
SARIMAX
,作为SARIMA
模型的概括,旨在处理此问题。在docs中,
参数:
- endog(array_like)–观察到的时间序列过程y;
- exog(array_like,可选)–外来回归数组,形状为
(nobs, k)
。
您可以将holiday
和promotion_day
作为大小为(nobs, 2)
的数组传递给exog
,这将为模型提供一些观察结果的外生性质。
答案 1 :(得分:0)
此问题具有不同的名称,例如02040202080030
,"BlacksCrosswicks"
和anomaly detection
。
答案 2 :(得分:0)
尽管它不是来自statsmodels
,但是您可以使用facebook的先知库进行时间序列预测,在其中可以将带有重复事件的日期传递给模型。
参见here。
答案 3 :(得分:0)
尝试一下(根据您的问题/数据,它可能会或可能不会起作用):
您可以将日期划分为多个功能,例如星期几,月份中的某天,一年中的某年,某年,是月中的最后一天?是月中的第一天?再考虑一下,然后再使用一些常规的ML算法(例如,Random Forests或Gradient Boosting Trees或Neural Networks)(特别是针对您的分类特征嵌入层)来训练模型。