时间序列预测复现实战:9个主流模型在ETTh1数据集上的全面对比
摘要:本文在ETTh1电力变压器数据集上,以统一的实验设置(pred_len=96, lr=1e-4, seed=2021, batch=128, early stopping)复现了9个时间序列预测模型,涵盖RNN、Transformer、CNN、MLP四大类。其中PatchTST、DLinear、iTransformer、TimeMixer四个模型复现误差控制在5%以内,验证了复现-对照链路的正确性。本文记录了完整的实验结果对比、踩坑经验和对各类模型在短序列预测上表现差异的分析,供同行参考。
一、背景
时间序列预测是数据科学的核心任务之一,在电力负荷、交通流量、经济指标等领域有广泛应用。近年来,从RNN到Transformer再到Mamba/LLM,新模型层出不穷,但到底哪个模型好用、在什么场景下好用,光看论文是不够的,必须动手复现对比。
本文在经典的 ETTh1 数据集上,以完全统一的参数设置复现了9个模型,做了一次诚实的横向对比。
ETTh1数据集
| 属性 | 值 |
|---|---|
| 全称 | Electricity Transformer Temperature - h1 |
| 来源 | 中国某变电站2年逐小时数据 |
| 规模 | 17420行 × 8列 |
| 变量 | 7个特征(HUFL/HULL/MUFL/MULL/LUFL/LULL) + 1个目标(OT油温) |
| 划分 | 训练8640 / 验证2880 / 测试2880 |
| GitHub | https://github.com/zhouhaoyi/ETDataset |
二、实验设置
为了保证对比公平,所有模型使用完全统一的参数:
| 参数 | 值 | 说明 |
|---|---|---|
| 预测长度 | pred_len=96 | 预测未来96步 |
| 最大轮数 | 100 | early stopping兜底 |
| 学习率 | 0.0001 | Transformer类统一;MLP类用0.01 |
| 随机种子 | 2021 | 可复现 |
| 批大小 | 128 | --- |
| 早停耐心 | 3 | TimeMixer用10(论文设定) |
| 损失函数 | MSE | 训练+验证均用均方误差 |
| 硬件 | RTX 3090 24GB | 工作站 |
评估指标 :MSE(均方误差)、MAE(平均绝对误差)、R²(决定系数)。复现误差 = (复现MSE - 论文MSE) / 论文MSE × 100%,误差<5%算复现成功。
三、九个模型一览
| 模型 | 类别 | 年份 | 核心思想 |
|---|---|---|---|
| PatchTST | Transformer | 2023 | 把序列切成patch当token + 通道独立,减少参数量 |
| DLinear | MLP | 2023 | 趋势+季节两路线性分解,证明Transformer并非必要 |
| iTransformer | Transformer | 2024 | 倒置:把每个变量当一个token,注意力建模变量间关系 |
| TimeMixer | MLP多尺度 | 2024 | 多尺度分解 + 过去/未来混合,纯MLP堆叠 |
| Timer | Transformer(GPT) | 2024 | Patch + GPT骨干,大模型路线(需预训练) |
| TimesNet | CNN(2D) | 2023 | FFT找周期 → 1D转2D → 2D卷积捕获周期内+周期间 |
| Autoformer | Transformer | 2021 | 序列分解 + 自相关注意力替代点积注意力 |
| GRU | RNN | 2014 | 经典门控循环单元,作baseline |
| Informer | Transformer | 2021 | ProbSparse自注意力,降低复杂度O(LlogL) |
四、实验结果
按MSE从好到差排序:
| 排名 | 模型 | MSE | MAE | R² | 论文MSE | 复现误差 | 状态 |
|---|---|---|---|---|---|---|---|
| 🥇1 | PatchTST | 0.377 | 0.397 | 0.660 | 0.370 | +1.9% | ✅成功 |
| 🥈2 | TimeMixer | 0.381 | 0.399 | 0.442 | 0.375 | +1.6% | ✅成功(参考) |
| 🥉3 | DLinear | 0.383 | 0.395 | 0.655 | 0.375 | +2.1% | ✅成功 |
| 4 | iTransformer | 0.395 | 0.410 | 0.644 | 0.386 | +2.3% | ✅成功 |
| 5 | Timer | 0.434 | 0.433 | 0.609 | 0.366 | +18.5% | ⚠从头训练 |
| 6 | TimesNet | 0.436 | 0.445 | 0.361 | 0.386 | +12.9% | ⚠(参考) |
| 7 | Autoformer | 0.477 | 0.470 | 0.308 | 0.449 | +6.3% | ⚠(参考) |
| 8 | GRU | 0.915 | 0.737 | -1.000 | 无 | --- | ❌baseline |
| 9 | Informer | 0.951 | 0.772 | 0.142 | 0.865 | +9.9% | ⚠超阈值 |
结果分析
1. PatchTST最优(MSE=0.377)
PatchTST把序列切成patch(如16步一段)当作token输入Transformer,大幅减少了序列长度和参数量。在ETTh1这种小数据集上,这种"局部聚合"的策略让Transformer既能学到局部模式又不过拟合,复现误差仅+1.9%。
2. 简单模型不输复杂模型
DLinear(0.383)和TimeMixer(0.381)都是纯MLP,结构简单到几层线性全连接,却打榜了。DLinear的论文标题就叫 "Are Transformers Effective for Time Series Forecasting?" ------直接质疑Transformer在时序预测上的必要性。我们的实验印证了这一点:在ETTh1这种小数据+短序列场景,简单线性模型反而更稳。
3. Informer/GRU翻车
- Informer(0.951):ProbSparse自注意力的优势在于长序列(论文验证在seq_len=336/720),但我们的pred_len=96是短序列,稀疏采样反而丢了信息,第1轮就过拟合。
- GRU(0.915, R²=-1.0):GRU原论文是做序列生成/翻译的,不是时序预测,没有对照论文值。作为baseline,它告诉我们"不做任何时序特化的RNN有多差"。
4. Timer需预训练
Timer是GPT架构的时序大模型,论文MSE=0.366,但我们从头训练得到0.434(+18.5%)。差距来自预训练 :论文用UTSD大数据集(包含数百个时序数据集)预训练后再在ETTh1微调,我们工作站没有UTSD也没有预训练权重,只能--ckpt_path random从头训。这说明大模型路线强依赖预训练数据。
5. TimesNet/Autoformer偏差
两者都是"利用周期性"的模型(TimesNet用FFT找周期转2D,Autoformer用自相关注意力),但ETTh1的周期性较弱(电力负荷日周期/周周期不如交通数据明显),优势没发挥出来。加上容量设置偏小、学习率衰减快、早停激进,导致偏差超5%。
五、踩坑记录
坑1:Informer的 reformer_pytorch 依赖
ModuleNotFoundError: No module named 'reformer_pytorch'
解决 :Informer本身不用ReformerLayer,只是layers/SelfAttention_Family.py顶部无条件import了。改成try-except即可:
python
try:
from reformer_pytorch import LSHSelfAttention
except ImportError:
LSHSelfAttention = None
坑2:Mamba的 mamba_ssm 依赖
ModuleNotFoundError: No module named 'mamba_ssm'
mamba_ssm是选择性状态空间模型的CUDA扩展,需要pip install mamba-ssm编译安装。但工作站没有外网,PyPI连不上。最终跳过Mamba,换成TimesNet(纯PyTorch无额外依赖)。
坑3:Timer框架参数不兼容
Timer是独立框架(非TSLib),它的run.py不接受--enc_in/--dec_in/--c_out参数(TSLib有这三个),而是自动从数据推断维度。从TSLib迁移命令时必须去掉这三个参数,否则报unrecognized arguments。
坑4:Timer不保存预测值
Timer的exp/exp_forecast.py只保存了metrics.npy,没保存pred.npy/true.npy,导致无法补算R²和sMAPE。修改源码加np.save解决。
坑5:GRU框架里没有
TSLib没有GRU模型,自己写了一个models/GRU.py:标准nn.GRU + Linear projection,纯PyTorch实现。
六、结论
- 在ETTh1-96短序列预测上,PatchTST最优,patch策略让Transformer在小数据上也能学好。
- 简单MLP模型(DLinear/TimeMixer)是强有力的baseline,不输甚至超过复杂Transformer,选模型不要盲目追新。
- 长序列模型在短序列上可能翻车 (Informer),周期性模型在弱周期数据上优势不明显(TimesNet/Autoformer),模型选择要匹配数据特性。
- 大模型路线(Timer)强依赖预训练,没有预训练数据/权重时优势发挥不出来。
- 复现论文要统一参数,否则对比不公平;复现误差<5%可作为成功标准。
七、下一步
- 攻克Mamba依赖(离线安装或找纯PyTorch替代)
- 下载METR-LA/PEMS交通数据,跑GNN类模型(STGCN/STGODE等)
- 在更多数据集(Weather/Traffic/Electricity)上验证已有模型
- 尝试LLM类模型(Chronos/Moirai)的本地部署
环境:工作站 hhh-cfl310(Python 3.10 + PyTorch 2.4.1 + CUDA 12.1, RTX 3090 24GB),框架 TSLib
标签 :时间序列预测 ETTh1 PatchTST DLinear iTransformer 模型复现 Transformer 深度学习