EmpezarEmpieza gratis

Creación de particiones temporales

En el vídeo vimos por qué dividir los datos aleatoriamente puede ser peligroso en series temporales: datos del futuro pueden causar sobreajuste en tu modelo. A menudo, con series temporales vas incorporando nuevos datos a medida que aparecen y querrás reentrenar el modelo con la información más reciente. En el vídeo mostramos cómo hacer una división porcentual entre conjuntos de entrenamiento y prueba, pero supongamos que quieres entrenar con todos los datos disponibles excepto los últimos 45 días, que usarás como conjunto de prueba.

En este ejercicio, crearemos una función para obtener la fecha de corte que permita usar los últimos 45 días como prueba y el resto como entrenamiento. Ten en cuenta que timedelta() ya se ha importado para ti de la biblioteca estándar de python, datetime.

Este ejercicio forma parte del curso

Ingeniería de características con PySpark

Ver curso

Instrucciones del ejercicio

  • Crea una función train_test_split_date() que reciba un dataframe df, la columna de fecha para dividir split_col y el número de días para el conjunto de prueba test_days, con un valor por defecto de 45.
  • Obtén las fechas min y max para split_col usando ,().
  • Calcula la fecha para separar entrenamiento y prueba usando max_date y restando test_days mediante timedelta(), que recibe un parámetro days; en este caso, pasa test_days.
  • Usando OFFMKTDATE como split_col, encuentra split_date y úsala para filtrar el dataframe en dos nuevos, train_df y test_df, donde test_df contenga solo los últimos 45 días de datos. Además, asegúrate de que test_df solo incluya viviendas listadas hasta la fecha de corte filtrando df['LISTDATE'] menor o igual que split_date.

ejercicio interactivo práctico

Prueba este ejercicio completando este código de ejemplo.

def train_test_split_date(df, split_col, test_days=____):
  """Calculate the date to split test and training sets"""
  # Find how many days our data spans
  max_date = df.____({____: ____}).collect()[0][0]
  min_date = df.____({____: ____}).collect()[0][0]
  # Subtract an integer number of days from the last date in dataset
  split_date = ____ - timedelta(days=____)
  return split_date

# Find the date to use in spitting test and train
split_date = train_test_split_date(df, ____)

# Create Sequential Test and Training Sets
____ = df.where(df[____] < split_date) 
____ = df.where(df[____] >= split_date).where(df[____] <= split_date) 
Editar y ejecutar código