ÎncepețiÎncepe gratuit

Crearea împărțirilor temporale

În lecția video, am văzut de ce împărțirea aleatorie a datelor poate fi periculoasă în cazul seriilor de timp, deoarece datele din viitor pot provoca supraantrenarea modelului. De obicei, în lucrul cu serii de timp, primești date noi pe măsură ce devin disponibile și vei dori să reantrenezi modelul folosind cele mai recente informații. În video, am arătat cum să faci o împărțire procentuală în seturi de antrenament și de testare, dar acum să presupunem că vrei să antrenezi pe toate datele disponibile, cu excepția ultimelor 45 de zile, pe care vrei să le folosești ca set de testare.

În acest exercițiu, vei crea o funcție care să găsească data de împărțire, folosind ultimele 45 de zile pentru testare și restul pentru antrenament. Reține că timedelta() a fost deja importat din biblioteca standard python, anume datetime.

Acest exercițiu face parte din cursul

Feature Engineering cu PySpark

Vezi cursul

Instrucțiuni pentru exercițiu

  • Creează o funcție train_test_split_date() care primește un dataframe (df), coloana de dată folosită pentru împărțire (split_col) și numărul de zile rezervate pentru setul de testare (test_days), cu o valoare implicită de 45.
  • Găsește datele min și max pentru split_col folosind ,().
  • Determină data de împărțire dintre setul de testare și cel de antrenament folosind max_date și scăzând test_days cu ajutorul timedelta(), care acceptă un parametru days — în acest caz, pasează test_days.
  • Folosind OFFMKTDATE ca split_col, găsește split_date și folosește-o pentru a filtra dataframe-ul în două seturi noi: train_df și test_df, unde test_df conține doar ultimele 45 de zile de date. Asigură-te, de asemenea, că test_df include numai locuințele listate până la data de împărțire, filtrând df['LISTDATE'] să fie mai mic sau egal cu split_date.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

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) 
Editează și rulează codul