【问题标题】:Manually creating confidence intervals for the mean response using statsmodels SARIMAX使用 statsmodels SARIMAX 手动创建平均响应的置信区间
【发布时间】:2021-08-07 23:09:23
【问题描述】:

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

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

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

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

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

提前致谢, 詹姆斯

【问题讨论】:

    标签: python statsmodels arima confidence-interval anomaly-detection


    【解决方案1】:

    可能最简单的做法是让 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。

    【讨论】:

    • 似乎完全符合我的要求,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-12-21
    • 2012-10-14
    • 2017-11-02
    • 2013-07-07
    • 2014-02-19
    • 2019-01-18
    • 2021-08-29
    • 1970-01-01
    相关资源
    最近更新 更多