OUJOOD.COM
Qu'est-ce que la corrélation et comment la lire
La corrélation entre deux variables mesure dans quelle mesure elles évoluent ensemble. Elle prend une valeur entre -1 et 1 :
- 1 : corrélation parfaite positive — quand l'une augmente, l'autre augmente proportionnellement.
- -1 : corrélation parfaite négative — quand l'une augmente, l'autre diminue proportionnellement.
- 0 : aucune relation linéaire détectable.
En pratique, vous cherchez des valeurs au-delà de 0.7 ou en dessous de -0.7 pour considérer une corrélation comme forte. Entre 0.3 et 0.7, la relation est modérée. En dessous de 0.3, elle est faible. Ces seuils sont des conventions, pas des règles absolues.
Calculer la matrice de corrélation avec corr()
df.corr() calcule le coefficient de Pearson entre toutes les paires de colonnes numériques. Le résultat est une matrice symétrique : la diagonale vaut toujours 1 (chaque variable est parfaitement corrélée avec elle-même).
import pandas as pd
import numpy as np
np.random.seed(42)
n = 100
df = pd.DataFrame({
"température": np.random.uniform(15, 35, n),
"ventes_glaces": np.random.uniform(50, 200, n),
"ventes_manteaux": np.random.uniform(10, 80, n),
"humidité": np.random.uniform(30, 90, n)
})
# Simuler une vraie relation
df["ventes_glaces"] = df["température"] * 5 + np.random.normal(0, 15, n)
df["ventes_manteaux"] = -df["température"] * 3 + 120 + np.random.normal(0, 10, n)
# Matrice de corrélation complète
print(df.corr().round(2))
La matrice retournée est symétrique : la corrélation entre température et ventes_glaces est la même que entre ventes_glaces et température. La diagonale vaut 1 dans tous les cas. Vous lisez la matrice en cherchant les valeurs proches de 1 ou -1 hors de la diagonale.
Extraire les corrélations les plus fortes
Sur un DataFrame avec de nombreuses colonnes, la matrice complète est difficile à lire. Voici comment extraire les paires les plus corrélées, en excluant la diagonale et les doublons.
import pandas as pd
import numpy as np
np.random.seed(42)
n = 100
df = pd.DataFrame({
"température": np.random.uniform(15, 35, n),
"humidité": np.random.uniform(30, 90, n),
})
df["ventes_glaces"] = df["température"] * 5 + np.random.normal(0, 15, n)
df["ventes_manteaux"] = -df["température"] * 3 + 120 + np.random.normal(0, 10, n)
matrice = df.corr()
# Conserver uniquement le triangle supérieur (sans diagonale)
masque = np.triu(np.ones(matrice.shape), k=1).astype(bool)
corr_paires = (
matrice.where(masque)
.stack()
.reset_index()
)
corr_paires.columns = ["variable_1", "variable_2", "corrélation"]
# Trier par corrélation absolue décroissante
corr_paires["abs_corr"] = corr_paires["corrélation"].abs()
print(corr_paires.sort_values("abs_corr", ascending=False).drop(columns="abs_corr"))
Ce tableau classe toutes les paires par force de corrélation (en valeur absolue), ce qui est bien plus lisible que la matrice complète sur un grand jeu de données. C'est le format à utiliser quand vous cherchez à identifier rapidement les relations les plus marquées entre des dizaines de variables.
Corrélation de Spearman pour les relations non linéaires
Pearson mesure les relations linéaires. Si la relation entre deux variables est monotone mais non linéaire (par exemple exponentielle), la corrélation de Spearman est plus adaptée. Elle se calcule sur les rangs plutôt que sur les valeurs brutes.
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame({
"expérience_ans": np.arange(1, 21),
"salaire": np.exp(np.arange(1, 21) * 0.15) * 1000 + np.random.normal(0, 200, 20)
})
# Pearson : mesure la relation linéaire
print("Pearson :", df.corr(method="pearson").round(3).iloc[0, 1])
# Spearman : mesure la relation monotone (linéaire ou non)
print("Spearman :", df.corr(method="spearman").round(3).iloc[0, 1])
# Kendall : alternative robuste aux valeurs aberrantes
print("Kendall :", df.corr(method="kendall").round(3).iloc[0, 1])
Sur une relation exponentielle, Spearman retournera une valeur plus proche de 1 que Pearson, parce qu'il capte la relation monotone même si elle n'est pas linéaire. Si vous ne savez pas quelle méthode utiliser, comparer Pearson et Spearman donne une indication sur la nature de la relation : si Spearman est bien supérieur, la relation est probablement non linéaire.
Par carabde | Mis à jour le 26 avril 2026