Ajustarea caracteristicilor temporale
Pe parcursul acestui curs am menționat pericolele legate de scurgerea informațiilor către model în timpul antrenării. Data leakage va face ca modelul tău să afișeze metrici de acuratețe foarte optimiste, însă odată ce datele reale sunt rulate prin el, rezultatele sunt adesea dezamăgitoare.
În acest exercițiu, ne vom asigura că DAYSONMARKET reflectă doar informațiile disponibile în momentul în care facem predicția. Cu alte cuvinte, dacă o casă este încă pe piață, nu știm câte zile mai rămâne listată. Trebuie să ajustăm test_df pentru a reflecta informațiile disponibile la data de 2017-12-10.
NOTĂ: Acest exemplu folosește funcția lit(). Această funcție este utilizată pentru a permite transmiterea unor valori individuale acolo unde o funcție se așteaptă să primească o coloană întreagă.
Acest exercițiu face parte din cursul
Feature Engineering cu PySpark
Instrucțiuni pentru exercițiu
- Importă următoarele funcții din
pyspark.sql.functionspentru a le folosi mai târziu:datediff(),to_date(),lit(). - Convertește șirul de caractere '2017-12-10' într-o dată PySpark apelând mai întâi funcția literală
lit()pe acesta, apoito_date(). - Creează
test_dffiltrând înregistrările în careOFFMKTDATEeste mai mare sau egal cusplit_dateșiLISTDATEeste mai mic sau egal cusplit_date, folosindwhere(). - Înlocuiește
DAYSONMARKETcalculând o nouă coloană tot cu numeleDAYSONMARKET; noua coloană trebuie să reprezinte diferența dintresplit_dateșiLISTDATE— foloseștedatediff()pentru a efectua calculul. Inspectează noua coloană și pe cea originală cu ajutorul codului furnizat.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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()