Tijdfeatures aanpassen
In deze cursus hebben we meerdere keren gewezen op het gevaar van het lekken van informatie naar je model tijdens het trainen. Data leakage zorgt ervoor dat je model erg optimistische nauwkeurigheidsstatistieken heeft, maar zodra er echte data doorheen gaat, vallen de resultaten vaak tegen.
In deze oefening zorgen we ervoor dat DAYSONMARKET alleen weerspiegelt welke informatie we hebben op het moment dat we de waarde voorspellen. Dus: als het huis nog steeds te koop staat, weten we niet hoeveel dagen het nog op de markt blijft. We moeten test_df aanpassen zodat het overeenkomt met de informatie die we hebben per 2017-12-10.
LET OP: In dit voorbeeld gebruiken we de functie lit(). Deze functie wordt gebruikt om enkelvoudige waarden toe te staan waar normaal een hele kolom wordt verwacht in een functieaanroep.
Deze oefening maakt deel uit van de cursus
Feature Engineering met PySpark
Oefeninstructies
- Importeer de volgende functies uit
pyspark.sql.functionsom later te gebruiken:datediff(),to_date(),lit(). - Zet de datumstring '2017-12-10' om naar een PySpark-datum door eerst de letterlijke functie
lit()erop aan te roepen en daarnato_date(). - Maak
test_dfdoor te filteren opOFFMKTDATEgroter dan of gelijk aansplit_dateenLISTDATEkleiner dan of gelijk aansplit_datemetwhere(). - Vervang
DAYSONMARKETdoor een nieuwe kolom met de naamDAYSONMARKET; deze nieuwe kolom moet het verschil zijn tussensplit_dateenLISTDATE. Gebruikdatediff()om de datumcalculatie uit te voeren. Inspecteer de nieuwe kolom en de oorspronkelijke met de meegeleverde code.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
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()