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
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șimaxpentrusplit_colfolosind,(). - Determină data de împărțire dintre setul de testare și cel de antrenament folosind
max_dateși scăzândtest_dayscu ajutorultimedelta(), care acceptă un parametrudays— în acest caz, paseazătest_days. - Folosind
OFFMKTDATEcasplit_col, găseștesplit_dateși folosește-o pentru a filtra dataframe-ul în două seturi noi:train_dfșitest_df, undetest_dfconține doar ultimele 45 de zile de date. Asigură-te, de asemenea, cătest_dfinclude numai locuințele listate până la data de împărțire, filtrânddf['LISTDATE']să fie mai mic sau egal cusplit_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)