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

ALGORITHME BIRCH.

Un clustering qui lit chaque ligne une seule fois et la range dans un arbre de petits sous-groupes résumés, avant de regrouper ces résumés en segments. Il est conçu pour les bases trop grandes pour la mémoire et accepte de nouvelles lignes sans tout recalculer.

ClusteringGrands volumesDonnées numériquesApprentissage incrémentalNiveau : intermédiaire

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceProche du K-means quand les groupes sont compacts et nets
InterprétabilitéDes centres de segments lisibles, comme en K-means
VitesseUne seule passe sur les données, mémoire maîtrisée
Facilité de réglageLe seuil de rayon est délicat et dépend de l'échelle
Tolérance aux données brutesStandardisation obligatoire, sensible à l'ordre de lecture
EN 30 SECONDES

Un recenseur qui traverse la ville une seule fois. Il ne note pas chaque habitant mais tient un carnet de petits quartiers homogènes, qu'il regroupe en grandes zones à la fin.

1. On lit chaque ligne une fois

Chaque client rejoint le sous-groupe le plus proche si celui-ci reste assez compact (seuil de rayon, threshold). Sinon, il ouvre un nouveau sous-groupe.

2. On garde un résumé, pas les données

Chaque sous-groupe est stocké sous forme de trois éléments : effectif, somme et somme des carrés des valeurs. Ces résumés sont rangés dans un arbre équilibré, le CF-tree, qui tient en mémoire même pour des millions de lignes.

3. On regroupe les sous-groupes

À la fin, un clustering classique (hiérarchique ou K-means) regroupe ces quelques dizaines ou centaines de sous-groupes en segments métier.

LE CAS MÉTIER

segmentation client · grande distribution / banque / télécom
EN ENTRÉE

Une base clients lue par lots

Panier moyen, achats par mois, jours depuis le dernier achat, nombre de catégories achetées, part des achats en promotion. Ici 2 000 clients lus par lots de 500 pour simuler un flux. La méthode vise des bases de plusieurs millions de lignes.

EN SORTIE

80 sous-groupes, puis 4 segments

Sur le jeu d'exemple, l'arbre résume les 2 000 clients en 80 sous-groupes, regroupés en 4 segments : 300 très gros clients (panier moyen proche de 150 €, 10 achats par mois), 500 réguliers, 500 clients inactifs depuis 8 mois qui achètent surtout en promotion, et 700 occasionnels.

CE QU'ON MESURE

Stabilité, temps et mémoire

Il n'y a pas de bonne réponse à laquelle comparer. On vérifie que les segments restent les mêmes quand on mélange l'ordre des lignes ou qu'on change le seuil, et on les compare à un K-means sur un échantillon. Le gain de BIRCH se mesure en temps de calcul et en mémoire sur la base complète.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Base trop grande pour un K-means ou une classification hiérarchique en mémoire
  • Données qui arrivent en continu : les nouveaux clients s'intègrent sans tout recalculer (partial_fit)
  • Réduire des millions de lignes à quelques centaines de sous-groupes avant une classification hiérarchique
  • Variables numériques peu nombreuses, groupes plutôt compacts

NON

  • Base de quelques milliers de lignes : un K-means suffit et se règle plus facilement
  • Plus d'une vingtaine de variables : les résumés perdent leur sens, préférer un Mini-batch K-means ou réduire d'abord avec une ACP
  • Groupes de formes allongées ou de densités très différentes : préférer DBSCAN ou HDBSCAN
  • Variables catégorielles : BIRCH ne travaille que sur des distances numériques, voir K-prototypes
LES 3 RÉGLAGES QUI COMPTENT

Noms donnés pour R (stream) et Python (scikit-learn). Les variables doivent être standardisées avant tout, sinon le seuil n'a pas de sens.

threshold

Rayon maximal d'un sous-groupe, dans l'unité des données standardisées. Trop petit : des milliers de sous-groupes et peu de gain. Trop grand : des clients différents fusionnent dès la lecture. Sur le jeu d'exemple en Python, 0,5 donne 80 sous-groupes.

branching / branching_factor

Nombre maximal de branches par nœud de l'arbre. Joue surtout sur la mémoire et la vitesse, rarement sur les segments obtenus. scikit-learn utilise 50 par défaut.

macro = DSC_Kmeans(k) / n_clusters

Nombre de segments finaux, obtenus en regroupant les sous-groupes. En Python, n_clusters=None garde les sous-groupes bruts, et on peut aussi passer son propre modèle de clustering pour l'étape finale.

LE CODE MINIMAL

jeu d'exemple : clients_segmentation.csv ↓
# Segmentation d'une grande base clients : BIRCH en R
library(stream)

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

set.seed(42)
# Micro : arbre BIRCH (threshold = rayon max d'un sous-groupe) ; macro : regroupement en 4 segments
modele <- DSC_TwoStage(micro = DSC_BIRCH(threshold = 0.5, branching = 50, maxLeaf = 50),
                       macro = DSC_Kmeans(k = 4))

# Une seule passe sur les données, lues comme un flux
flux <- DSD_Memory(as.data.frame(X))
update(modele, flux, n = nrow(X))
cat("Sous-groupes résumés dans l'arbre :", nclusters(modele, type = "micro"), "\n")

# Centres des 4 segments, remis en unités d'origine, et nombre de clients par segment
centres <- as.matrix(get_centers(modele, type = "macro"))
centres <- sweep(sweep(centres, 2, attr(X, "scaled:scale"), "*"), 2, attr(X, "scaled:center"), "+")
print(round(centres, 1))
print(round(get_weights(modele, type = "macro")))

QUESTIONS FRÉQUENTES

Que veut dire BIRCH ?

Balanced Iterative Reducing and Clustering using Hierarchies. L'algorithme a été publié en 1996 par Zhang, Ramakrishnan et Livny pour regrouper des bases trop grandes pour la mémoire vive. Son idée clé : résumer chaque sous-groupe par son effectif, sa somme et sa somme des carrés.

BIRCH ou K-means ?

Sur une base qui tient en mémoire, le K-means est plus simple et souvent aussi bon. BIRCH devient intéressant quand la base est très grande, quand les données arrivent en flux, ou pour réduire des millions de lignes à quelques centaines de sous-groupes avant une classification hiérarchique.

L'ordre des données change-t-il le résultat de BIRCH ?

Oui. Chaque ligne est affectée au moment où elle est lue, donc les sous-groupes dépendent de l'ordre de lecture. L'étape finale de regroupement atténue cet effet. En pratique, on mélange les lignes et on relance pour vérifier que les segments restent stables.

LES ALGOS VOISINS

à comparer avant de choisir
la référence

K-means

Même logique de centres, mais plusieurs passes sur toute la base. Plus simple à régler tant que les données tiennent en mémoire.

Voir la fiche →
l'autre option grands volumes

Mini-batch K-means

Met à jour les centres par petits paquets de lignes. Souvent plus robuste que BIRCH quand les variables sont nombreuses.

Voir la fiche →
le complément naturel

Classification hiérarchique

Trop lente sur une grande base, mais idéale pour regrouper les sous-groupes produits par BIRCH.

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 →