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

如何合并多列训练的ARIMA模型并用于测试集预测?

多列时间序列ARIMA模型训练与预测问题解决

问题描述

我有一个包含100行、1000+列的时间序列DataFrame,各列相互独立。我需要为每一列训练ARIMA模型,但当前代码在循环训练时,模型会被不断覆盖,最终仅保留最后一列的训练模型,用它做测试集预测导致过拟合。希望能保存所有训练好的模型,并基于这些模型完成测试集预测。

示例DataFrame

date                        Col 1     Col 2     Col 3      Col 4
2001-07-21 10:00:00+05:00    45          51       31         3  
2001-07-21 10:15:00+05:00    46          50       32         3
2001-07-21 10:30:00+05:00    47          51       34         7
2001-07-21 10:45:00+05:00    50          50       33         9
2001-07-21 11:00:00+05:00    55          51       32         8
2001-07-21 11:15:00+05:00    52          73       34         11
2001-07-21 11:30:00+05:00    51          72       30         14

原代码问题

原代码中循环训练时,每次都将model变量覆盖为当前列的模型,最终仅保留最后一列的训练结果,导致预测仅依赖该模型:

# training set inclues all columns except the last and test set includes only last column.
train = df.iloc[:, :-1]
test = df.iloc[:,-1:]

order = (1,2,3) # <- plug-in p, d, q here 

for col in train.columns:
  model = ARIMA(train[col], order = order)  #training every column in training set
  model = model.fit()
model.summary()

predictions = model.predict(len(test))

解决方法

1. 修正数据集拆分方式(时间序列专用)

时间序列不能按列拆分训练集和测试集,应按时间轴划分(比如取前80%数据训练,后20%测试):

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

# 按时间划分训练集和测试集
train_size = int(len(df) * 0.8)
train = df.iloc[:train_size, :]
test = df.iloc[train_size:, :]

2. 存储所有训练好的模型

用字典存储每列对应的ARIMA模型,键为列名,值为训练完成的模型:

order = (1, 2, 3)
models = {}

# 遍历所有列训练模型
for col in df.columns:
    arima_model = ARIMA(train[col], order=order)
    models[col] = arima_model.fit()

# 可查看任意列的模型摘要
# models['Col 1'].summary()

3. 基于所有模型生成测试集预测

遍历测试集的每一列,用对应模型生成预测结果,合并为完整的预测DataFrame:

predictions = pd.DataFrame(index=test.index)

for col in test.columns:
    # 生成对应列的测试集预测,typ='levels'保证输出原始尺度值
    pred = models[col].predict(
        start=len(train),
        end=len(train) + len(test) - 1,
        typ='levels'
    )
    predictions[col] = pred

# 查看预测结果
print(predictions)

说明

  • 由于各列相互独立,无需合并模型本身,只需分别存储每个列的模型,再分别预测后合并结果即可。
  • 原代码的过拟合问题源于仅用单一列的模型预测,现在每个测试列都用对应训练列的模型预测,结果更合理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:55:21