Statsmodels - 使用经过训练的 arima 模型通过显式提供要使用的 endog 值来进行手动点预测

Statsmodels - use trained arima model to do manual point prediction by explicitly supplying endog values to use

我正在使用 statsmodels 库来提供用于时间序列预测的 ARIMAX 模型。我有一个相当奇怪的问题 - 如何通过明确提供用于预测的 endog 和 exog 变量来强制训练模型执行完全手动的点预测?

为了给你一个想法,我根据 2000-2017 年的年度数据训练我的模型,我根据前几年的劳动力和一堆 exog 变量预测公司未来的劳动力。它运作良好。问题是2018年和2019年公司大幅扩招,是一次性的商业决策,我们也知道我们2000-2017年训练的模型从商业角度来说是"correct"

我想做的是使用我在 2000-2017 年训练的模型,并提供 2020 年的预测,同时明确为它提供 2018 年和 2019 年的 "actual values"。这样我们确保模型不会'不要尝试适应这种一次性跳跃,降低其质量。但是我该怎么做呢?请注意,我使用带有 AR(2) 的模型 - 所以我需要提供前 2 年的数据。

我看到了一些统计模型的方法,可以让您:

1) 选择经过训练的 ARIMAX 模型

2) 明确地给它前 2 年的 exog 变量值

3) 明确给出前 2 年的 endog 值

4) 只提供单点预报

这两种 predict and forecast 方法都允许您仅指定要交付样本预测的步数,但它们不允许明确提供新的 endog 值以用于预测

在当前发布的版本 (v0.10) 中,您可能希望执行以下操作(请注意,要使其正常工作,您必须使用 sm.tsa.SARIMAX 模型而不是 sm.tsa.ARIMA型号):

training_endog = endog.loc[:'2017']
training_exog = exog.loc[:'2017']

training_mod = sm.tsa.SARIMAX(training_endog, order=(2, 0, 0), exog=training_exog)
training_res = training_mod.fit()

mod = sm.tsa.SARIMAX(endog, order=(2, 0, 0), exog=exog)
res = mod.smooth(training_res.params)
print(res.forecast(1, exog=exog_fcast))

注意:我们最近添加了一项新功能来简化此类操作,可在 Github 主存储库中获得,并将在 v0.11 中发布(此版本尚无时间表)不过),你可以在哪里做:

training_endog = endog.loc[:'2017']
training_exog = exog.loc[:'2017']

training_mod = sm.tsa.SARIMAX(training_endog, order=(2, 0, 0), exog=training_exog)
training_res = training_mod.fit()

res = training_res.append(endog.loc['2018':], exog=exog.loc['2018':])
print(res.forecast(1, exog=exog_fcast))