使用 statsmodels SARIMAX 手动创建平均响应的置信区间

Manually creating confidence intervals for the mean response using statsmodels SARIMAX

我使用 python 中的 statsmodels 库创建了一个时间序列 SARIMAX 模型。

目前,我们正在遵循以下管道:

  1. 训练模型
  2. 对未来的一步进行预测,并使用内置的 statsmodels 功能,为这一平均预测生成置信区间。
  3. 每天重复此过程以预测第二天。

我们的总体目标是每周只训练一次模型。这意味着我们希望从模型训练之日起对超过 1 个步骤进行预测。由于我们将进行每个预测,因此在收集前一天的实际数据后,我们希望使用 SARIMAX 中的参数来生成预测。这一步相当简单,您只需要使用系数并将它们乘以滞后分量的第一级差。

然而,我正在努力为我的预测重新创建置信区间,有没有人知道 statsmodels 用来创建这些的数学或我应该使用的数学?

提前致谢, 詹姆斯

可能最简单的方法是让 Statsmodels 为您计算它们,但使用经过训练的参数和新数据集。这是一个例子:

首先,训练模型(您的第 1 步)并保存参数以便稍后使用

# 1. Train the model
mod = sm.tsa.SARIMAX(endog_train, order=(p, d, q))
res = mod.fit()
# Save the parameters for use later
res.params.to_csv('trained_params.csv')

然后使用更新后的数据集创建一个新模型,但不是重新训练参数(使用 fit 方法),而是将旧参数应用于新数据(使用 smooth 方法)。

# 2. Use the saved parameters with a new dataset
mod = sm.tsa.SARIMAX(endog_updated, order=(p, d, q))
params = pd.read_csv('trained_params.csv', index_col=[0])['0']
res = mod.smooth(params)

# Produce forecasts and 95% confidence intervals
fcast = res.get_forecast(steps=5, alpha=0.05)
print(fcast.summary_frame())

对于我使用的数据,打印出:

realgdp      mean   mean_se  mean_ci_lower  mean_ci_upper
2009Q4   1.682724  3.717418      -5.603282       8.968729
2010Q1   1.031580  4.360360      -7.514567       9.577728
2010Q2   0.632402  4.578709      -8.341702       9.606506
2010Q3   0.387689  4.658123      -8.742065       9.517443
2010Q4   0.237670  4.687621      -8.949899       9.425239

您可以多次执行此操作,然后当需要重新训练模型时,只需返回上面的 #1。