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

Python时间序列分析:生成预测区间及ARIMA代码报错解决

时间序列预测区间生成问题修复

报错原因

model_fit.forecast()方法仅返回预测值数组,无法解包为forecast, stderr, conf_int三个变量。正确做法是使用get_forecast()方法获取完整的预测结果对象,从中提取预测值、标准误和置信区间。

修复后的完整代码

import warnings
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tools.sm_exceptions import ConvergenceWarning

# 忽略警告
warnings.simplefilter('ignore', ConvergenceWarning)
warnings.filterwarnings("ignore")

# 加载数据
data = pd.read_csv(r"C:\mydirectory\myfile.csv", header=0, parse_dates=True, index_col=0)

# 拆分训练集和测试集
train_size = int(len(data) * 0.8)
train, test = data.iloc[:train_size], data.iloc[train_size:]

# 拟合ARIMA模型
model = ARIMA(train, order=(5, 1, 1))
model_fit = model.fit()

# 获取预测结果对象(针对测试集长度的预测)
n_forecast = len(test)
forecast_result = model_fit.get_forecast(steps=n_forecast)

# 提取核心预测数据
forecast = forecast_result.predicted_mean
stderr = forecast_result.se_mean
conf_int_95 = forecast_result.conf_int(alpha=0.05)

# 绘制预测可视化图
plt.figure(figsize=(12, 6))
plt.plot(train.index, train.values, label='训练数据', color='blue')
plt.plot(test.index, test.values, label='实际数据', color='green')
plt.plot(test.index, forecast, label='预测数据', color='red')
plt.fill_between(test.index, conf_int_95[:, 0], conf_int_95[:, 1], color='pink', alpha=0.3, label='95%预测区间')

plt.title('时间序列预测与预测区间')
plt.xlabel('日期')
plt.ylabel('数值')
plt.legend(loc='upper left')
plt.grid(True)
plt.show()

# 输出不同置信水平的预测区间(5%到90%)
prediction_intervals = [0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60, 0.65, 0.70, 0.75, 0.80, 0.85, 0.90]

for alpha in prediction_intervals:
    conf_int = forecast_result.conf_int(alpha=alpha)
    # 输出第一个预测步的区间示例,如需全部步长可循环遍历conf_int每一行
    print('%.1f%% 预测区间: %.3f 介于 %.3f 和 %.3f 之间' % ((1 - alpha) * 100, forecast.iloc[0], conf_int.iloc[0, 0], conf_int.iloc[0, 1]))

关键修复点

  • 替换forecast()为get_forecast():该方法返回PredictionResults对象,包含预测值、标准误、置信区间等完整信息,彻底避免解包错误。
  • 统一区间提取逻辑:使用conf_int(alpha=alpha)获取对应置信水平的预测区间,alpha为显著性水平(如95%置信区间对应alpha=0.05)。
  • 适配Pandas对象操作:predicted_mean和conf_int返回Pandas Series/DataFrame,用iloc索引更规范。

补充说明

  • 预测区间针对未来单个观测值,包含模型误差和随机波动,比针对预测均值的置信区间更宽,符合你对未来值预测的需求。
  • 若需预测训练集之后的全新未来值(而非测试集对比),只需将n_forecast设为目标步数(比如12代表未来12个月),并生成对应的日期索引即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:35:55