如何在DataFrame多列中循环运行ARIMA模型并存储训练结果
ARIMA多列模型存储与Col9预测解决方案
核心问题修正
原代码循环中每次覆盖model变量,导致仅保留最后一列的模型,无法存储所有列的训练结果;同时训练测试划分逻辑不符合时间序列建模的时序要求,需调整。
修改后代码
# 训练测试划分:按时间顺序取前90行作为训练集,后续数据用于Col9验证,指定未来预测数量 train = df.iloc[:90, :] # 前90行所有列作为训练数据 test_col9 = df.iloc[90:, -1] # 第90行之后的Col9真实值,用于验证预测效果 n_future = 5 # 要预测的Col9未来值个数 order = (1, 2, 1) # 用字典存储每一列训练完成的ARIMA模型,避免循环覆盖 column_models = {} for col in train.columns: model = ARIMA(train[col], order=order) model.initialize_approximate_diffuse() fitted_model = model.fit() column_models[col] = fitted_model # 如需查看单列模型详细摘要,取消下方注释 # print(f"=== {col} 模型摘要 ===") # print(fitted_model.summary()) # 提取Col9的训练模型 col9_model = column_models['Col9'] # 对测试集区间的Col9进行预测 test_preds = col9_model.predict(start=len(train), end=len(train)+len(test_col9)-1) # 预测Col9的n_future个未来值 future_preds = col9_model.predict(start=len(df), end=len(df)+n_future-1) # 输出结果 print("Col9测试集预测结果:") print(test_preds) print("\nCol9未来{}个值的预测结果:".format(n_future)) print(future_preds)
关键改动说明
- 模型存储优化:使用字典
column_models,以列名为键、训练好的模型为值,彻底解决循环中模型被覆盖的问题 - 时序划分规范:严格按照时间顺序划分训练集,符合时间序列建模不能打乱时序的基本要求
- 双预测逻辑实现:同时完成测试集验证预测与未来值预测,匹配项目需求
- 扩展性保留:后续可通过
column_models[列名]快速调用任意列的模型,进行后续分析或预测
内容的提问来源于stack exchange,提问作者A Newbie
相关产品推荐
相关产品推荐

