Aan de slagBegin gratis

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

Bekijk cursus

Oefeninstructies

  • Maak een functie train_test_split_date() die een dataframe df aanneemt, de datumkolom om op te splitsen split_col, en het aantal dagen voor de testset test_days, met een standaardwaarde van 45.
  • Zoek de min- en max-datums voor split_col met behulp van ,().
  • Bepaal de datum om de test- en trainsets te splitsen met max_date en trek daar test_days van af met timedelta(), die een parameter days gebruikt; geef hier test_days door.
  • Gebruik OFFMKTDATE als split_col, bepaal split_date en gebruik die om het dataframe te filteren in twee nieuwe dataframes, train_df en test_df, waarbij test_df alleen de laatste 45 dagen aan data bevat. Zorg er bovendien voor dat test_df alleen woningen bevat die tot en met de splitdatum zijn aangeboden door te filteren op df['LISTDATE'] kleiner dan of gelijk aan split_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) 
Code bewerken en uitvoeren