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 :
- Extraction du mois :
df['date'].dt.month
récupère la valeur du mois. - 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.
- Pourquoi ?
- Contrairement à un encodage classique (1-12), ici
décembre
etjanvier
sont proches mathématiquement. - Utile pour les modèles ML sensibles aux distances numériques.
- Contrairement à un encodage classique (1-12), ici
🔎 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.).
- Extraction du mois :