Statsmodels – 使用训练好的ARIMA模型进行手动点预测,通过明确提供endog值来使用

我在使用statsmodels库来构建一个用于时间序列预测的ARIMAX模型。我有一个比较奇怪的问题 – 如何强制训练好的模型进行完全手动的点预测,通过明确提供endog和exog变量来进行预测?

为了给您一个概念,我使用2000年至2017年的年度数据来训练我的模型,预测公司未来的人力资源,基于前几年的劳动力数据和一系列的exog变量。这运作得很好。问题在于,2018年和2019年公司大幅增加了员工数量,这是一个一次性的商业决策,而且我们也知道基于2000年至2017年训练的模型从商业角度来看是“正确”的。

我想做的是使用基于2000年至2017年训练的模型,为2020年提供预测,同时明确提供2018年和2019年的“实际值”。这样我们可以确保模型不会尝试去拟合这个一次性的跳跃,从而降低其质量。但我该怎么做呢?请注意,我使用的是AR(2)模型 – 所以我需要提供前两年的数据。

我看到了一些statsmodels的方法,可以让您做到以下几点:

1) 选择训练好的ARIMAX模型

2) 明确提供前两年的exog变量值

3) 明确提供前两年的endog值

4) 只提供一个点预测

predictforecast方法都允许您指定要预测的步数,但它们不允许明确提供新的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))

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注