
Coefficient de corrélation de Spearman lorsque Pearson ne suffit pas
Concernant le coefficient de corrélation de Pearson, nous avons discuté de la manière dont il est utilisé pour mesurer la force de la relation linéaire entre deux variables (années d’expérience et salaire).
Toutes les relations entre les variables ne sont pas linéaires et la corrélation de Pearson fonctionne mieux lorsque la relation suit un modèle linéaire.
Lorsque la relation n’est pas linéaire mais évolue néanmoins de manière cohérente dans une direction, nous utilisons le coefficient de corrélation de Spearman pour capturer ce modèle.
Pour comprendre le coefficient de corrélation de Spearman, considérons le ensemble de données sur le marché aux poissons.
Cet ensemble de données comprend les attributs physiques de chaque poisson, tels que :
- Poids – le poids du poisson en grammes (ce sera notre variable cible)
- Longueur1, Longueur2, Longueur3 – différentes mesures de longueur (en cm)
- Hauteur – la hauteur du poisson (en cm)
- Largeur – la largeur diagonale du corps du poisson (en cm)
Nous devons prédire le poids du poisson en fonction de diverses mesures de longueur, de hauteur et de largeur.
C’était le même exemple que nous avons utilisé pour comprendre les mathématiques derrière la régression linéaire multiple dans un blog précédent, mais nous avons d’abord utilisé uniquement la hauteur et la largeur comme variables indépendantes pour obtenir les équations individuelles pour les pentes et les intersections.
Ici, nous essayons d’ajuster un modèle de régression linéaire multiple et nous avons cinq variables indépendantes et une variable cible.
Calculons maintenant le coefficient de corrélation de Pearson entre chaque variable indépendante et la variable cible.
Code:
import pandas as pd
# Load the Fish Market dataset
df = pd.read_csv("C:/Fish.csv")
# Drop the categorical 'Species' column
if 'Species' in df.columns:
df_numeric = df.drop(columns=['Species'])
else:
df_numeric = df.copy()
# Calculate Pearson correlation between each independent variable and the target (Weight)
target = 'Weight'
pearson_corr = df_numeric.corr(method='pearson')[target].drop(target) # drop self-correlation
pearson_corr.sort_values(ascending=False)
Le coefficient de corrélation de Pearson entre le poids et
- La longueur3 est 0,923044
- La longueur2 est 0,918618
- La longueur1 est 0,915712
- La largeur est de 0,886507
- La hauteur est de 0,724345
Parmi toutes les variables, Hauteur a le coefficient de corrélation de Pearson le plus faible, et on pourrait penser que nous devrions laisser tomber cette variable avant d’appliquer le modèle de régression linéaire multiple.
Mais avant cela, est-il correct de supprimer une variable indépendante basée sur le coefficient de corrélation de Pearson ?
Non.
Tout d’abord, regardons le nuage de points entre la taille et le poids.

À partir du nuage de points, nous pouvons observer qu’à mesure que la taille augmente, le poids augmente également, mais la relation n’est pas linéaire.
À des hauteurs plus petites, le poids augmente lentement. À des hauteurs plus élevées, elle augmente plus rapidement.
Ici, la tendance est non linéaire mais néanmoins monotone, car elle évolue dans une seule direction.
Étant donné que le coefficient de corrélation de Pearson suppose une relation linéaire (linéarité), il donne ici une valeur inférieure.
C’est là qu’intervient le coefficient de corrélation de Spearman.
Calculons maintenant le coefficient de corrélation de Spearman entre la taille et le poids.
Code:
import pandas as pd
from scipy.stats import spearmanr
# Load the dataset
df = pd.read_csv("C:/Fish.csv")
# Calculate Spearman correlation coefficient between Height and Weight
spearman_corr = spearmanr(df["Height"], df["Weight"])[0]
print(f"Spearman Correlation Coefficient: {spearman_corr:.4f}")
Le Le coefficient de corrélation de Spearman est de 0,8586.ce qui indique une forte relation positive entre la taille et le poids.
Cela signifie qu’à mesure que la taille du poisson augmente, son poids a également tendance à augmenter.
Plus tôt, nous avons eu un Coefficient de corrélation de Pearson de 0,72 entre la taille et le poids, ce qui sous-estime la relation réelle entre ces variables.
Si nous sélectionnons des fonctionnalités uniquement sur la base de la corrélation de Pearson et supprimons la fonctionnalité Hauteur, nous risquons de perdre une variable importante qui a en réalité une relation forte avec la cible, ce qui conduit à des prédictions moins pertinentes.
C’est là que le Coefficient de corrélation de Spearman aide, car il capture les tendances non linéaires mais monotones.
En utilisant la corrélation de Spearman, nous pouvons également décider des prochaines étapes, comme l’application de transformations telles que des valeurs log ou de décalage ou la prise en compte d’algorithmes tels que des arbres de décision ou des forêts aléatoires capables de gérer à la fois des relations linéaires et non linéaires.
Comme nous avons compris l’importance du coefficient de corrélation de Spearman, il est maintenant temps de comprendre les mathématiques qui le sous-tendent.
Comment le coefficient de corrélation de Spearman est-il calculé de manière à capturer la relation même lorsque les données sont non linéaires et monotones ?
Pour comprendre cela, considérons un échantillon de 10 points de l’ensemble de données.

Maintenant, nous trions les valeurs par ordre croissant dans chaque colonne, puis attribuons des classements.

Maintenant que nous avons classé la taille et le poids, nous ne les conservons pas dans l’ordre trié.
Chaque valeur doit revenir à sa place d’origine dans l’ensemble de données afin que le rang de taille de chaque poisson corresponde à son propre rang de poids.
Nous trions les colonnes uniquement pour attribuer des classements. Après cela, nous replaçons les rangs dans leur ordre d’origine, puis calculons la corrélation de Spearman en utilisant ces deux ensembles de rangs.

Ici, lors de l’attribution des rangs après avoir trié les valeurs par ordre croissant dans le Poids colonne, nous avons rencontré une égalité dans les rangs 5 et 6nous avons donc attribué aux deux valeurs la classement moyen de 5,5.
De même, nous avons constaté une autre égalité entre les rangs 7, 8, 9 et 10nous leur avons donc attribué à tous le classement moyen de 8,5.
Maintenant, nous calculons le Coefficient de corrélation de Spearmanqui est en fait le Corrélation de Pearson appliquée aux rangs.
Nous connaissons déjà la formule de calcul du coefficient de corrélation de Pearson.
\[
r = \frac{\text{Cov}(X, Y)}{s_X \cdot s_Y}
= \frac{\frac{1}{n – 1} \sum_{i=1}^{n} (X_i – \bar{X})(Y_i – \bar{Y})}
{\sqrt{\frac{1}{n – 1} \sum_{i=1}^{n} (X_i – \bar{X})^2} \cdot \sqrt{\frac{1}{n – 1} \sum_{i=1}^{n} (Y_i – \bar{Y})^2}}
\]
\[
= \frac{\sum_{i=1}^{n} (X_i – \bar{X})(Y_i – \bar{Y})}
{\sqrt{\sum_{i=1}^{n} (X_i – \bar{X})^2} \cdot \sqrt{\sum_{i=1}^{n} (Y_i – \bar{Y})^2}}
\]
Maintenant, la formule du coefficient de corrélation de Spearman est :
\[
r_s =
\frac{
\sum_{i=1}^{n}
\underbrace{(R_{X_i} – \bar{R}_X)}_{\text{Rank deviation of } X_i}
\cdot
\underbrace{(R_{Y_i} – \bar{R}_Y)}_{\text{Rank deviation of } Y_i}
}{
\sqrt{
\sum_{i=1}^{n}
\underbrace{(R_{X_i} – \bar{R}_X)^2}_{\text{Squared rank deviations of } X}
}
\cdot
\sqrt{
\sum_{i=1}^{n}
\underbrace{(R_{Y_i} – \bar{R}_Y)^2}_{\text{Squared rank deviations of } Y}
}
}
\]
\[
\begin{aligned}
\text{Where:} \\
R_{X_i} & = \text{ rank of the } i^\text{th} \text{ value in variable } X \\
R_{Y_i} & = \text{ rank of the } i^\text{th} \text{ value in variable } Y \\
\bar{R}_X & = \text{ mean of all ranks in } X \\
\bar{R}_Y & = \text{ mean of all ranks in } Y
\end{aligned}
\]
Calculons maintenant le coefficient de corrélation de Spearman pour les exemples de données.
\[
\textbf{Step 1: Ranks from the original data}
\]
\[
\begin{array}{c|cccccccccc}
R_{x_i} & 3 & 1 & 2 & 5 & 8 & 4 & 7 & 9 & 10 & 6 \\[2pt]
R_{y_i} & 1 & 2 & 4 & 5,5 & 8,5 & 3 & 5,5 & 8,5 & 8,5 & 8,5
\fin{tableau}
\]
\[
\textbf{Step 2: Formula of Spearman’s correlation (Pearson on ranks)}
\]
\[
\rho_s =
\frac{\sum_{i=1}^{n}\bigl(R_{x_i}-\bar{R_x}\bigr)\bigl(R_{y_i}-\bar{R_y}\bigr)}
{\sqrt{\sum_{i=1}^{n}\bigl(R_{x_i}-\bar{R_x}\bigr)^2} \;
\sqrt{\sum_{i=1}^{n}\bigl(R_{y_i}-\bar{R_y}\bigr)^2}},
\qquad n = 10
\]
\[
\textbf{Step 3: Mean of rank variables}
\]
\[
\bar{R_x} = \frac{3+1+2+5+8+4+7+9+10+6}{10} = \frac{55}{10} = 5.5
\]
\[
\bar{R_y} = \frac{1+2+4+5.5+8.5+3+5.5+8.5+8.5+8.5}{10}
= \frac{55.5}{10} = 5.55
\]
\[
\textbf{Step 4: Deviations and cross-products}
\]
\[
\begin{array}{c|c|c|c}
i & R_{x_i}-\bar{R_x} & R_{y_i}-\bar{R_y} & (R_{x_i}-\bar{R_x})(R_{y_i}-\bar{R_y}) \\ \hline
1 & -2.5 & -4.55 & 11.38 \\
2 & -4.5 & -3.55 & 15.98 \\
3 & -3.5 & -1.55 & 5.43 \\
4 & -0.5 & -0.05 & 0.03 \\
5 & 2.5 & 2.95 & 7.38 \\
6 & -1.5 & -2.55 & 3.83 \\
7 & 1.5 & -0.05 & -0.08 \\
8 & 3.5 & 2.95 & 10.33 \\
9 & 4.5 & 2.95 & 13.28 \\
10 & 0.5 & 2.95 & 1.48
\end{array}
\]
\[
\sum (R_{x_i}-\bar{R_x})(R_{y_i}-\bar{R_y}) = 68.0
\]
\[
\textbf{Step 5: Sum of squares for each rank variable}
\]
\[
\sum (R_{x_i}-\bar{R_x})^2 = 82.5,
\qquad
\sum (R_{y_i}-\bar{R_y})^2 = 82.5
\]
\[
\textbf{Step 6: Substitute into the formula}
\]
\[
\rho_s
= \frac{68.0}{\sqrt{(82.5)(82.5)}}
= \frac{68.0}{82.5}
= 0.824
\]
\[
\textbf{Step 7: Interpretation}
\]
\[
\rho_s = 0.824
\]
Une valeur de \( \rho_s = 0,824 \) montre une forte relation monotone positive entre la taille et le poids. À mesure que la taille augmente, le poids a également tendance à augmenter.
C’est ainsi que nous calculons le coefficient de corrélation de Spearman.
Nous avons également une autre formule pour calculer le coefficient de corrélation de Spearman, mais elle n’est utilisée que lorsqu’il n’y a pas d’égalité dans les rangs.
\[
\rho_s = 1 – \frac{6\sum d_i^2}{n(n^2 – 1)}
\]
où:
\[
\begin{aligned}
\rho_s & : \text{ Spearman correlation coefficient} \\[4pt]
d_i & : \text{ différence entre les rangs de chaque observation, } (R_{x_i} – R_{y_i}) \\[4pt]
n & : \text{ nombre total d’observations appariées}
\fin{aligné}
\]
En cas d’égalité, les différences de rang ne représentent plus les distances exactes entre les positions et nous calculons plutôt « ρ » à l’aide de la formule de « corrélation de Pearson sur les rangs ».
Ensemble de données
L’ensemble de données utilisé dans ce blog est le Ensemble de données du marché aux poissonsqui contient les mesures des espèces de poissons vendues sur les marchés, y compris des attributs tels que le poids, la taille et la largeur.
Il est accessible au public sur Kaggle et est sous licence Creative Commons Zéro (domaine public CC0) licence. Cela signifie qu’il peut être librement utilisé, modifié et partagé à la fois à des fins non commerciales et commerciales sans restriction.
Le coefficient de corrélation de Spearman nous aide à comprendre comment deux variables évoluent ensemble lorsque la relation n’est pas parfaitement linéaire.
En convertissant les données en classements, il montre dans quelle mesure une variable augmente à mesure que l’autre augmente, capturant toute tendance à la hausse ou à la baisse.
C’est très utile lorsque les données comportent des valeurs aberrantes, ne sont pas normalement distribuées ou lorsque la relation est monotone mais courbe.
J’espère que cet article vous a aidé à voir non seulement comment calculer le coefficient de corrélation de Spearman, mais aussi quand l’utiliser et pourquoi il s’agit d’un outil important dans l’analyse des données.
Merci d’avoir lu!



