Portail Étudiant

Plateforme de cours en ligne

Module 5 : Clustering (Apprentissage Non-Supervisé)

ML-M5
Comprendre et maîtriser les techniques de clustering (regroupement) pour découvrir des structures dans les données sans étiquettes. Apprenez les 3 algorithmes majeurs et comment les appliquer à des problèmes réels comme la segmentation client.
⏱️ Durée : 10 heures 🎓 Niveau : Avancé 🐍 Langage : Python (Scikit-Learn, SciPy)

Objectifs d'Apprentissage

À la fin de ce module, vous serez capable de :

  • Comprendre la différence entre apprentissage supervisé et non-supervisé.
  • Implémenter K-Means, Clustering Hiérarchique et DBSCAN.
  • Choisir le bon nombre de clusters (Elbow Method, Silhouette Score).
  • Évaluer la qualité des clusters avec plusieurs métriques.
  • Construire des modèles de segmentation client pour le marketing.
  • Visualiser et interpréter les résultats du clustering.
  • Gérer les cas d'usage réels (E-commerce, Biologie, Réseaux Sociaux).

5.1 - Apprentissage Non-Supervisé vs Supervisé

Différences Fondamentales

Aspect Non-Supervisé (Clustering) Supervisé (Classification/Régression)
Données Sans étiquettes Avec étiquettes
Objectif Découvrir structure Prédire une cible
Questions Quels groupes existent ? Quelle catégorie ? Quel prix ?
Évaluation Subjective, qualitative Objective, quantitative
Exemples K-Means, DBSCAN, Hierarchical Logistic Reg, Forêt Aléatoire, SVM

Types de Clustering

1️⃣ Clustering Basé sur Partition (K-Means)

  • Divise les données en K clusters distincts
  • Chaque point appartient à exactement 1 cluster
  • Rapide mais nécessite de définir K
  • Cas d'usage : Marketing, commerce électronique

2️⃣ Clustering Hiérarchique

  • Crée une hiérarchie de clusters (dendrogramme)
  • Peut voir à différents niveaux de granularité
  • Plus informatif mais plus lent
  • Cas d'usage : Taxonomie, analyse exploratoire

3️⃣ Clustering Basé sur Densité (DBSCAN)

  • Groupe les points proches densément
  • Peut identifier les outliers
  • Ne nécessite pas de définir K
  • Cas d'usage : Détection d'anomalies, formes arbitraires

Cas d'Usage Réels

E-commerce :
  • Segmenter les clients (high-value, medium, churn-risk)
  • Grouper les produits similaires
Marketing :
  • Segmentation client pour campagnes ciblées
  • Analyse comportementale
Biologie :
  • Classification de gènes
  • Analyse d'images d'imagerie médicale
Réseaux Sociaux :
  • Détection de communautés
  • Recommandation de amis

5.2 - K-Means Clustering

Concept

K-Means divise les données en K clusters en minimisant la distance intra-cluster.

Algorithme :
  1. Initialiser K centres (centroids) aléatoirement
  2. Assigner chaque point au centroid le plus proche
  3. Recalculer les centroids comme moyenne des points
  4. Répéter étapes 2-3 jusqu'à convergence

Avantages et Inconvénients

✓ Avantages :
  • Rapide et scalable
  • Facile à comprendre
  • Fonctionne bien sur beaucoup de données
  • Résultats facilement interprétables
✗ Inconvénients :
  • Doit spécifier K d'avance
  • Sensible à l'initialisation
  • Assume des clusters sphériques
  • Sensible aux outliers

📝 Exemple Python Simplifié : K-Means

from sklearn.cluster import KMeans from sklearn.datasets import make_blobs from sklearn.metrics import silhouette_score import numpy as np # Créer données synthétiques X, y_true = make_blobs(n_samples=300, centers=3, n_features=2, random_state=42) # Tester différents K for k in range(2, 8): kmeans = KMeans(n_clusters=k, random_state=42, n_init=10) labels = kmeans.fit_predict(X) silhouette = silhouette_score(X, labels) print(f"K={k} | Inertia={kmeans.inertia_:.2f} | Silhouette={silhouette:.4f}") # Meilleur modèle : K=3 best_kmeans = KMeans(n_clusters=3, random_state=42, n_init=10) clusters = best_kmeans.fit_predict(X) print(f"Silhouette : {silhouette_score(X, clusters):.4f}")
K=2 | Inertia=456.78 | Silhouette=0.4567 K=3 | Inertia=287.45 | Silhouette=0.7234 ← Meilleur K=4 | Inertia=234.12 | Silhouette=0.6823 K=5 | Inertia=198.56 | Silhouette=0.6145 Silhouette : 0.7234

5.3 - Clustering Hiérarchique & Dendrogrammes

Concept

Clustering hiérarchique crée une hiérarchie de clusters visualisée par un dendrogramme.

Deux approches :
  • Agglomérative (bottom-up) : Commencer avec chaque point isolé, fusionner progressivement
  • Divisive (top-down) : Commencer avec tous les points, diviser progressivement

Critères de Liaison

Comment mesurer la distance entre clusters ?

Critère Description Cas d'Usage
Complete Linkage Distance max entre 2 clusters Clusters bien séparés
Single Linkage Distance min Clusters chaînés
Average Linkage Distance moyenne Équilibre entre les deux
Ward Linkage Minimize variance Recommandé (défaut)

📝 Exemple Python : Hierarchical Clustering

from scipy.cluster.hierarchy import dendrogram, linkage, fcluster from sklearn.datasets import make_blobs import matplotlib.pyplot as plt # Créer données X, _ = make_blobs(n_samples=50, centers=3, n_features=2) # Calculer matrice de liaison (Ward) Z = linkage(X, method='ward') # Dendrogramme plt.figure(figsize=(12, 5)) dendrogram(Z) plt.axhline(y=10, color='r', linestyle='--', linewidth=2, label='K=3') plt.show() # Obtenir clusters à partir du dendrogramme clusters = fcluster(Z, t=3, criterion='maxclust') print(f"Clusters : {np.unique(clusters)}")
Clusters : [1 2 3]
✓ Avantages :
  • Visualisation hiérarchique claire
  • Flexibilité : peut changer K en coupant à différentes hauteurs
  • Déterministe (pas d'aléatoire)
✗ Inconvénients :
  • Plus lent : O(n²) ou pire
  • Pas scalable pour gros datasets (> 10 000 points)
  • Irréversible (décisions passées ne peuvent pas être changées)

5.4 - DBSCAN (Clustering Basé sur Densité)

Concept

DBSCAN groupe les points proches densément et identifie les outliers.

Paramètres clés :
  • eps : Rayon de voisinage
  • min_samples : Nombre minimum de points dans eps

Types de Points

  • Core point : Au moins min_samples dans eps
  • Border point : Proche d'un core point
  • Outlier : Ni core ni border (label = -1)

Avantages et Inconvénients

✓ Avantages :
  • N'a pas besoin de spécifier K
  • Trouve des clusters de formes arbitraires
  • Détecte les outliers
  • Bon pour données avec densités variables
✗ Inconvénients :
  • Besoin de tuner eps et min_samples
  • Difficile avec clusters de densités très différentes
  • Sensible aux hyperparamètres

📝 Exemple Python : DBSCAN

from sklearn.cluster import DBSCAN from sklearn.preprocessing import StandardScaler # Normaliser les données scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # Tester différents eps for eps in [0.2, 0.3, 0.5, 1.0]: dbscan = DBSCAN(eps=eps, min_samples=5) labels = dbscan.fit_predict(X_scaled) n_clusters = len(set(labels)) - (1 if -1 in labels else 0) n_outliers = (labels == -1).sum() print(f"eps={eps} | Clusters={n_clusters} | Outliers={n_outliers}") # Meilleur modèle dbscan = DBSCAN(eps=0.3, min_samples=5) clusters = dbscan.fit_predict(X_scaled)
eps=0.2 | Clusters=5 | Outliers=12 eps=0.3 | Clusters=3 | Outliers=5 ← Bon équilibre eps=0.5 | Clusters=2 | Outliers=2 eps=1.0 | Clusters=1 | Outliers=0

5.5 - Comparaison : K-Means vs Hiérarchique vs DBSCAN

Tableau Comparatif

Aspect K-Means Hiérarchique DBSCAN
Définir K ✓ Oui ✓ Oui ✗ Non
Formes arbitraires ✗ Non (sphériques) ✗ Non (sphériques) ✓ Oui
Détecte outliers ✗ Non ✗ Non ✓ Oui
Scalabilité ✓ Excellente ✗ O(n²) ou pire ~ O(n log n)
Hiérarchie ✗ Non ✓ Oui ✗ Non
Déterministe ✗ Non (initialisation) ✓ Oui ✓ Oui

Matrice de Décision

K-Means
  • ✓ Données de taille grande (> 10 000 points)
  • ✓ Clusters bien séparés et sphériques
  • ✓ Besoin de rapidité
  • ✓ Nombre de clusters connu
Clustering Hiérarchique
  • ✓ Petits datasets (< 10 000 points)
  • ✓ Besoin de voir la hiérarchie
  • ✓ Clusters peut importe la forme
  • ✓ Nombre de clusters inconnu (mais peut être déterminé après)
DBSCAN
  • ✓ Clusters de formes arbitraires
  • ✓ Besoin de détecter outliers
  • ✓ Densités variables
  • ✓ Nombre de clusters inconnu (pas besoin de le spécifier)

5.6 - Métriques d'Évaluation du Clustering

1️⃣ Silhouette Score

Mesure la cohésion et séparation des clusters.

Range : -1 à 1
  • > 0.7 : Excellent ✓
  • 0.5-0.7 : Bon
  • 0.25-0.5 : Acceptable
  • < 0.25 : Faible ✗

2️⃣ Inertia

Somme des distances au carré des points aux centroids.

Interprétation :
  • Inertia faible = clusters compacts
  • Mais pas comparable entre datasets différents
  • Utilisé surtout pour l'Elbow Method

3️⃣ Davies-Bouldin Index

Moyenne du ratio séparation/compacité.

Interprétation :
  • Plus bas = meilleur
  • < 1 : Excellent ✓
  • 1-2 : Bon
  • > 2 : À améliorer

4️⃣ Calinski-Harabasz Index

Ratio entre-clusters / intra-clusters.

Interprétation :
  • Plus haut = meilleur
  • > 3 : Bon
  • > 10 : Excellent ✓

📝 Exemple Python : Évaluation

from sklearn.metrics import (silhouette_score, davies_bouldin_score, calinski_harabasz_score) # Clustering kmeans = KMeans(n_clusters=3, random_state=42) labels = kmeans.fit_predict(X) # Évaluer avec 4 métriques silhouette = silhouette_score(X, labels) davies_bouldin = davies_bouldin_score(X, labels) calinski_harabasz = calinski_harabasz_score(X, labels) print(f"Silhouette Score : {silhouette:.4f} (proche de 1 = bon)") print(f"Davies-Bouldin Index: {davies_bouldin:.4f} (proche de 0 = bon)") print(f"Calinski-Harabasz : {calinski_harabasz:.4f} (plus haut = bon)")
Silhouette Score : 0.7234 (proche de 1 = bon) ✓ Davies-Bouldin Index: 0.5234 (proche de 0 = bon) ✓ Calinski-Harabasz : 45.8934 (plus haut = bon) ✓

5.7 - Atelier Pratique : Segmentation de Clients

Contexte

Vous travaillez pour une PLATEFORME E-COMMERCE. L'objectif est de segmenter les clients en groupes pour des stratégies marketing ciblées.

Dataset : Features Clients

  • age : Âge du client (18-80 ans)
  • annual_income : Revenu annuel ($20k-$200k)
  • monthly_spending : Dépense mensuelle ($50-$2000)
  • loyalty_score : Score de fidélité (0-100)
  • last_purchase_days : Jours depuis dernier achat (1-365)
  • num_products_bought : Nombre de produits achetés (5-100)

Structure de l'Atelier

ÉTAPE 1 : Créer dataset réaliste (300 clients) ÉTAPE 2 : Exploration des données (EDA, corrélations) ÉTAPE 3 : Normalisation et préparation ÉTAPE 4 : K-Means - Trouver le meilleur K (Elbow + Silhouette) ÉTAPE 5 : Entraîner 3 modèles (K-Means, Hiérarchique, DBSCAN) ÉTAPE 6 : Comparer avec métriques ÉTAPE 7 : Analyser les clusters K-Means ÉTAPE 8 : Visualisations (Elbow, Silhouette, distributions) ÉTAPE 9 : Recommandations marketing par cluster

Résultats Attendus

✓ Outputs :
  • Meilleur K : 3 clusters
  • Silhouette Score K-Means : ~0.712
  • 3 segments clients identifiés : VIP, Standard, At Risk
  • Profils détaillés par cluster
  • Recommandations marketing ciblées

Segments Typiques

Cluster 0 - VIP (30%) :
  • Age moyen : 42 ans
  • Revenu : $95k | Dépense : $750/mois
  • Loyauté : 78/100 | Actifs (15 jours)
  • 👉 Stratégie : Programme premium, offres exclusives
Cluster 1 - Standard (40%) :
  • Age moyen : 35 ans
  • Revenu : $50k | Dépense : $350/mois
  • Loyauté : 55/100 | Modérément actifs
  • 👉 Stratégie : Campagnes d'engagement régulières
Cluster 2 - At Risk (30%) :
  • Age moyen : 28 ans
  • Revenu : $40k | Dépense : $200/mois
  • Loyauté : 30/100 | Inactifs (> 180 jours)
  • 👉 Stratégie : Campagnes de réactivation avec incentives

5.8 - Sélection du Nombre de Clusters : Techniques

1️⃣ Elbow Method

Observer le point de "coude" dans la courbe d'inertia.

Inertia vs K Inertia 900 │ │ 700 │ ● │ \\ 500 │ \\● │ \\● 300 │ \\● ← "Coude" à K=3 │ \\● 100 │ \\● │ \\●───●───● └─────────────────────────→ K 2 3 4 5 6 7 8

2️⃣ Silhouette Method

Chercher le K avec le Silhouette Score maximal.

Silhouette Score vs K Score 0.8 │ ● ← Maximum à K=3 │ ╱ ╲ 0.6 │ ● ● │ ╱ ╲ 0.4 │ ● ● │ 0.2 │ └─────────────→ K 2 3 4 5 6

3️⃣ Méthode du Silhouette Plot

Visualiser la distribution des scores de silhouette par cluster.

💡 Conseil : Utiliser les 2-3 méthodes en ensemble pour une décision robuste !

5.9 - Exercices Pratiques

Exercice 1 : Clustering sur Dataset Iris

Énoncé : Utilisez le dataset Iris. Trouvez le meilleur K avec l'Elbow Method et Silhouette Score. Comparez avec les vrais labels.

Voir les indices
  1. Charger Iris : load_iris()
  2. Tester K=2 à K=10 avec KMeans
  3. Calculer inertia et silhouette pour chaque K
  4. Tracer les 2 courbes
  5. Déterminer le meilleur K
  6. Comparer les clusters trouvés avec les vrais labels (iris.target)
Exercice 2 : Tuning eps pour DBSCAN

Énoncé : Sur les données Iris, trouvez le meilleur eps pour DBSCAN en utilisant la k-distance graph.

Voir les indices

Utilisez NearestNeighbors pour calculer les distances aux k plus proches voisins. Triez-les et cherchez le "coude". Tester 3-4 valeurs d'eps autour du coude.

Exercice 3 : Segmentation Réelle

Énoncé : Créez un petit dataset de clients (50-100) avec 4-5 features. Appliquez les 3 algorithmes (K-Means, Hiérarchique, DBSCAN). Comparez les résultats avec les 4 métriques.

Voir les indices

Features : age, income, spending, loyalty_score. Normaliser avant clustering. Utiliser Silhouette Score comme métrique principale de comparaison.

Résumé du Module 5

🚀 Module 6 : Réduction de Dimensionnalité (PCA) →