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 :
- Initialiser K centres (centroids) aléatoirement
- Assigner chaque point au centroid le plus proche
- Recalculer les centroids comme moyenne des points
- 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
- Charger Iris :
load_iris()
- Tester K=2 à K=10 avec KMeans
- Calculer inertia et silhouette pour chaque K
- Tracer les 2 courbes
- Déterminer le meilleur K
- 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
- Apprentissage Non-Supervisé : Découvrir structures sans étiquettes
- K-Means : Rapide, scalable, clusters sphériques
- Clustering Hiérarchique : Hiérarchie, dendrogrammes, multiple critères de liaison
- DBSCAN : Formes arbitraires, détecte outliers, pas besoin K
- Elbow Method : Trouver le meilleur K pour K-Means
- Silhouette Score : Évaluer qualité des clusters (-1 à 1, > 0.7 = excellent)
- Davies-Bouldin Index : Plus bas = meilleur (recommandé < 1)
- Calinski-Harabasz Index : Plus haut = meilleur (> 3 = bon)
- Segmentation Client : Cas d'usage réel avec 3 segments : VIP, Standard, At Risk
- Choix d'Algorithme : K-Means (gros data), Hiérarchique (exploration), DBSCAN (formes)
- Normalisation : Essentielle pour K-Means et DBSCAN
- Dendrogramme : Visualiser hiérarchie et choisir cutoff
- Atelier Clients : 300 clients, 3 clusters, 9 étapes complètes