Accueil / Factory / Algos ML / UMAP — factory / algos ML / visualisation

PROJECTION UMAP.

UMAP projette des données de nombreuses colonnes sur une carte en 2D en gardant les voisinages, comme t-SNE, mais plus vite et en respectant en général mieux la structure d'ensemble. Surtout, la carte apprise accueille de nouvelles lignes sans être recalculée, ce qui en fait aussi une étape de préparation avant un clustering.

VisualisationRéduction de dimensionNon linéaireGrands volumesNiveau : intermédiaire

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceVoisinages bien gardés, structure d'ensemble mieux respectée
InterprétabilitéAxes sans signification, distances à lire avec prudence
VitesseDes centaines de milliers de lignes en quelques minutes
Facilité de réglageDeux réglages clés, carte sensible à la graine
Tolérance aux données brutesMétrique et mise à l'échelle à choisir avec soin
EN 30 SECONDES

Un plan de métro : les stations voisines sont proches et les lignes gardent leur ordre, mais les distances sur le plan ne sont pas celles du terrain.

1. On construit un graphe de voisins

Chaque client est relié à ses plus proches voisins dans l'espace d'origine (n_neighbors), avec un poids qui décroît avec la distance.

2. On cherche un graphe semblable en 2D

On part d'une carte initiale, en général issue d'une décomposition spectrale du graphe, puis on rapproche les points reliés et on écarte les autres.

3. On garde la transformation

Le modèle appris sait placer un nouveau client sur la carte existante à partir de ses voisins, sans tout recalculer.

LE CAS MÉTIER

connaissance client · e-commerce / distribution
EN ENTRÉE

Les notes de 600 clients

Une ligne par client, une colonne par produit (120), les notes centrées sur la moyenne du client et les produits non notés à 0. Le jeu contient 4 groupes de goûts cachés, que la carte doit faire apparaître.

EN SORTIE

Une carte des goûts, extensible

La carte est construite sur 500 clients. Les clients proches ont des goûts proches ; on y repère des groupes, que l'on nomme à partir de leurs produits préférés. Les 100 clients suivants sont placés sur la carte existante, comme le seraient les nouveaux inscrits du mois.

CE QU'ON MESURE

Des groupes qui ont un sens produit

La carte n'a pas de vérité à laquelle se comparer. On vérifie que les groupes vus sur la carte ont des produits préférés distincts, qu'ils restent en changeant la graine ou n_neighbors, et que les nouveaux clients tombent dans des zones cohérentes avec leurs achats.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Explorer des données de dizaines à milliers de colonnes : notes, embeddings de textes ou d'images
  • Grands volumes, où t-SNE devient trop lent
  • Placer de nouvelles lignes sur une carte stable, pour un tableau de bord mis à jour
  • Réduire à 5 ou 10 dimensions avant un clustering par densité comme HDBSCAN

NON

  • Besoin d'axes interprétables (« cet axe = le prix ») : ACP ou analyse factorielle
  • Lire des distances ou des tailles de groupes sur la carte : elles sont déformées
  • Moins de 5 à 10 colonnes : un nuage de points ou une ACP suffit
  • Résultat identique exigé en calcul parallèle : en Python, fixer random_state désactive le parallélisme
LES 3 RÉGLAGES QUI COMPTENT

Noms identiques en R (uwot) et Python (umap-learn).

n_neighbors

Taille du voisinage, 15 par défaut. Petite, la carte détaille les micro-groupes ; grande, elle privilégie la structure d'ensemble. On teste de 5 à 50.

min_dist

Écart minimal entre points sur la carte. Proche de 0, les groupes sont compacts, utile avant un clustering ; vers 0,5, la carte est plus aérée. La valeur par défaut est 0,1 dans umap-learn et 0,01 dans uwot : mieux vaut la fixer.

metric

La distance d'origine. Euclidienne par défaut ; cosinus pour des profils où compte la direction plutôt que l'intensité, comme des notes centrées ou des embeddings de texte.

LE CODE MINIMAL

jeu d'exemple : notes_produits.csv ↓
# Carte des goûts clients : UMAP en R
library(uwot)

notes <- read.csv("notes_produits.csv")
# Une ligne par client, une colonne par produit, notes centrées sur la moyenne du client
produits <- sort(unique(notes$id_produit))
M <- matrix(NA, nrow = max(notes$id_client), ncol = length(produits))
M[cbind(notes$id_client, match(notes$id_produit, produits))] <- notes$note
X <- M - rowMeans(M, na.rm = TRUE)
X[is.na(X)] <- 0

set.seed(42)
# Les 500 premiers clients servent à construire la carte
modele <- umap(X[1:500, ], n_neighbors = 15, min_dist = 0.1, metric = "cosine", ret_model = TRUE)
carte <- modele$embedding
# Les 100 derniers sont placés sur la carte existante, sans la recalculer
nouveaux <- umap_transform(X[501:600, ], modele)

# Groupes lus sur la carte, pour vérification (à croiser avec les produits préférés)
groupe <- kmeans(carte, centers = 4, nstart = 10)$cluster
print(table(groupe))
print(round(head(nouveaux), 2))
plot(carte, col = groupe, pch = 19, xlab = "UMAP 1", ylab = "UMAP 2")

QUESTIONS FRÉQUENTES

Que veut dire UMAP ?

Uniform Manifold Approximation and Projection. La méthode a été publiée en 2018 par Leland McInnes, John Healy et James Melville. Elle repose sur la topologie et les graphes de voisinage, mais s'utilise comme t-SNE : on donne un tableau, on obtient une carte.

Peut-on faire un clustering sur une projection UMAP ?

Oui, c'est courant, par exemple avec HDBSCAN. On projette alors plutôt en 5 à 10 dimensions avec un min_dist proche de 0, et on vérifie les groupes obtenus sur les données d'origine. Sur une carte 2D faite pour la présentation, le clustering est plus fragile.

Pourquoi UMAP donne-t-il un résultat différent à chaque exécution ?

L'optimisation avance par étapes aléatoires. Sans graine fixée, la carte change, parfois simplement par rotation ou symétrie. On fixe la graine (random_state, set.seed) pour une présentation, et on vérifie que les groupes restent stables d'une graine à l'autre.

LES ALGOS VOISINS

à comparer avant de choisir
le prédécesseur

t-SNE

Excellent sur les voisinages locaux, mais plus lent et incapable de placer de nouvelles lignes sur une carte existante.

Voir la fiche →
la version linéaire

ACP

Axes interprétables et calcul instantané. Souvent appliquée avant UMAP pour débruiter les données.

Voir la fiche →
le duo classique

HDBSCAN

Clustering par densité, souvent appliqué aux sorties d'UMAP pour trouver les groupes sans fixer leur nombre.

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 →