好的,这是您要求的英文文章的中文翻译,已按照规范处理为 Markdown 格式。
Kronos:金融市场的语言基础模型
Kronos 是首个针对金融K线(K-lines)的开源基础模型,基于来自超过45家全球交易所的数据进行训练。
📰 新闻 🚩 [2025.11.10] Kronos 已被 AAAI 2026 接收。 🚩 [2025.08.17] 我们已发布微调脚本!欢迎查看并适配 Kronos 以满足您自己的任务需求。 🚩 [2025.08.02] 我们的论文现已在 arXiv 上发布!
📜 简介
Kronos 是一个仅解码器(decoder-only)的基础模型系列,专门针对金融市场的“语言”——K线序列进行预训练。与通用时间序列基础模型(TSFMs)不同,Kronos 旨在处理金融数据独特的高噪声特性。它采用了一种新颖的两阶段框架:首先,一个专门的 tokenizer 将连续的、多维的 K 线数据(OHLCV)量化为层次化的离散 token;然后,一个大型自回归 Transformer 在这些 token 上进行预训练,使其能够作为统一模型服务于多种量化任务。
✨ 在线演示
我们已搭建一个在线演示,用于可视化 Kronos 的预测结果。该网页展示了 BTC/USDT 交易对未来 24 小时的预测。 👉 访问在线演示
📦 模型库
我们发布了一系列不同容量的预训练模型,以满足不同的计算和应用需求。所有模型均可从 Hugging Face Hub 直接获取。
| 模型 | Tokenizer | 上下文长度 | 参数量 | 开源 | | :--- | :--- | :--- | :--- | :--- | | Kronos-mini | Kronos-Tokenizer-2k | 2048 | 4.1M | ✅ NeoQuasar/Kronos-mini | | Kronos-small | Kronos-Tokenizer-base | 512 | 24.7M | ✅ NeoQuasar/Kronos-small | | Kronos-base | Kronos-Tokenizer-base | 512 | 102.3M | ✅ NeoQuasar/Kronos-base | | Kronos-large | Kronos-Tokenizer-base | 512 | 499.2M | ❌ |
🚀 快速开始
安装
安装 Python 3.10+,然后安装依赖项:
pip install -r requirements.txt
📈 进行预测
使用 KronosPredictor 类可以轻松地通过 Kronos 进行预测。它负责处理数据预处理、归一化、预测和逆归一化,让您只需几行代码就能从原始数据得到预测结果。
重要提示:Kronos-small 和 Kronos-base 的 max_context 是 512。这是模型能处理的最大序列长度。为获得最佳性能,建议您的输入数据长度(即 lookback)不超过此限制。KronosPredictor 会自动处理更长上下文的截断。
以下是进行首次预测的分步指南。
1. 加载 Tokenizer 和模型
首先,从 Hugging Face Hub 加载预训练的 Kronos 模型及其对应的 tokenizer。
from model import Kronos, KronosTokenizer, KronosPredictor
# 从 Hugging Face Hub 加载
tokenizer = KronosTokenizer.from_pretrained("NeoQuasar/Kronos-Tokenizer-base")
model = Kronos.from_pretrained("NeoQuasar/Kronos-small")
2. 实例化 Predictor
创建一个 KronosPredictor 实例,传入模型、tokenizer 和目标设备。
# 初始化预测器
predictor = KronosPredictor(model, tokenizer, max_context=512)
3. 准备输入数据
predict 方法需要三个主要输入:
df:包含历史 K 线数据的 pandas DataFrame。必须包含['open', 'high', 'low', 'close']列。volume和amount是可选的。x_timestamp:与df中历史数据对应的 pandas Series 时间戳。y_timestamp:您想要预测的未来时段对应的 pandas Series 时间戳。
import pandas as pd
# 加载您的数据
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. 生成预测
调用 predict 方法生成预测。您可以通过 T、top_p 和 sample_count 等参数控制采样过程,以实现概率预测。
# 生成预测
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("预测数据头部:")
print(pred_df.head())
predict 方法返回一个 pandas DataFrame,其中包含 open、high、low、close、volume 和 amount 的预测值,并以您提供的 y_timestamp 作为索引。
为了高效处理多个时间序列,Kronos 提供了 predict_batch 方法,可以在多个数据集上同时进行并行预测。当您需要一次预测多个资产或时间段时,这尤其有用。
# 准备多个数据集进行批量预测
df_list = [df1, df2, df3] # DataFrame 列表
x_timestamp_list = [x_ts1, x_ts2, x_ts3] # 历史时间戳列表
y_timestamp_list = [y_ts1, y_ts2, y_ts3] # 未来时间戳列表
# 生成批量预测
pred_df_list = predictor.predict_batch(
df_list=df_list,
x_timestamp_list=x_timestamp_list,
y_timestamp_list=y_timestamp_list,
pred_len=pred_len,
T=1.0,
top_p=0.9,
sample_count=1,
verbose=True
)
# pred_df_list 包含与输入顺序相同的预测结果
for i, pred_df in enumerate(pred_df_list):
print(f"序列 {i} 的预测结果:")
print(pred_df.head())
批量预测的重要要求:
- 所有序列必须具有相同的历史长度(lookback 窗口)
- 所有序列必须具有相同的预测长度(
pred_len) - 每个 DataFrame 必须包含必需的列:
['open', 'high', 'low', 'close'] volume和amount列是可选的,如果缺失将用零填充