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>Instructions de l’exercice
- Importez les fonctions suivantes depuis
pyspark.sql.functionspour 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, puisto_date(). - Créez
test_dfen filtrant avecwhere()les lignes oùOFFMKTDATEest supérieure ou égale àsplit_dateetLISTDATEest inférieure ou égale àsplit_date. - Remplacez
DAYSONMARKETen calculant une nouvelle colonne appeléeDAYSONMARKET; cette nouvelle colonne doit être la différence entresplit_dateetLISTDATE. Utilisezdatediff()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()