时代变了,预测也用上大模型了!深度解析谷歌TimesFM2.5

谷歌这个开源项目,能预测任何行业的未来?跨境电商爆单预测、供应链库存优化、零售需求预测能源需求峰值(尤其是AI数据中心电力)、股票价格走势……..几乎所有时间序列数据,它都能预测。


就在几天前(2025-10-03),谷歌开源了最新的时间序列预测大模型TimesFM2.5,相比于前一代输入上下文长度大幅提升,还支持了概率预测,基本把大模型时间序列预测的大部分痛点都解决了。

这让奇哥不禁感慨,时代变了,以后的开发者再也不用调参+炼丹+个性化开发了,一劳永逸,一步到位,……。等等,真有这么简单?让奇哥来带你分析分析。

TimesFM2.5的论文和github链接如下:

论文链接: https://arxiv.org/pdf/2310.10688

github链接: https://github.com/google-research/timesfm

1.什么是时间序列预测?

对于时间序列预测不太了解的小伙伴,这里有必要让大家快速入个门。就从一到简单的预测题开始吧,请听题:

小明是一个小学生,最近3次考试的数学成绩依次是70分,80分,90分。请你预测一下,他下一次数学考试的得分可能是多少?(满分100分)

为了简化问题:给大家ABCDE五个选项;当然,读者可以也给出其他答案,没有标准答案。

A: 100分 (理由:有规律,每次考试多10分)

B: 95分 (理由:进步趋势很明显,但是越到后面分数越难提升)

C: 90分 (理由: 上次就是这个分数,进步哪有那么容易)

D. 80分 (理由:均值回归,前三次平均分是80)

E. 0分 (理由:我觉得小明下次考试会忘记写名字,或者考试题目特别难一题都不会)

下面奇哥就来分析一下,ABCDE的不同其实对应着不同的哲学和人生态度。

选A(100分)的人:恭喜你,你解锁了时间序列预测经典算法之一的线性拟合法。你会觉得:任何趋势都会按照线性的方式延续;任何事务都有规律可循;连涨3个月的股票第4个月还会涨;工资会无限的涨上去;房价也会永远涨……
选B(95分)的人:恭喜你,你解锁了时间序列预测经典算法之一的指数拟合法。在你的价值观里:任何趋势都会慢慢变缓直到平稳;任何事务的发展都有个限度;工资涨一段时间就涨不动了;程序员的编程水平在刚入职时会快速提高然后慢慢趋于稳定……

选C(90分)的人:恭喜你,你解锁了时间序列预测经典算法之一的naive算法(下一个预测的值就等于最近的一个值),这个算法也是经典算法里面最强的算法。在你的人生哲学里:明天和今天并没有什么不同;简单就是最好的;你信奉奥卡姆剃刀准则,如无必要,勿增实体;

选D(80分)的人:恭喜你,你解锁了时间序列预测经典算法之一的均值回归算法。在你的认知里:任何疯狂终将回归平静;任何绝望总会慢慢过去;房价会回到它应有的位置,股票也会回归到它的价值所在;你是巴菲特和价值投资的坚实拥趸者;

选E(0分)的人:这我就不恭喜了,你选了一个理论上误差最大的答案。当然,这也并非不可能发生。在你的价值体系里:黑天鹅是你的信条;股灾随时可能发生;你可能会对彩票很感兴趣;你会对农场主假说深信不疑(农场里的火鸡发现了一个规律,每天12点都会有人来送食物,直到感恩节那天,没有等来食物,等来的却是屠刀);你会怀着感恩的心过好每一天,因为你永远不知道明天和意外谁先来;

好了,看完上面那个例子,不太了解的读者应该对时间序列预测有一个大致的了解。通俗来说,就是根据历史数据点,预测未来的数据点。

2. 用TimesFM2.5来跑一下看看

首先得说明一下这个TimesFM2.5的输入输出是什么,和传统的大模型不一样,时间序列大模型的输入直接就是数组了,你并不是敲一段中文文字问大模型结果,而是直接输入数值。还是用奇哥惯用的黑箱法给大家解释一下。

如下图所示:TimesFM2.5接受两部分输入,一部分输出。输入是需要预测的时间序列数组,以及需要往后预测的长度;输出是后面预测对应长度的数组。对图中来说,(a1, a2, a3)是历史的数值点数组,length=2是需要预测的长度。最后输出(a4, a5),代表往后预测两个点。

由于TimesFM2.5开源了模型权重https://huggingface.co/google/timesfm-2.5-200m-pytorch,感兴趣的小伙伴可以去huggingface下载下来玩一玩。这里奇哥直接本地部署一波,然后把上面那个题目(70,80,90, ?)交给它跑,按照上面的黑箱,我的输入是两个部分,第一个是(70, 80, 90)代表历史的数据;然后是数字1,代表我只往后预测一个点。预测结果如下:

89.794044

有零有整的,看着就很权威。实际上这个值和naive算法(C:90分)非常接近,这个值也是奇哥预料之中。因为naive算法这么多年已经是证明是很多情况下的最优解。如果在这种条件很少且没有周期性的情况下,与naive相差太多,说明算法一定是有问题的。

2.1 概率预测:

自己试过的小伙伴可以发现,除了上面一个预测的数值外,还有一个如下的数组:

[ 86.76481, 71.93217, 78.88396, 83.19257, 86.625465, 89.794044, 93.0352, 96.472176, 101.45751, 110.42754 ]

这里一共十个数,奇哥给大家来解释一下,第一个数是后面9个数的平均数;从第2个到第10个数依次是预测的10%分位数~90%分位数。也就是说,这个预测是一个范围,刚刚那个89.79是预测结果的中位数。(这里数值超过了100,因为TimesFM2.5没有地方可以设置预测范围,这也是实际应用中的一些痛点)

我们把这个分布图画出来,可以看到,在78.88~101.46之间分布的还是很密集的。这其实就是概率预测的另一种输出形式,这个数据的上下边界如果分的越远,说明这个预测的把握度越低。分布越密集的地方,说明预测落到这里的概率越高。

2.2 TimesFM2.5的江湖地位如何:

那这个结果到底对不对呢,上述题目是一个开放性的题目,没有答案,无法判断。但是我们可以找到一些公开数据集上的结果。这里奇哥找了一个在huggingface上发布了的数据集,名叫GIFT-Eval, 该数据集有过亿的数据点以及各种领域的时间序列数据,用来给各种模型比赛,同时有严格的机制防止数据泄露。链接如下:

https://huggingface.co/spaces/Salesforce/GIFT-Eval 感兴趣的小伙伴可以点进去看看。

奇哥把这个排行榜截图放出来,可以看到TimesFM2.5排名综合榜第三。

这个表里面第三个字段很有意思哈,是否泄露了测试集:这让我想到2年前百模大战的时候,各家都说自己超过了gpt4,但真正用起来一塌糊涂。这里专门加了一个字段,就是提高这个榜单的可信度。后面4个字段就是具体的评估指标了,这4个值都是越小越好。这里奇哥着重介绍一下MASE这个指标。还记得刚刚提到的naive算法么,就是预测明天的值就等于今天的值这个算法,做预测的时候只需要把预测值等于输入的最后一个值即可;这个算法还有一个变体snaive (seasonal naive),加一个周期性, 比如预测下周五的会花多少钱,那就直接等于上周五的开销。MASE是用你的模型的预测误差,与snaive模型的预测误差进行对比的比值。即 MASE = 你的模型的MAE / snaive模型的MAE。

MASE = 1,这个算法就等于naive或者snaive.

MASE < 1, 这个算法比naive或者snaive好.

MASE > 1, 这个算法折腾半天,浪费那么多资源和时间,最后连最简单的naive或者snaive都比不上,还玩个der.

这里TimesFM2.5的MASE是0.705, 也就是说它的预测误差是最简单的算法的70%左右。

3. TimesFM2.5模型解析

说了这么多,终于进入到这模型解析的环节,TimesFM2.5的基础架构和去年的旧版本TimesFM是一致的, 只是在一些参数和细节上做了微调。我们首先看看论文里面的架构图。没有技术背景或者不感兴趣的小伙伴可以跳过这一章。

看起来很复杂,奇哥给你详细的解释一下。

3.1首先一句话快速总结:

这个和chatgpt这种大模型的架构基本相似,最大的区别就是在输入输出的地方做文章,大模型的输入可以理解为一个个字,专业名词叫token.这里的输入就是一个长度为32由数值构成的数组, 用专业的话术叫做patch.

Chatgpt是把token变成向量,然后接一个decoder-only架构的Transformer;

这里的TimesFM就是把patch变成向量,同样是接一个decoder-only架构的Transformer;

3.2 TimesFM核心点解析:

论文原文架构这一章提到了几个核心点:

Patching:说白了就是分块,这个patching并不是TimesFM原创,实际上已经是非常流行的策略了,最早从cv那边传过来,时序这边PatchTST这篇论文给他发扬光大。本文也沿用了Patching的思路。比如一个长度是512个点的时间序列,按照32的patch长度,就会变成512 / 32 = 16个patch,这就大大减少了Transformer的计算压力。

Decoder-only-model: 这个和chatgpt之类的大模型类似,这个也不用过多赘述,decoder-only是现在的大趋势,各种场景都会渴望decoder-only,从而通过scaling law来把模型做大。

Longer output patches: 这是这篇文章比较创新的一个点,输出的patch长度比输入的长。作者是这样设置的:输入patch长度是32个时序数据点,输出patch长度是128个数据点。这和chatgpt等大模型不一样,chatgpt这种输入和输出都是一个token一个token,也就是说输入和输出长度是一样的。但是时间序列有它的特点,这里实际上是做了一个trade off: 我们想象两个极端:

极端方法1:直接预测 (Direct Prediction)

做法: 给定历史数据,一次性预测出未来所有需要的时间点。

优点: 精度高。因为它避免了“多步预测”中误差会一步步累积放大的问题。

缺点: 不灵活。你必须提前知道要预测多长(比如固定预测未来96步)。这对于“零样本预测”(即模型在不知道任务具体要求的情况下进行预测)是不可行的。

极端方法2:多步自回归 (Multi-step Auto-regression)

做法: 像LLM生成文本一样,一次只预测一小步(比如一个时间点,或者一个很短的patch),然后把这个预测结果当作新的输入,再预测下一步。

优点: 非常灵活。可以生成任意长度的预测。

缺点: 误差累积, 第一步的微小误差会被带到第二步,导致第二步的误差更大,如此恶性循环,导致长期预测结果很差。

效率低下:如果要预测512个点,就需要进行512次(或很多次)生成,计算成本很高。

作者这么设置,也是取了上述两种之间的折中,输出是输入的3倍,这样既可以加快推理速度,防止误差叠加;同时也能保持灵活性。

Patch masking: 既然你引入了长度为32的Patch,那么在训练过程中,所有的的数据都是32的整数倍,那就会出现一个问题,实际上的数据哪有那么巧,刚好是32的整数倍。所以这个时候就可以随机做一些mask操作,比如把原本的32的长度随机mask两个,变成30。这样模型就见过长度是30的数据。这也是一个小trick吧。

上述我们就介绍完了TimesFM的几个核心点,这么看其实也没有多少特别花里胡哨的架构和fancy的操作。大部分都比较朴实无华。奇哥觉得,谷歌的很多作品也都是这样,核心在于工程化的处理以及数据资产的运用。人家开源出来就是好用。不像一些硕博士论文,创新点那叫一个惊天地泣鬼神,结果也是好的飞起。最后是模型代码不敢开源,或者模型权重不敢开源、要不就是evaluate代码不敢开源。

3.3 实际案例数据流程分析:

我们用一个实际案例来看一下整个数据流程吧。

开源的推理demo代码中,有两个重要参数需要设置: max_context=1024, max_horizon=256. 什么意思呢,就是说你的最大输入时间序列长度和最大预测长度是多少。这里提前设置好了方便模型推理。我们就用这个默认的参数设置,然后假设我们需要预测的时间序列长度的800,然后需要往后预测200个点。这两个数据都在限制的范围内。

对于这个例子的数据流程图如下所示,我把解析写在右边.

3.4 TimesFM2.5的训练数据:

数据是奇哥最关心的点,我们来看看谷歌用了哪些预训练数据,我们把论文相关部分的截图放出来。

可以看到,里面有Synthetic合成数据、维基百科的时间序列数据、谷歌Trends的数据、M4比赛的数据,还有一些公开的数据集。累计有3千8百多亿个数据点的数据。其中维基百科里面的数据占到了95%以上。其他的数据都是零头。

原文中对数据有详细介绍,奇哥这里额外提两个点:

  1. 每次采样会取80%的真实数据与20%的合成数据,因此合成数据的权重会比上面那个表格的数据高很多。这里我觉得作者是为了让模型能学会周期性,合成数据的周期性是非常好的。但是维基百科里面的这些数据,绝大部分不一定会有很好的周期性。因为这个真实世界的分布是长尾的。
  2. 训练过程中,最大的长度是512,然后根据实际长度可以取256, 64等等。这就意味着,如果输入长度大于512,模型的能力可能会大打折扣。但是时间中很有可能我要预测的东西长度是大于512了,比如by天的数据,只要超过2年,那就妥妥的大于512了。

4. TimesFM2.5是否真的可以很好的应用到工业界?

奇哥当年也是做了很久的时间序列预测,尝试过很多模型。工业界有一些实际上的痛点:

  1. 可解释性:业务会问,为什么是这个预测值,大模型在这里完全没有办法。
  2. 边界问题:大部分业务数据会有上下限,比如大于0,或者小于1(比例型数据)。比如人数预测,如果下降的趋势比较明显,一些模型可能预测出来一个负数。这显然是不可接受的。
  3. 农历阴历问题:国内的周期性时间序列有一个剧痛的点,就是阴历阳历导致的春节、元宵节、端午节。每年这些节日的时间都不一样,这导致模型必须去学会阴历和阳历的计算,非常难搞。

其他小伙伴有其他痛点,也可以来评论区分享一下。

对于TimesFM2.5来说

优点:

  1. 冷启动快速跑一个结果出来:相比于自己去拟合学习一个时间序列,这个东西开箱即用,直接可以跑一个相当不错的baseline出来。
  2. 支持微调,这一点还是很重要的,如果自己有合适的时间序列数据,可以微调一波,一般还是可以有提高的。
  3. 支持区间预测: 这个实际中还是有点作用的。

缺点:

  1. 大模型的通病,可解释性。
  2. 现在只支持单变量,但是很多场景下是多变量的,比如预测某个业务线的收入,收入和日活月活数据、各种运营活动数据是强相关的。只看一根线,很难预测的好。
  3. 目前最大上下文长度只有16384,这在某些情况下还是有点少了。而且训练过程中最大输入长度512,很难保证超过这个长度的预测会有很好的效果。

奇哥总结了一下,对于一个时间序列预测的任务,可以按照下面的表格来选择工具:

场景/需求首选工具原因/优势
快速启动项目,需要向业务解释Prophet易用性无敌,可解释性强,是最好的“沟通工具”和基线。
大规模SKU预测,有丰富的价格/促销数据LightGBM + mlforecast性能、速度和扩展性的最佳组合,工业界最主流的方案。
需要快速、大规模地跑统计模型基线statsforecast速度碾压传统库,成本效益极高。
序列模式复杂,外部特征少,想尝试SOTAneuralforecast (PatchTST, DLinear)提供了简洁高效的深度学习模型,是探索复杂模式的首选。
希望外包整个预测流程,不想管底层细节Amazon Forecast Databricks各种云服务的预测接口全托管服务,省心省力,适合快速集成到现有云架构。
数据量小,或需要快速验证一个新想法Chronos TimesFM零样本预测能力强,无需训练,可以快速得到一个有竞争力的结果。

5. 奇哥说

TimesFM2.5的介绍就到这里了,这里奇哥想聊一下时间序列预测这个任务本身。大家可以看到一些排行榜里面很多模型连snaive和naive都比不过(这两个算法第3章有介绍)。很多情况一下,搞半天,发现结果还不如naive算法。

在任何一个AI任务里面,一个人类诞生以来就在使用的,简单到令人发指的算法,还能在最近的榜单里面排到一个不错的成绩,这是不可想象的。比如图片分类、或者人脸识别,一个几十年前的图片分类算法还能在今天的某个榜里面出现么,绝对不可能。

这种现象充分说明了一个点,很多情况下,时间序列是不可预测的,没有标准的范式和模式,没有规律,拟合到的都是噪声。

我们回到一开始的题目,小明前三次数学考试的分数分别是70,80,90. 他下一次的分数会是多少?没有答案,这种问题,哪怕再过100年,科技再进步,也无法给出一个准确解。这恐怕就是时间序列预测的魅力所在。