CommencerCommencez gratuitement

Créer des découpages temporels

Dans la vidéo, nous avons vu pourquoi un découpage aléatoire est risqué pour les séries temporelles : des données futures peuvent entraîner un surapprentissage du modèle. Avec les séries temporelles, vous recevez souvent de nouvelles données au fil du temps et vous souhaitez réentraîner votre modèle avec les plus récentes. Dans la vidéo, nous avons montré comment effectuer un découpage en pourcentage pour les jeux d’entraînement et de test, mais supposons que vous vouliez entraîner sur toutes les données disponibles sauf les 45 derniers jours, que vous réservez au jeu de test.

Dans cet exercice, nous allons créer une fonction pour déterminer la date de découpage afin d’utiliser les 45 derniers jours pour le test et le reste pour l’entraînement. Veuillez noter que timedelta() a déjà été importée pour vous depuis la bibliothèque standard python datetime.

Cet exercice fait partie du cours

<cours>Feature Engineering avec PySpark</cours>
Voir le cours

Instructions de l’exercice

  • Créez une fonction train_test_split_date() qui prend en entrée un DataFrame df, la colonne de date à utiliser pour le découpage split_col, ainsi que le nombre de jours à utiliser pour le jeu de test test_days, avec une valeur par défaut de 45.
  • Trouvez les dates min et max pour split_col en utilisant ,().
  • Déterminez la date de séparation entre test et entraînement à partir de max_date en soustrayant test_days via timedelta(), qui prend un paramètre days ; dans ce cas, passez test_days.
  • En utilisant OFFMKTDATE comme split_col, calculez split_date et servez-vous-en pour filtrer le DataFrame en deux nouveaux DataFrames, train_df et test_df, où test_df ne contient que les 45 derniers jours de données. Assurez-vous en outre que test_df ne contient que des biens listés à la date de découpage en filtrant df['LISTDATE'] inférieur ou égal à split_date.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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) 
Modifier et exécuter le code