CommencezCommencez gratuitement

Créer des partitions temporelles

Dans la vidéo, nous avons vu pourquoi un découpage aléatoire peut être risqué pour les séries chronologiques : des données futures peuvent entraîner du surapprentissage dans notre modèle. Souvent, avec les séries temporelles, vous obtenez de nouvelles données au fur et à mesure et vous voudrez réentraîner votre modèle avec les plus récentes. Dans la vidéo, nous avons montré comment effectuer une répartition en pourcentage pour les ensembles d'entraînement et de test, mais supposons que vous souhaitiez entraîner sur toutes les données disponibles sauf les 45 derniers jours, que vous utiliserez comme ensemble de test.

Dans cet exercice, nous allons créer une fonction pour trouver la date de coupure afin d'utiliser les 45 derniers jours de données 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.

Cette activité fait partie du cours

Ingénierie des caractéristiques avec PySpark

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 la coupure split_col et le nombre de jours à utiliser pour l'ensemble 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 coupure entre test et entraînement en partant de max_date et en soustrayant test_days à l'aide de timedelta(), qui accepte un paramètre days; dans ce cas, transmettez test_days.
  • En utilisant OFFMKTDATE comme split_col, trouvez split_date et servez-vous-en pour filtrer le dataframe en deux nouveaux dataframes, train_df et test_df, où test_df correspond uniquement aux 45 derniers jours de données. Assurez-vous également que test_df ne contient que les propriétés inscrites à la date de coupure en filtrant df['LISTDATE'] pour qu'elle soit inférieure ou égale à 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