← 返回信息流
GitHub 热榜GitHub Trending · 日·7 天前

Kronos:金融市场的语言基础模型

原标题:shiyu-coder/Kronos
Python26,858 stars+402 今日

速览

Kronos 是一个专为金融市场设计的多模态基础模型,能够将价格、成交量、订单簿及新闻文本统一映射到同一语言空间。它支持价格预测、趋势分类、波动率预测及新闻情感分析等多种下游任务,通过预训练实现了对复杂金融时序数据的深度理解与泛化。

AI 深度解读

这是什么

Kronos 是由 shiyu-coder 团队开发的全球首个开源金融 K 线(Candlesticks)基础模型(Foundation Model)。该项目在 GitHub 上已获得 26,858+ Star,并于 2025 年 11 月被 AAAI 2026 接收。

Kronos 是一个基于解码器(Decoder-only)架构的模型家族,专门针对金融市场的“语言”——即 K 线序列进行预训练。其训练数据覆盖全球 45 多个主要交易所,旨在处理金融数据特有的高噪声和非平稳特性。不同于通用的时间序列基础模型(TSFMs),Kronos 通过独特的两阶段框架,将连续的、多维度的 OHLCV(开盘价、最高价、最低价、收盘价、成交量)数据量化为分层离散 Token,进而利用大型自回归 Transformer 进行预训练,使其成为统一处理多种量化任务的基座模型。

解决的问题

传统金融时间序列预测面临以下核心痛点,Kronos 旨在逐一攻克:

  1. 数据的高噪声与非平稳性:金融数据受宏观政策、市场情绪等多重因素影响,波动剧烈且分布随时间变化。通用模型往往难以捕捉这种复杂的动态特征。
  2. 多任务统一性缺失:现有的量化模型通常针对单一任务(如仅预测收盘价或仅预测波动率)训练,缺乏通用性。Kronos 试图构建一个统一的模型,能够同时处理预测、分类、异常检测等多种下游任务。
  3. 连续数据的离散化难题:金融数据是连续且多维的,直接输入 Transformer 效果不佳。Kronos 解决了如何将连续的 OHLCV 数据高效、无损地转化为模型可理解的离散 Token 序列的问题。
  4. 长序列处理的局限性:许多模型在处理长历史窗口时存在计算瓶颈或信息遗忘问题。Kronos 支持最大 512 的上下文窗口(针对 Small/Base 版本),并能自动处理截断,平衡了计算效率与信息完整性。

核心功能

Kronos 提供了一套完整的从数据预处理到预测、微调及回测的 Pipeline:

  • KronosTokenizer
    • 核心组件,负责将连续的 OHLCV 数据量化为分层离散 Token。
    • 支持从 Hugging Face Hub 加载预训练的分词器(如 NeoQuasar/Kronos-Tokenizer-base)。
  • KronosPredictor
    • 封装了数据预处理、归一化、预测及反归一化的完整流程。
    • 单序列预测 (predict):支持概率性预测,可通过 T (温度)、top_p (核采样概率) 和 sample_count (生成路径数) 控制采样过程,返回包含 Open, High, Low, Close, Volume, Amount 的 DataFrame。
    • 批量预测 (predict_batch):利用 GPU 并行处理多个时间序列,适用于多资产组合预测。要求输入的历史长度和预测长度一致。
  • 微调 Pipeline (Finetuning)
    • 提供完整的微调脚本,支持对 Tokenizer 和 Predictor 进行联合或单独微调。
    • 集成 Qlib 框架,以中国 A 股市场为例,演示数据准备、模型微调及简单回测的全流程。
    • 支持自定义配置(路径、超参数、时间范围等),并兼容 Comet.ml 进行实验追踪。
  • 模型家族
    • 提供不同容量的预训练模型(如 Kronos-small, Kronos-base 等),适配不同的算力需求和应用场景。

亮点 / 与同类相比

  1. 首个金融 K 线基础模型
    • 与通用时间序列模型(如 TimesNet, PatchTST)不同,Kronos 专为金融 OHLCV 数据设计,其 Tokenizer 针对金融数据的分布特性进行了优化,能更好地捕捉价格跳变和成交量异动。
  2. 两阶段独特架构
    • 先通过专用 Tokenizer 将多维连续数据转化为分层离散 Token,再使用自回归 Transformer 预训练。这种架构既保留了 Transformer 的强大序列建模能力,又解决了金融数据连续性的建模难题。
  3. 统一的多任务处理能力
    • 无需为不同任务重新训练模型,Kronos 可作为统一基座,通过微调适应预测、分类等多种量化任务。
  4. 开源与社区支持
    • 代码、预训练模型及微调脚本全部开源。
    • 提供可视化 Demo(如 BTC/USDT 24 小时预测),降低使用门槛。
    • 已被 AAAI 2026 接收,具备学术背书。
  5. 灵活的采样与概率预测
    • 支持核采样(Nucleus Sampling)和温度调节,能够生成多条预测路径并取平均,提供更丰富的不确定性估计,而非单一的确定性输出。

适合谁用 / 上手

目标用户:

  • 量化研究员/开发者:希望利用最新的基础模型技术提升预测精度,或探索 Transformer 在金融时序数据中的应用。
  • 算法交易团队:需要快速构建原型,验证基于深度学习的交易策略。
  • 学术研究者:关注时间序列基础模型、金融 AI 交叉领域的研究人员。

上手指南:

  1. 环境准备

    • 安装 Python 3.10+。
    • 安装依赖:pip install -r requirements.txt
    • 若需微调,需额外安装 pyqlib 并准备 Qlib 数据。
  2. 快速预测示例

    from model import Kronos, KronosTokenizer, KronosPredictor
    import pandas as pd
    
    # 1. 加载模型与分词器
    tokenizer = KronosTokenizer.from_pretrained("NeoQuasar/Kronos-Tokenizer-base")
    model = Kronos.from_pretrained("NeoQuasar/Kronos-small")
    
    # 2. 初始化预测器
    predictor = KronosPredictor(model, tokenizer, max_context=512)
    
    # 3. 准备数据 (需包含 open, high, low, close, volume, amount)
    df = pd.read_csv("./data/XSHG_5min_600977.csv")
    df['timestamps'] = pd.to_datetime(df['timestamps'])
    lookback = 400
    pred_len = 120
    x_df = df.loc[:lookback-1, ['open', 'high', 'low', 'close', 'volume', 'amount']]
    x_timestamp = df.loc[:lookback-1, 'timestamps']
    y_timestamp = df.loc[lookback:lookback+pred_len-1, 'timestamps']
    
    # 4. 执行预测
    pred_df = predictor.predict(
        df=x_df, x_timestamp=x_timestamp, y_timestamp=y_timestamp,
        pred_len=pred_len, T=1.0, top_p=0.9, sample_count=1
    )
    print(pred_df.head())
    
  3. 微调入门

    • 修改 finetune/config.py 中的路径和超参数。
    • 运行数据预处理脚本:python finetune/qlib_data_preprocess.py
    • 执行微调与回测脚本(具体命令参考项目文档)。

注意事项:

  • 输入数据的历史长度(lookback)不应超过模型的最大上下文窗口(Small/Base 版本为 512)。
  • 批量预测时,所有序列的历史长度和预测长度必须一致。
  • 微调 Pipeline 仅为演示用途,实际生产环境需结合更复杂的组合优化和风险控制策略。
查看原文 →github.com