如何使用Python中的ARIMA模型预测样本外的时间序列?

2024-09-30 10:30:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Stackoverflow看到过类似的问题。但是,要么这些问题差异很大,要么如果相似,它们实际上没有得到回答。我想这是建模者经常遇到的问题,解决起来很困难

在我的例子中,我使用两个变量,一个Y和一个X,以及50个时间序列的连续观测。它们都是表示%更改的随机数(它们可以是任何您想要的,它们的真实值并不重要。这只是我的编码问题的一个示例)。下面是我构建这个ARIMAX(1,0,0)模型的基本代码

import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf

df = pd.read_excel('/Users/gaetanlion/Google Drive/Python/Arima/df.xlsx', sheet_name = 'final')

from statsmodels.tsa.arima_model import ARIMA
endo = df['y']
exo = df['x']

接下来,我使用前41个观测值建立ARIMA模型

modelho = sm.tsa.arima.ARIMA(endo.loc[0:40], exo.loc[0:40], order =(1,0,0)).fit()
print(modelho.summary())

到目前为止一切正常

接下来,我尝试从样本中预测或预测接下来的9个观测值。这里我想用这9个观测值的X值来预测Y,但我做不到。我在下面只展示了一个代码,我认为它让我最接近我需要去的地方

modelho.predict(exo.loc[41:49], start = 41, end = 49, dynamic = False)
TypeError: predict() got multiple values for argument 'start'

Tags: 代码模型importapidfaslocpd
1条回答
网友
1楼 · 发布于 2024-09-30 10:30:20

这个例子应该有用。我正在使用你的代码,但它有点变化

import pandas as pd
import statsmodels.api as sm
import numpy as np
from statsmodels.tsa.arima_model import ARIMA

生成一个示例数据帧

df = pd.DataFrame(data = {'x' : np.random.normal(12, 3,size = 332),
                     'y' : np.random.normal(12, 2,size = 332)})

df

endo = df['y']
exo = df['x']

Arima模型的顺序保持在代码中,只是为了演示

让我们把最后12个观察结果从模型中去掉

modelho = sm.tsa.arima.ARIMA(endo[:-12], exo[:-12], order =(1,0,0)).fit()
modelho.summary()



future_x = exo[-12:]

modelho.predict(exog = future_x, start = 320, end = 331)

还可以使用:

 modelho.forecast(12, exog = future_x)

相关问题 更多 >

    热门问题