首页
/ 5分钟上手TimesNet:从0到1实现ETTh1数据长周期预测

5分钟上手TimesNet:从0到1实现ETTh1数据长周期预测

2026-02-04 04:09:52作者:咎竹峻Karen

你是否还在为时间序列预测中的长期依赖问题烦恼?是否尝试过多种模型却难以捕捉数据中的周期规律?本文将带你零基础上手Time-Series-Library中的TimesNet模型,通过3个核心步骤完成电力负荷数据(ETTh1)的长周期预测,让你轻松掌握工业级时间序列预测技能。

项目简介与核心价值

Time-Series-Library是一个专注于先进深度时间序列模型的开源库,集成了30+种主流时序预测算法。其中TimesNet模型创新性地将傅里叶变换(Fourier Transform)与深度学习结合,通过捕捉数据中的多尺度周期特征,在电力、交通等行业的长周期预测任务中表现卓越。

项目结构清晰,主要模块包括:

TimesNet工作原理简析

TimesNet的核心创新在于多周期融合机制,通过傅里叶变换提取时间序列中的关键周期,再通过2D卷积捕捉不同周期的变化模式。其工作流程如下:

  1. 周期检测:使用FFT(快速傅里叶变换)分析时间序列,自动识别Top-K显著周期
  2. 周期分解:将原始序列按检测到的周期分解为多个子序列
  3. 多尺度学习:通过Inception卷积块学习不同周期的局部特征
  4. 自适应融合:基于周期重要性权重融合多尺度特征

核心代码实现可见models/TimesNet.py中的FFT_for_Period函数和TimesBlock类,其中周期检测关键代码如下:

def FFT_for_Period(x, k=2):
    # [B, T, C]
    xf = torch.fft.rfft(x, dim=1)
    # 通过幅度谱寻找周期
    frequency_list = abs(xf).mean(0).mean(-1)
    frequency_list[0] = 0  # 排除直流分量
    _, top_list = torch.topk(frequency_list, k)  # 取Top-K周期
    period = x.shape[1] // top_list
    return period, abs(xf).mean(-1)[:, top_list]

ETTh1数据集预测实践

环境准备与数据获取

ETTh1(Electricity Transformer Temperature)数据集包含某地区变压器温度的小时级监测数据,共7个特征,时间跨度约2年。实验前需确保已安装必要依赖:

pip install -r requirements.txt

数据集目录结构可参考项目文档pic/dataset.png

数据集结构

运行预测脚本

项目提供了预配置的TimesNet预测脚本,位于scripts/long_term_forecast/ETT_script/TimesNet_ETTh1.sh。该脚本包含4组实验,分别预测96/192/336/720小时(4/8/14/30天)的温度趋势,核心命令如下:

# 预测未来96小时(4天)
python -u run.py \
  --task_name long_term_forecast \
  --is_training 1 \
  --root_path ./dataset/ETT-small/ \
  --data_path ETTh1.csv \
  --model_id ETTh1_96_96 \
  --model TimesNet \
  --data ETTh1 \
  --features M \
  --seq_len 96 \          # 输入序列长度(4天)
  --label_len 48 \        # 标签序列长度(2天)
  --pred_len 96 \         # 预测序列长度(4天)
  --e_layers 2 \          # 编码器层数
  --d_layers 1 \          # 解码器层数
  --factor 3 \
  --enc_in 7 \            # 输入特征数
  --dec_in 7 \
  --c_out 7 \             # 输出特征数
  --d_model 16 \          # 模型维度
  --d_ff 32 \             # 前馈网络维度
  --top_k 5               # 选取Top-5周期

直接运行脚本即可启动训练与预测:

bash scripts/long_term_forecast/ETT_script/TimesNet_ETTh1.sh

关键参数解析

参数名 含义 推荐值
seq_len 输入序列长度 96(4天)
label_len 标签序列长度 48(2天)
pred_len 预测序列长度 96/192/336/720
top_k 周期检测数量 3-5
d_model 模型隐藏维度 16-64

参数调优可参考scripts/long_term_forecast/ETT_script/目录下其他模型的配置文件。

预测结果可视化

预测完成后,结果默认保存在./results/ETTh1_long_term_forecast/目录下。典型的预测效果如下(图片来源:tutorial/result.png):

ETTh1预测结果

图中展示了TimesNet对ETTh1数据集未来720小时(30天)的温度预测曲线,蓝色为真实值,红色为预测值,可见模型能较好捕捉长期趋势与短期波动。

进阶应用与优化方向

  1. 模型改进

    • 尝试调整top_k参数(3-10)以适应不同数据的周期特性
    • 增加d_modele_layers提升模型表达能力(需注意过拟合)
  2. 工程实践

  3. 应用扩展

总结与社区资源

通过本文实践,你已掌握使用TimesNet模型进行工业级时间序列预测的核心流程。更多资源:

  • 完整API文档:README.md
  • 模型对比实验:scripts/目录下各任务脚本
  • 社区交流:项目GitHub Issues(需自行访问)

建议进一步尝试不同数据集(如Weather、Traffic)和预测任务,探索TimesNet在不同场景下的表现。如有改进需求,可参考CONTRIBUTING.md参与项目贡献。

本文配套代码已同步至项目仓库,欢迎点赞收藏,持续关注Time-Series-Library的最新更新!

登录后查看全文
热门项目推荐
相关项目推荐