Analyse exploratoire des données avec Python
Objectifs pédagogiques
- Comprendre les enjeux de la réduction de dimension sur les individus (classification non supervisée, clustering) et sur les variables (analyse factorielle, dimension reduction)
- Comprendre et savoir mettre en œuvre les principales méthodes d’analyse factorielle, sur les variables quantitatives (ACP) et qualitatives (ACM).
- Comprendre et savoir mettre en œuvre les principales méthodes de clustering : CAH & K-means.
Programme détaillé
Les méthodes factorielles (ACP, AFC, ACM) permettent au travers de techniques de visualisation, de résumer, structurer et synthétiser les variables de tableaux de données volumineux. Les méthodes de classification non supervisée, ou clustering, permettent, en séparant les individus d’une population en groupes homogènes, de créer une typologie.
Analyse en composantes principales ACP 6h
- Inerties
- Recherche des axes principaux
- Composantes principales
- Analyse du nuage des individus
- Analyse du nuage des variables
- Interprétation des résultats.
Analyse factorielle des correspondances AFC 2h
- Nuages des profils-lignes et des profils-colonnes, distance du khi-deux
- Analyse des nuages des profils
- Liens entre les analyses lignes et colonnes
- Interprétation des résultats.
Analyse des correspondances multiples ACM 3h
- Analyse des correspondances sur le tableau disjonctif complet
- Propriétés de l’ACM
- Analyse du tableau de Burt
Classification non supervisée 7h
- Classification ascendante hiérarchique (CAH) : principe, stratégies d’agrégation, aides à l’interprétation
- Méthodes de partitionnement : K-means, PAM
- Classification mixte
Public visé
Data analysts, chargés d’études statistiques, data scientists
Prérequis
- Connaissances de base en statistiques descriptives (formation Statistiques descriptives avec Python)
- Connaissances de base de Python (formation Python initiation)
- Notions de calcul matriciel souhaitables
Approche pédagogique
Calculés à partir de 8 avis recueillis depuis 13/12/2023, lors de 2 sessions de cette formation.
ACP, ACM et clustering en Python : scikit-learn, prince et SciPy
En Python, les méthodes de l’analyse exploratoire sont réparties entre des bibliothèques venues de traditions différentes. scikit-learn, pensée pour l’apprentissage automatique, traite l’ACP comme une étape de réduction de dimension avant un modèle. prince reprend les méthodes factorielles de l’analyse des données (ACP, AFC, ACM). SciPy fournit la classification hiérarchique. Les combiner suppose de connaître leurs différences.
Le piège de l’ACP non normée
La classe PCA de scikit-learn centre les variables mais ne les réduit pas. Appliquée telle quelle à des variables d’unités différentes (euros, années, pourcentages), elle est dominée par celles de plus grande variance : un salaire en euros écrase un âge en années. Pour obtenir l’ACP normée, celle des manuels de statistique, il faut standardiser d’abord :
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
acp = make_pipeline(StandardScaler(), PCA(n_components=3)).fit(X)
acp[-1].explained_variance_ratio_ # part d'inertie de chaque axe
La classe PCA de prince, elle, réduit les variables par défaut. Deux bibliothèques, deux comportements : vérifier l’option avant de comparer des résultats.
AFC et ACM : prince
scikit-learn ne propose ni AFC ni ACM. prince comble ce manque avec une interface proche de celle de scikit-learn (fit, puis lecture des coordonnées) :
import prince
afc = prince.CA(n_components=2).fit(tableau) # tableau de contingence
afc.row_coordinates(tableau)
acm = prince.MCA(n_components=2).fit(df_quali)
acm.column_coordinates(df_quali) # coordonnées des modalités
CAH, K-means et classification mixte
La classification ascendante hiérarchique relève de scipy.cluster.hierarchy : linkage() construit l’arbre selon la stratégie d’agrégation choisie, dendrogram() le trace, fcluster() le coupe. Les K-means sont dans scikit-learn (KMeans), qui accepte des centres initiaux : on peut ainsi consolider par les K-means une partition issue de la CAH, ce qui constitue la classification mixte.
from scipy.cluster.hierarchy import linkage, fcluster
Z = linkage(coordonnees, method="ward")
classes = fcluster(Z, t=4, criterion="maxclust") # coupe en 4 classes
La méthode PAM (Partitioning Around Medoids) ne figure pas dans scikit-learn : elle est proposée par des bibliothèques complémentaires, comme scikit-learn-extra ou kmedoids.
Ces méthodes décrivent des données sans variable à prédire. Pour passer à l’apprentissage supervisé, où il s’agit de prédire une variable connue sur des données d’apprentissage, voir Les fondamentaux du machine learning avec Python.