TSEval:一个你可以核验的开放榜单
TSEval 是一个开放、可复现的时间序列预测榜单——每一行都由社区提交重建,而不是手敲进一张表。每一条都是一份你能打开、能审计、能复现的证据:完整的实验轨迹加一个经核验的结果。实时榜单在 tseval.diaugeia.ai。
大多数预测数字是没法核验的。一篇论文报告一个结果,一个榜单把它抄过去,几乎没人真的重跑一遍。TSEval 反过来设计:榜上每一行都是一份你能打开的提交——结果、agent 完整的实验轨迹、一份可读的报告——任何人都能审计、都能复现。这张榜不是我们手工维护的一张表,而是证据的一个函数,每次有人提交,它就从头重建一次。
它是 ModernTSF 的开放记分牌——实验真正发生的「生产端」框架。ModernTSF 是你跑实验的地方,TSEval 是实验被公开展示的地方:完全开放,并附上取信它所需的一切。
问题:对不上的数字
随手翻开三篇时序论文,你会看到三张看起来可比、其实不可比的榜。划分稍有不同,回看窗口稍有不同,指标的平均方式也略有差别——这些都不是造假,只是每个组都从零重建评测时,那上千个小选择累积出来的结果。加在一起,一篇论文里的 0.41 和另一篇里的 0.39,根本说明不了谁更好。
Agent 让情况更糟,而不是更好:它们写代码的速度快过任何人能审计的速度,于是整个领域开始以机器的速度量产「相似但不相同」的结果。一个没有可回溯来源的数字——没有固定划分、没有记录过程——不是一个结果,只是一张截图。一张榜单只有在每一行都以同样方式产生、且任意一行都能回溯到产生它的确切代码、数据与过程时,才值得一读。这正是 TSEval 存在的意义。
提交是证据,不是一个数字
正是这一点让榜单可信。一份提交不是你填进表格的数字,而是三样东西打成的一个包:一条轨迹,在 CLI 边界上捕获 agent 的实验过程(与 agent 无关——Claude Code、Codex、OpenCode 都序列化到同一个边界);一个经核验的结果,带上定位与信任它所需的一切;以及一份简短的、人类可读的报告。它们的形状由一份很薄的 JSON Schema 固定,榜单只读这份 schema,与 Python 零耦合——生产端和消费端任意一端都能被重写而不动另一端。权重不是必需的:一行靠它的结果和过程赢得位置,而不是靠一个几 GB 的 checkpoint;如果你想要逐比特的可复现,可以选择把训练好的权重归档进来。
榜单本身在一个确定性的 CI 步骤里构建——不用 torch、不用 GPU。它读取每一份提交,把不完整或 schema 不合法的带着理由拒绝(绝不悄悄丢掉),把其余的归并,再按 MSE 排名。给定同样的提交,任何人都会得到同样的榜单:排名是公开证据的一个纯函数,没有人在中间手工编辑一张表。它既覆盖静态基准——固定数据、每次同一个划分,所以今天的数字和明年的数字可比——也覆盖周期性刷新的实时赛道,用你没法过拟合的活数据。静态衡量方法,实时衡量方法在没人见过的数据上的表现。
去看这张榜——也把你的结果加进来
榜单是活的、开放的,而且在不断生长。每一行都链接到它的完整证据,排名、方法演化视图、各赛道的细分,全都在站点上:
全部开源。榜单、它的构建流水线、以及每一份提交都在 github.com/Diaugeia/TSEval;数据集和一个可选的权重归档放在 Diaugeia 组织名下的 Hugging Face 上。
提交是一个 pull request,而不是一次权限申请:在 ModernTSF 里跑你的实验,让 CLI 把证据打包,再向榜单仓库开一个 PR。CI 会按 schema 校验,如果通过,你的那一行就带着完整证据出现在榜上——细节见 SUBMITTING.md。
如果你做时间序列——或者你只是想看看自己的模型在固定协议下能不能扛住——克隆 ModernTSF,跑点东西,提交上来。或者加入我们,一起把这张榜本身建起来。
