xLSTM 时间序列 天气预测 ERA5 深度学习
xLSTM-Mixer — 天气预测项目复现与实现总结
最后编辑: 2026-05-31 16:57
一、项目概述
本项目基于 xLSTM-Mixer 框架,面向上海 ERA5 再分析数据,完成 t2m(2 米气温) 的长时间序列预测任务。项目从上游框架出发,逐步适配到具体的上海天气数据场景,构建了完整的数据清洗 → 训练 → 滚动评估 → 优化实验的工作流。
| 维度 | 详情 |
|---|---|
| 框架 | xLSTM-Mixer(基于 xLSTM + MLP-Mixer) |
| 数据 | ERA5 再分析数据(2020–2025 上海) |
| 目标 | t2m(2 米气温),单位:开尔文 |
| 任务 | 长期预测:seq_len=168(7 天),pred_len=24(1 天) |
| 评估 | 2025 年滚动验证,每日滑动窗口 |
对应仓库:seraphim522/xlstm-mixer_exploration
二、框架与数据
2.1 xLSTM-Mixer 架构
xLSTM-Mixer 将 xLSTM(扩展长短期记忆)与 MLP-Mixer 的通道混合思想结合:
- xLSTM:处理时间维度的长期依赖,比传统 LSTM 更强的记忆能力
- MLP-Mixer:通过通道混合(channel mixing)和令牌混合(token mixing)捕获多变量交互
- 适用场景:长时间序列预测,尤其是多变量气象数据
2.2 数据集
上海 ERA5 数据说明:
| 项目 | 说明 |
|---|---|
| 变量 | t2m(目标)、sp、u10、v10、tp 等 |
| t2m 范围 | 265.59–311.40 K(≈ -7.56°C 到 38.25°C) |
| 时间跨度 | 2020–2025 |
| 时间粒度 | 小时级 |
| 数据质量 | 缺失值 0,重复时间戳 0,非整点间隔 0 |
2.3 数据清洗原则
项目中最重要的经验教训之一:
| 原则 | 说明 |
|---|---|
| 清洗 = 纯合法性校验 | 清理非法时间戳、非有限值、非物理值 |
保留 tp == 0 | 零降水量是合法物理值,不可删除 |
| 窗口级跳过 | 通过 valid_start_indices 跳过含 NaN 的窗口 |
| 不混合策略 | 分割策略、权重、OOD 特征作为显式开关,不下沉到清洗层 |
三、训练配置
3.1 核心参数
| 参数 | 值 |
|---|---|
| 模型 | xLSTM-Mixer(ShanghaiERA5Merged) |
| seq_len | 168(7 天小时级) |
| pred_len | 24(1 天小时级) |
| 训练集 | 2020–2023 |
| 验证集 | 2024 |
| 测试集 | 2025(滚动评估) |
| 损失函数 | L1Loss |
| 执行方式 | Docker 优先(Windows PowerShell) |
3.2 A/B/C 实验开关
项目设计了三个可组合的实验变量:
| 开关 | 变量 | 含义 |
|---|---|---|
| A | data.use_calendar_split | A1 = 日历分割(验证=2024,测试=2025) |
| B | model.use_spring_weighting | B1 = 春季加权(对春季月份增加损失权重) |
| C | data.use_t2m_ood_feature | C1 = 启用 t2m_ood 特征(温度偏离信号) |
默认方案:A1B1C1
四、滚动评估结果
4.1 总体指标
| 指标 | 值 |
|---|---|
| MAE(t2m) | 1.65790 |
| RMSE(t2m) | 2.23078 |
| 最佳日 | 2025-02-02(MAE = 0.26874) |
| 最差日 | 2025-03-27(MAE = 6.17059) |
4.2 季节性表现
| 季节 | MAE |
|---|---|
| 春(3-5 月) | 1.99527 |
| 夏(6-8 月) | 1.19122 |
| 秋(9-11 月) | 1.42720 |
| 冬(12-2 月) | 2.02335 |
夏季预测最好,冬季和春季波动较大,与气温变化幅度正相关。
4.3 月度表现
| 月 | MAE | 趋势 |
|---|---|---|
| 1 月 | 1.997 | ❄️ 冬季 |
| 4 月 | 2.046 | 🌸 春季波动 |
| 7 月 | 0.956 | ☀️ 夏季最佳 |
| 8 月 | 0.930 | ☀️ 夏季最佳 |
| 12 月 | 2.006 | ❄️ 冬季 |
夏季(7-8 月)MAE 低于 1.0,模型在温度高且稳定的时段表现最优。
五、优化实验
5.1 t2m_ood 特征的影响
t2m_ood(气温偏离信号)作为额外特征输入:
| 效果 | 说明 |
|---|---|
| ✅ MAE 改善 | 连续 OOD 信号稳定降低了平均绝对误差 |
| ⚠️ MSE 未同步改善 | 波形振幅未恢复,平滑峰谷问题仍存在 |
| 📊 解释 | t2m_ood 更像"季节偏移标志"而非"振幅恢复特征" |
5.2 最终最优结果
A1B1C1 方案(日历分割 + 春季加权 + t2m_ood):
| 指标 | 值 |
|---|---|
| MAE_target | 1.3097 |
| MSE_target | 3.3485 |
5.3 优化结果可视化
在 E:\dl_learning\xlstm\优化结果\ 下保存了 A/B/C 组合的波形对比图(A0B0C0 到 A1B1C1),展示了不同配置下模型预测轨迹的差异。
六、技术栈与工具链
| 环节 | 工具 |
|---|---|
| 框架 | PyTorch + PyTorch Lightning |
| 实验跟踪 | Weights & Biases(WandB) |
| 容器化 | Docker(Linux 容器 on Windows) |
| 数据格式 | NetCDF + CSV |
| 开发工具 | VS Code + PowerShell |
| 评估脚本 | Python 滚动验证管线 |
七、总结与经验
7.1 关键成果
- 完整复现 了 xLSTM-Mixer 在上海 ERA5 气温预测上的全流程
- 构建了 数据清洗合法性守卫,明确区分清洗与策略
- A/B/C 实验矩阵 系统性地评估了分割策略、春季加权和 OOD 特征的影响
- Docker 化执行 减少了宿主机/容器环境漂移
- 滚动评估管线 完成了 2025 全年的每日滑动窗口验证
7.2 未完成优化方向
- 波形锐度问题:模型学习了季节性趋势偏移,但峰谷振幅仍偏平滑
- 损失函数探索:当前 L1Loss,可尝试 Huber、Quantile 或混合损失
- 多步预测:pred_len=24 是 1 天窗口,可尝试更长的预测 horizon
7.3 项目交付物
| 交付件 | 位置 |
|---|---|
| 训练配置 | configs/long_term_forecasting/shanghai_era5_2020_2025.yaml |
| 滚动评估输出 | outputs/shanghai_rolling_validation_2020_2025_formal/ |
| 评估报告 | summary_report.md |
| 处理调整记录 | processing_adjustments.md |
| A/B/C 波形对比 | E:\dl_learning\xlstm\优化结果\ |