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

Python中ARIMA滚动预测原点未来值预测报错及代码需求

ARIMA滚动预测未来值的问题修正与代码示例

错误原因分析

这个KeyError是因为你指定的预测start位置不在原始数据集的索引范围内。滚动预测未来值时,每次迭代后训练数据的范围会变化,预测的起始点必须是当前训练数据的最后一个位置+1,而非硬编码的原始数据索引值。

修正后的滚动预测代码示例

假设你的数据是带时间索引的pandas.Series或DataFrame,以下是完整的滚动预测原点+未来值预测循环代码:

1. 导入依赖库

import pandas as pd
import numpy as np
from statsmodels.tsa.arima.model import ARIMA

2. 数据准备(示例用模拟数据,可替换为真实数据)

# 生成带日期索引的模拟时间序列
dates = pd.date_range(start='2020-01-01', periods=100, freq='D')
data = pd.Series(np.random.randn(100).cumsum(), index=dates)

# 滚动预测参数配置
initial_train_size = 80  # 初始训练集大小
forecast_step = 5        # 每次预测未来5步
roll_times = 3           # 滚动预测轮数

3. 滚动预测核心循环

forecast_collection = []
current_train_end = initial_train_size - 1  # 初始训练集最后一个位置的索引

for _ in range(roll_times):
    # 截取当前训练数据
    train_data = data.iloc[:current_train_end + 1]
    
    # 拟合ARIMA模型(参数可根据自身数据调整)
    model = ARIMA(train_data, order=(1,1,1))
    fitted_model = model.fit()
    
    # 预测未来指定步数
    if isinstance(train_data.index, pd.DatetimeIndex):
        # 生成未来时间索引,保证格式匹配
        future_dates = pd.date_range(
            start=train_data.index[-1] + pd.Timedelta(days=1),
            periods=forecast_step,
            freq='D'
        )
        # 用训练集长度作为预测起始位置,避免索引不匹配
        forecast = fitted_model.predict(
            start=len(train_data),
            end=len(train_data) + forecast_step - 1,
            typ='levels'
        )
        forecast.index = future_dates
    else:
        # 非时间索引数据直接用位置预测
        forecast = fitted_model.predict(
            start=len(train_data),
            end=len(train_data) + forecast_step - 1,
            typ='levels'
        )
    
    # 存储本轮预测结果
    forecast_collection.append(forecast)
    
    # 更新训练集终点:这里用扩展窗口模式(训练集持续增大),若需固定窗口则改为current_train_end +=1
    current_train_end += forecast_step

# 合并所有预测结果
all_forecasts = pd.concat(forecast_collection, axis=0)
print(all_forecasts)

关键修正说明

  • 预测start参数使用len(train_data),确保起始位置始终是当前训练集的下一个位置,彻底避免索引匹配错误。
  • 针对时间索引数据,主动生成对应格式的未来时间戳,保证预测结果的索引一致性。
  • 滚动窗口模式可灵活切换:扩展窗口(训练集逐步增大)或固定窗口(每次仅新增一个数据点),只需调整current_train_end的更新逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:35:26