Ajuster les variables temporelles
Tout au long du cours, nous avons mentionné les risques de fuite d'information pendant l'entraînement d'un modèle. La fuite de données donne souvent des mesures de précision trop optimistes, mais lorsque des données réelles passent dans le modèle, les résultats sont souvent très décevants.
Dans cet exercice, nous allons nous assurer que DAYSONMARKET ne reflète que l'information disponible 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 refléter l'information dont nous disposons au 2017-12-10.
REMARQUE : Cet exemple utilise la fonction lit(). Cette fonction permet d'utiliser une valeur unique là où un appel de fonction attend normalement une colonne entière.
Cette activité fait partie du cours
Ingénierie des caractéristiques avec PySpark
Instructions de l’exercice
- Importez les fonctions suivantes de
pyspark.sql.functionspour les utiliser plus tard :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 les lignes oùOFFMKTDATEest supérieur ou égal àsplit_dateet oùLISTDATEest inférieur ou égal àsplit_dateavecwhere(). - Remplacez
DAYSONMARKETen calculant une nouvelle colonne appeléeDAYSONMARKET. Cette nouvelle colonne doit correspondre à la différence entresplit_dateetLISTDATE. Utilisezdatediff()pour effectuer le calcul de dates. Inspectez la nouvelle colonne et l'originale à l'aide du 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()