CSDN博客_时序预测9模型复现对比

时间序列预测复现实战: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实现。


六、结论

  1. 在ETTh1-96短序列预测上,PatchTST最优,patch策略让Transformer在小数据上也能学好。
  2. 简单MLP模型(DLinear/TimeMixer)是强有力的baseline,不输甚至超过复杂Transformer,选模型不要盲目追新。
  3. 长序列模型在短序列上可能翻车 (Informer),周期性模型在弱周期数据上优势不明显(TimesNet/Autoformer),模型选择要匹配数据特性。
  4. 大模型路线(Timer)强依赖预训练,没有预训练数据/权重时优势发挥不出来。
  5. 复现论文要统一参数,否则对比不公平;复现误差<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 深度学习

相关推荐
财迅通Ai1 小时前
远信储能(9621.HK)招股开启,AI+储能跑出新范式
大数据·人工智能·远信储能
老金带你玩AI1 小时前
一人公司,单月收入近10万,我做了这三门生意(OPC系列-3)
人工智能
水如烟1 小时前
孤能子视角:AI不是“东西”,是认知库重整理交互系统——从李飞飞“不知道AGI和AI的区别在哪里”说起:知识增量与应用增量是两个判据层
人工智能
云-缩影1 小时前
拆解函数计算 Serverless GPU 部署 AI 模型:Flux 生图和语音复刻怎么跑的
人工智能·云原生·serverless
zcg19422 小时前
通过UE制作segment和depth数据
人工智能·深度学习
一只鹿鹿鹿2 小时前
智算算力、AI-芯片与产品解析(PPT文件)
大数据·运维·网络·人工智能·物联网·1024程序员节
stormzhangV2 小时前
科普下 AI 降智
人工智能·aigc
懿路向前2 小时前
唤醒工作台全实录(一):立项——化性起伪与三条设计原则
人工智能·华为
维克兜率天2 小时前
【维克】指数调整:哪些股票会被“强制买入“?
人工智能·python·算法