TimesFM:预测之前的脏活都在模型外面

TimesFM:预测之前的脏活都在模型外面

💡 原文中文,约3700字,阅读约需9分钟。
📝

内容提要

TimesFM是Google Research推出的零样本时序预测基座模型,采用decoder-only patch架构。2.5版参数降至200M,上下文长度增至16384。模型通过外部预处理处理变长序列、NaN和分位数预测,支持协变量和分位头。但存在双版本号、默认双倍算力及未实现的window_size配置等问题。

🔎

延伸解读

版本号与模型号分离的坑

TimesFM 的库版本和模型版本是两套体系:pip 安装的库版本是 2.0.2,而最新模型是 2.5。加载老模型需要退回旧库版本,例如 pip install timesfm==1.3.0。这种分离容易让使用者混淆,建议在依赖管理中明确区分库版本和模型权重版本,避免加载不匹配的模型。

预处理与后处理全在模型外

TimesFM 的 forecast() 方法替调用方处理了变长序列、NaN、batch 补齐等脏活,模型本身只吃定长输入。这种设计降低了使用门槛,但也意味着调用方需要理解这些外部处理逻辑,例如 strip_leading_nans 和线性插值,才能正确解释预测结果。

默认配置的算力代价

force_flip_invariance 默认开启,实现方式是跑两遍前向,导致默认配置下每次预测需要双倍算力。如果场景对对称性要求不高,可以显式关闭以节省计算资源。此外,window_size 配置项在代码中未被实现,属于占位符,使用时不要依赖它。

分位头与区间预测

TimesFM 2.5 提供了可选的分位头(30M 参数),用于生成连续分位预测,避免分位塌缩。如果不开启,则退回到主干输出的十列分位,容易塌缩。因此,若需要可靠的区间预测,建议启用该分位头,尽管会增加模型大小。

Q&A

TimesFM是什么?它有什么特点?

TimesFM是Google Research推出的零样本时序预测基座模型,采用decoder-only的patch架构。它的特点是零样本精度接近逐数据集单独监督训练的水平,支持变长序列、NaN处理、分位数预测和协变量,并且有多个部署途径如BigQuery ML、Connected Sheets和Vertex Model Garden。

TimesFM 2.5版本相比2.0有哪些改进?

TimesFM 2.5相比2.0,参数从500M降到200M,上下文长度从2048增加到16384,新增了可选的30M分位头,并移除了frequency指示器,即调用方不再需要告诉模型序列的频率。

TimesFM如何处理变长序列和缺失值?

TimesFM在模型外部通过预处理处理变长序列和缺失值:对于开头连续的NaN直接丢弃,中间的NaN用线性插值填充;对于长度超过max_context的序列,只保留最后一段;对于长度不足的序列,在左侧补零并添加布尔mask标记填充位置。

TimesFM的compile()方法有什么作用?为什么是必须的?

compile()方法用于设置ForecastConfig,包括max_context和max_horizon等参数,这些参数在编译时固定。它是必须的,因为forecast()方法会检查compiled_decode是否为空,如果为空则抛出RuntimeError。

TimesFM的force_flip_invariance开关有什么作用?它有什么代价?

force_flip_invariance开关用于扩展模型的对称性保证,使得模型在输入取负时也能保持线性关系。默认开启,但实现方式是额外运行一次完整解码,因此会带来双倍的计算开销。如果不需要这种对称性,可以显式关闭以节省算力。

TimesFM的window_size配置项有什么问题?

window_size在ForecastConfig中有声明,但docstring中标注了TODO,且在整个仓库中没有被任何代码读取,因此它是一个未实现的占位配置项,用户不应指望它进行分解预测。

TimesFM如何支持协变量预测?

TimesFM通过forecast_with_covariates()方法支持协变量,支持动态/静态、数值/类别四类协变量,底层使用带ridge的线性模型(XReg)。有两种拼接顺序:'xreg + timesfm'先拟合目标再预测残差,'timesfm + xreg'先预测再拟合残差。使用时需要将return_backcast设为True。

TimesFM的分位数预测是如何实现的?

TimesFM 2.5版本有一个可选的连续分位头,可以一次性输出1024点×10列的分位数预测,不参与自回归。该分位头有30M参数,如果不使用,则退回到主干输出的十列,容易发生分位塌缩。

🏷️

标签

➡️

继续阅读