- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 statsmodels 库来提供用于预测时间序列的 ARIMAX 模型。我有一个相当奇怪的问题 - 如何通过显式提供用于预测的 endog 和 exog 变量来强制训练模型执行完全手动的点预测?
为了给您一个想法,我根据 2000-2017 年的年度数据训练了我的模型,其中我根据前几年的劳动力和一堆 exog 变量预测了公司 future 的劳动力。效果很好。问题是,在 2018 年和 2019 年,公司大幅扩大了员工数量,这是一次性的商业决策,而且我们也知道,从商业角度来看,我们在 2000-2017 年训练的模型是“正确的”。
我想要做的是使用我在 2000-2017 年训练的模型,并提供 2020 年的预测,同时明确提供 2018 年和 2019 年的“实际值”。这样我们就可以确保模型不会尝试适应这种一次性跳跃会降低其质量。但我该怎么做呢?请注意,我使用 AR(2) 模型 - 因此我需要提供前 2 年的数据。
我已经看到了一些 statsmodels 方法,它可以让你:
1) 选择经过训练的 ARIMAX 模型
2) 明确给出 exog 变量前 2 年的值
3) 明确给出前 2 年的 endog 值
4) 只需提供单点预测
两者predict和 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))
关于python - Statsmodels - 通过显式提供要使用的 endog 值,使用训练有素的 arima 模型进行手动点预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56971901/
我是一名优秀的程序员,十分优秀!