Analyse en Composantes Principales (ACP)
Analyse en Composantes Principales (ACP)
L’analyse en composantes principales (ACP) est une technique exploratoire très populaire.
Selon les points de vue, on peut la considérer : comme une technique factorielle où l’on essaie
importantes représentées par des variables synthétiques appelées composantes ; comme une
technique de visualisation où l’on essaie de préserver les proximités entre les individus dans un
Le succès de l’ACP repose en très grande partie sur la richesse des représentations graphiques
qu’elle propose. Elle sont accompagnées d’outils d’aide à l’interprétation qui permettent de saisir
la teneur des composantes (facteurs, axes factoriels) mises en évidence. Les très nombreux
exemples illustratifs que l’on trouve ici ou là soulignent ses propriétés descriptives sur des jeux
de données de taille réduite, elles permettent de mettre en relation les résultats observés avec
Mais le champ d’application de l’ACP est plus large. Elle joue un rôle important comme outil de
défrichage des grandes bases de données, tant en nombre d’observations que de variables. En
réduisant la dimensionnalité avec une perte d’information contrôlée, elle peut constituer une
solution de prétraitement privilégiée avant l’utilisation des techniques de machine learning. Son
Méthodes Factorielles 9
ACP 1
rôle complémentaire par rapport aux techniques de classification automatique (clustering) en
particulier est souligné dans la littérature (Lebart et al., 2000 ; section 2.4).
<class '[Link]'>
Index: 18 entries, Alfasud TI to Lada 1300
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 CYL 18 non-null int64
1 PUISS 18 non-null int64
2 LONG 18 non-null int64
3 LARG 18 non-null int64
4 POIDS 18 non-null int64
5 VMAX 18 non-null int64
dtypes: int64(6)
memory usage: 1008.0+ bytes
None
Méthodes Factorielles 10
ACP 2
Lancia Beta 1297 82 429 169 1080 160
Peugeot 504 1796 79 449 169 1160 154
Renault 16 TL 1565 55 424 163 1010 140
Renault 30 2664 128 452 173 1320 180
Toyota Corolla 1166 55 399 157 815 140
Alfetta 1.66 1570 109 428 162 1060 175
Princess 1800 1798 82 445 172 1160 158
Datsun 200L 1998 115 469 169 1370 160
Taunus 2000 1993 98 438 170 1080 167
Rancho 1442 80 431 166 1129 144
Mazda 9295 1769 83 440 165 1095 165
Opel Rekord 1979 100 459 173 1120 173
Lada 1300 1294 68 404 161 955 140
Les variables sont : CYL (cylindrée en cm3), PUISS (puissance en chevaux din), LONG (longueur
en cm), LARG (largeur en cm), POIDS (poids en kg), VMAX (vitesse maximale en km/h).
Dans ce chapitre, nous notons 𝑋 = (𝑥𝑖𝑗 ) cette matrice composée des observations (i = 1, …, n)
et variables (j = 1, …, p) actives, dans le sens où elles vont participer aux calculs lors de la
Dans notre base, (𝑥12 = 79) correspond à la puissance (PUISS) de l’Alfasud TI.
Les questions qui viennent naturellement à l’esprit à la lecture de ce type de tableau sont :
− Quels sont les véhicules qui se ressemblent ? Qui s’opposent ? Sur quelles caractéristiques
− Quelles sont les relations entre les variables. A priori, surtout pour des véhicules de cette
époque où il n’y avait pas (très rarement) de turbo, la cylindrée et la puissance sont
− Pour les férus d’automobiles, nous savons qu’elles sont subdivisées en segments (citadines,
polyvalentes, familiales, routières, …). Est-ce qu’il est possible de discerner cette typologie
éventuellement ?
individus-variables : étudier la proximité entre les individus d’une part, analyser les liaisons
Méthodes Factorielles 11
ACP 3
1.1.2 Analyse des proximités entre individus
Contentons-nous de traiter les variables CYL et PUISS dans un premier temps. Nous pouvons
#préparer le graphique
fig, ax = [Link](figsize=(10,10))
[Link]([Link],[Link],"wo")
[Link]([1000,3000,50,140])
ax.set_xlabel("CYL")
ax.set_ylabel("PUISS")
#faire afficher
[Link]()
Méthodes Factorielles 12
ACP 4
Dans ce repère, nous pouvons distinguer plusieurs informations très facilement :
− Les deux variables (CYL, PUISS) sont fortement liées positivement. Quand la cylindrée
− L’Opel Rekord et la (Ford) Taunus 2000 présentent des caractéristiques similaires. Ces
− La Lada 1300 et la Simca 1300 présentent des propriétés strictement identiques, raison
pour laquelle ils se superposent dans le graphique. Quand on connaît un peu leur genèse,
− Les Renault 30 et Toyota Corolla en revanche sont complètement opposés (gros moteur
Remarque : Deux variables sont liées lorsque le nuage de points associé forme une pente,
positive ou négative. Dans ces différentes configurations ci-dessous (Figure 2) : (A) correspond
à une liaison positive ; (B), (C) et (D) correspondent à une absence de liaison, quand la variable
(A) (B)
(D)
(C)
Le graphique (CYL, PUISS) ne fait que révéler des informations contenues dans les données.
Nous aurions pu faire les mêmes constations en triant le tableau selon la cylindrée, mais de
Méthodes Factorielles 13
ACP 5
#afficher les deux variables en triant selon CYL
Dbis = D.sort_values(by="CYL",ascending=True)[['CYL','PUISS']]
print(Dbis)
CYL PUISS
Modele
Toyota Corolla 1166 55
Citroen GS Club 1222 59
Lada 1300 1294 68
Simca 1300 1294 68
Lancia Beta 1297 82
Alfasud TI 1350 79
Rancho 1442 80
Renault 16 TL 1565 55
Alfetta 1.66 1570 109
Fiat 132 1585 98
Audi 100 1588 85
Mazda 9295 1769 83
Peugeot 504 1796 79
Princess 1800 1798 82
Opel Rekord 1979 100
Taunus 2000 1993 98
Datsun 200L 1998 115
Renault 30 2664 128
Lorsque (p = 3), un graphique en 3 dimensions reste gérable, même s’il est moins lisible. Au-
delà, nous sommes démunis. Quand elles ne sont pas trop nombreuses, on utilise souvent les
« pairplot » qui sont constitués de nuages de points des variables prises deux à deux. Espérer y
déceler des informations fines sur les proximités entre les individus est illusoire. Lire plusieurs
cadrans simultanément n’est pas facile, et étiqueter les observations rendrait le tout totalement
illisible. Ce type de graphique sert surtout à effectuer un diagnostic rapide des données :
identifier les configurations incongrues (des blocs dans les observations par exemple), les
Pour les données « Autos », nous observons (Figure 3) que certaines variables sont fortement
liées [(CYL, PUISS), (LONG, LARG, POIDS)]. Et qu’une observation se démarque des autres par
une inflation des valeurs de cylindrée, puissance, vitesse maximum. Après inspection des
données, on se rend compte qu’il s’agit de la Renault 30, voiture de luxe française emblématique
des années 70. Elle se positionne différemment par rapport aux autres automobiles.
Méthodes Factorielles 14
ACP 6
Sous Python, nous utilisons la librairie « seaborn » pour réaliser un graphique potable en une
#librairie graphique
import seaborn as sns
#pairplot
[Link](D)
synthétiques, combinaisons linéaires des variables originelles, en nombre réduit (𝒒 ≪ 𝑝), tout
Méthodes Factorielles 15
ACP 7
(1) définir et mesurer l’information véhiculée par les données ;
(2) quantifier la qualité de restitution du nouvel espace de représentation .
Dans la suite de cette section, nous nous en tenons au traitement des (p = 2) variables CYL et
PUISS dans les exemples pour appréhender plus facilement les concepts manipulés (objet Dbis
Distance euclidienne. La distance permet de mesure le degré d’éloignement entre les individus.
La plus usuelle est la distance euclidienne. Entre deux individus (i1) et (i2), elle est définie comme
suit :
𝑝
2
𝑑(𝑖1 , 𝑖2 ) = √∑(𝑥𝑖1 𝑗 − 𝑥𝑖2𝑗 )
𝑗=1
Aux fins d’illustrations, calculons les distances entre la « Audi 100 » et deux de ses voisins, la
13.341664064126334
181.01104938649465
Les résultats ne correspondent pas à l’impression visuelle ci-dessus (Figure 3). Contrairement à
ce que l’on perçoit, l’Audi serait nettement plus proche de la Fiat que de la Mazda ?
Distance euclidienne pondérée. Le hic vient de la différence d’unités entre les variables. La
cylindrée est exprimée en cm3, la puissance en chevaux DIN. Les valeurs n’ont absolument pas
la même amplitude. Les outils graphiques font une mise à l’échelle automatique sur l’étendue
(max – min) qui masque cette disparité. Pour retrouver un mécanisme similaire dans le calcul
Méthodes Factorielles 16
ACP 8
des distances, une solution simple consiste à réduire les variables c.-à-d. à les diviser par leurs
écarts-type respectifs. Cela revient à utiliser une distance euclidienne pondérée par l’inverse de
la variance.
𝑝
1 2
𝑑(𝑖1, 𝑖2 ) = √∑ 2 (𝑥𝑖1 𝑗 − 𝑥𝑖2 𝑗 )
𝜎𝑗
𝑗=1
𝑛
1 2
𝜎𝑗2 = ∑(𝑥𝑖𝑗 − 𝑥̅𝑗 )
𝑛
𝑖=1
𝑛
1
𝑥̅𝑗 = ∑ 𝑥𝑖𝑗
𝑛
𝑖=1
Revenons à notre exemple ci-dessus. Nous calculons tout d’abord les écarts-type des variables
[363.39449027 19.80218531]
0.6565451047185447
0.5082182304292723
Les résultats sont plus conformes à l’intuition visuelle, l’Audi est plus proche de la Mazda que de
Méthodes Factorielles 17
ACP 9
Remarque sur la correction par les écarts-type. Cette correction est quasi-automatique en
analyse en composantes principales, on parle alors d’ACP normée. Elle est justifiée dans la
plupart des cas. Mais il faut quand-même rester prudent. Si elles sont exprimées dans les mêmes
unités (ex. des notes attribuées à des critères), ou du moins mesurées sur des échelles
similaires, il est parfois intéressant de les traiter nativement pour que les variables qui
Inertie – Version 1. La quantité d’information contenue dans un jeu de données peut être
exprimée par l’inertie. Elle indique la dispersion totale des données. Elle peut être définie par la
𝑛 𝑛
1
𝐼𝑝 = ∑ ∑ 𝑑 2 (𝑖1 , 𝑖2 )
2𝑛2
𝑖1 =1 𝑖2 =1
Sous Python, nous calculons l’inertie sur les donnes (CYL, PUISS) en effectuant une double
boucle de manière à bien détailler les étapes. L’inertie totale est égale à 𝐼𝑝 = 132447.68
#nombre d'observations
n = [Link][0] #18
Inertie – Version 2. Une autre manière de considérer l’inertie est de la voir comme une
barycentre G du nuage de points, défini par le vecteur composé des moyennes des (p) variables
𝑥̅ = (𝑥̅1 , … , 𝑥̅𝑝 )
𝑛
1
𝐼𝑝 = ∑ 𝑑 2 (𝑖, 𝐺)
𝑛
𝑖=1
Méthodes Factorielles 18
ACP 10
Calculons le vecteur moyenne. Dans le plan (CYL, PUISS), nous positionnons le barycentre et
nous situons chaque point par rapport à cette référence (Figure 4).
[1631.66666667 84.61111111]
Figure 4 - Dispersion des points autour du barycentre G -- Données "Autos" (CYL, PUISS)
Le calcul de l’inertie est autrement plus simple par rapport à la version précédente.
[1631.66666667 84.61111111]
Méthodes Factorielles 19
ACP 11
#inertie version 2 - écarts au barycentre
Ip_v2 = [Link](numpy.apply_along_axis(func1d=lambda x: [Link]((x-moyennes)**2),axis=1,arr=X))
print("Inertie, Approche 2 = %.2f" % (Ip_v2))
Cette écriture a pour avantage de mettre en lumière un résultat important : l’inertie est égale à
𝑛
1
𝐼𝑝 = ∑ 𝑑 2 (𝑖, 𝐺)
𝑛
𝑖=1
𝑛 𝑝
1 2
= ∑ ∑(𝑥𝑖𝑗 − 𝑥̅𝑗 )
𝑛
𝑖=1 𝑗=1
𝑝 𝑛
1 2
= ∑ ∑(𝑥𝑖𝑗 − 𝑥̅𝑗 )
𝑛
𝑗=1 𝑖=1
𝑝
= ∑ 𝜎𝑗2
𝑗=1
Nous avions calculé les écarts-type par variables ci-dessus. Il nous suffit de les passer au carré
Cas des variables réduites. Lorsque les variables sont réduites, normalisées par les écarts-
type, leur variance est égale à 1. L’inertie est alors égale au nombre de variables (𝐼𝑝 = 𝑝).
Méthodes Factorielles 20
ACP 12
[Link] Principe de l’analyse en composantes principales (1)
Pour des raisons qui seront plus faciles à formuler dans l’étude des relations entre les variables
(section 1.1.3), nous centrons et réduisons les descripteurs. Pour (Xj), la variable transformée
𝑥𝑖𝑗 − 𝑥̅𝑗
𝑧𝑖𝑗 =
𝜎𝑗
dimension réduite (𝒒 ≪ 𝑝) qui préserve au mieux les distances entre les individus ou, c’est la
même chose, qui préserve au mieux la dispersion des données. Ce nouveau repère est décrit par
axes principaux, axes factoriels). Elles sont définies par des combinaisons linéaires des variables
𝐹𝑘 = 𝑎𝑘1 𝑧1 + ⋯ + 𝑎𝑘𝑝 𝑧𝑝
L’enjeu est d’estimer les valeurs des coefficients (𝑎𝑘𝑗 ) à partir des données.
Nous noterons qu’il est possible d’exprimer les facteurs à partir des variables originelles. Un
La succession de facteurs construits par l’ACP répond au cahier des charges suivant :
lorsqu’ils y sont projetés. La variance associée indique son pouvoir explicatif, elle correspond
à une fraction de l’inertie totale. La composante est centrée c.-à-d. elle est de moyenne
nulle.
Méthodes Factorielles 21
ACP 13
2. La seconde composante F2 procède de la même manière, mais sur l’information résiduelle,
non-expliquée par F1. Elle est orthogonale à la première. Elle vient compléter l’information
des variances des deux premières composantes indique leur pouvoir de représentation
4. Nous avons restitué toute l’information disponible lorsque le nombre de facteurs (q)
considérés est égal au nombre de variables (p) de la base. La somme des variances des
La compression est d’autant meilleure qu’un nombre (q) faible de facteurs permet de reproduire
Pour l’exemple (CYL, PUISS) centrées et réduites, nous matérialisons les deux facteurs de l’ACP
Méthodes Factorielles 22
ACP 14
Sur l’axe F1, nous souhaitons que les projections des points soient le plus écartés possibles de
l’origine. Ou, de manière équivalente puisque nous avons un triangle rectangle, les distances des
points à la droite (F1) soient les plus faibles possibles. Ainsi, nous pouvons voir l’ACP comme un
ajustement d’un nuage de points par une droite (plan, hyperplan), une régression sans variable
Sous Python, nous standardisons les variables, puis nous allons à l’essentiel avec la classe PCA
de la librairie « scikit-learn » . Nous reviendrons sur le détail des calculs sous-jacentsplus loin
(section 1.2). Nous obtenons les coordonnées factorielles des individus dans un premier
0 1
Modele
Toyota Corolla -1.281436 -1.495346
Citroen GS Club -1.127333 -1.293348
Lada 1300 -0.929201 -0.838852
Simca 1300 -0.929201 -0.838852
Lancia Beta -0.920946 -0.131860
Alfasud TI -0.775099 -0.283358
Rancho -0.521930 -0.232859
Renault 16 TL -0.183455 -1.495346
Alfetta 1.66 -0.169696 1.231626
Fiat 132 -0.128419 0.676132
Audi 100 -0.120163 0.019639
Mazda 9295 0.377918 -0.081360
Peugeot 504 0.452217 -0.283358
Princess 1800 0.457721 -0.131860
Opel Rekord 0.955802 0.777131
Taunus 2000 0.994328 0.676132
Datsun 200L 1.008087 1.534623
Renault 30 2.840806 2.191116
[-1.72701359e-16 -1.48029737e-16]
[1. 1.]
#coordonnées factorielles
Méthodes Factorielles 23
ACP 15
coord = acp.fit_transform(Z)
0 1
Modele
Toyota Corolla -1.963481 -0.151257
Citroen GS Club -1.711680 -0.117390
Lada 1300 -1.250203 0.063886
Simca 1300 -1.250203 0.063886
Lancia Beta -0.744446 0.557968
Alfasud TI -0.748442 0.347713
Rancho -0.533717 0.204405
Renault 16 TL -1.187092 -0.927647
Alfetta 1.66 0.750898 0.990885
Fiat 132 0.387292 0.568903
Audi 100 -0.071082 0.098855
Mazda 9295 0.209698 -0.324759
Peugeot 504 0.119402 -0.520131
Princess 1800 0.230419 -0.416897
Opel Rekord 1.225369 -0.126340
Taunus 2000 1.181194 -0.224999
Datsun 200L 1.797968 0.372317
Renault 30 3.558106 -0.459400
Méthodes Factorielles 24
ACP 16
#position des véhicules dans le repère factoriel
fig, ax = [Link](figsize=(10,10))
[Link](coord[:,0],coord[:,1],"wo")
[Link]([-4,+4,-4,+4])
[Link]([-4,+4],[0,0],color='silver',linestyle='--')
[Link]([0,0],[-4,+4],color='silver',linestyle='--')
ax.set_xlabel("Comp.1 (89.83%)")
ax.set_ylabel("Comp.2 (10.17%)")
#faire afficher
[Link]()
− C’est le même graphique que le précédent (Figure 5), mais après rotation. Nous avons la
− Il est d’usage de faire apparaître les proportions d’inerties restituées sur les axes pour
situer leurs importances relatives. Ces indications sont cruciales surtout lorsque les
logiciels procèdent à une mise à l’échelle automatique de manière à ce que les min et
max soient situés aux extrémités du graphique, laissant croire à une dispersion identique
en abscisse et ordonnée.
explicitement les mêmes limites en abscisse et ordonnée. Nous constatons ainsi pour
notre exemple que la dispersion est surtout perceptible sur la première composante qui
𝑛
1 2
𝜆𝑘 = ∑ 𝐹𝑖𝑘
𝑛
𝑖=1
Où Fik est la coordonnée de l’individu n°i sur la composante Fk. Rappelons que les moyennes des
facteurs sont nulles par construction puisque les données ont été centrées, d’où cette formule
simplifiée de la variance.
Méthodes Factorielles 25
ACP 17
#calculer les lambda
lambada = [Link]([Link](coord,2),axis=0)
print(lambada)
[1.79662771 0.20337229]
[0.89831386 0.10168614]
Nous avons 89.83% de l’information sur le premier facteur, 10.17% sur le second.
Et nous vérifions bien que la somme des variances est égale à l’inertie totale :
𝐼𝑝 = ∑ 𝜆𝑘
𝑘=1
Outre la restitution de la dispersion, nous disions plus haut que l’objectif de l’analyse en
distances entre les individus. Voyons ce qu’il en est sur quelques exemples en comparant les
distances euclidiennes sur les données centrées et réduites (Z) et celles dans le repère factoriel
d’approximation lorsque nous prenons en compte qu’une partie des facteurs, le premier ici en
l’occurrence (F1). Nous mesurons (le carré de) la distance entre la « Toyota Corolla » et la
2 2
𝑑 2 (𝐶𝑜𝑟𝑜𝑙𝑙𝑎, 𝐺𝑆) = (−1.2814 − (−1.1273)) + (−1.4953 − (−1.2933))
= 0.06455
Méthodes Factorielles 26
ACP 18
Avec les coordonnées factorielles sur le premier facteur (F1).
2
𝑑{𝐹1}
(𝐶𝑜𝑟𝑜𝑙𝑙𝑎, 𝐺𝑆) = (1.9335 − 1.7117)2
= 0.06340
L’approximation est plutôt bonne dans le cas présent. On s’y attendait un peu, sachant que la
Maintenant que nous avons compris le principe, effectuons les calculs sous Python. Renouvelons
0.06455073567278283
0.06340375071089865
Voyons ce qu’il en est pour l’Audi 100 et la Fiat 132 qui étaient des concurrents directs sur le
0.4310514745298847
0.2101060634608986
Patatras ! Bien que le facteur (F1) ait un pouvoir de restitution élevé, l’approximation est
des composantes mises en jeu, mais aussi de la qualité de représentation des points étudiés c.-
à-d. de leurs positions sur ces composantes. Nous approfondirons ces notions lors de l’étude
Méthodes Factorielles 27
ACP 19
Distance exacte. Lorsque nous prenons en compte tous les facteurs (F1, F2), nous retrouvons
exactement les distances dans l’espace initial. Pour la Corolla et la GS par exemple.
2
𝑑{𝐹1 ,𝐹2 }
(𝐶𝑜𝑟𝑜𝑙𝑙𝑎, 𝐺𝑆) = (1.9335 − 1.7117)2 + (0.1513 − 0.1174)2
= 0.06455
= 𝑑 2 (𝐶𝑜𝑟𝑜𝑙𝑙𝑎, 𝐺𝑆)
0.43105147452988485
Une des questions clés de l’ACP est de définir le nombre de composantes « q » à retenir pour
disposer d’une approximation suffisamment satisfaisante des proximités pour une fraction
suffisamment importante des points, afin que les résultats – et surtout les graphiques – soient
exploitables.
Dans cette section, nous revenons à l’ensemble des (p = 6) variables de la base « Autos ».
Examiner les relations entre les variables est le second prisme de l’exploration des données. Pour
la base « Autos », selon la pente et l’allongement des nuages de points, nous avions observé
dans le « pairplot » qu’elles étaient plus ou moins liées (Figure 3). Pour traiter les grandes bases,
il nous faut de nouveau une approche synthétique pour mesurer la quantité d’information
disponible à partir de ce point de vue, puis la décomposer par la suite sur les facteurs de l’ACP.
Dans cette section, nous présentons dans un premier temps différents indicateurs permettant
de restituer l’existence et l’intensité de la liaison entre les variables. Nous définirons une
approche alternative pour définir les composantes principales de l’ACP à partir de cette nouvelle
Méthodes Factorielles 28
ACP 20
[Link] Matrice des covariances
variables. Elle identifie leur tendance à être simultanément au-dessus ou en dessous de leurs
espérances respectives. Elle caractérise une liaison monotone (Rakotomalala R., « Analyse de
corrélation. Etude des dépendances – Variables quantitatives », version 1.1, mars 2015). Elle peut
être positive ou négative. Plus sa valeur est élevée en valeur absolue, plus forte est la relation.
Dans un cadre multivarié, la matrice des variances covariances V permet de rendre compte des
𝑛
1
𝑣𝑗1 ,𝑗2 = ∑(𝑥𝑖𝑗1 − 𝑥̅𝑗1 )(𝑥𝑖𝑗2 − 𝑥̅𝑗2 )
𝑛
𝑖=1
Nous observons les variances des variables sur la diagonale de la matrice V. La trace de cette
matrice V – la somme des éléments diagonaux - correspond ainsi à la somme des variances c.-
𝑇𝑟(𝑉) = ∑ 𝑣𝑗𝑗
𝑗=1
Nous constatons ainsi que les deux points de vue sur les données - l’analyse des proximités
entre les individus et l’analyse des liaisons entre les variables - sont cohérents. Passer par
l’inertie ou passer par la matrice des covariances permettent de quantifier de manière identique
Sous Python, nous formons la structure X avec l’ensemble des (p = 6) variables et nous faisons
appel à la fonction cov() de la libraire Numpy pour former la matrice V. Nous calculons sa trace.
Méthodes Factorielles 29
ACP 21
[[132055.56 5732.54 5476.56 1181.78 38159.61 2850.87]
[ 5732.54 392.13 272.86 53.26 2017.05 197.27]
[ 5476.56 272.86 461.58 94.22 2482.36 120.64]
[ 1181.78 53.26 94.22 26.67 492.72 28.81]
[ 38159.61 2017.05 2482.36 492.72 17715.36 749.99]
[ 2850.87 197.27 120.64 28.81 749.99 139.2 ]]
150790.49382716054
Pour vérifier la cohérence avec l’analyse des proximités entre les individus, nous produisons
l’inertie totale sous la forme de la somme des distances au carré au barycentre, dont nous
150790.4938271605
S’il y avait un doute, il est levé. Ce sont bien là deux faces de la même pièce.
Produit matriciel des variables centrées. Le centrage des variables est fondamental en ACP.
Il permet de ramener le barycentre des données à l’origine. Aux descripteurs originels (Xj), nous
La matrice de covariance peut être alors obtenue par le produit matriciel (ZTZ) à un facteur près :
1 𝑇
𝑉= 𝑍 𝑍
𝑛
Nous vérifions cela très facilement sur nos données. Nous centrons d’abord les variables puis
0 1 2 3 4 \
Modele
Alfasud TI -281.666667 -5.611111 -40.5 -5.666667 -208.833333
Méthodes Factorielles 30
ACP 22
Audi 100 -43.666667 0.388889 34.5 10.333333 31.166667
Simca 1300 -337.666667 -16.611111 -9.5 1.333333 -28.833333
Citroen GS Club -409.666667 -25.611111 -21.5 -5.666667 -148.833333
...
5
Modele
Alfasud TI 6.722222
Audi 100 1.722222
Simca 1300 -6.277778
Citroen GS Club -7.277778
...
#(1/n) (Z'Z) ➔ V
print([Link]([Link](Z),Z)/n)
𝑥𝑖𝑗 − 𝑥̅𝑗
𝑧𝑖𝑗 =
𝜎𝑗
1 𝑇
𝑅= 𝑍 𝑍
𝑛
De terme :
𝑣𝑗1 ,𝑗2
𝑟𝑗1,𝑗2 =
𝜎𝑗1 × 𝜎𝑗2
Son intérêt est que ses valeurs sont bornées : (−1 ≤ 𝑟𝑗1 ,𝑗2 ≤ +1). Nous situons d’emblée
l’intensité des relations linéaires entre les paires de descripteurs. Et surtout, comme signalé plus
haut (section [Link], « Distance euclidienne pondérée »), la standardisation permet de dépasser
Méthodes Factorielles 31
ACP 23
Puisque la diagonale contient exclusivement des valeurs égales à 1 (la corrélation d’une variable
avec elle-même est égale à 1), la trace de la matrice (R) est égale à (p), le nombre de variables.
Sous Python, la fonction corrcoef() de la librairie « Numpy » fait très bien l’affaire.
Nous vérifions que la même matrice peut obtenue par l’intermédiaire du produit (ZTZ) :
#centrage et réduction
Z = (X - moyennes)/sigmas
Méthodes Factorielles 32
ACP 24
Figure 7 - "Heatmap" des corrélations croisées - Données "Autos"
Nous notons que les plus fortes corrélations ont lieu entre (PUISS, VMAX), et entre (LONG,
LARG, POIDS). Nous observons également que le niveau global des corrélations est élevé.
Le « heatmap » tient (un peu) du gadget sur (p = 6) variables. Mais sur une plus forte
peut se révéler décisif pour identifier rapidement les liaisons et/ou groupes de liaisons
principales. Elle a pour objectif toujours d’élaborer une succession de facteurs. Le premier est
construit de manière à maximiser la somme des carrés des corrélations avec les variables :
𝜆1 = ∑ 𝑟𝑗2 (𝐹1 )
𝑗=1
La seconde composante (F2) répond à la même spécification, mais travaille sur la partie
résiduelle, non-expliquée par la précédente. Elle est donc orthogonale à (F1). La troisième
composante, etc.
Méthodes Factorielles 33
ACP 25
Les (𝜆𝑘 ) sont exactement les mêmes que lors de l’analyse des proximités entre les individus.
Elles correspondent à l’inertie restituée par les facteurs (Fk). Comme ces derniers sont deux à
deux orthogonaux, les (𝜆𝑘 ) s’additionnent d’un facteur à l’autre. La somme totale est égale
l’inertie globale. Pour une ACP normée, lorsque nous travaillons à partir de la matrice des
Nous sollicitons de nouveaux la classe PCA de « scikit-learn » pour réaliser une ACP sur les
données centrées et réduites c.-à-d. une ACP normée. Nous produisons les coordonnées
factorielles des individus. Nous calculons alors les (𝜆𝑘 ) via la somme des carrés des corrélations
entre les variables et les facteurs. La somme des (𝜆𝑘 ) devrait être égale à (p). Nous verrons bien.
#coordonnées factorielles
coord = acp.fit_transform(Z)
0 1 2 3 4 5
Modele
Toyota Corolla -2.138924 1.785681 0.571862 0.201927 -0.301357 0.053921
Citroen GS Club 1.561459 -1.527040 1.315271 -0.211352 0.148516 -0.327238
Lada 1300 -1.119385 -0.674505 0.456588 -0.167626 -0.375364 0.271803
Simca 1300 -2.573742 0.112884 0.148570 -0.017343 0.226853 0.263476
Lancia Beta 0.427855 0.695567 -0.193286 -0.627754 0.263505 -0.037153
#nombre de variables
p = [Link][1]
print(p)
Méthodes Factorielles 34
ACP 26
slambda = [Link](Mlambda**2,axis=1)
print(slambda)
6.000000000000002
La somme des (𝜆𝑘 ) est égale au nombre de variables (p = 6). Dans notre exemple, nous observons
que (𝜆1 = 4.42). Elle explique pour (4.42 / p = 73.68%) de l’information disponible.
Bien sûr, si nous souhaitons faire le pont avec l’approche sous l’angle des proximités entre les
individus (section [Link]), nous obtenons exactement les mêmes (𝜆𝑘 ) en calculant les variances
des facteurs.
Comme pour les distances entre individus, nous pouvons approcher les corrélations entre les
variables dans un espace factoriel de dimension réduite. Si 𝑟(𝑉1 , 𝑉2 ) est la corrélation brute entre
les variables (V1,V2), la corrélation approchée sur les (q) premiers facteurs s’écrit :
Dans le code Python ci-dessus, la matrice (R) représente les corrélations brutes entre les
variables, (Mlambda) les corrélations des variables avec les facteurs. Pour quelques exemples,
voyons de quelle manière les corrélations peuvent être approximées avec la première ou les deux
premières composantes.
Méthodes Factorielles 35
ACP 27
#corrélation entre CYL et POIDS
print(R[0,4])
0.7889520283865826
0.8087519932967818
L’approximation est déjà de bonne facture sur la première composante. Elle ne peut être
0.7829518411637988
0.4775955992662051
0.6831543614480379
L’approximation est mauvaise pour ce cas. Rajoutons de la précision avec la seconde composante.
0.55438062524932
Conclusion : Comme pour les distances entre les individus, la précision de l’approximation des
corrélations dépend : (1) du pouvoir de restitution des facteurs utilisés (pourcentage d’inertie
porté par les facteurs) ; (2) de la qualité de représentation des variables sur ces facteurs, qu’il
Méthodes Factorielles 36
ACP 28
1.2 Organisations des calculs
Nous savons maintenant ce que nous souhaitons obtenir. Nous décryptons dans cette section
comment y parvenir à partir de nos données en mettant (un peu) les mains dans le cambouis des
calculs matriciels. Comprendre les mécanismes internes nous donnera une meilleure visibilité sur
Récapitulons. A partir d’un ensemble de données dont la quantité d’information totale est
− La variable (zj) représente la variable originelle (xj) centrée (ACP non-normée) ou centrée
− Le degré de représentativité des facteurs est matérialisé par la variance expliquée (𝜆𝑘 ) ;
− Le facteur (Fk) est construit à partir de l’information résiduelle des (k-1) précédents :
− En pratique, on se contente de ne retenir que sur les (q) premiers, avec (𝑞 ≪ 𝑝), qui
pouvons ainsi négliger les (p-q) facteurs restants. Cette forme de « compression » fait
tout l’intérêt de l’ACP. Si l’on considère tous les facteurs (q = p), nous disposons de toute
− Dans l’espace factoriel défini par les (q) premières composantes, nous devons pouvoir
reconstituer de manière satisfaisante les proximités entre les individus et les liaisons
Méthodes Factorielles 37
ACP 29
1.2.1 Calculs (1) – Diagonalisation de la matrice des corrélations
à considérer le problème de l’ACP tel qu’il est posé dans l’analyse des relations des variables avec
les facteurs (section [Link]). Si l’on s’en tient au premier facteur, on cherche à estimer le vecteur
𝑎 = (𝑎1 , … , 𝑎𝑝 ) telle que la somme des carrés des corrélations des variables avec le facteur soit
maximale.
Dans le même temps, on souhaite que le vecteur (a) soit normé : ‖𝑎‖ = 𝑎𝑇 𝑎 = 1
max 𝑎𝑇 𝑅𝑎
{ 𝑎
𝑠. 𝑐.: 𝑎𝑇 𝑎 = 1
𝐿 = 𝑎𝑇 𝑅 𝑎 − 𝜆 (𝑎𝑇 𝑎 − 1)
En calculant la dérivée partielle par rapport à (𝑎), nous obtenons deux résultats importants :
1. (𝑅 𝑎 = 𝜆 𝑎), le vecteur solution (𝑎) est le premier vecteur propre de la matrice des
Exemple de calcul sous Python. Et, de manière générale, les vecteurs et valeurs propres de la
matrice R (en ACP normée) constituent les solutions de l’ACP : les vecteurs propres sont deux à
deux orthogonaux, ils fournissent directement les coefficients (ajk) définissant les composantes
principales (Fk) ; les valeurs propres (λk) traduisent la variance restituée par les facteurs.
La librairie « Numpy » regorge de fonctions qui font notre bonheur. Dans ce qui suit, nous
affichons la matrice des corrélations pour rappel, nous la diagonalisons, nous procédons à
Méthodes Factorielles 38
ACP 30
#rappel matrice des corrélations
print(R)
#valeurs propres
#valeurs propres
print(sol[0])
#vérifions sa norme
print([Link](sol[1][:,0]))
0.9999999999999999
#base orthonormale ?
print([Link]([Link](sol[1]),sol[1]))
Méthodes Factorielles 39
ACP 31
[ 0. 0. -0. 1. -0. 0.]
[-0. 0. -0. -0. 1. 0.]
[-0. 0. -0. 0. 0. 1.]]
Coordonnées factorielles des individus. Pour calculer les coordonnées factorielles des
individus, il suffit d’appliquer les coefficients estimés (les vecteurs propres) sur les variables
centrées et réduites.
F_1
Modele
Alfasud TI 2.138924
Audi 100 -1.561459
Simca 1300 1.119385
Citroen GS Club 2.573742
Fiat 132 -0.427855
Lancia Beta 0.304238
Peugeot 504 -0.683928
Renault 16 TL 1.948493
Renault 30 -4.409735
Toyota Corolla 3.985782
Alfetta 1.66 -0.437658
Princess 1800 -1.018175
Datsun 200L -2.941080
Taunus 2000 -1.314880
Rancho 0.691111
Mazda 9295 -0.385709
Opel Rekord -2.289768
Lada 1300 2.708574
Présentation des résultats – Corrélation des variables avec les axes. Dans les logiciels, les
(λk) apparaissent sous l’appellation « valeurs propres », on sait pourquoi. On utilise également
le terme « variance expliquée ». Les vecteurs propres apparaissent rarement sous leur forme
native en revanche. On préfère les présenter sous l’angle de la corrélation avec les variables où :
Méthodes Factorielles 40
ACP 32
Pour les données « Autos », le calcul est très simple.
0
CYL -0.893464
PUISS -0.886858
LONG -0.886155
LARG -0.813536
POIDS -0.905187
VMAX -0.754710
L’approche alternative pour l’ACP est de passer par la décomposition en valeurs singulières de la
matrice des données centrées et réduites. Elle présente un double avantage par rapport à la
précédente : elle ne nécessite pas le calcul de la matrice des corrélations, cela peut être décisif
si nous traitons des données à très forte dimensionnalité ; elle montre bien le caractère dual de
(SVD – singular value decomposition, en anglais) est une procédure de factorisation des
𝑍 = 𝑈 Δ 𝑉𝑇
Avec :
𝑍 𝑣𝑘 = 𝛿𝑘 𝑢𝑘
{
𝑍 𝑇 𝑢𝑘 = 𝛿𝑘 𝑣𝑘
Sous Python, nous faisons appel à svd() de la librairie « Numpy ». Nous disposons de 3 éléments
en sortie de la fonction.
Méthodes Factorielles 41
ACP 33
Variance restituée par les axes. 𝚫 est une matrice diagonale dite des valeurs singulières (𝛿𝑘 ).
On retrouve très facilement les variances restituées par les axes avec
𝛿𝑘2
𝜆𝑘 =
𝑛
Coordonnées des variables. V est une matrice de taille (p, p), constituée d’un ensemble de
vecteurs orthonormés dits « d’entrée ». Concrètement, nous dirons surtout qu’elle correspond
à la matrice des vecteurs propres de (𝑍 𝑇 𝑍). Ainsi, nous disposons directement des résultats (ajk)
Coordonnées des individus. U est de taille (n, n), constituée de vecteurs orthogonaux dits de
« sortie ». Elle correspond à la matrice des vecteurs propres de (𝑍𝑍 𝑇 ). Concrètement, en nous
en tenant aux (p) premières colonnes, elle nous permet surtout de produire directement les
𝐹𝑖𝑘 = 𝛿𝑘 × 𝑢𝑖𝑘
Méthodes Factorielles 42
ACP 34
#matrice singulière à gauche (de sortie)
print(Us)
[[-0.24 -0.45 -0.22 -0.1 0.23 -0.06 0.31 0.21 0.17 -0.23 -0.2 0.14
0.4 -0.03 -0.04 0.24 0.17 -0.3 ]
[ 0.18 0.39 -0.51 0.11 -0.11 0.37 0.09 0.25 0.42 -0.06 -0.11 0.1
F_1
Modele
Alfasud TI -2.138924
Audi 100 1.561459
Simca 1300 -1.119385
Citroen GS Club -2.573742
Fiat 132 0.427855
Lancia Beta -0.304238
Peugeot 504 0.683928
Renault 16 TL -1.948493
Renault 30 4.409735
Toyota Corolla -3.985782
Alfetta 1.66 0.437658
Princess 1800 1.018175
Datsun 200L 2.941080
Taunus 2000 1.314880
Rancho -0.691111
Mazda 9295 0.385709
Opel Rekord 2.289768
Lada 1300 -2.708574
Méthodes Factorielles 43
ACP 35
1.3 Pratique de l’ACP avec « fanalysis » sous Python
Dans cette section, nous déroulons sous Python une étude type d’analyse en composantes
principales sur les données « Autos ». Les thèmes abordés ne sont pas toujours traités dans cet
ordre dans la pratique de l’ACP, mais ils sont plus ou moins incontournables pour exploiter
Nous utilisons le package « fanalysis » pour Python développé par Olivier Garcia, un de mes
anciens étudiants du Master SISE (2000). Une courte description de ses fonctionnalités est
disponible sur mon blog (« Analyses factorielles sous Python avec fanalysis », juin 2018). L’outil
a une double finalité : il permet de mener une étude descriptive répondant à la pratique usuelle
des méthodes factorielles ; il permet de les utiliser en tant que techniques de prétraitement
précédant les algorithmes de machine learning dans des mécanismes de pipeline (« Pipeline sous
Pour des raisons de lisibilité, nous recommençons à zéro dans cette section, avec le chargement
des données et la préparation des structures. Nous suivons ensuite la démarche d’analyse
principales »).
Méthodes Factorielles 44
ACP 36
Importation des données. Aucune difficulté intrinsèque ici, nous avons toujours (n = 18)
observations et (p = 6) variables.
#chargement des données - index_col = 0 : indiquer que la colonne n°0 est un label
import pandas
D = pandas.read_excel("Data_Methodes_Factorielles.xlsx",sheet_name="DATA_ACP_ACTIF",index_col=0)
<class '[Link]'>
Index: 18 entries, Alfasud TI to Lada 1300
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 CYL 18 non-null int64
1 PUISS 18 non-null int64
2 LONG 18 non-null int64
3 LARG 18 non-null int64
4 POIDS 18 non-null int64
5 VMAX 18 non-null int64
dtypes: int64(6)
memory usage: 1008.0+ bytes
#nombre de variables
p = [Link][1]
#nombre d'observations
n = [Link][0]
#matrice des X
X = [Link]
ACP avec « fanalysis ». Pour lancer l’ACP nous importons la classe de calcul, nous instancions
Méthodes Factorielles 45
ACP 37
cor_', 'col_cos2_', 'col_labels', 'col_labels_', 'col_labels_short_', 'col_topanda
s', 'correlation_circle', 'eig_', 'eigen_vectors_', 'fit', 'fit_transform', 'get_p
arams', 'mapping', 'mapping_col', 'mapping_row', 'means_', 'model_', 'n_components
', 'n_components_', 'plot_col_contrib', 'plot_col_cos2', 'plot_eigenvalues', 'plot
_row_contrib', 'plot_row_cos2', 'row_contrib_', 'row_coord_', 'row_cos2_', 'row_la
bels', 'row_labels_', 'row_topandas', 'set_params', 'ss_col_coord_', 'stats', 'std
_', 'std_unit', 'transform']
L’objet possède une série de propriétés et de méthodes que nous exploiterons à l’envi tout au
Le choix du nombre de facteurs à retenir est très important en ACP (TUTO 3). L’enjeu est de
distinguer d’une part l’information pertinente (le « signal ») véhiculée par les axes que l’on
choisit de retenir ; et d’autre part, l’information résiduelle – le « bruit » issu des fluctuations
d’échantillonnage – traduite par les derniers facteurs que l’on choisit de négliger. Et c’est là que
le bât blesse. On nous dit généralement qu’il faut conserver les facteurs intéressants, pourvu
qu’ils soient interprétables. Difficile d’être plus approximatif. Pour un expert, ce n’est pas
vraiment un problème. Attention, l’expertise ne se limite pas à la méthode. Elle englobe une
bonne connaissance du domaine (savoir ce qui est possible d’obtenir ou pas) et des données
manipulées (pouvoir détecter rapidement les anomalies ou les évidences). Bref, il dispose de
Pour le néophyte, l’à peu près n’est pas gérable. C’est un peu le cas de mes étudiants. Ils
connaissent bien les statistiques. Ils sont en train d’apprendre les techniques factorielles. Mais
pour ce qui est des applications pratiques sur des fichiers de données, ils ne sont ni médecins,
ni spécialistes du marketing, etc. L’expertise métier leur fait défaut pour encadrer les résultats.
Ils ont besoin de repères numériques forts lorsqu’ils mènent une analyse. Et je me suis rendu
compte que la très grande majorité des étudiants se contentaient très souvent de la règle de
Kaiser-Guttman (valeur propre > 1 en ACP normée), et parfois de la règle du coude associée au
« scree plot » mettant en lumière la décroissance des valeurs propres (« éboulis » des valeurs
propres). Pourtant d’autres règles existent. Elles sont malheureusement peu connues, peu
Méthodes Factorielles 46
ACP 38
Dans cette section, nous passons en revue quelques solutions simples à mettre en œuvre pour
impliquent plusieurs passages sur les données feront l’objet d’un développement spécifique dans
Ces approches « simples » s’appuient essentiellement sur l’étude des valeurs propres. Rappelons
que la valeur propre correspond à la fraction d’inertie que la composante retranscrit. Plus elle
est élevée, plus le facteur est important dans la lecture des résultats. L’enjeu justement est de
déceler à partir de quel stade l’information restituée peut être considérée négligeable. L’affaire
n’est pas facile. En effet, plusieurs éléments entrent en ligne de compte (Jackson, 1993) : le
le nombre d’observations et le nombre de variables ; le degré de liaison (la corrélation) entre les
Le ratio « n:p » est particulièrement important. Il détermine la stabilité des résultats. Certaines
références affirment qu’une ACP n’est vraiment viable que s’il est supérieur à 3 (Grossman et
al., 1991). Nous avons juste (18/6 = 3) dans notre fichier. Ouf ! A priori, nous pouvons travailler
en confiance.
La règle de Cattell (1966, 1977) repose sur l’étude de la courbe de décroissance des valeurs
propres (k) pour identifier le bon nombre de facteurs. Elle est valable pour les ACP normées et
non-normées. L’idée est de détecter les « coudes » (les « cassures ») signalant un changement
de structure. Cette approche est intéressante parce qu’elle est nuancée. Elle permet de dépasser
l’arbitraire purement numérique. Mais elle est compliquée à mettre en œuvre parce qu’elle est
justement soumise à l’arbitraire. La détection n’est pas toujours évidente. Il faut répondre à
plusieurs questions : Où est situé le coude ? Est-ce qu’il est unique ? Est-ce que nous l’incluons
En règle générale, le coude est très marqué lorsque nous traitons des variables fortement
corrélées. Lorsqu’elles le sont faiblement ou lorsqu’il y a des blocs de variables corrélées, plutôt
Méthodes Factorielles 47
ACP 39
qu’une solution unique « évidente », nous devons envisager plusieurs scénarios. Concernant
l’intégration du coude dans la sélection, Cattel lui-même a varié. Dans un premier temps (Cattell,
1966), il conseillait de ne sélectionner que les facteurs qui sont avant le coude ; puis, dans un
second temps (1977), il préconise finalement de l’intégrer. Tout dépend de la valeur associée au
coude en réalité. Si elle est faible, on peut négliger le facteur. Nous devons le sélectionner en
Sur les données « Autos », la propriété « .eig_ » fournit les valeurs propres de différentes
#valeurs propres
print(acp.eig_)
Nous construisons la courbe, que l’on appelle aussi « Eboulis des valeurs propres » ou « Scree
plot » selon les références. J’ai rajouté une ligne pointillée rouge dont nous négligeons la lecture
%matplotlib inline
#librairie graphique
import [Link] as plt
#préparer le graphique
fig, ax = [Link](figsize=(5,5))
[Link](range(1,p+1),acp.eig_[0],".-")
ax.set_xlabel("Nb. facteurs")
ax.set_ylabel("Val. propres")
[Link]("Eboulis des valeurs propres")
[Link]()
Méthodes Factorielles 48
ACP 40
Figure 8 - Scree plot - Données "Autos"
Il y a un coude évident ici pour (k = 2). Est-ce qu’il faut l’inclure ou pas dans la sélection c.-à-d.
est-ce qu’il faut prendre (q = 1) ou (q = 2) facteurs finalement ? Pour les graphiques, (q = 2) est
incontournable. Mais de manière générale, la décision repose pour beaucoup sur la proportion
d’inertie portée par le facteur concerné. Ici, elle semble assez élevée (14.27%), on serait tenté de
Pour préciser la lecture, il semble intéressant de compléter le « scree plot » par un second
graphique décrivant l’évolution de l’inertie expliquée par les (q) premiers axes. Il s’agit ni plus ni
moins de la courbe des valeurs propres cumulées en pourcentage. Un « coude » devrait y être
visible également. Mais la partie subséquente doit présenter une pente moindre, indiquant ainsi
Nous réalisons ce second graphique pour les données « Autos » (Figure 9).
[Link]()
Méthodes Factorielles 49
ACP 41
Figure 9 - Courbe de variance expliquée - Données "Autos"
gain est moindre certes, mais la pente reste conséquente. Il y a une seconde cassure en (q = 2),
On est parfois tenté d’utiliser explicitement la part de variance expliquée pour déterminer le
nombre de facteurs. La règle serait alors : « sélectionner suffisamment d’axes pour expliquer
au moins x% de l’inertie totale ». Cette stratégie est descendue en flammes par toutes les
références que j’ai pu consulter. Pour la simple raison qu’elle ne tient pas compte des
corrélations entre les variables. Dans notre exemple, mettons que l’on souhaite capter 95% de
Méthodes Factorielles 50
ACP 42
Néanmoins, après coup, après avoir choisi le nombre d’axes à l’aide d’une des approches décrites
Règle de Kaiser-Guttman. La règle de Kaiser-Guttamn repose sur une idée simple. Dans une
ACP normée, la somme des valeurs propres étant égale au nombre de variables, leur moyenne
vaut 1. Nous considérons par conséquent qu’un axe est intéressant si sa valeur propre est
supérieure 1.
Il existe d’autres manières de considérer ce seuil : un axe est intéressant s’il contribue plus
qu’une des variables prise individuellement ; ou encore, si les variables étaient deux à deux
Pour les données « Autos », le seuil a été rajoutée dans le « scree plot » (Figure 8, ligne rouge
pointillée). Cette règle de sélection sert de repère à tous les praticiens de l’analyse en
tenir compte en aucune manière les caractéristiques des données, notamment ses dimensions
Règle de Karlis-Saporta-Spinaki. On pense généralement que le seuil 1 est trop permissif c.-
à-d. nous retenons plus d’axes factoriels qu’il n’en faut. Il n’est réellement fondé que si les
variables sont fortement corrélées, autrement il faudrait le relever. Une règle plus restrictive
consiste à le définir comme suit : moyenne des valeurs propres + 2 fois leur écart-type (Saporta,
2006 ; page 172). Elle rappelle la définition de la valeur critique d’un test unilatéral de conformité
𝑝−1
𝜆 >𝟏+2√
𝑛−1
Méthodes Factorielles 51
ACP 43
Par rapport à la règle de Kaiser, elle est plus restrictive. Cela va dans le sens souhaité. Notons
également qu’elle dépend du ratio « n:p », déterminant dans la qualité des résultats de l’ACP.
Nous serons d’autant plus exigeants – nous serons enclins à accepter moins de facteurs - que
𝑝−1 6−1
𝟏+2√ =𝟏+2√ = 2.08
𝑛−1 18 − 1
#seuil de Karlis-Saporta-Spinaki
kss = 1+2*[Link]((p-1)/(n-1))
print(kss)
2.084652289093281
Bien qu’il existe une variante qui peut être utilisée pour identifier le nombre de facteurs
pertinents (TUTO 3, section 5.2), le test de Bartlett sert avant tout à détecter l’existence de
relations « intéressantes » entre les variables (TUTO 7). En effet, on peut considérer l’ACP
comme une compression de l’information. Elle n’est possible que si les données présentent une
certaine redondance. Si les variables sont deux à deux orthogonales, a fortiori si elles sont deux
retenir est égal au nombre de variables. Dans ce dernier cas, la matrice des corrélations est
les valeurs propres sont identiques, elles sont égales à 1 ». Si on rejette H0, on sait qu’il existe
au moins un facteur pertinent dans l’ACP. Nous ne pouvons pas spécifier leur nombre toutefois.
La statistique de test est basée sur le déterminant du coefficient de corrélation R, elle s’écrit
Méthodes Factorielles 52
ACP 44
2𝑝+5
𝐶 = − (𝑛 − 1 − ) × ln|𝑅|
6
|R| est égal au produit des valeurs propres. Si les variables sont deux à deux orthogonales, il est
égal à 1, et la statistique de test C est égale à 0. Il s’agit d’apprécier dans quelle mesure nous
Il n’est pas nécessaire de calculer explicitement la matrice de corrélation pour réaliser le test. La
formule peut être réécrite en exploitant les valeurs propres fournies par l’objet ACP :
𝑝
2𝑝+5
𝐶 = − (𝑛 − 1 − ) × ∑ ln 𝜆𝑘
6
𝑘=1
95.11987830353813
#degrés de liberté
ddl = p*(p-1)/2
#p-value
print([Link](C,df=ddl))
1.0891287871572786e-13
Il faut quand même prendre avec prudence ce test. Il a tendance à considérer toute configuration
« n » intervient dans la statistique mais pas dans le calcul des degrés de liberté. De fait, on
Méthodes Factorielles 53
ACP 45
recommande (Dugard et al., 2010) de ne l’utiliser que lorsque le ratio « n:p » (nombre
Ce test est dû à Frontier (1976) et Legendre-Legendre (1983). Il repose sur l’idée que si l’inertie
totale était dispatchée aléatoirement sur les axes, la distribution des valeurs propres suivrait la
loi des « bâtons brisés » (broken-stick). Elle a été tabulée semble-t-il. Mais il est très facile de
calculer la valeur critique pour le choix de « k » facteurs pour un test à 5%. Elle s’écrit :
𝑝
1
𝑏𝑘 = ∑
𝑖
𝑖=𝑘
Pour tester le 1er facteur pour les données « Autos » où (p = 6), la valeur seuil est :
1 1 1
𝑏1 = + + ⋯ + = 2.45
1 2 6
1 1
𝑏2 = + ⋯ + = 1.45
2 6
Nous pouvons ainsi reconstruire le « Scree plot » en y faisant figurer les seuils définis par le
Méthodes Factorielles 54
ACP 46
[Link]()
Ainsi, la procédure des bâtons brisés nous annonce que seul le 1er facteur est réellement
Le test des bâtons brisés a plutôt bonne réputation. On lui reproche simplement de ne tenir
compte ni de « n » (le nombre d’observations) ni du ratio « n:p » dans la définition des valeurs
critiques (TUTO 3). Elle n’est valable que pour l’ACP normée.
Il n’y a pas de solution miracle pour l’identification du nombre de facteurs. Mis à part le test de
Bartlett qui répond à un cahier de charges très spécifique, les différentes techniques présentées
se valent et apportent des points de vue complémentaires dans notre pratique de l’ACP. Il n’y a
pas de vérités absolues en statistique exploratoire. Il y a seulement des pistes que nous devons
de nos données. L’expertise métier est essentielle pour valider les résultats. Il y a aussi une part
d’intuition qui tient à l’expérience du data scientist. Sur les données « Autos », il faut en réalité
sélectionner (q = 2) composantes… qui deviennent évidentes : soit après rotation des facteurs
(section 2.2), soit en travaillant sur les corrélations partielles (section 2.4).
Méthodes Factorielles 55
ACP 47
1.3.2 Représentation des variables et aides à l’interprétation
Les composantes représentent les « dimensions » que recèlent les données que nous analysons.
Pour comprendre leur nature, il faut pouvoir les mettre en relation avec les variables qui pèsent
Corrélation. La corrélation des variables avec les composantes – qui correspond aussi à leurs
coordonnées - est un outil privilégié pour l’interprétation du repère factoriel. Il n’est pas
nécessaire de les calculer ex-post, nous pouvons les déduire directement des valeurs et vecteurs
propres :
Nous affichons les corrélations sur les (q = 2) premières composantes de l’ACP sur « Autos ».
0 1
CYL 0.893464 -0.114906
PUISS 0.886858 -0.384689
LONG 0.886155 0.381029
LARG 0.813536 0.412736
POIDS 0.905187 0.224532
VMAX 0.754710 -0.573519
Nous observons :
− Que toutes les variables déterminent plus ou moins le 1er facteur, avec des corrélations
élevées (toutes positives ici). On parle d’effet taille dans ce type de situation. Une des
variables pèse sur l’ensemble des autres et masque les différences. Nous en reparlerons plus
loin (section 2.4). En l’état, on peut y voir une opposition entre les citadines (« petites »
voitures à faible encombrement avec un moteur réduit) et les routières (« grosses » voitures
− Pour le 2nd facteur, vu la corrélation avec VMAX, on peut le voir comme reflétant la
« sportivité » des véhicules. On pourrait être amené à penser qu’il y a une opposition entre
(vitesse maximum) d’une part, (largeur) d’autre part. En réalité, il faut être circonspect
parce que la lecture dépend de la position sur le premier facteur. En investiguant deux
Méthodes Factorielles 56
ACP 48
secondes, nous constatons que c’est une fausse impression que l’on ne retrouve absolument
dans les nuages de points des variables prises deux à deux (Figure 3).
Pour une meilleure lisibilité, on privilégie une vue synthétique avec le « cercle des
corrélations ». Ce sont les « directions » qui importent, d’où les flèches dans la représentation
graphique. Elles permettront de comprendre les positions relatives des observations dans la
Clairement ici, la cylindrée joue un rôle central (c’est le cas de le dire) en étant corrélée avec les
autres variables.
Remarque : Nous sommes dans une situation simple dans notre exemple. Les (q = 2) premiers
facteurs suffisent pour décrire les données. Sinon, il faudrait considérer les représentations
Cosinus2. Le COS2 désigne la qualité de la représentation des variables (𝑥𝑗 ) sur une composante.
2
𝐶𝑂𝑆𝑗𝑘 = 𝑟𝑗2 (𝐹𝑘 )
Méthodes Factorielles 57
ACP 49
Il présente l’avantage de s’additionner d’un facteur à l’autre. Pour indiquer l’information de la
variable (𝑥𝑗 ) restituée sur les (q) premiers facteurs, nous faisons :
𝑞
2
∑ 𝐶𝑂𝑆𝑗𝑘
𝑘=1
Et lorsque nous considérons l’ensemble des (p) facteurs, nous avons capté toute l’information
𝑝
2
∑ 𝐶𝑂𝑆𝑗𝑘 =1
𝑘=1
Dans l’exemple « Autos », mis à part VMAX et LARG, toutes les variables sont bien représentées
dès le 1er facteur. Nous avons épuisé quasiment toute l’information portée par chaque variable
dès le 2nd facteur puisque, dans le pire des cas, nous avons au moins restitué 81% de l’information
disponible (CYL).
0 1
CYL 0.798277 0.013203
PUISS 0.786517 0.147986
LONG 0.785270 0.145183
LARG 0.661841 0.170351
POIDS 0.819364 0.050415
VMAX 0.569588 0.328925
0 1
CYL 0.798277 0.811481
PUISS 0.786517 0.934503
LONG 0.785270 0.930453
LARG 0.661841 0.832192
POIDS 0.819364 0.869779
VMAX 0.569588 0.898512
chaque composante. Elles sont basées également sur le carré des corrélations, mais normalisées
Sachant que :
Méthodes Factorielles 58
ACP 50
𝑝
∑ 𝑟2𝑗 (𝐹𝑘 ) = 𝜆𝑘
𝑗=1
𝑟2𝑗 (𝐹𝑘 )
𝐶𝑇𝑅𝑗𝑘 =
𝜆𝑘
Voici les contributions aux deux premiers facteurs des données « Autos », exprimées en
0 1
CYL 18.057062 1.542342
PUISS 17.791052 17.286793
LONG 17.762847 16.959384
LARG 14.970882 19.899361
POIDS 18.534057 5.889155
VMAX 12.884099 38.422964
Pas de surprise ici, les variables les plus corrélées avec les facteurs sont celles qui pèsent le plus
Remarque 1 : En analyse en composantes principales, les COS2 et CTR apportent peu dans
l’interprétation des résultats par rapport à la corrélation des variables aux facteurs. En effet,
cette dernière étant bornée entre -1 et +1, elle permet déjà des comparaisons directes.
Remarque 2 : Lors de la reconstitution des corrélations dans l’espace factoriel (section [Link]),
l’approximation sera d’autant meilleure que les COS2 des variables traitées seront élevés.
principales repose pour beaucoup sur les cartes des individus. Je trouve pour ma part assez
addictif de pouvoir positionner des objets dans un repère, pouvoir comprendre les proximités et
les oppositions en les reliant à leurs (multiples) caractéristiques, surtout si l’on dispose par
ailleurs de quelques connaissances du domaine. Pour l’exemple des données « Autos », le féru
des automobiles des années 70 que je suis comprend intuitivement pourquoi les voitures
Méthodes Factorielles 59
ACP 51
italiennes (de ces années-là !) sont regroupées dans une zone spécifique du plan factoriel,
pourquoi la Renault 30 est si différente, etc. Pouvoir associer ces connaissances a priori à des
Coordonnées des individus. Les coordonnées des individus peuvent être obtenues : soit en
appliquant les vecteurs propres de la matrice des corrélations aux valeurs centrées et réduites
(Z) (section 1.2.1) ; soit en pondérant les vecteurs singuliers à gauche U (left-singular vectors)
par les valeurs singulières lors de la décomposition en valeurs singulières de la matrice Z (section
0 1
Modele
Alfasud TI -2.138924 -1.785681
Audi 100 1.561459 1.527040
Simca 1300 -1.119385 0.674505
Citroen GS Club -2.573742 -0.112884
Fiat 132 0.427855 -0.695567
Lancia Beta -0.304238 0.196149
Peugeot 504 0.683928 0.933057
Renault 16 TL -1.948493 0.980448
Renault 30 4.409735 -1.063633
Toyota Corolla -3.985782 -0.236240
Alfetta 1.66 0.437658 -1.912448
Princess 1800 1.018175 0.841712
Datsun 200L 2.941080 0.559175
Taunus 2000 1.314880 -0.486522
Rancho -0.691111 0.897721
Mazda 9295 0.385709 -0.356185
Opel Rekord 2.289768 -0.104345
Lada 1300 -2.708574 0.143699
Nous nous empressons de réaliser la représentation graphique des individus dans le plan
Attention ! Les librairies graphiques procèdent quasiment toujours à une mise à l’échelle
automatique pour que les points « remplissent » au mieux le canevas de présentation. De fait,
la lecture doit tenir compte des proportions de variance expliquées en abscisse (73.68%) et en
Méthodes Factorielles 60
ACP 52
Figure 12 - Carte des individus - Version 1 - Données "Autos"
a. l’écart entre la Simca 1300 et la Lancia Beta se joue plus sur l’ordonnée (Dim 2) que sur
l’abscisse (Dim 1) ;
Or, ces deux assertions s’avèrent fausses si l’on procède aux calculs à partir des coordonnées
factorielles. En effet (les coordonnées sont visibles dans la sortie Python ci-dessus) :
2
a. 𝑑 2 (𝑆𝑖𝑚𝑐𝑎, 𝐿𝑎𝑛𝑐𝑖𝑎) = (−1.12 − (−0.30)) + (0.67 − 0.20)2 = 0.66 + 0.23 = 0.89 ; l’écart se
b. 𝑑 2 (𝐴𝑢𝑑𝑖, 504) = (1.56 − 0.68)2 + (1.53 − 0.93)2 = 1.12 et 𝑑 2 (𝐷𝑎𝑡𝑠𝑢𝑛, 504) = (2.94 −
0.68)2 + (0.56 − 0.93)2 = 5.23 ; la Datsun s’avère nettement plus éloignée de la 504 que
Méthodes Factorielles 61
ACP 53
C’est pour cette raison que je préconise systématiquement de fixer la même échelle en abscisse
et en ordonnée des graphiques factoriels. Les positions relatives sont alors ramenées à de plus
justes proportions, et reflètent plus fidèlement les écarts et leur nature (Figure 13).
for i in range(n):
[Link](acp.row_coord_[i,0],acp.row_coord_[i,1],[Link][i])
[Link]()
Cosinus2 (COS2). Les cosinus expriment la qualité de représentation des individus. Ils sont basés
sur le carré des coordonnées mais normalisées d’une manière spécifique. Pour les comprendre,
Méthodes Factorielles 62
ACP 54
Rappelons que l’inertie totale du nuage de points s’écrit :
𝑛
1
𝐼𝑝 = ∑ 𝑑 2 (𝑖, 𝐺)
𝑛
𝑖=1
Nous travaillons sur (Z) qui est centrée, et éventuellement réduite, le barycentre et l’origine
𝑛 𝑛 𝑝
1 1
𝐼𝑝 = ∑ 𝑑𝑖2 = ∑ ∑ 𝑧𝑖𝑗
2
𝑛 𝑛
𝑖=1 𝑖=1 𝑗=1
La quantité (𝑑𝑖2) indique la part de l’individu dans l’inertie totale, dans l’espace des variables
Notons une équivalence très importante : nous pouvons reconstituer cette distance dans
𝑑𝑖2 2
= ∑ 𝐹𝑖𝑘
𝑘=1
Le cosinus² de l’individu n°i sur le facteur (Fk), qui désigne la qualité de représentation de
2
2
𝐹𝑖𝑘
𝐶𝑂𝑆𝑖𝑘 = 2
𝑑𝑖
Un individu est parfaitement représenté lorsque nous prenons en compte l’ensemble des (p)
𝑝
2
∑ 𝐶𝑂𝑆𝑖𝑘 =1
𝑘=1
En pratique, on s’intéressera à la somme cumulée sur les (q) premiers facteurs pour savoir si un
individu est bien représenté dans l’espace factoriel que l’on s’est choisi.
Méthodes Factorielles 63
ACP 55
𝑞
2 2
𝐶𝑂𝑆𝑖(𝑞) = ∑ 𝐶𝑂𝑆𝑖𝑘
𝑘=1
Pour les COS2, je conseille habituellement aux étudiants de regarder en priorité les individus qui
présentent une valeur anormalement faible (par rapport aux autres) sur le cumul des (q) facteurs
analysés. Cela indique qu’ils présentent des particularités qui les distinguent de la « tendance »
Dans le code Python qui suit, nous calculons tout d’abord la distance à l’origine de chaque individu
de deux manières : dans l’espace des variables centrées et réduites, dans l’espace factoriel
#affichage de contrôle
print([Link]([Link]([Link]([disto,distoBis])),index=[Link]))
0 1
Modele
Alfasud TI 8.225176 8.225176
Audi 100 6.673755 6.673755
Simca 1300 2.159327 2.159327
Citroen GS Club 6.780145 6.780145
Fiat 132 1.169124 1.169124
Lancia Beta 1.134950 1.134950
Peugeot 504 1.512793 1.512793
Renault 16 TL 5.636826 5.636826
Renault 30 21.789657 21.789657
Toyota Corolla 16.290143 16.290143
Alfetta 1.66 4.456770 4.456770
Princess 1800 1.952513 1.952513
Datsun 200L 11.112624 11.112624
Taunus 2000 2.452986 2.452986
Rancho 1.963373 1.963373
Mazda 9295 0.684521 0.684521
Opel Rekord 6.083119 6.083119
Lada 1300 7.922198 7.922198
Les résultats sont cohérents, c’est toujours rassurant. Au-delà du COS2 qui nous calculerons
tout de suite après, nous remarquons le rôle important de la Renault 30, la Toyota Corolla et
Méthodes Factorielles 64
ACP 56
Datsun 200L. C’est sans surprise que nous les retrouvons aux extrémités de la première
composante principale.
Nous formons les COS2 et nous comparons avec ceux fournis directement par la classe PCA.
0 1
Modele
Alfasud TI 0.556218 0.387670
Audi 100 0.365334 0.349406
Simca 1300 0.580284 0.210694
Citroen GS Club 0.976992 0.001879
Fiat 132 0.156579 0.413826
Lancia Beta 0.081555 0.033900
Peugeot 504 0.309202 0.575488
Renault 16 TL 0.673539 0.170535
Renault 30 0.892431 0.051920
Toyota Corolla 0.975219 0.003426
Alfetta 1.66 0.042978 0.820652
Princess 1800 0.530947 0.362855
Datsun 200L 0.778390 0.028137
Taunus 2000 0.704819 0.096496
Rancho 0.243273 0.410469
Mazda 9295 0.217336 0.185337
Opel Rekord 0.861900 0.001790
Lada 1300 0.926052 0.002607
0 1
Modele
Alfasud TI 0.556218 0.387670
Audi 100 0.365334 0.349406
Simca 1300 0.580284 0.210694
Citroen GS Club 0.976992 0.001879
Fiat 132 0.156579 0.413826
Lancia Beta 0.081555 0.033900
Peugeot 504 0.309202 0.575488
Renault 16 TL 0.673539 0.170535
Renault 30 0.892431 0.051920
Toyota Corolla 0.975219 0.003426
Alfetta 1.66 0.042978 0.820652
Princess 1800 0.530947 0.362855
Datsun 200L 0.778390 0.028137
Taunus 2000 0.704819 0.096496
Rancho 0.243273 0.410469
Mazda 9295 0.217336 0.185337
Opel Rekord 0.861900 0.001790
Lada 1300 0.926052 0.002607
Le cumul sur les deux premiers facteurs est plus intéressant puisque nous avons fait le choix de
Méthodes Factorielles 65
ACP 57
#cumul sur les 2 premiers facteurs
print([Link]([Link](acp.row_cos2_[:,:2],axis=1),index=[Link]))
0 1
Modele
Alfasud TI 0.556218 0.943889
Audi 100 0.365334 0.714741
Simca 1300 0.580284 0.790978
Citroen GS Club 0.976992 0.978871
Fiat 132 0.156579 0.570405
Lancia Beta 0.081555 0.115454
Peugeot 504 0.309202 0.884690
Renault 16 TL 0.673539 0.844075
Renault 30 0.892431 0.944351
Toyota Corolla 0.975219 0.978645
Alfetta 1.66 0.042978 0.863630
Princess 1800 0.530947 0.893802
Datsun 200L 0.778390 0.806527
Taunus 2000 0.704819 0.801315
Rancho 0.243273 0.653742
Mazda 9295 0.217336 0.402674
Opel Rekord 0.861900 0.863690
Lada 1300 0.926052 0.928659
La Lancia Beta ne suit pas la tendance générale visiblement, seule 11% de l’information qu’elle
véhicule (hum !) est captée par les (q=2) premiers facteurs. En revenant au tableau de données,
on se rend compte qu’elle est assez particulière par rapport aux autres : son petit moteur
(cylindrée) n’est pas vraiment en phase avec ce que l’on attendrait en termes de puissance,
Contributions (CTR). Les contributions sont également basées sur le carré des coordonnées
1
factorielles, mais normalisées par la variance restituée (au facteur près) pour que leur somme
𝑛
par composante soit égale à 1. Elles expriment l’importance relative des individus dans la
2
𝐹𝑖𝑘
𝐶𝑇𝑅𝑖𝑘 =
𝑛 × 𝜆𝑘
Avec
∑ 𝐶𝑇𝑅𝑖𝑘 = 1
𝑖=1
Méthodes Factorielles 66
ACP 58
Dans le cas des contributions, notre œil devrait être attiré par les valeurs fortes. Elles indiquent
les individus déterminants dans la lecture des composantes. Ils permettent d’asseoir les
interprétations. On devra se méfier néanmoins des influences anormalement élevées, elles sont
Nous calculons les contributions sur les 2 premiers facteurs (en pourcentage), puis nous
comparons de nouveau les résultats avec ceux de l’outil PCA. Tout va pour le mieux.
0 1
Modele
Alfasud TI 5.749254 20.693307
Audi 100 3.063951 15.132933
Simca 1300 1.574636 2.952519
Citroen GS Club 8.324360 0.082697
Fiat 132 0.230046 3.139789
Lancia Beta 0.116318 0.249686
Peugeot 504 0.587817 5.649867
Renault 16 TL 4.771099 6.238372
Renault 30 24.436884 7.341856
Toyota Corolla 19.964025 0.362185
Alfetta 1.66 0.240708 23.735669
Princess 1800 1.302765 4.597791
Datsun 200L 10.870129 2.029163
Taunus 2000 2.172668 1.536130
Rancho 0.600229 5.230043
Mazda 9295 0.186956 0.823327
Opel Rekord 6.588764 0.070658
Lada 1300 9.219391 0.134007
0 1
Modele
Alfasud TI 5.749254 20.693307
Audi 100 3.063951 15.132933
Simca 1300 1.574636 2.952519
Citroen GS Club 8.324360 0.082697
Fiat 132 0.230046 3.139789
Lancia Beta 0.116318 0.249686
Peugeot 504 0.587817 5.649867
Renault 16 TL 4.771099 6.238372
Renault 30 24.436884 7.341856
Toyota Corolla 19.964025 0.362185
Alfetta 1.66 0.240708 23.735669
Princess 1800 1.302765 4.597791
Datsun 200L 10.870129 2.029163
Taunus 2000 2.172668 1.536130
Rancho 0.600229 5.230043
Mazda 9295 0.186956 0.823327
Méthodes Factorielles 67
ACP 59
Opel Rekord 6.588764 0.070658
Lada 1300 9.219391 0.134007
L’outil propose un affichage graphique des (nb_values) contributions les plus importantes selon
les facteurs (num_axis) (Figure 14). Solution pratique lorsque la taille du jeu de données est
importante. Dans une étude réelle, il faudrait se poser des questions sur le rôle de la Renault 30.
C’est la seule routière du lot finalement, la seule équipée d’un moteur V6 de surcroît.
Remarque : Nous comprenons aisément au regard des formules que les individus situés aux
extrémités des facteurs sont les mieux représentés (COS2) et sont les plus influents (CTR).
Puisque l’analyse en composantes principales est duale par nature, il existe une relation entre
les coordonnées factorielles des individus (𝐹𝑖𝑘 ) et celles des variables [les corrélations, 𝑟𝑗 (𝐹𝑘 )] via
Pour obtenir les coordonnées de l’individu n°i sur le facteur (Fk) à partir des coordonnées des
𝑝
1
𝐹𝑖𝑘 = ∑ 𝑧𝑖𝑗 × 𝑟𝑗 (𝐹𝑘 )
√𝜆𝑘 𝑗=1
Méthodes Factorielles 68
ACP 60
Nous vérifions cela très facilement sous Python. Les coordonnées ainsi calculées pour le 1er
facteur correspondent parfaitement aux coordonnées des individus fournies par l’outil PCA.
0 1
Modele
Alfasud TI -2.138924 -2.138924
Audi 100 1.561459 1.561459
Simca 1300 -1.119385 -1.119385
Citroen GS Club -2.573742 -2.573742
Fiat 132 0.427855 0.427855
Lancia Beta -0.304238 -0.304238
Peugeot 504 0.683928 0.683928
Renault 16 TL -1.948493 -1.948493
Renault 30 4.409735 4.409735
Toyota Corolla -3.985782 -3.985782
Alfetta 1.66 0.437658 0.437658
Princess 1800 1.018175 1.018175
Datsun 200L 2.941080 2.941080
Taunus 2000 1.314880 1.314880
Rancho -0.691111 -0.691111
Mazda 9295 0.385709 0.385709
Opel Rekord 2.289768 2.289768
Lada 1300 -2.708574 -2.708574
Inversement, il est possible d’obtenir les coordonnées des variables 𝑟𝑗 (𝐹𝑘 ) à partir de celles des
individus (𝐹𝑖𝑘 ) :
𝑛
1
𝑟𝑗 (𝐹𝑘 ) = ∑ 𝑧𝑖𝑗 × 𝐹𝑖𝑘
𝑛 √𝜆𝑘 𝑖=1
0 1
CYL 0.893464 0.893464
PUISS 0.886858 0.886858
LONG 0.886155 0.886155
LARG 0.813536 0.813536
POIDS 0.905187 0.905187
VMAX 0.754710 0.754710
Méthodes Factorielles 69
ACP 61
Ces relations légitiment la lecture conjointe des cartes des variables et des individus c.-à-d.
pour expliquer les positions relatives entre les individus, on s’intéresse aux directions exprimées
par les corrélations des variables avec les axes. Par exemple, la Renault 30 et la Toyota Corolla
s’opposent sur le premier axe (Figure 13) à cause du différentiel de cylindrée (Figure 11).
Biplot. Pour aller plus loin, certains outils proposent un graphique « biplot », assez séduisant au
demeurant, pour représenter simultanément les individus et les variables. Il ne doit pas nous
induire en erreur. Pour les individus, nous raisonnons en positions relatives dans le repère ; pour
les variables, nous raisonnons en directions. Mais les proximités entre individus et variables
n’ont aucun sens. Une fois cette précaution assimilée, nous représentons ci-dessous le
Annoncer par exemple à la lecture de ce graphique que la Renault 30 serait puissante (proche de
PUISS) mais légère (éloigné de POIDS) est erroné. Dire en revanche que le 1er facteur est défini
positivement par l’ensemble des variables, et que la Renault 30, située à son extrémité-est,
Méthodes Factorielles 70
ACP 62
1.4 Reconstitution des données
L’ACP préserve au mieux les distances entre individus et les corrélations entre les variables dans
façon approximative - les valeurs initiales des données en se focalisant sur les formes
essentielles captées sur les composantes. Ce faisant, elle évacue le bruit résiduel contenu dans
les données. Cette fonctionnalité est souvent mise en avant dans le traitement d’images, lors
des opérations de compression avec perte, que l’on essaie de contrôler avec la détermination de
la taille de la dimensionnalité à retenir. Elle est moins mise en avant sur les données tabulaires
usuelles. Pourtant, je lui vois au moins une propriété très intéressante, un peu à la manière des
auto-encodeurs (« Auto-encodeur avec Keras sous Python », novembre 2019), elle contribue à
l’identification des observations atypiques par comparaison entre les valeurs observées et
Revenons sur quelques formules importantes pour décrypter le mécanisme. Les coordonnées
𝐹(𝑝) = 𝑍 𝑎(𝑝)
Où (Z) est la matrice des données centrées et réduites, de dimension (n, p) ; F(p) les coordonnées
factorielles sur l’ensemble des (p) facteurs (n, p) ; a(p) est la matrice des vecteurs propres (p,p),
Il est très facile de calculer les coordonnées dans l’espace originel à partir des coordonnées
𝑇
𝑍 = 𝐹(𝑝) 𝑎(𝑝)
Nous avons une approximation si l’on ne prend que les (q < p) premiers facteurs :
𝑍̂ = 𝐹(𝑞) 𝑎(𝑞)
𝑇
Sachant que les variables ont été centrées et réduits avec la formule :
Méthodes Factorielles 71
ACP 63
𝑥𝑖𝑗 − 𝑥̅𝑗
𝑧𝑖𝑗 =
𝜎𝑗
Nous souhaitons reconstituer les données initiales à partir des (q = 2) premiers facteurs pour les
données « Autos ». L’objet PCA nous fournit tous les éléments de calculs. Nous affichons pour
contrôle les vecteurs propres (𝑎𝑗𝑘 ). Si elles ne sont pas directement disponibles, n’oublions pas
𝑟𝑗 (𝐹𝑘 )
que nous pouvons les obtenir à partir des corrélations des variables aux facteurs [ 𝑎𝑗𝑘 = ].
√𝜆𝑘
[[ 0.42493602 -0.12419108]
[ 0.42179441 -0.41577389]
[ 0.42145993 0.41181773]
[ 0.38692224 0.446087 ]
[ 0.43051198 0.24267581]
[ 0.35894427 -0.6198626 ]]
A partir des moyennes et écarts-type stockées par l’objet lors de la réalisation de l’ACP, nous
formons les valeurs reconstituées, puis nous affichons les valeurs initiales pour comparaisons.
Méthodes Factorielles 72
ACP 64
#moyennes
print(acp.means_)
#écarts-type
print(acp.std_)
#déstandardisation et décentrage
XC = [Link]()
Méthodes Factorielles 73
ACP 65
Princess 1800 1798 82 445 172 1160 158
Datsun 200L 1998 115 469 169 1370 160
Taunus 2000 1993 98 438 170 1080 167
Rancho 1442 80 431 166 1129 144
Mazda 9295 1769 83 440 165 1095 165
Opel Rekord 1979 100 459 173 1120 173
Lada 1300 1294 68 404 161 955 140
Attardons-nous sur la Lancia Beta qui était mal représentée dans le premier plan factoriel avec
un COS2 de 11.54% (section 1.3.3). On sait pourquoi maintenant. Par rapport à ses caractéristiques
(vitesse, puissance, dimensions) qui la place plutôt parmi les berlines familiales de l’époque, elle
devrait présenter une cylindrée plus élevée (1575.8 cm3 estimée vs. 1297 cm3 observée).
La projection des individus supplémentaires (ou illustratifs selon la finalité poursuivie) est une
de nouveau individus par rapport à ceux (les individus actifs, l’échantillon d’apprentissage,
− Situer les positions des individus qui ont été collectés après coup.
− Identifier parmi ces individus ceux dont les caractéristiques diffèrent significativement
exemple, dans les années 70, voir comment se placent les véhicules du bloc de l’est aurait
pu être intéressant. Il y a déjà une Lada dans les individus actifs, mais on pourrait
analyser les caractéristiques des Skoda, Tatra, Dacia et autres Trabant (de l’époque) en
− Intégrer après coup les observations jugées trop atypiques ou influentes, qui étaient
Méthodes Factorielles 74
ACP 66
Renault 30 des calculs par exemple, du fait de son influence très marquée sur les 2
Les coefficients des vecteurs propres (ajk) font office de paramètres dans la fonction de
projection permettant de calculer les coordonnées d’un individu supplémentaire (i*) sur le
facteur (Fk) :
Où (𝑧𝑖 ∗ 𝑗 ) est la valeur centrée et réduite de (𝑥𝑖 ∗ 𝑗 ) avec les paramètres (moyenne, écart-type)
𝑥𝑖 ∗𝑗 − 𝑥̅𝑗
𝑧𝑖 ∗𝑗 =
𝜎𝑗
Certains logiciels comme TANAGRA fournit ainsi les coefficients standardisés (ajk) et les
paramètres de centrage et réduction pour qu’il soit possible de réaliser le déploiement à l’aide
d’autres outils (je demande aux étudiants de le faire sous Excel pour qu’ils décryptent bien le
mécanisme).
Figure 16 - Coefficients et paramètres pour le déploiement sous TANAGRA - ACP - Données "Autos"
On peut même imaginer produire une fonction de projection avec des coefficients bruts (qui
s’appliquent directement sur les variables originelles, sans transformations préalables) pour
faciliter le déploiement.
Où
Méthodes Factorielles 75
ACP 67
𝑎𝑗𝑘
− 𝑏𝑗𝑘 = pour (j ≥ 1) ;
𝜎𝑗
𝑎𝑗𝑘 × 𝑥̅ 𝑗
− 𝑏0𝑘 = − ∑𝑝𝑗=1 𝜎𝑗
Nous souhaitons positionner deux véhicules supplémentaires dans le plan factoriel : une
On connaît bien ces véhicules (304 S, petite sportive ; 604, routière statutaire), on imagine très
bien leurs voisinages respectifs. Voyons si l’ACP saura les positionner correctement.
La fonction « .transform() » de l’objet PCA fait merveille ici, nous pouvons lui envoyer la
description brute des individus supplémentaires, sans préparation préalable. Nous obtenons les
Nous les plaçons dans le plan factoriel pour localiser leurs voisinages parmi les observations
actives.
#points actifs
for i in range(n):
[Link](acp.row_coord_[i,0],acp.row_coord_[i,1],[Link][i],color="dimgray")
Méthodes Factorielles 76
ACP 68
#points illutratifs
for i in range([Link][0]):
[Link](coordSup[i,0],coordSup[i,1],[Link][i],color="blue")
[Link]()
Oui, la « 304 S » est une petite sportive, a l’instar de l’Alfasud TI (première version). Quant à la
604, elle était bien une concurrente directe de la Renault 30. Ces résultats confortent la
Pour identifier les « nouveautés » c.-à-d. les individus supplémentaires dont les
Méthodes Factorielles 77
ACP 69
𝑞
2
𝐹𝑖𝑘
𝑇𝑖2 =∑
𝜆𝑘
𝑘=1
𝑛(𝑛 − 𝑞) 2
𝑇
𝑞(𝑛2 − 1) 𝑖
… suit une loi de Fisher à (q, n-q) degrés de liberté. On peut dès lors définir une zone de
confiance au niveau 95%. Une observation supplémentaire est considérée atypique lorsque
𝑞(𝑛2 − 1)
𝑇𝑖2 ≥ 𝐹 (𝑞, 𝑛 − 𝑞)
𝑛(𝑛 − 𝑞) 0.95
2 2
𝐹𝑖1 𝐹𝑖2 𝑞(𝑛2 − 1)
+ = 𝐹 (𝑞, 𝑛 − 𝑞)
𝜆1 𝜆2 𝑛(𝑛 − 𝑞) 0.95
Pour en dessiner les contours autour de l’origine, nous devons en déterminer le diamètre sur
sont égales à :
𝑒1 = 2√𝜆1 × 𝑐 = 12.0
{
𝑒2 = 2 √𝜆2 × 𝑐 = 5.28
Sous Python, nous calculons les diamètres en abscisse et ordonnée pour les données « Autos ».
Méthodes Factorielles 78
ACP 70
3.63372346759163
#seuil
c = (q*(n**2-1))/(n*(n-q))*pf
print(c)
8.150643611334003
#étendue en abscisse
e1 = 2*[Link](acp.eig_[0][0]*c)
print(e1)
12.005471835819806
#étendue en ordonnée
e2 = 2*[Link](acp.eig_[0][1]*c)
print(e2)
5.282975914670268
#points actifs
for i in range(n):
[Link](acp.row_coord_[i,0],acp.row_coord_[i,1],[Link][i],color="dimgray")
#points illutratifs
for i in range([Link][0]):
[Link](coordSup[i,0],coordSup[i,1],[Link][i],color="blue")
[Link]()
Méthodes Factorielles 79
ACP 71
Figure 18 - Ellipse de confiance - Données "Autos"
La Peugeot 604 est en dehors de l’ellipse de confiance pour le niveau de 95% que l’on s’est choisi.
Ce résultat n’est pas étonnant lorsqu’on revient sur les données. Elle possède les valeurs plus
élevées de cylindrée (à égalité avec la Renault 30), puissance, longueur, largeur (idem Audi 100),
poids et vitesse maximum (idem Renault 30). Elle est « hors norme » en ce sens.
Les variables illustratives ont pour vocation de renforcer l’interprétation des composantes. Elles
ne sont pas utilisées pour leur construction, elles interviennent seulement après coup pour
mieux comprendre et commenter les résultats. Pour l’exemple des données « Autos », nous
avons utilisé en variables actives les caractéristiques intrinsèques des véhicules (largeur, poids,
puissance, etc.) pour élaborer les facteurs. Nous nous appuyons ensuite sur des variables
Méthodes Factorielles 80
ACP 72
(rapport poids-puissance) pour entériner leurs positions relatives dans la représentation
factorielle.
Pour les données « Autos », nous chargeons la 3ème feuille de calcul composée des variables
#variables illustratives
varIllus = pandas.read_excel("Data_Methodes_Factorielles.xlsx",sheet_name="DATA_ACP_VAR_ILLUS",index_col=0)
print(varIllus)
L’idée est de conforter les résultats de l’ACP avec ces nouvelles variables. Les indicateurs utilisés
Corrélation. La corrélation avec les facteurs est l’indicateur naturel pour positionner une
variable supplémentaire quantitative dans le repère factoriel. Si (y) est la variable à analyser, le
coefficient s’écrit :
1 𝑛
∑𝑖=1(𝑦𝑖 − 𝑦̅)(𝐹𝑖𝑘 − 𝐹̅𝑘 )
𝑟𝑦 (𝐹𝑘 ) = 𝑛
𝜎𝑦 × 𝜎𝐹𝑘
1 𝑛
∑𝑖=1(𝑦𝑖 − 𝑦̅) 𝐹𝑖𝑘
= 𝑛
𝜎𝑦 × √𝜆𝑘
Méthodes Factorielles 81
ACP 73
En pratique, il s’agit de faire simplement appel aux librairies de calcul du langage utilisé. Sous
[ 0.77247524 -0.08670844]
[-0.58903888 0.67254512]
Ainsi :
− Le prix est fortement lié positivement au premier facteur, lequel est déterminé par la
− Le rapport poids puissance est un indicateur de performance. Plus il est faible, plus sportif
est le véhicule. Il est quasi-également lié aux deux facteurs : négativement au premier, c’est
Insérer ces variables dans le cercle des corrélations donne une vision synthétique toujours bien
sympathique.
#variables actives
for i in range(p):
[Link](acp.col_coord_[i,0],acp.col_coord_[i,1],[Link][i],color="dimgray")
#variables illustratives
[Link](cPrix[0],cPrix[1],'PRIX',color='brown')
[Link](0,0,cPrix[0]-0.1,cPrix[1]+0.04,color='r',head_width=0.05)
[Link](cRPP[0],cRPP[1],'RPOIDPUIS',color="red")
[Link](0,0,cRPP[0]+0.2,cRPP[1]-0.1,color='r',head_width=0.05)
Méthodes Factorielles 82
ACP 74
ellipse = Ellipse((0,0),width=2,height=2,facecolor='none',edgecolor='silver',linestyle='--')
ax.add_patch(ellipse)
[Link]()
Figure 19 - Cercle des corrélations avec variables illustratives - ACP - Données "Autos"
calculer les COS2 pour indiquer la qualité de la représentation d’une variable c.-à-d. le carré de
la corrélation. L’intérêt est de disposer d’un indicateur non-signé qui s’additionne d’un facteur
à l’autre. Nous n’avons pas la garantie en revanche que la somme des COS2 sur l’ensemble des
facteurs soit égale à 1 comme nous pouvons le constater pour la variable PRIX.
#somme n’est pas égale à 1 sur l’ensemble des facteurs, et c’est normal
print([Link](cPrixBis**2))
0.7091028079636765
Remarque : Au cas où la question viendrait à l’esprit, calculer la contribution n’a aucun sens
pour les variables illustratives puisqu’elles n’ont pas participé à l’élaboration du repère factoriel.
Méthodes Factorielles 83
ACP 75
1.6.2 Variable illustrative qualitative
mai 2010 ; section 1.3) : l’objectif est d’apprécier dans quelle mesure les moyennes
conditionnelles définies par les groupes associés aux modalités sont suffisamment écartées sur
le facteur étudié. Nous disposons d’un indicateur global, le carré du rapport de corrélation ; et
d’un indicateur par groupe, la valeur test (« Interpréter la valeur-test », avril 2008).
1
𝑦̅𝑔𝑘 = ∑ 𝐹𝑖𝑘
𝑛𝑔
𝑖:𝑦𝑖 =𝑔
Concrètement, pour la variable illustrative FINITION sur le premier facteur, nous calculons les
<class '[Link]'>
Index: 18 entries, Alfasud TI to Lada-1300
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 FINITION 18 non-null object
1 PRIX 18 non-null int64
2 RPOIDPUIS 18 non-null float64
3 F1 18 non-null float64
4 F2 18 non-null float64
dtypes: float64(3), int64(1), object(1)
memory usage: 864.0+ bytes
None
Méthodes Factorielles 84
ACP 76
F1
FINITION
1_M 5
2_B 7
3_TB 6
F1
FINITION
1_M -2.000355
2_B 0.235313
3_TB 1.392430
F2
FINITION
1_M 0.022579
2_B -0.045271
3_TB 0.034001
#points actifs
for i in range(n):
[Link](acp.row_coord_[i,0],acp.row_coord_[i,1],[Link][i],color="gray")
[Link]()
Méthodes Factorielles 85
ACP 77
Figure 20 - Position des modalités de la variable illustrative "FINITION" - ACP - Données "Autos"
Remarque : Nous aurions pu également colorier les étiquettes selon le groupe d’appartenance
défini par « FINITION ». Mais le positionnement des moyennes conditionnelles est plus en phase
Manifestement, les niveaux de FINITION se distingue fortement sur le 1er facteur, quasiment
pas sur le 2nd. Elle (la finition) est intimement liée à la notion de « gamme » de véhicules mis en
avant lors de la lecture des facteurs. Plus le véhicule monte en gamme, plus élevé est le niveau
de finition.
Hélas, les résultats sont rarement aussi évidents en pratique. Il nous faut disposer d’un
moyennes conditionnelles autour de la moyenne globale. Sachant que les facteurs sont centrés
Méthodes Factorielles 86
ACP 78
et que leur variance est égale à la valeur propre, l’expression du carré du rapport de corrélation
𝑛𝑔
∑𝐺𝑔=1
𝜂𝐹2𝑘 /𝑦 = 𝑛 𝑦̅𝑔𝑘
𝜆𝑘
Nous les produisons très facilement à partir des effectifs et moyennes conditionnelles calculés
précédemment.
0.40248443698930525
0.0015465958518609553
Les indicateurs numériques confortent les impressions visuelles, c’est toujours rassurant : la
discrimination des groupes de FINTION est surtout tangible sur le 1 er facteur (𝜂𝐹21 /𝑦 = 0.402 vs.
𝜂𝐹22 /𝑦 = 0.0015).
Valeur-test. L’idée des « valeurs-test » (VT) s’apparente à un test post-hoc où l’on essaie de
distinguer les groupes qui s’écartent le plus de la moyenne globale c.-à-d. de l’origine puisque
les facteurs sont centrés. Dans le graphique ci-dessus, les groupes de FINITION se distinguent
surtout sur le 1er facteur. Soit. Mais certains sont plus écartés de l’origine que d’autres. Les
La formule est de nouveau simplifiée dans le cadre de l’ACP. La valeur-test pour la modalité
𝑦̅𝑔𝑘
𝑉𝑇𝑔𝑘 =
𝑛 − 𝑛𝑔 𝜆
√ 𝑛 − 1 × 𝑛𝑘
𝑔
Méthodes Factorielles 87
ACP 79
#valeurs test sur le 1er facteur
vt_1 = (m_1.F1)/[Link]((n-n_g.F1)/(n-1)*(acp.eig_[0][0]/n_g.F1))
print(vt_1)
FINITION
1_M -2.432717
2_B 0.368103
3_TB 1.930766
Name: F1, dtype: float64
Là aussi, la conclusion numérique concorde avec la perception visuelle (Figure 20). L’intérêt est
asymptotique de la statistique VT, pour un test bilatéral à 5%, on peut considérer que
l’écartement est significatif dès lors que (|𝑉𝑇| ≥ 2), … à peu près. Très à peu près même, parce
que d’une part les échantillons ne sont ni indépendants, ni appariés, le groupe est inclus dans
l’échantillon global ; d’autre part, tout écart paraît significatif dès que les effectifs augmentent.
En pratique, il faut plutôt voir la valeur-test comme un indicateur qui permet de hiérarchiser
rapidement les écarts d’un facteur à l’autre (le poids des facteurs sous forme de variance
restituée intervient dans les calculs), attirant notre attention sur les résultats qui seraient de
Cosinus carré – COS2. Le calcul de la qualité de représentation des modalités d’une variable
supplémentaire, le COS2, est analogue à celui des individus (section 1.3.3). Nous devons tout
d’abord produire la distance globale à l’origine de la modalité dans le repère initial, sur les
données (Z), elle nous servira de référence. Ensuite, pour chaque facteur, nous opposons la
1
𝑧̅𝑔𝑗 = ∑ 𝑧𝑖𝑗
𝑛𝑔
𝑖:𝑦𝑖 =𝑔
La distance à l’origine globale du groupe « g » dans l’espace des variables (z) centrées et
éventuellement réduites :
Méthodes Factorielles 88
ACP 80
𝑝
2
𝑑𝑔 = √∑ 𝑧̅𝑔𝑗
𝑗=1
Pour les données « Autos », réalisons les calculs pour la variable supplémentaire FINITION.
Nous créons tout d’abord un data frame temporaire pour accueillir les variables centrées et
#vérification
print([Link]())
<class '[Link]'>
Index: 18 entries, Alfasud TI to Lada-1300
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 CYL 18 non-null float64
1 PUISS 18 non-null float64
2 LONG 18 non-null float64
3 LARG 18 non-null float64
4 POIDS 18 non-null float64
5 VMAX 18 non-null float64
6 FINITION 18 non-null object
dtypes: float64(6), object(1)
memory usage: 1.8+ KB
#distance à l'origine
disto2_g = numpy.apply_along_axis(arr=mz_g.values,axis=1,func1d=lambda x:[Link](x**2))
print([Link](disto2_g))
Méthodes Factorielles 89
ACP 81
Pour obtenir le COS2 du groupe « g » sur le facteur (Fk), nous opposons le carré de la distance
locale (le carré de la moyenne conditionnelle sur le facteur) avec le carré de la distance globale :
2
2
𝑦̅𝑔𝑘
𝐶𝑂𝑆𝑔𝑘 =
𝑑𝑔2
Pour le 2nd :
Méthodes Factorielles 90
ACP 82