output_transform
. Esta sencilla solución mejora significativamente el rendimiento general de Chronos. Actualizaremos los resultados en la próxima revisión de ArXiv.pipeline.embed
para extraer incrustaciones de codificador de Chronos.Chronos es una familia de modelos de pronóstico de series temporales previamente entrenados y basados en arquitecturas de modelos de lenguaje. Una serie de tiempo se transforma en una secuencia de tokens mediante escalado y cuantificación, y se entrena un modelo de lenguaje en estos tokens utilizando la pérdida de entropía cruzada. Una vez entrenados, los pronósticos probabilísticos se obtienen muestreando múltiples trayectorias futuras dado el contexto histórico. Los modelos de Chronos se han entrenado en un gran corpus de datos de series temporales disponibles públicamente, así como en datos sintéticos generados mediante procesos gaussianos.
Para obtener detalles sobre los modelos de Chronos, datos y procedimientos de entrenamiento y resultados experimentales, consulte el artículo Chronos: Learning the Language of Time Series.
Fig. 1: Representación de alto nivel de Chronos. ( Izquierda ) La serie de tiempo de entrada se escala y cuantifica para obtener una secuencia de tokens. ( Centro ) Los tokens se introducen en un modelo de lenguaje que puede ser un codificador-decodificador o un modelo solo decodificador. El modelo se entrena utilizando la pérdida de entropía cruzada. ( Derecha ) Durante la inferencia, tomamos muestras autorregresivas de tokens del modelo y los asignamos nuevamente a valores numéricos. Se muestrean múltiples trayectorias para obtener una distribución predictiva.
Los modelos de este repositorio se basan en la arquitectura T5. La única diferencia está en el tamaño del vocabulario: los modelos Chronos-T5 utilizan 4096 tokens diferentes, en comparación con los 32128 de los modelos T5 originales, lo que resulta en menos parámetros.
Modelo | Parámetros | Residencia en |
---|---|---|
cronos-t5-diminuto | 8M | t5-eficiente-pequeño |
cronos-t5-mini | 20M | t5-eficiente-mini |
cronos-t5-pequeño | 46M | t5-eficiente-pequeño |
cronos-t5-base | 200M | base-eficiente-t5 |
cronos-t5-grande | 710M | t5-eficiente-grande |
La siguiente figura muestra el notable rendimiento de disparo cero de los modelos Chronos en 27 conjuntos de datos frente a modelos locales, modelos de tareas específicas y otros modelos previamente entrenados. Para obtener detalles sobre la configuración de la evaluación y otros resultados, consulte el documento.
Fig. 2: Rendimiento de diferentes modelos en Benchmark II, que comprende 27 conjuntos de datos que los modelos Chronos no vieron durante el entrenamiento. Este punto de referencia proporciona información sobre el rendimiento cero de los modelos Chronos frente a modelos estadísticos locales, que ajustan parámetros individualmente para cada serie temporal, modelos de tareas específicas entrenados en cada tarea y modelos previamente entrenados en un gran corpus de series temporales. Modelos previamente entrenados (Otros) indica que algunos (o todos) los conjuntos de datos del Punto de referencia II pueden haber estado en el corpus de entrenamiento de estos modelos. Las métricas de pronóstico probabilísticas (WQL) y puntuales (MASE) se normalizaron utilizando las puntuaciones de la línea de base Seasonal Naive y se agregaron a través de una media geométrica para obtener el Agg. WQL y MASE relativos, respectivamente.
Para realizar inferencia con modelos Chronos, instale este paquete ejecutando:
pip install git+https://github.com/amazon-science/chronos-forecasting.git
Consejo
La forma recomendada de utilizar Chronos para casos de uso de producción es a través de AutoGluon, que se combina con otros modelos estadísticos y de aprendizaje automático para pronósticos de series de tiempo, así como implementaciones fluidas en AWS con SageMaker. Consulte el tutorial de AutoGluon Chronos.
Un ejemplo mínimo que muestra cómo realizar pronósticos utilizando modelos de 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 ,
)
Se pueden encontrar más opciones para pipeline.predict
con:
print ( ChronosPipeline . predict . __doc__ )
Ahora podemos visualizar el pronóstico:
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 ()
Un ejemplo mínimo que muestra cómo extraer incrustaciones de codificador de modelos 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 )
En esta carpeta se pueden encontrar scripts para preentrenamiento, ajuste y evaluación de modelos Chronos.
Los conjuntos de datos utilizados en el artículo de Chronos para el entrenamiento previo y la evaluación (tanto en el dominio como en el disparo cero) están disponibles a través de los repositorios de HuggingFace: autogluon/chronos_datasets
y autogluon/chronos_datasets_extra
. Consulte estos repositorios para obtener instrucciones sobre cómo descargar y utilizar los conjuntos de datos.
Si encuentra que los modelos de Chronos son útiles para su investigación, considere citar el artículo asociado:
@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}
}
Consulte CONTRIBUCIÓN para obtener más información.
Este proyecto está bajo la licencia Apache-2.0.