Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
División de Entrenamiento/Prueba y Validación Cruzada | Procesamiento de Datos de Series Temporales
Procesamiento Previo de Datos
course content

Contenido del Curso

Procesamiento Previo de Datos

Procesamiento Previo de Datos

1. Introducción Breve
2. Procesamiento de Datos Cuantitativos
3. Procesamiento de Datos Categóricos
4. Procesamiento de Datos de Series Temporales
5. Ingeniería de Características
6. Avanzando a Tareas

bookDivisió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í:

12345678910111213
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']
copy

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:

12345678910111213141516171819
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}')
copy
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 5
We're sorry to hear that something went wrong. What happened?
some-alt