Accueil / Factory / Algos ML / Mean Shift — factory / algos ML / apprentissage non supervisé

MEAN SHIFT.

Un algorithme qui fait glisser chaque point vers la zone la plus dense de son voisinage, pas à pas, jusqu'à un sommet de densité. Les points arrivés au même sommet forment un groupe. On ne fixe pas le nombre de groupes, seulement la largeur de la fenêtre qui définit le voisinage.

ClusteringDensitéSegmentation clientNon superviséNiveau : intermédiaire

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceTrouve seul le nombre de groupes quand ils sont bien marqués
InterprétabilitéChaque groupe a un sommet, un client type à décrire
VitesseCoûteux : chaque point regarde tous les autres, à chaque pas
Facilité de réglageUn seul réglage, la largeur de fenêtre, mais décisif
Tolérance aux données brutesStandardisation obligatoire, souffre en grande dimension
EN 30 SECONDES

Des randonneurs lâchés dans le brouillard montent toujours vers la pente la plus raide autour d'eux. Ceux qui arrivent au même sommet font partie du même massif.

1. On pose une fenêtre autour de chaque point

La fenêtre a une largeur fixe, la bandwidth. Elle définit les voisins pris en compte.

2. On déplace le point vers la moyenne de sa fenêtre

La moyenne des voisins est du côté où ils sont les plus nombreux. En s'y déplaçant, le point monte vers une zone plus dense. On répète jusqu'à ce qu'il ne bouge plus.

3. Les points arrivés au même sommet forment un groupe

Chaque sommet de densité (un mode) devient le centre d'un segment. Le nombre de segments est le nombre de sommets trouvés.

LE CAS MÉTIER

segmentation client · retail / e-commerce
EN ENTRÉE

Une ligne par client, sans hypothèse sur k

Panier moyen, achats par mois, jours depuis le dernier achat, nombre de catégories, part d'achats en promotion. La direction marketing ne sait pas combien de profils existent vraiment.

EN SORTIE

4 segments trouvés sans les demander

Mean Shift trouve 4 sommets de densité : clients occasionnels, clients inactifs portés sur les promos, fidèles à gros paniers, et un petit segment de très gros clients (294 sur 2 000). Le nombre de segments est une conclusion de l'analyse, pas une hypothèse de départ.

CE QU'ON MESURE

La stabilité face à la largeur de fenêtre

On fait varier la bandwidth autour de sa valeur estimée. Si le nombre de segments reste le même sur une plage raisonnable, la structure est solide. S'il change à chaque essai, les segments sont fragiles.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Nombre de segments inconnu, groupes bien marqués
  • Peu de variables (2 à 6), standardisées
  • Recherche des points de concentration : zones de chalandise, pics de demande
  • Segmentation d'images par couleur, usage historique de la méthode

NON

  • Plus de quelques dizaines de milliers de lignes : trop lent, préférer HDBSCAN ou Mini-batch K-means
  • Zones de densités très différentes : une seule fenêtre ne convient pas, préférer HDBSCAN
  • Des dizaines de variables : les estimations de densité se dégradent, réduire d'abord la dimension
  • Besoin d'un nombre de segments imposé par le métier : K-means
LES 3 RÉGLAGES QUI COMPTENT

Noms donnés pour R (meanShiftR) et Python (scikit-learn). Les deux paquets n'utilisent pas le même noyau, donc pas les mêmes valeurs.

bandwidth

La largeur de la fenêtre, réglage décisif. Trop petite : un segment par petit amas. Trop grande : tout fusionne. En Python, estimate_bandwidth la déduit des distances entre voisins ; ici, un rayon de 1,32 sur données standardisées. meanShiftR utilise un noyau gaussien dont la bandwidth est un écart-type par variable (0,5 ici).

Standardisation

Obligatoire : la fenêtre a la même largeur sur toutes les variables. Sans standardisation, le panier en euros écrase la part de promotions.

bin_seeding / iterations

En Python, bin_seeding=True ne lance les ascensions que depuis une grille de points de départ, ce qui accélère beaucoup. En R, iterations fixe le nombre maximum de pas : 10 par défaut, souvent trop peu pour converger.

LE CODE MINIMAL

jeu d'exemple : clients_segmentation.csv ↓
# Segmentation clients sans fixer k : Mean Shift en R
library(meanShiftR)

clients <- read.csv("clients_segmentation.csv")
variables <- c("panier_moyen", "achats_par_mois", "recence_jours", "nb_categories", "part_promo")
X <- scale(clients[, variables])

# Noyau gaussien d'écart-type 0,5 sur chaque variable ; jusqu'à 100 pas de montée
modele <- meanShift(X, X, bandwidth = rep(0.5, ncol(X)), iterations = 100)
clients$segment <- as.vector(modele$assignment)

# Nombre de sommets de densité trouvés, taille et profil de chaque segment
cat("Nombre de segments trouvés :", length(unique(clients$segment)), "\n")
print(table(clients$segment))
print(round(aggregate(clients[, variables], by = list(segment = clients$segment), FUN = mean), 2))

QUESTIONS FRÉQUENTES

Comment choisir la bandwidth du Mean Shift ?

On part d'une estimation automatique, comme estimate_bandwidth dans scikit-learn, qui s'appuie sur la distance aux plus proches voisins. On teste ensuite des valeurs autour et on retient une plage où le nombre de segments reste stable. La bandwidth dépend de l'échelle des données : standardisez d'abord.

Quelle différence entre Mean Shift et K-means ?

K-means demande le nombre de groupes et place des centres pour minimiser les distances. Mean Shift cherche les sommets de densité et en déduit le nombre de groupes. En contrepartie, Mean Shift est bien plus lent et dépend fortement de la largeur de fenêtre.

Mean Shift fonctionne-t-il sur de grandes bases ?

Mal au-delà de quelques dizaines de milliers de lignes, car chaque point doit regarder ses voisins à chaque pas. Des astuces aident, comme partir d'une grille de points (bin_seeding) ou d'un échantillon. Pour de gros volumes, HDBSCAN ou Mini-batch K-means sont plus adaptés.

LES ALGOS VOISINS

à comparer avant de choisir
plus rapide, k imposé

K-means

Très rapide et simple, mais le nombre de segments doit être choisi avant. Mean Shift peut servir à le déterminer.

Voir la fiche →
densité, avec bruit

DBSCAN

Autre méthode par densité, qui isole aussi les points isolés au lieu de les rattacher à un sommet.

Voir la fiche →
avec probabilités

Mélange gaussien (GMM)

Modélise la densité par des ellipses et donne une probabilité d'appartenance. Le nombre de groupes se choisit par le BIC.

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 →