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
Instrucciones del ejercicio
- Importa las siguientes funciones de
pyspark.sql.functionspara 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 ato_date(). - Crea
test_dffiltrandoOFFMKTDATEmayor o igual quesplit_dateyLISTDATEmenor o igual quesplit_dateusandowhere(). - Sustituye
DAYSONMARKETcalculando una nueva columna llamadaDAYSONMARKET; la nueva columna debe ser la diferencia entresplit_dateyLISTDATE. Usadatediff()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()