Justera tidssärdrag
Vi har under hela kursen nämnt riskerna med att läcka information till modellen under träning. Datainläckning leder till att modellen visar alltför optimistiska noggrannhetsmått – men när verklig data används blir resultaten ofta väldigt nedslående.
I den här övningen ska vi se till att DAYSONMARKET bara återspeglar den information vi har tillgänglig vid tidpunkten för prediktion. Det vill säga: om huset fortfarande är till salu vet vi inte hur många dagar det kommer att ligga kvar på marknaden. Vi behöver justera test_df så att det bara innehåller den information vi har per 2017-12-10.
OBS: Det här exemplet använder funktionen lit(). Den används för att tillåta enskilda värden där en hel kolumn förväntas i ett funktionsanrop.
Den här övningen är en del av kursen
Feature Engineering med PySpark
Övningsinstruktioner
- Importera följande funktioner från
pyspark.sql.functionsför senare användning:datediff(),to_date(),lit(). - Konvertera datumsträngen '2017-12-10' till ett PySpark-datum genom att först anropa literalfunktionen
lit()på den och sedanto_date(). - Skapa
test_dfgenom att filtrera rader därOFFMKTDATEär större än eller lika medsplit_dateochLISTDATEär mindre än eller lika medsplit_datemed hjälp avwhere(). - Ersätt
DAYSONMARKETgenom att beräkna en ny kolumn med namnetDAYSONMARKET– den nya kolumnen ska vara skillnaden mellansplit_dateochLISTDATE. Använddatediff()för datumberäkningen. Granska den nya kolumnen och den ursprungliga med hjälp av den angivna koden.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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()