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']])
    Résultat du code

    Explication du code :

    import numpy as np importe la bibliothèque NumPy, renommée ici en np pour simplifier son utilisation dans le code.

    import pandas as pd importe la bibliothèque Pandas, renommée ici en pd pour faciliter son appel.

    Création d'un DataFrame avec des dates

    La fonction pd.date_range() génère une séquence de dates.

    Elle commence le 1er janvier 2023, produit 12 périodes, et utilise un intervalle mensuel avec le paramètre freq='M'.

    Ce résultat est ensuite converti en un DataFrame avec une colonne nommée 'date'.

    df = pd.DataFrame({'date': pd.date_range(start='2023-01-01', periods=12, freq='M')}) crée donc un DataFrame avec 12 dates mensuelles.

    Extraction du mois

    La méthode dt.month permet d'extraire le mois à partir des valeurs de la colonne 'date'.

    Cette valeur est ensuite stockée dans une nouvelle colonne appelée 'mois'.

    df['mois'] = df['date'].dt.month ajoute ainsi la colonne 'mois' à df en extrayant le mois de chaque date.

    Encodage sinusoïdal

    Les colonnes 'mois_sin' et 'mois_cos' sont calculées pour encoder de manière sinusoïdale les mois de l'année.

    L'encodage sinusoïdal permet de transformer une variable cyclique (ici, le mois) en un format qui respecte sa nature périodique.

    On utilise pour cela les fonctions sinus et cosinus.

    Les expressions np.sin(2 * np.pi * df['mois'] / 12) et np.cos(2 * np.pi * df['mois'] / 12) génèrent respectivement la version sinusoïdale et cosinusoïdale de la colonne 'mois'.

    df['mois_sin'] = np.sin(2 * np.pi * df['mois'] / 12) ajoute la colonne 'mois_sin' contenant les valeurs sinusoïdales.

    df['mois_cos'] = np.cos(2 * np.pi * df['mois'] / 12) ajoute la colonne 'mois_cos' pour les valeurs cosinus.

    Affichage des colonnes 'mois', 'mois_sin' et 'mois_cos'

    La commande print(df[['mois', 'mois_sin', 'mois_cos']]) affiche les trois colonnes créées dans le DataFrame.

    Il s’agit des colonnes 'mois', 'mois_sin' et 'mois_cos'.

    Cela permet de visualiser les encodages des mois sous forme sinusoïdale et cosinusoïdale.