
Décomposition en mode empirique : la manière la plus intuitive de décomposer des signaux complexes et des séries temporelles
analyser vos séries temporelles en tant que data scientist ?
Vous êtes-vous déjà demandé si le traitement du signal pourrait vous faciliter la vie ?
Si oui, reste avec moi. Cet article est fait pour vous. 🙂
Travailler avec des séries chronologiques du monde réel peut être… pénible. Courbes financières, tracés ECG, signaux neuronaux : ils ressemblent souvent à des pointes chaotiques sans aucune structure.
Travailler avec des séries chronologiques du monde réel peut être… pénible. Courbes financières, tracés ECG, signaux neuronaux : ils ressemblent souvent à des pointes chaotiques sans aucune structure.
Travailler avec des séries chronologiques du monde réel peut être… pénible. Courbes financières, tracés ECG, signaux neuronaux : ils ressemblent souvent à des pointes chaotiques sans aucune structure.
En science des données, on a tendance à s’appuyer sur des prétraitements statistiques classiques : décomposition saisonnière, suppression de tendance, lissage, moyennes mobiles… Ces techniques sont utiles, mais elles s’accompagnent d’hypothèses fortes rarement valables en pratique. Et lorsque ces hypothèses échouent, votre modèle d’apprentissage automatique peut être sous-performant ou ne pas se généraliser.
Aujourd’hui, nous allons explorer une famille de méthodes rarement enseignées dans la formation en science des données, mais qui peuvent transformer complètement la façon dont vous travaillez avec les données temporelles.
Au menu du jour 🍔
🍰 Pourquoi les méthodes traditionnelles ont du mal avec les séries chronologiques du monde réel
🍛 Comment les outils de traitement du signal peuvent vous aider
🍔 Comment fonctionne la décomposition en mode empirique (EMD) et où elle échoue
Les techniques de prétraitement « classiques » que j’ai mentionnées ci-dessus sont de bons points de départ, mais comme je l’ai dit, elles reposent sur des hypothèses fixes et définies sur la façon dont un signal doit se comporter.
La plupart d’entre eux supposent que le signal est stationnaire, ce qui signifie que ses propriétés statistiques (moyenne, variance, contenu spectral) restent constantes dans le temps.
Mais en réalité, la plupart des signaux réels sont :
- non stationnaire (leur contenu fréquentiel évolue)
- non linéaire (ils ne peuvent pas être expliqués par de simples composants additifs)
- bruyant
- mélangé avec plusieurs oscillations à la fois
Alors… qu’est-ce qu’un « signal » exactement ?
Un signal est simplement toute quantité qui varie dans le temps (ce que nous appelons habituellement un séries chronologiques en science des données).
Quelques exemples :
- ❤️ ECG ou EEG — signaux biomédicaux/cérébraux
- 🌋 Activité sismique — géophysique
- 🖥️ Utilisation du processeur — surveillance du système
- 💹 Cours des actions, volatilité, flux de commandes – finance
- 🌦️ Température ou humidité — science du climat
- 🎧 Formes d’onde audio — analyse de la parole et du son

Les signaux sont partout. Et presque tous violent les hypothèses des modèles classiques de séries chronologiques.
Ils sont rarement « propres ». Ce que je veux dire, c’est qu’un seul signal est généralement un mélange de plusieurs processus se produisant en même temps.
À l’intérieur d’un signal, vous pouvez souvent trouver :
- tendances lentes
- oscillations périodiques
- courtes rafales
- bruit aléatoire
- des rythmes cachés que vous ne pouvez pas voir directement
👉 Imaginez maintenant que vous puissiez séparer tous ces composants — directement à partir des données — sans supposer de stationnarité, sans spécifier de bandes de fréquences et sans forcer le signal sur une base prédéfinie.
C’est la promesse de décomposition du signal basée sur les données.
Cet article est la première partie d’une série de trois articles sur la décomposition adaptative :
- EMD — Décomposition en mode empirique (aujourd’hui)
- VMD — Décomposition en mode variationnel (suivant)
- MVMD — VMD multivarié (suivant)
Chaque méthode est plus puissante et plus stable que la précédente et, à la fin de la série, vous comprendrez comment les méthodes de traitement du signal peuvent extraire des composants clairs et interprétables.
Décomposition en mode empirique
La décomposition en modes empiriques a été introduite par Huang et al. (1998) dans le cadre de la transformation Hilbert-Huang.
Son objectif est simple mais puissant : prendre un signal et le diviser en un ensemble de composants oscillatoires propres, appelés fonctions de mode intrinsèques (IMF).
Chaque IMF correspond à une oscillation présente dans votre signal, des tendances les plus rapides aux plus lentes.
Jetez un œil à la figure 2 ci-dessous :
En haut, vous voyez le signal original.
En dessous, vous voyez plusieurs IMF, chacun capturant une « couche » d’oscillation différente cachée dans les données.
FMI₁ contient les variations les plus rapides
FMI₂ capture un rythme légèrement plus lent
…
Le dernier FMI + résiduel représente la tendance lente ou la ligne de base
Certains IMF seront utiles pour votre tâche d’apprentissage automatique ; d’autres peuvent correspondre à du bruit, des artefacts ou des oscillations non pertinentes.

Quelles sont les mathématiques derrière l’EMD ?
Tout signal x

Où:
- C
- FMI₁ capture le oscillations les plus rapides
- FMI₂ capture un oscillation plus lenteet ainsi de suite…
- r
- L’ajout de tous les FMI + le résidu reconstruit exactement le signal d’origine.
Un FMI est un oscillation propre obtenus directement à partir des données.
Il doit satisfaire deux propriétés simples :
- Le nombre de passages à zéro ≈ le nombre d’extrema
→ L’oscillation se comporte bien. - La moyenne des enveloppes supérieure et inférieure est approximativement nulle
→ L’oscillation est localement symétrique, sans information à long terme.
Ces deux règles font fondamentalement des FMI basé sur les données et adaptatif contrairement à Fourier ou aux ondelettes, qui forcent le signal à prendre des formes prédéterminées.
L’intuition derrière l’algorithme EMD
L’algorithme EMD est étonnamment intuitif. Voici la boucle d’extraction :
- Commencez par votre signal
- Trouver tous les maxima et minima locaux
- Interpolez-les pour former une enveloppe supérieure et inférieure
(voir Figure 3) - Calculer la moyenne des deux enveloppes
- Soustrayez cette moyenne du signal
→ Cela vous donne un « FMI candidat ».
6. Vérifiez ensuite les deux conditions du FMI :
- A-t-il le même nombre de passages à zéro et d’extrema ?
- La moyenne de ses enveloppes est-elle approximativement nulle ?
Si Oui → Vous avez extrait FMI₁.
Si Non → Vous répétez le processus (appelé tamisage) jusqu’à ce qu’il réponde aux critères.
7. Une fois que vous avez obtenu IMF₁ (l’oscillation la plus rapide) :
- Vous le soustrayez du signal d’origine,
- Le reste devient le nouveau signal,
- Et vous répétez le processus pour extraire IMF₂, IMF₃, …
Cela continue jusqu’à ce qu’il ne reste plus d’oscillation significative.
Ce qui reste, c’est le tendance résiduelle r

EMD en pratique
Pour vraiment comprendre le fonctionnement de l’EMD, créons notre propre signal synthétique.
Nous allons mélanger trois composants :
- Une oscillation basse fréquence (environ 5 Hz)
- Une oscillation haute fréquence (environ 30 Hz)
- Un peu de bruit blanc aléatoire
Une fois que tout est résumé en un seul signal désordonné, nous appliquerons la méthode EMD.
import numpy as np
import matplotlib.pyplot as plt
# --- Parameters ---
Fs = 500 # Sampling frequency (Hz)
t_end = 2 # Duration in seconds
N = Fs * t_end # Total number of samples
t = np.linspace(0, t_end, N, endpoint=False)
# --- Components ---
# 1. Low-frequency component (Alpha-band equivalent)
f1 = 5
s1 = 2 * np.sin(2 * np.pi * f1 * t)
# 2. High-frequency component (Gamma-band equivalent)
f2 = 30
s2 = 1.5 * np.sin(2 * np.pi * f2 * t)
# 3. White noise
noise = 0.5 * np.random.randn(N)
# --- Composite Signal ---
signal = s1 + s2 + noise
# Plot the synthetic signal
plt.figure(figsize=(12, 4))
plt.plot(t, signal)
plt.title(f'Synthetic Signal (Components at {f1} Hz and {f2} Hz)')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.grid(True)
plt.tight_layout()
plt.show()

Un détail important :
EMD choisit automatiquement le nombre d’IMF.
Il continue de décomposer le signal jusqu’à ce qu’un critère d’arrêt est atteint – généralement lorsque :
- plus aucune structure oscillatoire ne peut être extraite
- ou le résidu devient une tendance monotone
- ou le processus de tamisage se stabilise
(Vous pouvez également définir un nombre maximum d’IMF si nécessaire, mais l’algorithme s’arrête naturellement tout seul.)
from PyEMD import EMD
# Initialize EMD
emd = EMD()
IMFs = emd.emd(signal, max_imf=10)
# Plot Original Signal and IMFs
fig, axes = plt.subplots(IMFs.shape[0] + 1, 1, figsize=(10, 2 * IMFs.shape[0]))
fig.suptitle('EMD Decomposition Results', fontsize=14)
axes[0].plot(t, signal)
axes[0].set_title('Original Signal')
axes[0].set_xlim(t[0], t[-1])
axes[0].grid(True)
for n, imf in enumerate(IMFs):
axes[n + 1].plot(t, imf, 'g')
axes[n + 1].set_title(f"IMF {n+1}")
axes[n + 1].set_xlim(t[0], t[-1])
axes[n + 1].grid(True)
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
plt.show()

Limites de l’EMD
EMD est puissant, mais il présente plusieurs faiblesses :
- Mélange de modes : des fréquences différentes peuvent aboutir dans le même FMI.
- Répartition excessive : La région EMD décide elle-même du nombre de FMI et peut en extraire un trop grand nombre.
- Sensibilité au bruit : de petits changements de bruit peuvent complètement modifier les FMI.
- Aucune base mathématique solide : il n’est pas garanti que les résultats soient stables ou uniques.
En raison de ces limitations, plusieurs versions améliorées existent (EEMD, CEEMDAN), mais elles restent empiriques.
C’est exactement pourquoi des méthodes comme VMD ont été créés — et c’est ce que nous explorerons dans le prochain article de cette série.



