license: apache-2.0
pipeline_tag: 时间序列预测
tags:
- 时间序列
- 预测
- 预训练模型
- 基础模型
- 时间序列基础模型
- 时序数据
Chronos-Bolt⚡ (迷你版)
🚀 2025年2月14日更新:Chronos-Bolt模型现已登陆Amazon SageMaker JumpStart!查看教程笔记本,学习如何用几行代码部署Chronos端点用于生产环境。
Chronos-Bolt是一系列预训练时间序列预测模型,支持零样本预测。该模型基于T5编码器-解码器架构,训练数据包含近1000亿个时间序列观测点。它将历史时间序列上下文分块为多观测点片段输入编码器,解码器则直接生成多步分位数预测——这种方法称为直接多步预测。Chronos-Bolt模型比同尺寸的原始Chronos模型快250倍,内存效率高20倍。
性能表现
下图比较了Chronos-Bolt与原始Chronos模型在预测1024条时间序列(上下文长度512个观测点,预测步长64步)时的推理时间。
Chronos-Bolt不仅速度显著提升,精度也更高。下图展示了Chronos-Bolt在加权分位数损失(WQL)和平均绝对比例误差(MASE)指标上的表现(基于27个数据集聚合结果,详见Chronos论文)。值得注意的是,尽管训练时未接触这些数据集,零样本的Chronos-Bolt模型仍优于经过专门训练的统计模型和深度学习模型(标*者)。同时,它也优于其他基础模型(标+者表示这些模型在我们的基准测试中部分数据参与了预训练,并非完全零样本)。特别地,Chronos-Bolt(基础版)在预测精度上超越了原始Chronos(大型版),同时推理速度快600多倍。
Chronos-Bolt提供以下尺寸的模型:
使用指南
通过AutoGluon使用
推荐使用AutoGluon进行生产级预测。AutoGluon支持Chronos模型的微调、通过协变量回归器整合外生变量,以及与其他统计/机器学习模型的集成预测。详见AutoGluon Chronos教程。
零样本预测最小示例:
from autogluon.timeseries import TimeSeriesPredictor, TimeSeriesDataFrame
df = TimeSeriesDataFrame("https://autogluon.s3.amazonaws.com/datasets/timeseries/m4_hourly/train.csv")
predictor = TimeSeriesPredictor(prediction_length=48).fit(
df,
hyperparameters={
"Chronos": {"model_path": "amazon/chronos-bolt-mini"},
},
)
predictions = predictor.predict(df)
部署至SageMaker
通过SageMaker JumpStart可快速部署生产级端点,支持CPU/GPU推理和协变量预测。详见示例笔记本。
部署最小示例:
from sagemaker.jumpstart.model import JumpStartModel
model = JumpStartModel(
model_id="autogluon-forecasting-chronos-bolt-base",
instance_type="ml.c5.2xlarge",
)
predictor = model.deploy()
发送JSON格式数据进行预测:
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv")
payload = {
"inputs": [
{"target": df["#Passengers"].tolist()}
],
"parameters": {
"prediction_length": 12,
}
}
forecast = predictor.predict(payload)["predictions"]
通过推理库使用
研究用途可安装GitHub配套库:
pip install chronos-forecasting
推理最小示例:
import pandas as pd
import torch
from chronos import BaseChronosPipeline
pipeline = BaseChronosPipeline.from_pretrained(
"amazon/chronos-bolt-mini",
device_map="cuda",
torch_dtype=torch.bfloat16,
)
df = pd.read_csv(
"https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv"
)
forecast = pipeline.predict(
context=torch.tensor(df["#Passengers"]), prediction_length=12
)
引用
如果Chronos或Chronos-Bolt对您的研究有帮助,请引用相关论文:
@article{ansari2024chronos,
title={Chronos: 时间序列的语言模型},
author={Ansari, Abdul Fatir and Stella, Lorenzo and Turkmen, Caner and Zhang, Xiyuan, and Mercado, Pedro and Shen, Huibin and Shchur, Oleksandr and Rangapuram, Syama Syndar and Pineda Arango, Sebastian and Kapoor, Shubham and Zschiegner, Jasper and Maddix, Danielle C. and Mahoney, Michael W. and Torkkola, Kari and Gordon Wilson, Andrew and Bohlke-Schneider, Michael and Wang, Yuyang},
journal={机器学习研究汇刊},
issn={2835-8856},
year={2024},
url={https://openreview.net/forum?id=gerNCVqqtR}
}
许可证
本项目采用Apache-2.0许可证。