Zacznij terazZacznij za darmo

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

Zobacz kurs

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 do to_date().
  • Utwórz test_df, filtrując wiersze, w których OFFMKTDATE jest większe lub równe split_date, a LISTDATE jest mniejsze lub równe split_date – użyj do tego metody where().
  • Zastąp kolumnę DAYSONMARKET nową kolumną o tej samej nazwie, obliczoną jako różnica między split_date a LISTDATE – skorzystaj z funkcji datediff(). 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()
Edytuj i uruchom kod