Tijdsplitsingen maken
In de video hebben we geleerd waarom willekeurig splitsen riskant kan zijn voor tijdreeksen: gegevens uit de toekomst kunnen tot overfitting in je model leiden. Bij time series krijg je vaak nieuwe data zodra die beschikbaar komt en wil je je model opnieuw trainen met de nieuwste data. In de video lieten we zien hoe je een percentage-split maakt voor train- en testsets, maar stel dat je wilt trainen op alle beschikbare data, behalve de laatste 45 dagen die je voor de testset wilt gebruiken.
In deze oefening maken we een functie die de splitdatum bepaalt om de laatste 45 dagen aan data te gebruiken voor testen en de rest voor trainen. Let op: timedelta() is al voor je geïmporteerd uit de standaard python-bibliotheek datetime.
Deze oefening maakt deel uit van de cursus
Feature Engineering met PySpark
Oefeninstructies
- Maak een functie
train_test_split_date()die een dataframedfaanneemt, de datumkolom om op te splitsensplit_col, en het aantal dagen voor de testsettest_days, met een standaardwaarde van 45. - Zoek de
min- enmax-datums voorsplit_colmet behulp van,(). - Bepaal de datum om de test- en trainsets te splitsen met
max_dateen trek daartest_daysvan af mettimedelta(), die een parameterdaysgebruikt; geef hiertest_daysdoor. - Gebruik
OFFMKTDATEalssplit_col, bepaalsplit_dateen gebruik die om het dataframe te filteren in twee nieuwe dataframes,train_dfentest_df, waarbijtest_dfalleen de laatste 45 dagen aan data bevat. Zorg er bovendien voor dattest_dfalleen woningen bevat die tot en met de splitdatum zijn aangeboden door te filteren opdf['LISTDATE']kleiner dan of gelijk aansplit_date.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
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)