EmpezarEmpieza gratis

Ajustar características temporales

A lo largo del curso hemos mencionado algunos de los riesgos de filtrar información a tu modelo durante el entrenamiento. La fuga de datos hará que tu modelo muestre métricas de exactitud demasiado optimistas, pero cuando lo apliques a datos reales los resultados suelen ser muy decepcionantes.

En este ejercicio, vamos a asegurarnos de que DAYSONMARKET solo refleje la información disponible en el momento de predecir el valor. Es decir, si la vivienda sigue en el mercado, no sabemos cuántos días más permanecerá listada. Tenemos que ajustar test_df para reflejar la información que tenemos a fecha de 2017-12-10.

NOTA: En este ejemplo usaremos la función lit(). Esta función se utiliza para permitir valores escalares donde normalmente se espera una columna completa en una llamada de función.

Este ejercicio forma parte del curso

Ingeniería de características con PySpark

Ver curso

Instrucciones del ejercicio

  • Importa las siguientes funciones de pyspark.sql.functions para usarlas más adelante: datediff(), to_date(), lit().
  • Convierte la cadena de fecha '2017-12-10' a una fecha de PySpark llamando primero a la función literal lit() y luego a to_date().
  • Crea test_df filtrando OFFMKTDATE mayor o igual que split_date y LISTDATE menor o igual que split_date usando where().
  • Sustituye DAYSONMARKET calculando una nueva columna llamada DAYSONMARKET; la nueva columna debe ser la diferencia entre split_date y LISTDATE. Usa datediff() para realizar el cálculo de fechas. Inspecciona la nueva columna y la original con el código proporcionado.

ejercicio interactivo práctico

Prueba este ejercicio completando este código de ejemplo.

from pyspark.sql.functions import ____, ____, ____

split_date = ____(____('2017-12-10'))
# Create Sequential Test set
test_df = df.____(df[____] >= ____).____(df[____] <= ____)

# Create a copy of DAYSONMARKET to review later
test_df = test_df.withColumn('DAYSONMARKET_Original', test_df['DAYSONMARKET'])

# Recalculate DAYSONMARKET from what we know on our split date
test_df = test_df.withColumn(____, ____(____, ____))

# Review the difference
test_df[['LISTDATE', 'OFFMKTDATE', 'DAYSONMARKET_Original', 'DAYSONMARKET']].show()
Editar y ejecutar código