CommencerCommencez gratuitement

Ajuster les variables temporelles

Nous avons évoqué à plusieurs reprises dans ce cours les risques de fuite d’information vers votre modèle pendant l’entraînement. La fuite de données peut donner des métriques d’exactitude très optimistes, mais une fois confronté à des données réelles, le modèle déçoit souvent.

Dans cet exercice, nous allons nous assurer que DAYSONMARKET ne reflète que les informations disponibles au moment de la prédiction. Autrement dit, si la maison est toujours sur le marché, nous ne savons pas combien de jours supplémentaires elle y restera. Nous devons ajuster test_df pour qu’il reflète les informations dont nous disposons au 2017-12-10.

REMARQUE : Cet exemple utilise la fonction lit(). Elle permet de fournir une valeur unique là où une fonction attend normalement une colonne entière.

Cet exercice fait partie du cours

<cours>Feature Engineering avec PySpark</cours>
Voir le cours

Instructions de l’exercice

  • Importez les fonctions suivantes depuis pyspark.sql.functions pour les utiliser ensuite : datediff(), to_date(), lit().
  • Convertissez la chaîne de date '2017-12-10' en date PySpark en appelant d’abord la fonction littérale lit() dessus, puis to_date().
  • Créez test_df en filtrant avec where() les lignes où OFFMKTDATE est supérieure ou égale à split_date et LISTDATE est inférieure ou égale à split_date.
  • Remplacez DAYSONMARKET en calculant une nouvelle colonne appelée DAYSONMARKET ; cette nouvelle colonne doit être la différence entre split_date et LISTDATE. Utilisez datediff() pour effectuer le calcul sur les dates. Inspectez la nouvelle colonne et l’originale avec le code fourni.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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()
Modifier et exécuter le code