Accueil / Factory / Algos ML / Filtre de Kalman — factory / algos ML / filtrage de séries temporelles

FILTRE DE KALMAN.

Un algorithme qui estime en temps réel ce qu'on ne mesure pas directement, à partir de mesures bruitées. À chaque instant, il prédit l'état avec un modèle simple de la dynamique, puis corrige cette prédiction avec la nouvelle mesure, en pondérant selon la confiance accordée à chacune. Il est au cœur du GPS, de la navigation, et de nombreux modèles de séries temporelles.

FiltrageTemps réelEspace d'étatsCapteursNiveau : avancé

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceOptimal quand le modèle est linéaire et les bruits gaussiens
InterprétabilitéChaque étape a un sens physique, les matrices beaucoup moins
VitesseQuelques multiplications par mesure : conçu pour le temps réel
Facilité de réglageModèle d'état et variances des bruits à spécifier ou estimer
Tolérance aux données brutesGère les mesures manquantes, mais sensible aux mesures aberrantes
EN 30 SECONDES

En voiture dans un tunnel, vous savez où vous êtes à peu près grâce à votre vitesse. À la sortie, un panneau vous donne votre position ; vous corrigez votre estimation, sans l'effacer complètement si le panneau est flou.

1. On prédit

À partir de l'état estimé (position, vitesse), le modèle prévoit l'état suivant : nouvelle position = position + vitesse × temps. L'incertitude grandit.

2. On compare à la mesure

La mesure arrive (le point GPS). L'écart entre mesure et prédiction s'appelle l'innovation.

3. On corrige selon la confiance

Le gain de Kalman décide quelle part de l'écart retenir : proche de 1 si la mesure est fiable, proche de 0 si elle est très bruitée. L'état corrigé et son incertitude servent au pas suivant.

LE CAS MÉTIER

suivi de flotte · logistique / livraison / mobilité
EN ENTRÉE

Des positions GPS bruitées, chaque seconde

Un véhicule de livraison roule autour de 50 km/h, avec des accélérations et des freinages. Le GPS donne sa position à 10 m près. Sa vitesse n'est pas mesurée. Le code simule 5 minutes de trajet, faute de jeu de données de géolocalisation.

EN SORTIE

Position et vitesse estimées en continu

Sur la simulation Python, l'erreur de position passe de 10 m (GPS brut) à 4,5 m. Surtout, la vitesse, qu'aucun capteur ne mesure, est estimée à 0,8 m/s près, alors que la calculer à partir de deux points GPS successifs donne des erreurs de près de 14 m/s.

CE QU'ON MESURE

L'erreur sur l'état caché

En simulation, on connaît la vérité et on mesure l'erreur directement. Sur données réelles, on vérifie que les innovations (écarts mesure moins prédiction) sont centrées et sans structure : sinon le modèle ou les variances sont mal réglés.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Estimer une grandeur non mesurée : vitesse, usure, niveau réel d'un stock ou d'une demande
  • Fusionner plusieurs capteurs de précisions différentes (GPS, accéléromètre, odomètre)
  • Traitement en temps réel, mesure par mesure, sans recalculer tout l'historique
  • Séries avec valeurs manquantes : le filtre prédit sans corriger quand la mesure manque

NON

  • Dynamique fortement non linéaire : passer au filtre de Kalman étendu ou unscented, ou au filtre particulaire
  • Simple lissage d'une série sans état caché : le lissage exponentiel suffit
  • Aucune idée de la dynamique du système : commencer par un modèle ARIMA ou un modèle structurel
  • Mesures avec des valeurs aberrantes fréquentes : les filtrer en amont ou utiliser une version robuste
LES 4 RÉGLAGES QUI COMPTENT

En production, on utilise souvent un package : KFAS ou StructTS (base) en R, pykalman, filterpy ou statsmodels en Python. Les choix restent les mêmes.

Le modèle d'état (transition)

Ce que le filtre sait de la physique : ici, la position avance de la vitesse à chaque seconde. Un modèle trop pauvre laisse des erreurs systématiques ; un modèle trop riche devient instable.

Bruit du système : Q

À quel point l'état peut changer de façon imprévue (accélérations, chocs). Q grand : le filtre suit vite mais reste nerveux. Q petit : il lisse beaucoup mais réagit en retard.

Bruit de mesure : R

La précision du capteur, souvent donnée par le constructeur. C'est le rapport entre Q et R qui fixe le gain, donc le compromis entre réactivité et lissage.

Point de départ : x0 et P0

L'état initial et son incertitude. Une incertitude initiale large laisse les premières mesures corriger vite. On écarte les premiers instants, le rodage, de l'évaluation.

LE CODE MINIMAL

données simulées dans le code
# Suivi de livraison : filtre de Kalman en R
set.seed(42)
n <- 300; sigma_acc <- 0.3; sigma_gps <- 10  # 300 secondes, GPS précis à 10 m près
transition <- matrix(c(1, 0, 1, 1), 2, 2)  # position += vitesse x 1 s
G <- c(0.5, 1)                             # effet d'une accélération
H <- c(1, 0)                               # le GPS ne mesure que la position

# Simulation : trajet réel (caché), départ à 14 m/s (50 km/h), et positions GPS bruitées
vrai <- matrix(0, n, 2)
vrai[1, ] <- c(0, 14)
for (i in 2:n) vrai[i, ] <- transition %*% vrai[i - 1, ] + G * rnorm(1, 0, sigma_acc)
gps <- vrai[, 1] + rnorm(n, 0, sigma_gps)

# Filtre : prédire avec la physique, puis corriger avec la mesure
Q <- sigma_acc^2 * outer(G, G)
R <- sigma_gps^2
x <- c(gps[1], 0); P <- diag(c(R, 100))
estim <- matrix(0, n, 2)
for (i in 1:n) {
  if (i > 1) x <- as.vector(transition %*% x)                    # prédiction
  if (i > 1) P <- transition %*% P %*% t(transition) + Q
  K <- as.vector(P %*% H) / as.numeric(t(H) %*% P %*% H + R)     # gain de Kalman
  x <- x + K * (gps[i] - sum(H * x))                             # correction
  P <- P - outer(K, as.vector(H %*% P))
  estim[i, ] <- x
}

# Erreurs moyennes après 30 secondes de rodage
rmse <- function(e) round(sqrt(mean(e[31:n]^2)), 2)
cat("Position, erreur GPS brut / Kalman (m) :",
    rmse(gps - vrai[, 1]), "/", rmse(estim[, 1] - vrai[, 1]), "\n")
cat("Vitesse, erreur écart GPS / Kalman (m/s) :",
    rmse(c(0, diff(gps)) - vrai[, 2]), "/", rmse(estim[, 2] - vrai[, 2]), "\n")

QUESTIONS FRÉQUENTES

À quoi sert le filtre de Kalman ?

À estimer l'état d'un système qui évolue dans le temps à partir de mesures imparfaites : position et vitesse d'un véhicule, niveau réel d'un capteur, tendance d'une série. On l'utilise en navigation, en robotique, en finance et dans les modèles de séries temporelles.

Qu'est-ce que le gain de Kalman ?

C'est le poids donné à la nouvelle mesure pour corriger la prédiction. Il dépend de l'incertitude de la prédiction et du bruit de la mesure. Si la mesure est très précise, le gain est proche de 1 ; si elle est très bruitée, il est proche de 0.

Quelle différence entre filtre de Kalman et lissage de Kalman ?

Le filtre n'utilise que les mesures passées et présentes : il sert en temps réel. Le lisseur utilise toute la série, y compris les mesures postérieures, pour réestimer chaque instant après coup. Il est plus précis, mais seulement pour analyser l'historique.

LES ALGOS VOISINS

à comparer avant de choisir
le cas particulier

Lissage exponentiel

Un filtre de Kalman sur un niveau aléatoire, une fois stabilisé, revient à un lissage exponentiel simple.

Voir la fiche →
l'état caché discret

Modèle de Markov caché (HMM)

Même logique d'état caché et de mesures bruitées, mais l'état est une catégorie (en marche, dégradé, en panne).

Voir la fiche →
l'autre façon de voir une série

ARIMA

Un ARIMA s'écrit aussi en espace d'états : les logiciels estiment ses paramètres avec un filtre de Kalman.

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →