You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为SARIMAX模型预测值绘制95%置信区间带

SARIMAX模型预测值95%置信区间带绘制方案
  • 核心误区:直接调用results.conf_int(alpha=0.05)返回的是模型拟合系数的置信区间(包含AR项、MA项、残差方差等参数的估计区间),并非预测值的置信区间,无法用于绘制预测带。

现有代码梳理

模型拟合代码

model=sm.tsa.statespace.SARIMAX(data_df['Net Sales'],order=(1, 1, 1),seasonal_order=(1,1,1,12))
results=model.fit()
print(results.summary())

原有绘图代码

fig, ax = plt.subplots(figsize=(15,5))
ax.ticklabel_format(useOffset=False, style='plain')
data_df['Net_Sales forecast'] = results.predict(start = 48, end = 60, dynamic= True)  
data_df[['Net Sales', 'Net_Sales forecast']].plot(ax=ax, color=['blue', 'orange'], marker='o', legend=True)

正确实现代码

需要改用get_prediction()方法生成带完整统计信息的预测对象,从中提取预测值对应的置信区间,再通过fill_between绘制半透明区间带:

fig, ax = plt.subplots(figsize=(15,5))
ax.ticklabel_format(useOffset=False, style='plain')

# 生成包含置信区间信息的预测结果对象
pred_res = results.get_prediction(start=48, end=60, dynamic=True)
# 提取95%置信区间,返回值第一列为区间下界,第二列为上界
pred_ci = pred_res.conf_int(alpha=0.05)
# 提取预测均值
data_df['Net_Sales forecast'] = pred_res.predicted_mean

# 绘制原始序列与预测序列
data_df[['Net Sales', 'Net_Sales forecast']].plot(ax=ax, color=['blue', 'orange'], marker='o', legend=True)

# 绘制置信区间带
ax.fill_between(
    x=pred_ci.index,
    y1=pred_ci.iloc[:, 0],
    y2=pred_ci.iloc[:, 1],
    color='orange',
    alpha=0.2,
    label='95% 置信区间'
)

ax.legend()
plt.show()

关键参数说明

  • get_prediction():和仅返回预测值的predict()不同,该方法返回的结果对象包含预测均值、预测标准误、置信区间等全量预测统计信息
  • fill_between():用于在两个y值之间填充色块,alpha=0.2设置色块透明度,避免遮挡底层折线
  • 若需要调整置信水平,修改conf_int()的alpha参数即可,例如90%置信区间设置alpha=0.1

内容的提问来源于stack exchange,提问作者Neo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 20:09:19