前言

最近我复现了时间序列预测领域的一篇经典论文:

Are Transformers Effective for Time Series Forecasting?
AAAI 2023
对应代码仓库:LTSF-Linear

DLinear 这篇论文提出了一个很有意思的问题:

在长序列时间序列预测任务中,复杂的 Transformer 模型真的一定比简单线性模型好吗?

论文的结论是:在很多长序列预测 benchmark 上,简单的线性模型反而可以取得非常有竞争力的结果,甚至超过一些 Transformer-based 方法。

这篇博客主要记录我本次复现实验的过程、结果和阶段性分析。相比单纯“跑通代码”,我更希望把这次复现整理成一个比较规范的实验过程,包括:

  1. 跑哪些模型;
  2. 跑哪些数据集;
  3. 如何整理 MSE/MAE;
  4. 如何比较 Linear 和 DLinear;
  5. 如何分析多次运行稳定性;
  6. 如何结合可视化结果进行解释;
  7. 当前复现还缺什么。

论文和模型简介

LTSF-Linear 论文主要讨论的是 Long-term Time Series Forecasting,也就是长序列时间序列预测任务。

论文中提出了三个非常简单的线性模型:

模型 核心思想
Linear 直接用一个线性层从历史序列预测未来序列
NLinear 在 Linear 基础上加入简单归一化,用于缓解分布偏移
DLinear 先将序列分解为 trend 和 seasonal,再分别用线性层预测

其中,DLinear 是本文最核心的模型之一。

DLinear 的基本思想是:

原始序列 = 趋势项 trend + 季节/残差项 seasonal

然后模型分别对趋势项和季节项进行线性预测,最后将两部分结果相加得到最终预测。

这看起来很简单,但它在很多长预测任务上表现不错。


实验环境与结果来源

本次实验主要在 WSL 环境中运行,然后将结果同步到 Windows 上整理。

实验结果主要来自以下文件:

logs/LongForecasting/*.log
result.txt
test_results/

其中:

文件或目录 作用
logs/LongForecasting/*.log 保存每次实验的训练过程和最终 MSE/MAE
result.txt 保存每次测试的汇总指标,但存在重复记录
test_results/ 保存预测曲线 PDF,可用于可视化分析
results/ 保存 .npy 预测数组,本阶段主要作为备份

由于 result.txt 中可能出现重复记录,所以最终分析时我主要以:

logs/LongForecasting/*.log

为准。


当前完成的实验

本阶段主要完成了以下实验。

ETTh1 数据集

在 ETTh1 数据集上,我完成了:

Dataset Model Seq Len Pred Len
ETTh1 Linear 336 96 / 192 / 336 / 720
ETTh1 DLinear 336 96 / 192 / 336 / 720
ETTh1 DLinear 336 96 / 192 / 336 / 720,多次运行

也就是说,ETTh1 上已经可以比较:

Linear vs DLinear

同时,DLinear 也有多次运行结果,可以做初步稳定性分析。


ETTm1 数据集

在 ETTm1 数据集上,我完成了:

Dataset Model Seq Len Pred Len
ETTm1 DLinear 336 96 / 192 / 336 / 720

这个实验主要用于观察 DLinear 在另一个 ETT 数据集上的预测长度变化趋势。


ETTh1:Linear 与 DLinear 对比

首先看 ETTh1 上 Linear 和 DLinear 的 MSE 对比。

这里 DLinear 使用多次运行的平均结果。

Pred Len Linear MSE DLinear Mean MSE 结论
96 0.3747 0.3767 基本接近,Linear 略优
192 0.4183 0.4201 基本接近,Linear 略优
336 0.4792 0.4583 DLinear 更优
720 0.6250 0.5087 DLinear 明显更优

再看 MAE:

Pred Len Linear MAE DLinear Mean MAE 结论
96 0.3967 0.3982 基本接近
192 0.4288 0.4288 基本持平
336 0.4767 0.4593 DLinear 更优
720 0.5930 0.5159 DLinear 明显更优

从结果可以看出:

  1. 在短预测长度 96 和 192 下,Linear 和 DLinear 的表现非常接近;
  2. 在更长预测长度 336 和 720 下,DLinear 开始明显优于 Linear;
  3. 尤其是 pred_len=720 时,DLinear 相比 Linear 的 MSE 下降约 18.60%。

这个结果说明:

DLinear 的趋势/季节分解机制在长预测任务中更有优势。

这也符合论文中的直觉:当预测长度变长时,显式建模趋势和周期结构会更重要。


ETTh1:DLinear 多次运行稳定性分析

为了避免只看单次实验结果,我对 ETTh1 上的 DLinear 结果进行了多次运行整理。

当前有三组结果:

default/rerun
seed2025
seed2026

其中 default/rerun 是一次未单独标注 seed 的重跑记录,seed2025 和 seed2026 是两次带 seed 标记的实验。

MSE 结果

Pred Len Default/Rerun MSE Seed2025 MSE Seed2026 MSE Mean MSE Std
96 0.3841 0.3720 0.3740 0.3767 0.0065
192 0.4435 0.4070 0.4099 0.4201 0.0203
336 0.4469 0.4644 0.4636 0.4583 0.0099
720 0.5042 0.5393 0.4827 0.5087 0.0286

这里的 Std 是标准差,用于衡量多次运行结果的波动程度。

如何理解标准差

标准差越小,说明多次运行结果越接近,模型越稳定。

标准差越大,说明不同运行之间差异越大,模型对随机性或训练过程更敏感。

从上表可以看到:

  • pred_len=96 的结果比较稳定;
  • pred_len=336 的结果也相对稳定;
  • pred_len=720 的波动较大;
  • pred_len=192 中 default/rerun 明显高于 seed2025/2026,说明也存在一定训练波动。

这说明:

长预测任务本身更困难,模型结果更容易受到随机初始化、训练过程和 early stopping 的影响。

如果后续要写得更严谨,应该继续补充更多随机种子,例如:

seed2027
seed2028

然后报告:

mean ± std

ETTm1:DLinear 预测长度趋势分析

接下来观察 ETTm1 上 DLinear 的结果。

Pred Len MSE MAE
96 0.3012 0.3446
192 0.3356 0.3661
336 0.3718 0.3887
720 0.4266 0.4227

这个结果非常符合长序列预测任务的一般规律:

预测长度越长,误差越大。

从 96 到 720:

  • MSE 从 0.3012 增加到 0.4266;
  • MAE 从 0.3446 增加到 0.4227。

这说明实验结果整体合理,没有出现明显异常。


可视化结果怎么看

除了 MSE 和 MAE,项目还会在 test_results/ 中保存预测曲线 PDF。

可视化图通常包含:

历史输入 + 真实未来曲线 + 模型预测曲线

看这些图时,我主要从以下几个角度分析。


预测曲线是否跟随真实曲线趋势

首先看预测曲线的大方向是否和真实曲线一致。

比如:

  • 真实曲线整体上升,预测曲线是否也上升;
  • 真实曲线整体下降,预测曲线是否也下降;
  • 真实曲线有周期性波动,预测曲线是否也有类似波动。

如果趋势能跟上,说明模型捕捉到了主要变化规律。

如果趋势跟不上,说明模型可能只学到了平均水平,而没有学到时间变化结构。


长预测下是否出现过度平滑

长预测时,模型经常会出现一种现象:

预测曲线越来越平,波动越来越小。

也就是说:

  • 真实曲线有明显峰谷;
  • 但预测曲线像一条比较平滑的线;
  • 模型预测不到尖峰、突变、快速下降或快速上升。

这说明模型对长期未来的不确定性处理不够好。

这个现象尤其应该在:

pred_len=720

中观察。


Linear 和 DLinear 在长预测下是否有差异

可以对比同一个数据集、同一个预测长度下的图。

例如:

ETTh1_336_720_Linear.../0.pdf
ETTh1_336_720_DLinear.../0.pdf

主要看:

  1. 哪个模型预测曲线更接近真实曲线;
  2. 哪个模型趋势更准;
  3. 哪个模型更能保留波动;
  4. 哪个模型在预测后半段偏移更严重。

如果 DLinear 图上更贴近真实曲线,同时 MSE/MAE 也更低,就可以说:

DLinear 不仅指标更好,可视化上也能更好地跟随长期趋势。


是否存在峰值预测失败的样本

峰值预测失败指的是:

真实曲线突然升高或降低,但预测曲线没有跟上。

常见表现包括:

  • 真实值有尖峰,预测没有;
  • 真实值有突然下降,预测还很平;
  • 预测曲线滞后于真实曲线;
  • 模型只预测出平均趋势,忽略极端变化。

这类图很适合放进汇报,因为它能说明:

模型虽然整体 MSE/MAE 不错,但对突发变化仍然不足。

这就是失败案例分析。


当前结果说明了什么

综合数值结果和可视化分析,本阶段可以得到几个结论。

简单 Linear 已经是很强的 baseline

ETTh1 上,在 pred_len=96 和 192 时,Linear 和 DLinear 的结果非常接近,甚至 Linear 略优。

这说明:

在一些短预测任务中,简单线性映射已经能捕捉主要模式。

这也是 LTSF-Linear 论文想强调的核心观点之一:不要盲目认为复杂模型一定更好。


DLinear 在长预测上更有优势

当预测长度增加到 336 和 720 时,DLinear 明显优于 Linear。

尤其在 pred_len=720 上:

Linear MSE = 0.6250
DLinear Mean MSE = 0.5087

DLinear 的优势很明显。

这说明:

趋势/季节分解结构更适合长预测任务。


长预测任务稳定性更差

DLinear 在 pred_len=720 上的多次运行结果波动较大:

0.5042 / 0.5393 / 0.4827

这说明:

长预测任务不仅误差更大,而且结果稳定性也更差。

因此后续如果要做更规范的科研实验,需要更多 seed。


ETTm1 结果趋势合理

ETTm1 上 DLinear 的误差随预测长度增加而单调上升:

96 < 192 < 336 < 720

这符合长序列预测任务的基本规律,说明实验结果整体可信。


当前复现还缺什么

虽然目前已经完成了阶段性复现,但还不能说完整复现论文。

当前还缺:

  1. NLinear 实验
    LTSF-Linear 包含 Linear、NLinear、DLinear 三个模型,目前还缺 NLinear。

  2. Transformer baseline
    论文核心问题是“Transformer 是否适合长序列预测”,所以后续需要补 Transformer 或 Autoformer。

  3. 更多数据集
    当前主要有 ETTh1 和 ETTm1,后续可以补 Weather、Exchange 等。

  4. 更多随机种子
    尤其是 DLinear 在 pred_len=720 上波动较大,需要更多 seed 验证稳定性。

  5. 更系统的可视化分析
    后续可以从 PDF 中挑选成功案例和失败案例,形成更完整的图表分析。


下一步计划

如果继续推进,我认为优先级应该是:

1. 补 ETTh1 + NLinear + pred_len=96/192/336/720
2. 补 ETTh1 + DLinear + pred_len=720 + 更多 seed
3. 补 Transformer 或 Autoformer baseline
4. 整理典型可视化图
5. 扩展到 Weather / Exchange 数据集

这样可以从“代码复现”进一步升级为“系统实验复现”。


总结

本次复现实验完成了 LTSF-Linear 的阶段性实验整理,主要包括:

  • ETTh1 上 Linear 和 DLinear 的对比;
  • ETTh1 上 DLinear 的多次运行稳定性分析;
  • ETTm1 上 DLinear 的预测长度趋势分析;
  • 基于 test_results 的可视化分析思路。

目前最重要的结论是:

在短预测长度下,Linear 和 DLinear 表现接近;但随着预测长度变长,DLinear 的优势逐渐明显,尤其在 pred_len=720 上明显优于 Linear。这说明 DLinear 的趋势/季节分解结构对长预测任务有帮助。

同时也观察到:

长预测任务下模型结果波动更大,因此后续需要更多随机种子和更多 baseline 来增强实验可信度。

这次复现让我认识到,科研中的“复现”不只是把代码跑通,更重要的是把结果整理成表格、做对比、分析趋势、解释可视化现象,并明确下一步还缺什么。