Contenido del Curso
Procesamiento Previo de Datos
Procesamiento Previo de Datos
División de Entrenamiento/Prueba y Validación Cruzada
El último tema sobre series temporales será la preparación de datos para entrenar y probar modelos de aprendizaje automático: división entrenamiento/prueba y validación cruzada.
Al dividir los datos de series temporales en conjuntos de entrenamiento y prueba, es importante tener en cuenta el aspecto temporal de los datos. A diferencia de otros tipos de conjuntos de datos, el muestreo aleatorio para la división no es adecuado para los datos de series temporales, ya que puede provocar fugas de datos y una evaluación sesgada del rendimiento del modelo.
El método más común para dividir los datos de series temporales es utilizar un punto fijo en el tiempo como punto de división entre los conjuntos de entrenamiento y de prueba. El conjunto de entrenamiento incluye todas las observaciones anteriores al punto de división, mientras que el conjunto de prueba incluye todas las observaciones posteriores al punto de división.
Por ejemplo, puede ser así:
import statsmodels.api as sm import pandas as pd # Load the dataset df = sm.datasets.get_rdataset('weather', 'nycflights13').data df['observation_time'] = pd.to_datetime(df.time_hour) df.drop(columns=['year', 'month', 'day', 'hour', 'time_hour'], inplace=True) print(df.head(10)) # Split data into training and test sets based on time train = df.loc[df['observation_time'] < '2013-08-01'] test = df.loc[df['observation_time'] >= '2013-08-01']
La validación cruzada funciona con la misma idea: dividir el conjunto de entrenamiento en dos partes (como antes) en cada iteración, teniendo en cuenta que el conjunto de validación siempre está por delante del conjunto de entrenamiento. En la primera iteración, se entrena el modelo candidato con los datos meteorológicos de enero a marzo y se valida con los datos de abril; en la siguiente iteración, se entrena con los datos de enero a abril y se valida con los datos de mayo, y así sucesivamente hasta el final del conjunto de entrenamiento. En total se realizan 5 iteraciones.
Veremos el validador cruzado de series temporales de la biblioteca scikit-learn
:
from sklearn.model_selection import TimeSeriesSplit import statsmodels.api as sm import pandas as pd # Load the dataset df = sm.datasets.get_rdataset('weather', 'nycflights13').data df['observation_time'] = pd.to_datetime(df.time_hour) df.drop(columns=['year', 'month', 'day', 'hour', 'time_hour'], inplace=True) df.head() # Create TimeSeriesSplit model tscv = TimeSeriesSplit(n_splits=5) # Split train and test sets for i, (train_index, test_index) in enumerate(tscv.split(df)): print(f'Fold {i}:') print(f' Train: index={train_index}') print(f' Test: index={test_index}')
¡Gracias por tus comentarios!