繁体   English   中英

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

[英]Manually creating confidence intervals for the mean response using statsmodels SARIMAX

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

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

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

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

但是,我正在努力为我的预测重新创建置信区间,是否有人对 statsmodels 用于创建这些的数学或我应该使用的数学有任何想法?

在此先感谢,詹姆斯

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

首先,训练model(你的第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')

然后使用更新的数据集创建一个新的 model,但不是重新训练参数(这将使用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

您可以根据需要多次执行此操作,然后在需要重新训练 model 时,只需将 go 重新训练到上面的 #1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM