Analyse des données avancée
Mise en œuvre sur R et Python
- Présentation du cours
- Reprendre l'analyse des données par l'algèbre
- Le tableau, les poids et la métrique
- L'inertie, formalisée
- Diagonalisation et décomposition en valeurs singulières
- L'ACP en écriture matricielle
- Dualité et relations de transition
- Combien d'axes retenir
- Contributions, cosinus carrés et éléments supplémentaires
- L'AFC et la métrique du khi-deux
- Profils, barycentres et lecture conjointe
- L'analyse des correspondances multiples
- Distances et dissimilarités
- La classification ascendante hiérarchique
- Les k-means et la consolidation
- Décrire et nommer les segments
- L'analyse factorielle discriminante
- Classer un nouveau client
- Le positionnement multidimensionnel
- Étude de cas
- Mise en œuvre sur R et Python
Analyse des données avancée
Chapitre 19 : Mise en œuvre sur R et Python
Lire une sortie
Rien de nouveau dans la sortie
Sur R
L’ACP avec FactoMineR
library(FactoMineR) ; library(factoextra)
cl <- read.csv("clients.csv", stringsAsFactors = TRUE)
acp <- PCA(cl, quanti.sup = c(3, 8), quali.sup = c(2, 4, 5, 6, 17),
scale.unit = TRUE, ncp = 5, graph = FALSE)
acp$eig # 4.535 (56.69 %) puis 1.645 (20.57 %)
fviz_screeplot(acp) # l'eboulis du chapitre 6
fviz_pca_var(acp) # le cercle des correlations
fviz_pca_ind(acp, habillage = "frequence")quanti.sup et quali.sup désignent les colonnes illustratives. Tout ce qui n’y figure pas est actif.
C’est la décision du chapitre 1, réduite à deux vecteurs d’indices — et c’est la ligne qu’il faut relire trois fois avant de commenter quoi que ce soit.
Lire les aides à l’interprétation
acp$var$cos2[, 1:2] # qualite de representation des variables
acp$var$contrib[, 1:2] # contribution : accueil 20.5 % sur l'axe 2
acp$ind$contrib[, 1] # aucun individu au-dessus de 1.83 %
dimdesc(acp, axes = 1:2) # description automatique des axesdimdesc trie, pour chaque axe, les variables et les modalités les plus liées, avec leur corrélation.
Elle ne remplace pas la lecture du cercle — elle la vérifie. Un axe qu’on a mal nommé se repère immédiatement dans sa sortie.
Classification et discrimination
# CAH sur les axes factoriels, avec consolidation automatique
hc <- HCPC(acp, nb.clust = 4, consol = TRUE, graph = FALSE)
hc$desc.var$quanti # ce qui caracterise chaque classe
hc$desc.var$test.chi2 # les variables qualitatives liees
hc$data.clust$clust # la classe de chaque client
# Analyse discriminante
library(MASS)
afd <- lda(frequence ~ prix + choix + qualite + agencement +
proprete + rapidite + conseil + accueil, data = cl)
table(cl$frequence, predict(afd)$class) # 67.0 %
afdcv <- lda(frequence ~ ., data = cl[, 9:16], CV = TRUE) # 65.3 %AFC, ACM et MDS
# AFC sur le tableau croise CSP x motif
tab <- table(cl$csp, cl$motif)
chisq.test(tab) # X-squared = 110.41, df = 12
afc <- CA(tab, graph = FALSE)
afc$eig # 0.2267 (61.60 %) et 0.1030 (27.98 %)
# ACM sur les cinq variables qualitatives
acm <- MCA(cl[, c("csp","frequence","carte","motif","sexe")], graph = FALSE)
# MDS sur les dissimilarites entre enseignes
mds <- cmdscale(d_enseignes, k = 2, eig = TRUE)
sum(mds$eig[1:2]) / sum(mds$eig[mds$eig > 0]) # 97.34 %Le test et l’analyse, l’un après l’autre
chisq.test(tab) puis CA(tab) : le test et l’analyse, l’un après l’autre, sur le même objet.
Le premier dit qu’il y a une liaison ; le second dit laquelle. Les deux lignes ensemble résument tout le chapitre 8.
Sur Python
Les équivalents
import pandas as pd, numpy as np, prince
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
cl = pd.read_csv("clients.csv")
notes = ["prix","choix","qualite","agencement",
"proprete","rapidite","conseil","accueil"]
acp = prince.PCA(n_components=5).fit(cl[notes])
acp.eigenvalues_summary # 56.69 % puis 20.57 %
F = acp.transform(cl[notes]) # les coordonnees des individusClassification et discrimination
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
Z = linkage(F.iloc[:, :2], method="ward")
dendrogram(Z, no_labels=True)
g = fcluster(Z, t=4, criterion="maxclust") # 4 classesConsolidation et discrimination
# k-means partant des centres de la CAH
centres = np.array([F.iloc[:, :2][g == k].mean() for k in range(1, 5)])
km = KMeans(n_clusters=4, init=centres, n_init=1).fit(F.iloc[:, :2])
afd = LDA().fit(StandardScaler().fit_transform(cl[notes]), cl.frequence)La correspondance des commandes
| R | Python |
|---|---|
PCA (FactoMineR) |
prince.PCA |
CA |
prince.CA |
MCA |
prince.MCA |
hclust(..., "ward.D2") |
scipy.linkage(..., "ward") |
kmeans |
sklearn.KMeans |
lda (MASS) |
LinearDiscriminantAnalysis |
cmdscale |
sklearn.manifold.MDS |
Lequel choisir
Il commence dès que les données sont volumineuses, ou qu’il faut industrialiser le calcul du score — le recalculer chaque nuit sur la base clients.
Pour une étude, R. Pour un traitement récurrent, Python.
FactoMineR sort d’emblée contributions, \cos^2 et éléments illustratifs. En Python, il faut souvent les recalculer.
Ce n’est pas un détail : ce sont exactement les indicateurs sans lesquels un plan factoriel ne s’interprète pas.
Les pièges
Ceux que le logiciel ne signale jamais
Ce que le logiciel ne fait pas
PCA(cl) sans argument met tout en actif, y compris le panier moyen et l’âge — et sort un résultat parfaitement propre, parfaitement faux.
Aucun message d’erreur ne viendra.
HCPC(acp, nb.clust = 4) produira quatre classes sur trois cents points tirés au hasard, avec un dendrogramme d’apparence convaincante.
C’est au lecteur du saut d’inertie de trancher, pas à la fonction.
Ce qu’il faut retenir
Le résumé du chapitre
PCA,CA,MCA,HCPC,lda,cmdscale: six fonctions pour les six méthodes.quanti.supetquali.suptraduisent la décision active ou illustrative.dimdescvérifie l’interprétation des axes ; elle ne la remplace pas.HCPC(..., consol = TRUE)enchaîne CAH et k-means en une instruction.- R sort les contributions et \cos^2 d’emblée ; Python demande de les recalculer.
- Le logiciel ne choisit pas les variables actives et ne dit pas si les classes existent.
Cinq méthodes, une seule diagonalisation, un seul fichier de trois cents clients.
Vous avez décrit leurs opinions, croisé leurs profils, formé leurs segments, construit une règle de ciblage et positionné huit enseignes. Aucun de ces résultats n’était visible dans le tableau de départ — et c’est précisément l’objet de la discipline.
Ressources du chapitre
- Diapositives
- Polycopié du chapitre
- Exercices corrigés
- Application interactive
- — Vidéo
- QCM (bientôt)