微调 Kronos 来预测股市

有一个叫 Kronos 的模型最近在网上很火。它在 GitHub 上有超过 23,000 颗星,一篇论文被严肃的 AI 会议(AAAI-2026)接收,还有一个实时演示展示它对未来 24 小时比特币的预测。它的一切看起来都令人印象深刻。

于是我做了一件顺理成章的事。我下载了它,把它对准比特币和 SPY(追踪标普 500 的基金),然后检查它是否真的能预测出什么。接着我用自己的数据进一步训练(实际上是微调)它,看看能否让它变得更好。这篇文章带你了解 Kronos 是什么、如何使用、是否有效,以及当我试图改进它时发生了什么。我尽量少用专业术语,下面每张图表都来自我自己的运行结果。

1、首先,什么是蜡烛图(K 线)?

价格图表通常以蜡烛图的形式绘制。每根蜡烛将一段时间的切片压缩成四个数字:开始时的价格、结束时的价格、达到的最高价和最低价。

绿色意味着价格收盘高于开盘,红色意味着收盘更低。在我的实验中,每根蜡烛代表一小时的交易。这就是 Kronos 的"食物"原材料。

2、那么 Kronos 是什么?

Kronos 是一个语言模型,只不过它的语言不是英语,而是蜡烛图。想想 ChatGPT 是如何工作的。你给它一些词,它根据从海量文本中学到的模式预测下一个词,然后下一个,以此类推。Kronos 对价格柱状图做的事情完全一样。它的作者用来自全球 45 多个交易所的超过 120 亿根蜡烛图训练了它,所以它见过大量市场历史。

它由两部分组成。一个分词器(tokenizer)将每根蜡烛转变成类似"词"的东西,从一个固定大小的蜡烛形态词汇表中选取。然后一个 transformer——你用过每个聊天机器人背后的同一家族模型——学习继续这个序列。

3、你实际上如何使用它

你给它几百小时的近期价格历史,然后让它预测接下来的几个小时。由于它通过采样来工作,就像一个可以用多种不同方式表述答案的聊天机器人,你不会只得到一个预测。你运行它很多次,得到许多种可能的未来。

这确实很有用:中间路径就是你的预测,而所有路径的离散程度就是模型在告诉你它有多确定。离散度小意味着自信,离散度大意味着不确定。记住这个"离散度",因为它后面还会出现。搭建它很容易:模型在 Hugging Face 上,代码在 GitHub 上,大约二十行 Python 就能跑出一个预测。

4、它到底好不好?纸面上看,很好

已发表的结果很强。论文报告称,在基准数据集上,它比其他预测模型有大幅改进,波动率预测更好,合成价格数据也更真实。它被 AAAI 2026 接收,这不是一个随便放行的会议。

这些都不是假的。但基准结果和"它对我关心的东西是否有效"是两个不同的问题,而回答第二个问题的唯一方法就是自己运行它。

5、我做了什么

两个实验,按顺序进行。

  • 实验一:开箱即用是否有效? 我让 Kronos 预测比特币 24 小时后的价格,共 100 次;预测 SPY 一个交易时段后的价格,共 60 次,每次只使用该预测之前可用的数据。
  • 实验二:用我自己的数据训练它是否有帮助? 大多数人的直觉是,通用模型加上近期本地数据应该胜过单独的通用模型。我用两个版本测试了这一点:一个用最近两个月的市场数据训练,一个用最近三年的数据训练。

数据是 45 只交易活跃的美国股票和基金的小时级蜡烛图,约 228,000 行,覆盖 2023 年 9 月到 2026 年 8 月,从 Yahoo Finance 下载,另外还有来自 Binance 的比特币小时级蜡烛图。所有内容都运行在我桌面上的一台 NVIDIA DGX Spark 上。

6、最重要的一件事:你的对照基准是什么?

这就是大多数"我的 AI 预测市场"帖子翻车的地方,所以值得放慢脚步说清楚。

我把每个预测都与最懒惰的预测——"明天会和今天一模一样"——进行比较。在预测领域这被称为随机游走(random walk),而在流动性强的市场上,它出奇地难以战胜。如果一个模型无法打败"假设什么都不变",那它就没有学到任何关于未来的有用信息。

所以下面每张图表中,问题不是"模型预测得准吗?"。问题是"模型比什么都不做更准吗?"

7、我是如何训练的

几个影响结果的细节,用大白话说:我只训练了模型的后半部分——做预测的那部分,分词器保持原样。分词器是从数十亿个示例中学习到的蜡烛形态共享词汇表,在我这点小数据上重新训练它会毁了它。

我还必须修复示例训练代码中一个隐蔽的 bug。它把所有股票代码堆叠成一个长文件,然后在其上滑动一个窗口,这会悄悄制造出"从一家公司开始、在另一家完全不同公司结束"的虚假示例。我重写了它,确保没有任何训练示例跨越不同的股票代码。

而且我在时间上非常严格。测试期间的数据,甚至与第一个测试点同一小时的数据,都不允许进入训练。人们很容易不小心让模型"看到未来",然后为结果兴奋不已。

8、结果,第一部分:开箱即用

这是 Kronos 与"什么都不做"基准相比的准确度。零意味着两者一样好。低于零意味着模型比什么都不做更差。

每一根柱子都向下。在比特币 24 小时预测上,它的误差是"简单假设价格不变"的两倍多。在方向上——价格最终是涨还是跌——它在比特币上 100 次里对了 50 次,这和抛硬币差不多。

第二张图更让我困扰:还记得那个"可能未来的离散度"吗?这个离散度本应在约 80% 的时间里包含真实结果。而实际上,它包含真相的比例最低只有 21%。模型采样出的许多未来彼此一致,却集体错误。"自信地错"是一个预测模型最糟糕的状态,因为一个承认不确定性的模型至少还能用。

9、结果,第二部分:我训练了它,结果更差了

两个训练版本都在相同的 21 个交易日、从相同的起点,与未动过的原始模型进行了对比。下面是每一个预测与市场实际走势的对比。

黑线是现实。灰色虚线是懒惰的"假设什么都不变"预测。三条彩色线是各个模型,它们在整张图上都紧贴着灰色虚线,而不是黑线。看看 7 月 29 日,SPY 一天内下跌了约 1.5%,三个模型没有一个预见到。

正确评分后得到下表:原始的、未动过的模型赢了。训练两个月让它略微变差。训练三年让它明显变差。这与"数据越多越好"的预期相反,所以有趣的问题是为什么。

答案就在这张图里,它是我整个项目最喜欢的成果。左边是模型认为价格会波动多少。SPY 一天通常波动约 0.8%,而原始模型预测的波动只有 0.27%。它一直在含糊其辞。训练教会了它正确的幅度,三年版几乎精确地做到了这一点,达到 0.76%。这是真正的学习。

右边是模型是否把方向搞对了,而训练几乎没有任何改变。把这两者放在一起,你就得到了一个学会了"下更大的注"却没有学会"下更准的注"的模型。幅度对但方向错的大注会产生更大的亏损,而这正是训练版本落后于原版的全部原因。

这里还有一个关于原始模型的很好的附带教训。它得分高,部分原因是它几乎不对任何事情下注,而预测"大致不变"本质上就是"什么都不做"基准的伪装。含糊其辞不等于正确。

10、我反驳自己结果的部分

我本可以到此为止,讲一个干净利落的故事,但数据并不支持一个干净利落的故事。21 个交易日是一个非常小的测试。当我正确地运行统计检验时,每个结果的置信度都太低,无法下结论。

每根柱子显示的是"模型比基准好多少或差多少"的合理取值范围。每一个都跨越了零,这意味着对三个模型来说,"不比什么都不做好"仍然是一个完全合理的答案。

然后还有这张,这是我画出的最令人谦卑的图。两根柱子是同一个完全未动过的模型。唯一的区别是我测试的天数和喂给它的历史数据量。分数相差 48 分。如果改变测试设置就能让数字移动这么远,那么小规模测试的任何单一结果都不值得太多信任。

11、我能说什么,不能说什么

  • 我能说的: 用近期市场数据训练这个模型没有帮助,而用三年数据训练让它变得更差。这个结果在我所有的度量方式下都成立,而且背后有清晰的解释。
  • 我不能说的: Kronos 没用——我的测试太小,无法证明这一点,而且有几个选择对模型不利。我喂给它的历史数据少于它设计所需,我从未调整过它的采样设置,我用的中等大小版本而非最大版本,而且我在一段相当平稳的市场行情中进行测试。

更大的收获其实与市场无关。在自己数据上微调基础模型,感觉上应该总是有帮助的,而且它确实教会了这个模型一些真实的东西。只是它教会了错误的那种"真实"。学会某样东西波动有多大,不等于学会它会往哪个方向走,而只有后者才能赚钱。


原文链接: I Finetuned a Viral AI Model (Kronos) to Predict the Stock Market.

汇智网翻译整理,转载请标明出处