gpt4 book ai didi

statsmodels - 如何使用 statsmodels 时间序列模型获取预测区间?

转载 作者:行者123 更新时间:2023-12-04 15:48:47 28 4
gpt4 key购买 nike

是否有 statsmodels API 可以从 statsmodels 时间序列模型中检索预测区间?

目前,我正在使用以下方法手动计算预测区间:

enter image description here

这是我的代码。首先,获取一些示例数据...

! python -c 'import datapackage' || pip install datapackage

%matplotlib inline

import datapackage

from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.tsa.api import SimpleExpSmoothing
import statsmodels.api as sm
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

def get_data():
# data licensed for non-commercial use only - https://datahub.io/core/bond-yields-uk-10y
data_url = 'https://datahub.io/core/bond-yields-uk-10y/datapackage.json'

resources = datapackage.Package(data_url).resources

quarterly_csv_url = [pkg for pkg in resources if pkg.name == 'quarterly_csv'][0].descriptor['path']
data = pd.read_csv(quarterly_csv_url)
data = data.set_index('Date', drop=True).asfreq('Q')
return data

接下来,创建预测并计算间隔:

data = get_data()
data = data[ data.index > '2005/']

fit = SimpleExpSmoothing(data).fit()
fcast = fit.forecast(1).rename('Forecast')
xhat = fcast.get_values()[0]

z = 1.96
sse = fit.sse
predint_xminus = xhat - z * np.sqrt(sse/len(data))
predint_xplus = xhat + z * np.sqrt(sse/len(data))

绘制间隔...

plt.rcParams["figure.figsize"] = (20,5)

ax = data.plot(legend=True, title='British Goverment Bonds - 10y')
ax.set_xlabel('yield')

#
# 1-Step Prediction
#
prediction = pd.DataFrame(
data = [ data.values[-1][0], xhat ],
index = [ data.index[-1], data.index[-1] + 1 ],
columns = ['1-Step Predicted Rate']
)
_ = prediction.plot(ax=ax, color='black')

#
# upper 95% prediction interval
#
upper_pi_data = pd.DataFrame(
data = [ xhat, predint_xplus ],
index = [ data.index[-1], data.index[-1] + 1 ]
)
_ = upper_pi_data.plot(ax=ax, color='green', legend=False)

#
# lower 95% prediction interval
#
lower_pi_data = pd.DataFrame(
data = [ xhat, predint_xminus ],
index = [ data.index[-1], data.index[-1] + 1 ]
)
_ = lower_pi_data.plot(ax=ax, color='green', legend=False)

enter image description here

我发现了类似的问题,但不是针对时间序列模型的:

最佳答案

只要您检查残差不相关的假设,并且您不超过一步,我认为您的预测区间是有效的。注意:我会使用残差的标准差。请参阅 Forecasting Principles and Practice 中的第 3.5 节.

我很确定我们需要根据多步预测区间的预测原则和实践将我们使用的模型放入状态空间形式。参见第 7.5 章关于指数平滑的内容。 State Space Modeling for Local Linear Trend在 statsmodels 中提供了一个工作示例。 在 statsmodels 中似乎没有任何开箱即用的方法来生成这些间隔。我个人决定使用 R 来获得我的预测间隔,因为预测包提供了这些而不需要很多额外的努力.

更新:见下面的评论。 Statsmodels 现在具有某些指数平滑模型的状态空间表示。

关于statsmodels - 如何使用 statsmodels 时间序列模型获取预测区间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54736632/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com