Dostosowywanie cech czasowych
W trakcie tego kursu niejednokrotnie wspominaliśmy o ryzyku wyciekania informacji do modelu podczas treningu. Wyciek danych sprawia, że model osiąga bardzo optymistyczne wyniki na etapie oceny, ale gdy trafi na rzeczywiste dane, wyniki często okazują się rozczarowujące.
W tym ćwiczeniu zadbamy o to, aby kolumna DAYSONMARKET odzwierciedlała wyłącznie informacje dostępne w momencie przewidywania wartości. Innymi słowy – jeśli dom jest nadal wystawiony na sprzedaż, nie wiemy, jak długo jeszcze tam pozostanie. Musimy dostosować test_df tak, aby uwzględniał tylko dane, którymi dysponujemy na dzień 2017-12-10.
UWAGA: W tym przykładzie użyjemy funkcji lit(). Służy ona do przekazywania pojedynczych wartości w miejscach, gdzie funkcja oczekuje całej kolumny.
To ćwiczenie jest częścią kursu
Inżynieria cech z PySpark
Instrukcje do ćwiczenia
- Zaimportuj następujące funkcje z
pyspark.sql.functions, które będą potrzebne w dalszej części:datediff(),to_date(),lit(). - Przekonwertuj ciąg znaków '2017-12-10' na datę PySpark – najpierw wywołaj na nim funkcję
lit(), a następnie przekaż wynik doto_date(). - Utwórz
test_df, filtrując wiersze, w którychOFFMKTDATEjest większe lub równesplit_date, aLISTDATEjest mniejsze lub równesplit_date– użyj do tego metodywhere(). - Zastąp kolumnę
DAYSONMARKETnową kolumną o tej samej nazwie, obliczoną jako różnica międzysplit_dateaLISTDATE– skorzystaj z funkcjidatediff(). Porównaj nową i oryginalną kolumnę za pomocą dostarczonego kodu.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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()