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

训练LSTM模型后如何预测未来30天的时间序列值

基于已训练LSTM模型实现未来30天时间序列预测

核心思路

当前模型为单步预测模型,仅能输出下一个时间步的预测值。要完成未来30天的预测,需采用滚动预测策略:每一步的预测结果经逆变换还原后,作为下一轮预测的输入特征,循环执行30次即可得到连续的多步预测结果。

具体实现步骤

在现有代码的基础上,添加以下代码块即可完成未来30天的预测:

新增预测代码

# --------------- 未来30天预测逻辑 ---------------
# 设置预测天数
n_future_days = 30
# 初始化历史数据池(用于逆差分计算)
history_data = list(raw_values)
# 初始输入特征:取差分序列的最后一个值
current_feature = [diff_values.values[-1]]

# 存储未来预测结果
future_preds = []

for _ in range(n_future_days):
    # 1. 对输入特征做缩放(复用训练阶段的scaler)
    scaled_input = scaler.transform(numpy.array(current_feature).reshape(1, 1))
    # 2. LSTM单步预测
    scaled_pred = forecast_lstm(lstm_model, 1, scaled_input[0])
    # 3. 逆缩放得到差分真实值
    diff_pred = invert_scale(scaler, scaled_input[0], scaled_pred)
    # 4. 逆差分还原为原始数据尺度的预测值
    raw_pred = inverse_difference(history_data, diff_pred, 1)
    # 5. 保存预测结果
    future_preds.append(raw_pred)
    # 6. 更新输入特征与历史数据:为下一次预测做准备
    current_feature = [diff_pred]
    history_data.append(raw_pred)

# 打印未来30天预测结果
print("未来30天预测值:")
for idx, pred in enumerate(future_preds, 1):
    print(f"第{idx}天: {pred:.2f}")

# 可视化历史数据与未来预测
pyplot.figure(figsize=(12, 6))
pyplot.plot(raw_values, label='历史数据')
# 生成未来日期对应的索引(可根据原始数据的日期格式扩展)
future_indices = range(len(raw_values), len(raw_values)+n_future_days)
pyplot.plot(future_indices, future_preds, label='未来30天预测', color='#ff4d4f')
pyplot.legend()
pyplot.show()

关键细节说明

  • 模型状态保持:由于你的LSTM模型设置了stateful=True,且测试前已通过lstm_model.predict(train_reshaped, batch_size=1)完成状态初始化,滚动预测时无需额外重置状态,模型会自动延续学习到的时序状态。
  • 数据变换一致性:所有缩放、逆缩放、差分、逆差分操作必须与训练阶段完全一致,否则会导致预测结果偏离真实尺度。
  • 历史数据更新:每一步逆差分计算依赖最新的历史数据,因此必须将每次预测的原始值加入历史数据池,确保后续预测的准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:20:09