Zeitmerkmale anpassen
Wir haben in diesem Kurs mehrfach auf die Gefahr hingewiesen, beim Training Informationen in dein Modell durchsickern zu lassen. Data Leakage führt dazu, dass dein Modell sehr optimistische Genauigkeitsmetriken zeigt – aber sobald echte Daten durchlaufen, sind die Ergebnisse oft enttäuschend.
In dieser Übung stellen wir sicher, dass DAYSONMARKET nur das widerspiegelt, was wir zum Zeitpunkt der Vorhersage wissen. Das heißt: Wenn das Haus noch auf dem Markt ist, wissen wir nicht, wie viele Tage es noch dort bleiben wird. Wir müssen unser test_df so anpassen, dass es den Informationsstand zum 2017-12-10 abbildet.
HINWEIS: In diesem Beispiel verwenden wir die Funktion lit(). Diese Funktion wird genutzt, um einzelne Werte zuzulassen, wo in einem Funktionsaufruf eigentlich eine ganze Spalte erwartet wird.
Diese Übung ist Teil des Kurses
<Kurs>Feature Engineering mit PySpark</Kurs>Übungsanweisungen
- Importiere die folgenden Funktionen aus
pyspark.sql.functions, um sie später zu verwenden:datediff(),to_date(),lit(). - Wandle den Datums-String '2017-12-10' in ein PySpark-Datum um, indem du zuerst die Literal-Funktion
lit()darauf anwendest und danachto_date()aufrufst. - Erzeuge
test_df, indem du mitwhere()nachOFFMKTDATEgrößer oder gleichsplit_dateundLISTDATEkleiner oder gleichsplit_datefilterst. - Ersetze
DAYSONMARKET, indem du eine neue Spalte namensDAYSONMARKETberechnest. Die neue Spalte soll die Differenz zwischensplit_dateundLISTDATEsein; verwendedatediff()für die Datumsberechnung. Prüfe die neue Spalte und das Original mit dem bereitgestellten Code.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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()