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

Rozdělení dat podle času

Ve videu jsme se dozvěděli, proč může být náhodné rozdělení dat u časových řad nebezpečné – data z budoucnosti mohou způsobit přetrénování modelu. U časových řad obvykle přibývají nová data postupně, jak jsou k dispozici, a model je třeba pravidelně přetrénovat na nejnovějších datech. Ve videu jsme ukázali, jak provést procentuální rozdělení na trénovací a testovací sady. Tentokrát ale chceme trénovat na všech dostupných datech s výjimkou posledních 45 dní, které použijeme jako testovací sadu.

V tomto cvičení vytvoříme funkci, která najde datum rozdělení tak, aby posledních 45 dní sloužilo k testování a zbytek k trénování. Funkce timedelta() je již naimportována ze standardní knihovny pythondatetime.

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

Feature Engineering with PySpark

Zobrazit kurz

Pokyny k cvičení

  • Vytvoř funkci train_test_split_date(), která přijímá datový rámec df, název sloupce s datem pro rozdělení split_col a počet dní pro testovací sadu test_days s výchozí hodnotou 45.
  • Pomocí min() a max() najdi nejmenší a největší datum ve sloupci split_col.
  • Vypočítej datum rozdělení trénovací a testovací sady tak, že od max_date odečteš test_days pomocí funkce timedelta(), která přijímá parametr days – předej jí hodnotu test_days.
  • Jako split_col použij OFFMKTDATE, najdi split_date a podle něj rozdel datový rámec na dva nové – train_df a test_df, přičemž test_df bude obsahovat pouze posledních 45 dní dat. Zároveň zajisti, aby test_df obsahoval pouze domy nabízené k datu rozdělení nebo dříve – vyfiltruj záznamy, kde df['LISTDATE'] je menší nebo rovno split_date.

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

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

def train_test_split_date(df, split_col, test_days=____):
  """Calculate the date to split test and training sets"""
  # Find how many days our data spans
  max_date = df.____({____: ____}).collect()[0][0]
  min_date = df.____({____: ____}).collect()[0][0]
  # Subtract an integer number of days from the last date in dataset
  split_date = ____ - timedelta(days=____)
  return split_date

# Find the date to use in spitting test and train
split_date = train_test_split_date(df, ____)

# Create Sequential Test and Training Sets
____ = df.where(df[____] < split_date) 
____ = df.where(df[____] >= split_date).where(df[____] <= split_date) 
Upravit a spustit kód