ACP (PCA) : réduire la dimension sans perdre l’essentiel
L’Analyse en Composantes Principales (ACP), ou Principal Component Analysis (PCA), est la technique de réduction de dimension linéaire la plus utilisée. Elle transforme un grand nombre de variables corrélées en un petit nombre de combinaisons linéaires non corrélées (les composantes principales) qui capturent le maximum de variance des données. Découvrez ses principes avec ISOSET, l’institut qui forme aux techniques de machine learning et d’exploration de données.
L’ACP est une méthode statistique qui permet de projeter des données de grande dimension (p variables) dans un espace de plus petite dimension (k composantes) tout en conservant un maximum de **variance** (donc d’information). Les axes de projection sont appelés **composantes principales**. Ils sont orthogonaux (non corrélés) et classés par ordre décroissant de variance expliquée. L’ACP est largement utilisée en visualisation, en réduction de bruit, en compression et en prétraitement pour d’autres algorithmes (clustering, régression). ISOSET propose des modules dédiés à l’ACP avec des cas concrets en finance, génomique et analyse marketing.
- Objectif – passer de p variables à k composantes (k << p).
- Critère – maximiser la variance projetée.
- Résultat – des composantes non corrélées, interprétables comme des « facteurs ».
L’ACP repose sur le calcul des **valeurs propres** et **vecteurs propres** de la matrice de covariance (ou de corrélation) des données centrées‑réduites. Les composantes principales sont les vecteurs propres associés aux plus grandes valeurs propres. La **variance expliquée** par une composante est proportionnelle à sa valeur propre. En pratique, on centre et réduit souvent les données (StandardScaler) pour que chaque variable ait la même importance, surtout si leurs unités sont différentes.
# ACP avec scikit‑learn (étapes clés)
from sklearn.decomposition import PCA
pca = PCA(n_components=2) # 2 composantes
X_pca = pca.fit_transform(X_scaled)
print(pca.explained_variance_ratio_) # part de variance par composante
ISOSET aide les entreprises à interpréter les loadings (coefficients) pour comprendre quelles variables originales contribuent à chaque composante.
La **variance expliquée cumulée** indique la proportion d’information conservée. On choisit le nombre de composantes de manière à atteindre un seuil (souvent 80%, 90% ou 95%). La méthode du **coude** (scree plot) consiste à tracer la variance expliquée par chaque composante et à chercher un éventuel « coude ». Trop de composantes, on perd l’avantage de la réduction ; trop peu, on perd trop d’information.
# Scree plot et variance cumulée
import matplotlib.pyplot as plt
pca_full = PCA().fit(X_scaled)
plt.plot(range(1, len(pca_full.explained_variance_ratio_)+1),
pca_full.explained_variance_ratio_.cumsum(), marker='o')
plt.axhline(y=0.95, color='r', linestyle='--')
plt.xlabel('Nombre de composantes')
plt.ylabel('Variance expliquée cumulée')
ISOSET enseigne la sélection robuste du nombre de composantes (validation croisée, règle de Kaiser).
- Visualisation en 2D/3D – projeter des données de haute dimension sur 2 ou 3 axes pour détecter des clusters, des outliers, des tendances.
- Réduction de bruit – les composantes mineures contiennent souvent du bruit ; les ignorer améliore la qualité du signal.
- Prétraitement pour clustering (K‑means) – l’ACP réduit la dimension et décorrèle les variables, améliorant la stabilité de K‑means.
- Compression d’images – représenter une image avec un petit nombre de composantes (reconstruction approchée).
- Analyse factorielle – interpréter les composantes comme des facteurs latents (ex: « taille », « puissance économique »).
# Visualisation 2D après ACP
import matplotlib.pyplot as plt
plt.scatter(X_pca[:,0], X_pca[:,1], c=y, cmap='viridis')
plt.xlabel('Composante 1')
plt.ylabel('Composante 2')
plt.title('Projection ACP')
ISOSET forme à l’interprétation graphique des projections ACP et à l’annotation des points.
L’ACP étant sensible aux échelles, il est impératif de **centrer** et souvent **réduire** les variables (moyenne = 0, écart‑type = 1) lorsque les unités sont différentes. À défaut, une variable avec une grande variance dominerait artificiellement les composantes. On utilise classiquement `StandardScaler` ou `MinMaxScaler` selon le contexte. ISOSET insiste sur cette étape critique dans ses ateliers pratiques.
📘 La méthode ISOSET – normaliser avant chaque ACP
ISOSET forme à la standardisation rigoureuse et à l’analyse des loadings pour une interprétation fiable.
L’ACP est une méthode **linéaire**. Si les données présentent des structures non linéaires (ex: enroulement, sphère), l’ACP échoue à capturer la variabilité intrinsèque. On utilise alors des méthodes non linéaires comme t‑SNE, UMAP, ou les auto‑encodeurs (deep learning). Néanmoins, l’ACP reste un excellent point de départ pour l’exploration et la visualisation initiale.
# Chargement, standardisation, ACP, visualisation
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
iris = load_iris()
X = iris.data
y = iris.target
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
plt.scatter(X_pca[:,0], X_pca[:,1], c=y, cmap='viridis')
plt.xlabel('PC1 (explained var: {:.2f}%)'.format(pca.explained_variance_ratio_[0]*100))
plt.ylabel('PC2 (explained var: {:.2f}%)'.format(pca.explained_variance_ratio_[1]*100))
plt.title('ACP sur le jeu de données Iris')
plt.show()
Les trois espèces d’Iris sont bien séparées sur les deux premières composantes, même si certaines restent mélangées. ISOSET propose des exercices similaires sur des données de marketing, de biométrie ou de capteurs industriels.
Les **loadings** (coefficients des variables originales dans la combinaison linéaire) permettent d’interpréter les composantes. Une composante avec des loadings élevés sur « âge », « revenu », « patrimoine » pourrait représenter un facteur « richesse ». On peut visualiser ces contributions via un graphique en barres ou un cercle des corrélations (dans le cas où l’ACP est faite sur variables centrées‑réduites).
# Afficher les loadings pour PC1
loadings = pca.components_.T * np.sqrt(pca.explained_variance_)
feature_names = iris.feature_names
for i, name in enumerate(feature_names):
print(f"{name}: {loadings[i,0]:.3f}")
Les témoignages d’anciens élèves d’ISOSET soulignent l’utilité pratique de l’ACP : *« L’ACP m’a permis de réduire 150 variables marketing à 5 facteurs interprétables. La visualisation a convaincu la direction, et nous avons lancé des campagnes ciblées bien plus efficaces. »*
🚀 ISOSET : maîtrisez l’ACP pour la réduction de dimension
L’institut ISOSET propose des formations complètes sur l’ACP (PCA) : fondements mathématiques, normalisation, sélection du nombre de composantes, interprétation des loadings, applications en visualisation et prétraitement. Avec des cas concrets et des formateurs experts, vous saurez exploiter la puissance de la réduction de dimension.
👉 Découvrez les formations ISOSET en analyse de données – simplifiez vos données sans perdre l’information.