TimesFM 零样本时间序列预测:从零到一实战指南
2026/9/14 8:05:49 网站建设 项目流程

TimesFM 零样本时间序列预测:从零到一实战指南

【免费下载链接】timesfmTimesFM (Time Series Foundation Model) is a pretrained time-series foundation model developed by Google Research for time-series forecasting.项目地址: https://gitcode.com/GitHub_Trending/ti/timesfm

TimesFM 是 Google Research 开源的预训练时间序列基础模型,decoder-only 架构,喂进去一段历史序列就能直接出预测。它解决的痛点很明确:不用再为每条序列单独调 ARIMA、Prophet 这类统计模型,一个模型覆盖所有序列。读完本文,你本地就能跑通 TimesFM 零样本时间序列预测,拿到带分位数区间的预测结果,并知道协变量、微调、多框架后端分别该去哪找。

三步跑通首次预测

  1. 克隆仓库并装好依赖(以 PyTorch 后端为例,Flax 用户把[torch]换成[flax]即可):
git clone https://gitcode.com/GitHub_Trending/ti/timesfm cd timesfm uv venv && source .venv/bin/activate uv pip install -e .[torch] # 需要协变量支持时改装 -e .[xreg]
  1. 写一段最小脚本,加载官方 checkpoint(首次会从 HuggingFace 自动下载约 800MB 权重);
  2. 运行脚本,inputs里放任意长度的序列,马上就能看到点预测和分位数预测两个数组。
import torch, numpy as np, timesfm torch.set_float32_matmul_precision("high") # 放宽精度要求,加速矩阵乘 # 加载 2.5 版 200M 参数的 PyTorch 模型 model = timesfm.TimesFM_2p5_200M_torch.from_pretrained("google/timesfm-2.5-200m-pytorch") model.compile(timesfm.ForecastConfig( max_context=1024, # 最多回看 1024 个历史点 max_horizon=256, # 最多预测 256 步 normalize_inputs=True, # 自动归一化,避免量纲问题 use_continuous_quantile_head=True, # 启用连续分位数头 force_flip_invariance=True, infer_is_positive=True, # 输入非负则保证输出非负 fix_quantile_crossing=True, )) point, quantile = model.forecast( horizon=12, # 预测未来 12 步 inputs=[np.linspace(0, 1, 100), np.sin(np.linspace(0, 20, 67))], ) print(point.shape) # (2, 12) 点预测,批量处理两条序列 print(quantile.shape) # (2, 12, 10) 均值 + 10%~90% 分位数

三条命令加十几行代码,多序列批量推理在这里就体现出来了:inputs是一个列表,传一百条序列它就能一次推完,不用你写循环。

三个版本怎么选

版本参数规模 / 上下文长度核心差异
2.5(当前主线)200M / 16k连续分位数预测头(最长 1k horizon)、XReg 协变量、无需 frequency 标签
2.0(已归档)500M / 2048经典分位数头,功能稳定
1.0(已归档)200M / 512初代 decoder-only 结构,代码在v1/目录

选 2.5 的理由很简单:参数更少但上下文长了 8 倍,还带概率预测,绝大多数场景直接用就行。只有需要复现早期论文结果、或跑 v1/ 里的归档 benchmark 时,才回头装timesfm==1.3.0用 2.0/1.0。2.5 的 torch 和 flax 两套实现在 src/timesfm/timesfm_2p5/ 下可以对照阅读,想抠推理细节时很顺手。

进阶用法

接入协变量,把外生变量喂给模型

2.5 通过 XReg 支持静态协变量(每条序列特有的属性,比如门店品类)和动态协变量(随时间变化,比如气温、促销标记),动态协变量的长度需要覆盖 context + horizon 两部分。完整调用方式和数据准备流程见 协变量示例 Notebook 和 协变量演示脚本,效果长这样:

用 LoRA 在领域数据上微调

当零样本预测在你的业务分布上不够用时,可以走参数高效微调:2.5 已适配 HuggingFace Transformers,直接挂 PEFT 的 LoRA 适配器,标准训练循环即可。默认配置跑一个零售数据集的完整流程在 LoRA 微调脚本,想对比 JAX 侧的写法可以看 v1 微调 Notebook。

切换后端与批量推理调优

torch 后端通用性最好,flax 后端主打推理速度(JAX 编译后单核吞吐更高),XReg 场景则依赖 JAX。想验证自己的机器扛不扛得住,跑一下仓库自带的体检脚本 scripts/check_system.py,它会检查内存、显存和磁盘。CSV 直接预测的端到端入口是 scripts/forecast_csv.py,适合快速把业务数据丢进去看效果。

基准表现怎么看

仓库v1/experiments/下有两组官方基准:扩展基准(对比 Chronos、TimeGPT-1、统计集成模型)和长周期滚动验证基准(对比 Chronos 两个尺寸)。长周期基准的平均结果摘出来如下:

指标(平均)TimesFMChronos-LargeChronos-Mini
WAPE0.3860.4010.414
sMAPE0.6360.6530.688
耗时(秒)1079397,297252,649

解读一句话:精度和最好的基线基本打平甚至略优,但推理速度比 Chronos-Large 快了三个数量级以上——"比基线快 1000 倍"不是营销话术,是这张表里的实测数字。扩展基准里 27 个数据集的完整对比见 tfm_extended_new.png,TimesFM 在多数数据集的 mase 与 smape 上是加粗的第一名。

零样本效果的直观感受可以看这个全球温度异常序列的实例:左侧蓝色是历史数据,右侧红色是 12 个月的预测加 60%/80% 置信区间,代码在 run_forecast.py。

踩坑与硬性限制

  • 症状:Apple Silicon 上安装报lingvo编译失败 →原因lingvo依赖不支持 ARM 架构 →解法:直接换 PyTorch 后端pip install timesfm[torch],它对 ARM 支持最好。
  • 症状:安装过程被Killed (signal 9)杀掉 →原因:内存不足 →解法:官方建议至少 32GB 空闲内存,安装时关其他大内存应用,并用干净的虚拟环境重装。
  • 症状ModuleNotFoundError: No module named 'xreg_lib'原因:协变量功能依赖 JAX 生态 →解法:补装pip install jax jaxlib,或一开始就装.[xreg]附加包。
  • 症状:报Input contains NaN values原因:输入序列有空值 →解法:预测前先做前向填充或插值,模型不吃断点。
  • 症状:GPU 报CUDA out of memory原因:上下文或批量太大 →解法:把per_core_batch_size降到 8/4、max_context砍到够用为止,实在不行先用backend="cpu"验证逻辑。

更多报错的对照表在 TROUBLESHOOTING.md,遇到本文没覆盖的症状先翻一遍。

下一步

TimesFM 把"预测一条新序列"的门槛从"调参半天"降到了"加载模型 + 十行代码",零样本 + 批量推理 + 概率区间的组合在销售、传感器、天气这类场景里开箱即用。想深入的话,建议从 timesfm-forecasting/SKILL.md 入手——它把从环境体检到协变量预测的完整路径都写清楚了;跑通之后,下一步值得尝试的是把你自己的 CSV 丢进forecast_csv.py对比一次零样本效果,或者直接上 LoRA 微调看看业务分布上能压掉多少误差。

【免费下载链接】timesfmTimesFM (Time Series Foundation Model) is a pretrained time-series foundation model developed by Google Research for time-series forecasting.项目地址: https://gitcode.com/GitHub_Trending/ti/timesfm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询