Inizia subitoInizia gratis

Creare suddivisioni temporali

Nel video abbiamo visto perché suddividere i dati in modo casuale può essere rischioso per le serie temporali: dati “dal futuro” possono causare overfitting nel modello. Spesso, con le serie temporali, acquisisci nuovi dati man mano che arrivano e vorrai riaddestrare il modello usando quelli più recenti. Nel video abbiamo mostrato come fare una suddivisione percentuale tra test e training set, ma supponiamo che tu voglia addestrare su tutti i dati disponibili tranne gli ultimi 45 giorni, che userai come test set.

In questo esercizio creeremo una funzione per trovare la data di split in modo da usare gli ultimi 45 giorni di dati per il test e il resto per il training. Nota che timedelta() è già stato importato per te dalla libreria standard python datetime.

Questo esercizio fa parte del corso

Feature Engineering con PySpark

Visualizza corso

Istruzioni dell'esercizio

  • Crea una funzione train_test_split_date() che accetti un dataframe df, la colonna data da usare per lo split split_col e il numero di giorni da usare per il test set test_days, impostandolo di default a 45.
  • Trova le date min e max per split_col usando ,().
  • Trova la data in cui suddividere test e training set usando max_date e sottraendo test_days con timedelta(), che accetta un parametro days; in questo caso passa test_days.
  • Usando OFFMKTDATE come split_col, trova split_date e usala per filtrare il dataframe in due nuovi data frame, train_df e test_df, dove test_df contiene solo gli ultimi 45 giorni di dati. Inoltre, assicurati che test_df includa solo le case elencate alla data di split filtrando df['LISTDATE'] minore o uguale a split_date.

esercizio interattivo pratico

Prova questo esercizio completando questo codice di esempio.

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) 
Modifica ed esegui il codice