Python中ARIMA模型能否接收自定义输入序列?
问题
在Python中训练LSTM模型时,可使用部分数据完成训练,在推理阶段可输入训练集以外的任意序列(例如最近10个时间步长)以生成输出。请问ARIMA模型是否可以按此方式运行?能否为其输入自定义序列,还是仅能基于训练数据预测后续步长?
现有代码
import pandas as pd from statsmodels.tsa.arima.model import ARIMA import torch import sys import math # 读取CSV数据集 df = pd.read_csv('sm_data.csv', header=None) # 取前102行作为训练数据,剩余作为测试数据 train_data = df.iloc[:102, :] test_data = df.iloc[102:, :] # 遍历每个序列 forecast_results = {} for column in df.columns: # 在训练数据上拟合ARIMA模型 model = ARIMA(train_data[column], order=(10,1,0)) model_fit = model.fit() # 预测未来36个月 forecast = model_fit.forecast(steps=36) # 存储预测结果 forecast_results[column] = forecast # 将预测结果转为DataFrame forecast_df = pd.DataFrame(forecast_results) # 保存预测结果到CSV forecast_df.to_csv('forecast_results.csv', index=False)
解答
ARIMA可以实现类似LSTM的“自定义序列输入预测”,但逻辑和LSTM有差异:
- LSTM是直接将输入序列作为模型的输入张量生成预测;而ARIMA基于自回归的时序依赖逻辑,它需要依赖完整的时序上下文来计算条件概率,无法直接喂入一段孤立的自定义序列就输出预测。
- 你可以通过两种方式实现需求:
- 基于自定义序列重新拟合模型:如果你的自定义序列是独立的时序片段,直接用这段序列作为训练数据拟合ARIMA,再预测后续步长。
- 增量更新模型历史:如果自定义序列是原训练数据之后的新观测值,用
update方法将新序列追加到模型的历史数据中,无需重新拟合整个训练集,再基于更新后的上下文预测。
代码示例
1. 基于独立自定义序列预测
# 假设custom_seq是pd.Series格式的自定义序列 custom_model = ARIMA(custom_seq, order=(10,1,0)) custom_model_fit = custom_model.fit() # 预测后续5步 custom_forecast = custom_model_fit.forecast(steps=5)
2. 增量更新原模型后预测
# 基于已训练好的model_fit,增量更新自定义序列 updated_model_fit = model_fit.update(custom_seq) # 预测后续5步 updated_forecast = updated_model_fit.forecast(steps=5)
内容的提问来源于stack exchange,提问作者Travelling Salesman
相关产品推荐
相关产品推荐

