Encodage des variables temporelles (sinus et cosinus pour les cycles)

L’encodage des variables temporelles avec sinus et cosinus est une méthode pour représenter des données cycliques (comme les heures, les jours de la semaine ou les mois) de manière à respecter leur nature circulaire. En utilisant ces fonctions trigonométriques, on transforme les valeurs en deux nouvelles dimensions qui capturent la continuité du cycle, comme par exemple la relation entre 23h et 0h, qui doivent être proches. Cela permet de mieux gérer les variables cycliques dans les modèles d’apprentissage automatique.

Fonctions :

  • Encodage des Variables Temporelles avec Sinus et Cosinus

    L'encodage sinusoïdal permet de représenter les variables cycliques (mois, jours, heures) sous forme de coordonnées circulaires pour éviter les discontinuités (ex: janvier 1 et décembre 12 sont proches dans un cycle).

    Importation :

    import numpy as np
    import pandas as pd

    Attributs :

    Paramètre Description
    période Durée du cycle (ex: 12 pour les mois, 24 pour les heures)
    sin(x) Encode la position cyclique en y
    cos(x) Encode la position cyclique en x

    Exemple de code :

    import numpy as np
    import pandas as pd
    
    # Création d'un DataFrame avec des dates
    df = pd.DataFrame({'date': pd.date_range(start='2023-01-01', periods=12, freq='M')})
    
    # Extraction du mois
    df['mois'] = df['date'].dt.month
    
    # Encodage sinusoïdal
    df['mois_sin'] = np.sin(2 * np.pi * df['mois'] / 12)
    df['mois_cos'] = np.cos(2 * np.pi * df['mois'] / 12)
    
    print(df[['mois', 'mois_sin', 'mois_cos']])

    Explication du code :

    1. Extraction du mois : df['date'].dt.month récupère la valeur du mois.
    2. Encodage sinusoïdal :
      • np.sin(2 * np.pi * mois / 12) transforme la valeur en une position sur un cercle.
      • np.cos(2 * np.pi * mois / 12) fait de même sur un autre axe.
    3. Pourquoi ?
      • Contrairement à un encodage classique (1-12), ici décembre et janvier sont proches mathématiquement.
      • Utile pour les modèles ML sensibles aux distances numériques.

    🔎 Remarques

    • Peut être appliqué aux heures (/24), jours de la semaine (/7), etc.
    • Utile pour les modèles de séries temporelles (LSTMs, régressions, etc.).