Biblioteca de Deep Learning de última generación para Series Temporales y Secuencias.
tsai
es un paquete de aprendizaje profundo de código abierto construido sobre Pytorch y fastai centrado en técnicas de última generación para tareas de series de tiempo como clasificación, regresión, previsión, imputación...
tsai
se encuentra actualmente en desarrollo activo por parte de timeseriesAI.
Durante los últimos lanzamientos, estas son algunas de las incorporaciones más importantes a tsai
:
tsai
:Puedes instalar la última versión estable desde pip usando:
pip install tsai
Si planeas desarrollar tsai tú mismo o quieres estar a la vanguardia, puedes utilizar una instalación editable. Primero instale PyTorch y luego:
git clone https : // github . com / timeseriesAI / tsai
pip install - e "tsai[dev]"
Nota: a partir de tsai 0.3.0, tsai solo instalará dependencias físicas. Otras dependencias suaves (que solo son necesarias para tareas seleccionadas) no se instalarán de forma predeterminada (este es el enfoque recomendado. Si necesita alguna de las dependencias que no está instalada, tsai le pedirá que la instale cuando sea necesario). Si aún deseas instalar tsai con todas sus dependencias, puedes hacerlo ejecutando:
pip install tsai [ extras ]
También puedes instalar tsai usando conda (ten en cuenta que si reemplazas conda con mamba, el proceso de instalación será mucho más rápido y confiable):
conda install - c timeseriesai tsai
Aquí está el enlace a la documentación.
A continuación te dejamos una lista con algunos de los modelos de última generación disponibles en tsai
:
además de otros modelos personalizados como: TransformerModel, LSTMAttention, GRUAttention,…
Para conocer el paquete tsai, le sugerimos que comience con este cuaderno en Google Colab: 01_Intro_to_Time_Series_Classification Proporciona una descripción general de una tarea de clasificación de series temporales.
También hemos desarrollado muchos otros cuadernos tutoriales.
Para usar tsai en sus propios cuadernos, lo único que debe hacer después de haber instalado el paquete es ejecutar esto:
from tsai . all import *
Estos son sólo algunos ejemplos de cómo puedes utilizar tsai
:
Capacitación:
from tsai . basics import *
X , y , splits = get_classification_data ( 'ECG200' , split_data = False )
tfms = [ None , TSClassification ()]
batch_tfms = TSStandardize ()
clf = TSClassifier ( X , y , splits = splits , path = 'models' , arch = "InceptionTimePlus" , tfms = tfms , batch_tfms = batch_tfms , metrics = accuracy , cbs = ShowGraph ())
clf . fit_one_cycle ( 100 , 3e-4 )
clf . export ( "clf.pkl" )
Inferencia:
from tsai . inference import load_learner
clf = load_learner ( "models/clf.pkl" )
probas , target , preds = clf . get_X_preds ( X [ splits [ 1 ]], y [ splits [ 1 ]])
Capacitación:
from tsai . basics import *
X , y , splits = get_classification_data ( 'LSST' , split_data = False )
tfms = [ None , TSClassification ()]
batch_tfms = TSStandardize ( by_sample = True )
mv_clf = TSClassifier ( X , y , splits = splits , path = 'models' , arch = "InceptionTimePlus" , tfms = tfms , batch_tfms = batch_tfms , metrics = accuracy , cbs = ShowGraph ())
mv_clf . fit_one_cycle ( 10 , 1e-2 )
mv_clf . export ( "mv_clf.pkl" )
Inferencia:
from tsai . inference import load_learner
mv_clf = load_learner ( "models/mv_clf.pkl" )
probas , target , preds = mv_clf . get_X_preds ( X [ splits [ 1 ]], y [ splits [ 1 ]])
Capacitación:
from tsai . basics import *
X , y , splits = get_regression_data ( 'AppliancesEnergy' , split_data = False )
tfms = [ None , TSRegression ()]
batch_tfms = TSStandardize ( by_sample = True )
reg = TSRegressor ( X , y , splits = splits , path = 'models' , arch = "TSTPlus" , tfms = tfms , batch_tfms = batch_tfms , metrics = rmse , cbs = ShowGraph (), verbose = True )
reg . fit_one_cycle ( 100 , 3e-4 )
reg . export ( "reg.pkl" )
Inferencia:
from tsai . inference import load_learner
reg = load_learner ( "models/reg.pkl" )
raw_preds , target , preds = reg . get_X_preds ( X [ splits [ 1 ]], y [ splits [ 1 ]])
Los ROCKET (RocketClassifier, RocketRegressor, MiniRocketClassifier, MiniRocketRegressor, MiniRocketVotingClassifier o MiniRocketVotingRegressor) son modelos algo diferentes. En realidad, no son modelos de aprendizaje profundo (aunque utilizan convoluciones) y se utilizan de forma diferente.
pip install sktime
o utilizar:
pip install tsai [ extras ]
Capacitación:
from sklearn . metrics import mean_squared_error , make_scorer
from tsai . data . external import get_Monash_regression_data
from tsai . models . MINIROCKET import MiniRocketRegressor
X_train , y_train , * _ = get_Monash_regression_data ( 'AppliancesEnergy' )
rmse_scorer = make_scorer ( mean_squared_error , greater_is_better = False )
reg = MiniRocketRegressor ( scoring = rmse_scorer )
reg . fit ( X_train , y_train )
reg . save ( 'MiniRocketRegressor' )
Inferencia:
from sklearn . metrics import mean_squared_error
from tsai . data . external import get_Monash_regression_data
from tsai . models . MINIROCKET import load_minirocket
* _ , X_test , y_test = get_Monash_regression_data ( 'AppliancesEnergy' )
reg = load_minirocket ( 'MiniRocketRegressor' )
y_pred = reg . predict ( X_test )
mean_squared_error ( y_test , y_pred , squared = False )
Puede utilizar tsai para realizar pronósticos en los siguientes escenarios:
Necesitará: * preparar X (entrada de serie temporal) y el objetivo y (ver documentación) * seleccionar PatchTST o uno de los modelos de tsai que terminan en Plus (TSTPlus, InceptionTimePlus, TSiTPlus, etc.). El modelo configurará automáticamente un cabezal para producir una salida con la misma forma que la entrada objetivo y.
Capacitación:
from tsai . basics import *
ts = get_forecasting_time_series ( "Sunspots" ). values
X , y = SlidingWindow ( 60 , horizon = 1 )( ts )
splits = TimeSplitter ( 235 )( y )
tfms = [ None , TSForecasting ()]
batch_tfms = TSStandardize ()
fcst = TSForecaster ( X , y , splits = splits , path = 'models' , tfms = tfms , batch_tfms = batch_tfms , bs = 512 , arch = "TSTPlus" , metrics = mae , cbs = ShowGraph ())
fcst . fit_one_cycle ( 50 , 1e-3 )
fcst . export ( "fcst.pkl" )
Inferencia:
from tsai . inference import load_learner
fcst = load_learner ( "models/fcst.pkl" , cpu = False )
raw_preds , target , preds = fcst . get_X_preds ( X [ splits [ 1 ]], y [ splits [ 1 ]])
raw_preds . shape
# torch.Size([235, 1])
Este ejemplo muestra cómo crear un pronóstico univariado de 3 pasos adelante.
Capacitación:
from tsai . basics import *
ts = get_forecasting_time_series ( "Sunspots" ). values
X , y = SlidingWindow ( 60 , horizon = 3 )( ts )
splits = TimeSplitter ( 235 , fcst_horizon = 3 )( y )
tfms = [ None , TSForecasting ()]
batch_tfms = TSStandardize ()
fcst = TSForecaster ( X , y , splits = splits , path = 'models' , tfms = tfms , batch_tfms = batch_tfms , bs = 512 , arch = "TSTPlus" , metrics = mae , cbs = ShowGraph ())
fcst . fit_one_cycle ( 50 , 1e-3 )
fcst . export ( "fcst.pkl" )
Inferencia:
from tsai . inference import load_learner
fcst = load_learner ( "models/fcst.pkl" , cpu = False )
raw_preds , target , preds = fcst . get_X_preds ( X [ splits [ 1 ]], y [ splits [ 1 ]])
raw_preds . shape
# torch.Size([235, 3])
El formato de entrada para todos los modelos de series temporales y modelos de imágenes en tsai es el mismo. Un np.ndarray (u objeto similar a una matriz como zarr, etc.) con 3 dimensiones:
[# muestras x # variables x longitud de secuencia]
El formato de entrada para modelos tabulares en tsai (como TabModel, TabTransformer y TabFusionTransformer) es un marco de datos de pandas. Ver ejemplo.
Damos la bienvenida a contribuciones de todo tipo. Desarrollo de mejoras, corrección de errores, documentación, cuadernos tutoriales,…
Hemos creado una guía para ayudarle a comenzar a contribuir a tsai. Puedes leerlo aquí.
¿Quieres aprovechar al máximo las series temporales AI/tsai en un entorno profesional? Ayudemos. Envíanos un correo electrónico para conocer más: [email protected]
Si utiliza tsai en su investigación, utilice la siguiente entrada BibTeX:
@Misc{tsai,
author = {Ignacio Oguiza},
title = {tsai - A state-of-the-art deep learning library for time series and sequential data},
howpublished = {Github},
year = {2023},
url = {https://github.com/timeseriesAI/tsai}
}