Začněte nyníZačněte zdarma

Úprava časových příznaků

V průběhu tohoto kurzu jsme několikrát zmiňovali rizika spojená s únikem informací do modelu během trénování. Data leakage způsobuje, že model vykazuje příliš optimistické metriky přesnosti – jakmile ho ale spustíš na reálných datech, výsledky bývají zklamáním.

V tomto cvičení zajistíme, aby sloupec DAYSONMARKET odrážel pouze informace, které máme k dispozici v okamžiku predikce hodnoty. Jinými slovy: pokud je dům stále v nabídce, nevíme, kolik dalších dní tam zůstane. Musíme proto upravit test_df tak, aby odpovídal informacím, které máme k dispozici ke dni 2017-12-10.

POZNÁMKA: V tomto příkladu použijeme funkci lit(). Tato funkce slouží k předání jedné hodnoty tam, kde se v rámci volání funkce očekává celý sloupec.

Toto cvičení je součástí kurzu

Feature Engineering with PySpark

Zobrazit kurz

Pokyny k cvičení

  • Naimportuj z pyspark.sql.functions následující funkce, které použiješ v dalším kroku: datediff(), to_date(), lit().
  • Převeď řetězec s datem '2017-12-10' na pyspark datum: nejprve na něj zavolej funkci lit() a výsledek předej funkci to_date().
  • Vytvoř test_df tak, že pomocí where() vyfiltrujete záznamy, kde je OFFMKTDATE větší nebo rovno split_date a LISTDATE menší nebo rovno split_date.
  • Přepiš sloupec DAYSONMARKET výpočtem nového sloupce se stejným názvem – jeho hodnota by měla odpovídat rozdílu mezi split_date a LISTDATE. K výpočtu použij funkci datediff(). Nový i původní sloupec si prohlédni pomocí připraveného kódu.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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()
Upravit a spustit kód