TS-Eval:一个可复现的时序预测公开榜单
时序预测的结果,长期互相不可比、也不可复现。TS-Eval 用一份提交契约把每个数字钉死:一条 Agent 轨迹、一份经校验的结果、一份报告。首个实时数据集沪深300,135 个模型、151 份提交:在这份数据上,榜首挤成一团、谁都没拉开差距——图模型与逐序列模型在 0.748 附近打成平手,远高于朴素基线,但与真值的相关性几乎为零。
Keep research Simple and Stupid.
今天,我们正式发布 TS-Eval——一个面向时间序列预测、可复现的公开榜单。它建在 ModernTSF 之上:上一篇交付的是「产出结果」的基础设施,这一篇交付的是「评测结果」的那一层。
TS-Eval 的每一行,都是一份社区提交:一条 Agent 实验轨迹,加一份经校验的结果。所有提交按赛道、数据集、预测长度透明排名——任何人都能看清这个数字是怎么来的,也能自己把它重跑一遍。
问题:领域内的结果,互相不可比,也不可复现
时序预测这个领域,论文一篇接一篇,榜一张接一张。但只要你真的动手复现过,就会发现一件让人沮丧的事:两个号称在同一个数据集上的数字,几乎从不真正可比。
划分方式各家一套,归一化各家一套,预测长度各家一套,连指标的算法都能差出一截——经典的 drop_last bug 就是这么混进无数张表里的。于是「A 比 B 好 0.3%」这句话,到底是模型真的更强,还是评测口径不一样,没人说得清。可复现就更糟:论文里报了个数,但产出这个数的那份权重、那次运行,往往再也找不回来。
Agent 把代码写得越来越快,这个问题不但没缓解,反而被放大了——每个研究者、每个 Agent 都自己搭一遍评测底座,搭出来的东西「差不多但不一样」,最后谁也对不上谁。
我们相信,榜单的价值不在于排名本身,而在于这个排名能不能被信任、能不能被重跑。 TS-Eval 就是为这件事而建的。
TS-Eval 是什么
一句话:一个把每个数字都钉死在证据上的公开榜单。
它不接受「裸的数字」。每一个上榜的结果,背后都必须挂着一条完整的实验轨迹和一份可校验的记录。榜单本身由 CI 确定性地构建,不靠人工录入,也不靠口头承诺。你看到的排名,是程序按统一规则算出来的;你不信,可以照着轨迹自己复现。
两层赛道
TS-Eval 分两层赛道,覆盖两种不同的研究诉求:
- 静态赛道(STATIC)——固定的基准数据,结果稳定、可反复对照。按任务模式细分为三类:
time_series(单纯时序)、spatiotemporal(时空)、covariate(带协变量)。这一层回答的是「在干净、公认的基准上,谁更强」。 - 实时赛道(REALTIME)——周期性刷新的活数据集,定期换批新数据重跑。它逼着模型面对真正没见过的未来,而不是反复刷同一份测试集。首个实时数据集是股票沪深300(CSI-300)。
静态赛道考的是基本功,实时赛道考的是泛化。两层分开,各自诚实。
提交契约:轨迹 + 经校验的结果 + 报告
TS-Eval 的核心不是榜单页面,而是提交契约。每一份提交,都由三样东西组成:
- 一条轨迹(
trajectory.jsonl)——在命令行边界上,完整记录 Agent 做这次实验的全过程。它与具体 Agent 无关:无论你用 Claude Code、Codex 还是 OpenCode,录下来的都是同一种东西。这条轨迹让别人能看清「这个结果是怎么一步步跑出来的」。 - 一份经校验的结果(
RunRecord)——一条结构化、可被 schema 校验的运行记录。指标、配置、种子、权重指纹,全在里面。 - 一份人类可读的报告——一小段给人看的说明,讲清楚这次做了什么、结论是什么。
这份契约由 TSF-Core 定义——它是 ModernTSF 内部一个纯 pydantic 的薄层,只做一件事:导出一份 JSON Schema。榜单的消费端只读这份 schema,不依赖任何 Python 代码。也就是说,产出结果的框架和消费结果的榜单之间,是零耦合的:契约用 JSON Schema 说话,两边谁都不绑死谁。
榜单如何确定性地构建
榜单的构建是一条确定性的 CI 流程(tsf leaderboard-build,不需要 torch)。它做的事很朴素,也正因为朴素才可信:
- 读取每一份提交;
- 逐份检查——结果和轨迹是否都在、是否通过 schema 校验;
- 按
(赛道, 数据集, 预测长度)聚合,并按 MSE 排序(越低越好)。
没有手工编辑,没有特例。同一批提交,谁来跑、跑几次,得到的榜单都一样。这就是「确定性」的全部含义——也是一张榜单能被信任的前提。
权重分离:可复现是构造出来的,不是承诺出来的
很多榜单的「可复现」停留在口头。TS-Eval 把它做进了结构里。
训练好的权重被单独归档在 Weights 仓库,每份提交通过 sha256 指纹引用它对应的那一份权重。这意味着:任何一个榜上的数字,都能被精确追溯到产出它的那一份权重。 不是「大概用了某个模型的某个配置」,而是「就是这一份、这串哈希对应的权重」。
权重与结果分离、再用哈希钉死——可复现于是不再是一句承诺,而是一个构造出来的事实。
首批结果:沪深300
我们用首个实时数据集——股票沪深300——做了第一轮评测。
- 135 个模型在沪深300 指数成分股上接受评测,共 151 份提交(部分模型在多个种子上各跑了一次)。其中 124 份以纯时序模式(time_series)提交,27 份以时空 / 图模式(spatiotemporal)提交。
- 两种建模视角:图 / 时空模型把约 300 只股票当作图上的节点,显式刻画它们之间的横截面结构;纯时序模型则基本各自独立地预测每一条序列。
- 协议:输入
seq_len = 20个交易日,预测pred_len = 5个交易日(预测长度 5)。按 MSE 排名,越低越好。
下面是榜首的一小段(按 MSE 升序):
| 排名 | 模型 | MSE | 类型 |
|---|---|---|---|
| 1 | NBeats | 0.7483 | 时序 |
| 2 | MTGNN | 0.7484 | 图 |
| 3 | DFDGCN | 0.7485 | 图 |
| 4 | STPGNN | 0.7487 | 图 |
| 5 | HimNet | 0.7488 | 图 |
| 6 | GWNet | 0.7489 | 图 |
| 7 | STNorm | 0.7490 | 图 |
| 8 | STGCN | 0.7497 | 图 |
这张表最值得讲的,是榜首谁都没拉开差距:第 1 名 NBeats(0.7483)和第 2 名 MTGNN(0.7484)只差 0.0002,再往下也只是以千分位的零头相隔。这一轮排第一的模型,实际上和后面十几个打成平手。
在这种平局里,有两条规律还是站得住:其一,刻画股票彼此之间横截面结构的图 / 时空模型(MTGNN、DFDGCN、GWNet、STPGNN……)占据了榜单上沿——前 20 名里有 15 个是图 / 时空模型;建模股票「之间」的关系,往往能让你排进前列。但其二,单个最好的成绩反而来自纯逐序列模型 NBeats,所以不能说横截面结构「决定性地」更优——图模型扎堆在前面,但并没有甩开其他人。
而且没有哪个模型真正抓到了多少信号:领跑者与真值的相关性都在 0.04 上下,基本是噪声。学到东西的模型确实跨过了一道真实的门槛——朴素的「照搬上一日」基线(HL)落在榜单尾部,MSE ≈ 1.50,而这一团模型都在 ~0.748。所以架构能带来「比什么都不做强一大截」的提升,只是没法让任何一个模型从同侪里脱颖而出。
也要把诚实的另一面说清楚:除了最顶端,模型们仍然挤成一团,长尾很宽;绝对可预测性很低(多数模型与真值的相关性接近零),沪深300 的预测依然是真的难。所以这里的结论不是「深度模型一举攻克了股票」,也不是「某种架构胜出」——而是更窄、也更有用的一句:在这份数据上,学到东西的模型大幅领先朴素基线,图模型扎堆在前列,但没有任何单个模型能明显从队伍里脱颖而出。
最佳与中位、与最差之间的跨度也印证了这一点:最好 0.7483,中位 0.7856,最差 1.7141。
有几点需要把话说清楚:这一批大多是单种子(seed 2024),是第一轮,只有一个预测长度。更多数据集、更多预测长度,以及实时赛道的定期刷新,都在路上。这是一张发布快照,不是最终结论。
五个仓库 + 线上榜单
TS-Eval 的全部证据都公开存放,任何人都能查、能下、能复现:
- 静态数据集:Diaugeia/TSEval-Static
- 实时数据集(沪深300 股票):Diaugeia/TSEval-RealTime
- 提交(只追加的证据包):Diaugeia/TSEval-Submissions
- 权重(训练好的 checkpoint):Diaugeia/TSEval-Weights
- 榜单 Space(前端):Diaugeia/TSEval
线上榜单在站内:diaugeia.ai/tseval。
如何提交
参与只需四步,全程在 ModernTSF 里完成:
- clone ModernTSF;
- 用
tsfCLI 跑你的实验; - 用
tsf trace录下这次实验的轨迹; tsf submit --push——它会在 Submissions 数据集上自动开一个社区 PR。
只要提交(结果 + 轨迹 + 报告)合规、通过 schema 校验,CI 就会把它纳入下一次确定性的榜单构建。你的数字,从此可追溯、可复现、可被信任。
如果你在做时序预测,或者在探索 Agent 驱动的科研工作流,欢迎来试、来比、来提交,也欢迎加入我们参与共建:diaugeia.ai/tseval。
