output_transform
中 bin 索引的相差一错误。这个简单的修复显着提高了 Chronos 的整体性能。我们将在 ArXiv 的下一个版本中更新结果。pipeline.embed
用于从 Chronos 中提取编码器嵌入。Chronos 是一系列基于语言模型架构的预训练时间序列预测模型。通过缩放和量化将时间序列转换为标记序列,并使用交叉熵损失对这些标记进行语言模型的训练。经过训练后,可以通过在给定历史背景下对多个未来轨迹进行采样来获得概率预测。 Chronos 模型已经在大量公开的时间序列数据以及使用高斯过程生成的合成数据上进行了训练。
有关 Chronos 模型、训练数据和过程以及实验结果的详细信息,请参阅论文 Chronos:学习时间序列语言。
图 1:Chronos 的高级描述。 (左)输入时间序列经过缩放和量化以获得标记序列。 (中)标记被输入到语言模型中,该模型可以是编码器-解码器或仅解码器模型。该模型使用交叉熵损失进行训练。 (右)在推理过程中,我们从模型中自回归采样标记并将它们映射回数值。对多个轨迹进行采样以获得预测分布。
该存储库中的模型基于 T5 架构。唯一的区别在于词汇量大小:Chronos-T5 模型使用 4096 个不同的标记,而原始 T5 模型使用 32128 个标记,因此参数更少。
模型 | 参数 | 基于 |
---|---|---|
chronos-t5-小 | 8M | t5-高效-微小 |
chronos-t5-迷你 | 20M | t5-高效-迷你 |
chronos-t5-小号 | 46M | t5-高效-小型 |
chronos-t5-基地 | 200M | t5-高效基 |
chronos-t5-大号 | 710M | t5-高效-大型 |
下图展示了 Chronos 模型在 27 个数据集上相对于本地模型、特定任务模型和其他预训练模型的卓越零样本性能。有关评估设置和其他结果的详细信息,请参阅论文。
图 2:不同模型在 Benchmark II 上的表现,包括 Chronos 模型在训练期间未见过的 27 个数据集。该基准测试提供了 Chronos 模型相对于本地统计模型的零样本性能的见解,本地统计模型分别拟合每个时间序列的参数、针对每个任务训练的特定于任务的模型以及在大型时间序列语料库上训练的预训练模型。预训练模型(其他)表示 Benchmark II 中的部分(或全部)数据集可能已在这些模型的训练语料库中。使用季节性朴素基线的分数对概率 (WQL) 和点 (MASE) 预测指标进行归一化,并通过几何平均值进行聚合以获得 Agg。分别相对于 WQL 和 MASE。
要使用 Chronos 模型执行推理,请通过运行以下命令安装此软件包:
pip install git+https://github.com/amazon-science/chronos-forecasting.git
提示
在生产用例中使用 Chronos 的推荐方法是通过 AutoGluon,它具有与其他统计和机器学习模型集成以进行时间序列预测以及通过 SageMaker® 在 AWS 上无缝部署的功能。查看 AutoGluon Chronos 教程。
展示如何使用 Chronos 模型执行预测的最小示例:
import pandas as pd # requires: pip install pandas
import torch
from chronos import ChronosPipeline
pipeline = ChronosPipeline . from_pretrained (
"amazon/chronos-t5-small" ,
device_map = "cuda" , # use "cpu" for CPU inference and "mps" for Apple Silicon
torch_dtype = torch . bfloat16 ,
)
df = pd . read_csv ( "https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv" )
# context must be either a 1D tensor, a list of 1D tensors,
# or a left-padded 2D tensor with batch as the first dimension
# forecast shape: [num_series, num_samples, prediction_length]
forecast = pipeline . predict (
context = torch . tensor ( df [ "#Passengers" ]),
prediction_length = 12 ,
num_samples = 20 ,
)
pipeline.predict
的更多选项可以通过以下方式找到:
print ( ChronosPipeline . predict . __doc__ )
我们现在可以可视化预测:
import matplotlib . pyplot as plt # requires: pip install matplotlib
import numpy as np
forecast_index = range ( len ( df ), len ( df ) + 12 )
low , median , high = np . quantile ( forecast [ 0 ]. numpy (), [ 0.1 , 0.5 , 0.9 ], axis = 0 )
plt . figure ( figsize = ( 8 , 4 ))
plt . plot ( df [ "#Passengers" ], color = "royalblue" , label = "historical data" )
plt . plot ( forecast_index , median , color = "tomato" , label = "median forecast" )
plt . fill_between ( forecast_index , low , high , color = "tomato" , alpha = 0.3 , label = "80% prediction interval" )
plt . legend ()
plt . grid ()
plt . show ()
一个展示如何从 Chronos 模型中提取编码器嵌入的最小示例:
import pandas as pd
import torch
from chronos import ChronosPipeline
pipeline = ChronosPipeline . from_pretrained (
"amazon/chronos-t5-small" ,
device_map = "cuda" ,
torch_dtype = torch . bfloat16 ,
)
df = pd . read_csv ( "https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv" )
# context must be either a 1D tensor, a list of 1D tensors,
# or a left-padded 2D tensor with batch as the first dimension
context = torch . tensor ( df [ "#Passengers" ])
embeddings , tokenizer_state = pipeline . embed ( context )
用于预训练、微调和评估 Chronos 模型的脚本可以在此文件夹中找到。
Chronos 论文中用于预训练和评估的数据集(域内和零样本)可通过 HuggingFace 存储库获得: autogluon/chronos_datasets
和autogluon/chronos_datasets_extra
。查看这些存储库以获取有关如何下载和使用数据集的说明。
如果您发现 Chronos 模型对您的研究有用,请考虑引用相关论文:
@article{ansari2024chronos,
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 Wang, Hao and Mahoney, Michael W. and Torkkola, Kari and Gordon Wilson, Andrew and Bohlke-Schneider, Michael and Wang, Yuyang},
title = {Chronos: Learning the Language of Time Series},
journal = {arXiv preprint arXiv:2403.07815},
year = {2024}
}
请参阅贡献以获取更多信息。
该项目根据 Apache-2.0 许可证获得许可。