Mesurez un lien monotone avec Spearman et Kendall
Plus on révise, meilleure est la note. Mais pas forcément de façon linéaire : les premières heures rapportent beaucoup, les suivantes de moins en moins. Le coefficient de corrélation de Pearson mesure l’alignement des points sur une droite ; il sous-estime donc un lien fort mais courbé, et il se laisse facilement abuser par un seul point extrême.
Les corrélations de rang mesurent autre chose : à quel point les deux variables montent ensemble, quelle que soit la forme exacte de la relation. Ce chapitre présente les deux plus utilisées, celle de Spearman et celle de Kendall.
Le fil rouge : heures de révision et notes
Section intitulée « Le fil rouge : heures de révision et notes »Huit étudiants ont noté leurs heures de révision avant un examen, puis leur note sur 20 :
| Étudiant | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| Heures | 2 | 4 | 5 | 7 | 8 | 10 | 12 | 15 |
| Note | 6 | 9 | 10 | 12 | 11 | 14 | 15 | 16 |
La relation est clairement croissante, avec un gain qui s’essouffle et une petite inversion (l’étudiant 5 a révisé plus que l’étudiant 4 et obtenu une note un peu plus basse).
Rappelons que la corrélation de Pearson vaut
où et sont les moyennes. Elle vaut ici . Elle mesure un lien linéaire et suppose, pour ses tests, une loi normale des deux variables (voir le cours de Statistiques).
La corrélation de Spearman : Pearson sur les rangs
Section intitulée « La corrélation de Spearman : Pearson sur les rangs »L’idée de Spearman est directe : on remplace chaque variable par ses rangs, puis on calcule la corrélation de Pearson sur ces rangs. On la note .
S’il n’y a pas d’ex aequo, une formule plus simple donne le même résultat :
où est la différence entre le rang de et le rang de , et le nombre d’observations.
vaut quand est une fonction strictement croissante de (quelle qu’elle soit), quand elle est strictement décroissante, et environ 0 quand il n’y a pas de tendance monotone.
La corrélation de Kendall : compter les paires
Section intitulée « La corrélation de Kendall : compter les paires »Kendall adopte un point de vue différent. Prenez deux étudiants et . La paire est :
- concordante si celui qui a le plus révisé a aussi la meilleure note, c’est-à-dire si ;
- discordante si c’est l’inverse, c’est-à-dire si .
Le tau de Kendall compare les nombres de paires concordantes et de paires discordantes :
où est le nombre total de paires. Son interprétation est très concrète : pour une paire tirée au hasard, .
Remarquez que (0,929) est plus petit que (0,976) sur les mêmes données. C’est la règle générale : les deux coefficients n’ont pas la même échelle, et est en général plus petit que . Pour une loi normale bivariée de corrélation , on a par exemple et : pour , et . Ne comparez donc jamais un à un .
Les ex aequo
Section intitulée « Les ex aequo »Avec des ex aequo, une paire peut n’être ni concordante ni discordante. La version tau-b, utilisée par défaut par scipy et par R, corrige le dénominateur :
où , est le nombre de paires ex aequo sur et le nombre de paires ex aequo sur . Sans ex aequo, . Pour Spearman, on donne le rang moyen aux ex aequo et on calcule Pearson sur les rangs (la formule avec n’est alors plus exacte).
Robustesse : quand Pearson se trompe
Section intitulée « Robustesse : quand Pearson se trompe »Deux situations montrent l’intérêt des corrélations de rang.
Une relation monotone mais courbe. Prenez et (une croissance exponentielle, 2, 4, 8, … , 256). Le lien est parfait : est entièrement déterminé par et croît avec lui. Pourtant, Pearson ne vaut que 0,85, car les points ne sont pas alignés. Spearman et Kendall valent exactement 1.
Un seul point aberrant. Prenez dix points sans aucune tendance, dont oscille autour de 5 (5,1 ; 4,8 ; 5,3 ; 4,9 ; 5,2 ; 5,0 ; 4,7 ; 5,4 ; 4,6 pour à 9), et ajoutez un dixième point, et (une erreur de saisie, par exemple).
| Sans le point aberrant | Avec le point aberrant | |
|---|---|---|
| Pearson | −0,22 | 0,52 |
| Spearman | −0,22 | 0,12 |
| Kendall | −0,17 | 0,07 |
Un seul point fait passer Pearson d’une légère corrélation négative à une corrélation positive « nette ». Pour les coefficients de rang, ce point n’est que « le plus grand » : son poids est borné, et la conclusion (pas de lien) ne change pas.
Tester l’absence de lien
Section intitulée « Tester l’absence de lien »Sous (les deux variables sont indépendantes), toutes les permutations des rangs de sont équiprobables : c’est ce qui rend ces tests libres de distribution.
- Loi exacte : pour de petits , on énumère les permutations. Pour notre fil rouge, seules 8 permutations sur donnent (l’identité et les 7 échanges de deux rangs voisins), d’où une p-valeur bilatérale exacte de . C’est aussi la p-valeur exacte de Kendall, puisque les permutations avec sont les mêmes.
- Approximations : pour Spearman, suit approximativement une loi de Student à degrés de liberté ; pour Kendall, sous , et est approximativement normal.
from scipy import stats
heures = [2, 4, 5, 7, 8, 10, 12, 15]notes = [6, 9, 10, 12, 11, 14, 15, 16]
print(stats.pearsonr(heures, notes)) # r ≈ 0.967print(stats.spearmanr(heures, notes)) # rho ≈ 0.976, p ≈ 3e-05 (approximation de Student)print(stats.kendalltau(heures, notes)) # tau ≈ 0.929, p ≈ 0.0004 (loi exacte)En R, une seule fonction, cor.test, avec l’argument method :
heures <- c(2, 4, 5, 7, 8, 10, 12, 15)notes <- c(6, 9, 10, 12, 11, 14, 15, 16)cor.test(heures, notes, method = "pearson")cor.test(heures, notes, method = "spearman") # S = 2 (somme des d²), rho = 0.976, p ≈ 0.0004cor.test(heures, notes, method = "kendall") # T = 27 (paires concordantes), tau = 0.929, p ≈ 0.0004Lequel choisir ?
Section intitulée « Lequel choisir ? »| Critère | Spearman | Kendall |
|---|---|---|
| Interprétation | Pearson sur les rangs | |
| Robustesse aux points extrêmes | bonne | meilleure (chaque paire compte pour 1) |
| Petits échantillons, nombreux ex aequo | correcte | meilleures propriétés, tau-b gère bien les ex aequo |
| Calcul | naïf, avec un tri astucieux | |
| Usage courant | exploration, sélection de variables | comparaison de classements, petits |
En data science, Spearman sert souvent à repérer des variables liées de façon monotone à la cible, et Kendall à comparer deux classements : le classement prédit par un moteur de recommandation et le classement réel, ou deux classements de modèles.
En résumé
Section intitulée « En résumé »- Pearson mesure un lien linéaire ; il est trompé par une relation courbe ou par un seul point extrême.
- Spearman est la corrélation de Pearson des rangs ; sans ex aequo, .
- Kendall compare paires concordantes et discordantes ; tau-b corrige les ex aequo.
- Les deux valent pour une relation strictement monotone et sont invariants par transformation croissante ; est en général plus petit que .
- Une corrélation de rang nulle signifie « pas de lien monotone », pas « pas de lien ».
scipy.stats.spearmanr,scipy.stats.kendalltau; en R,cor.test(..., method = "spearman")ou"kendall".
Exercices
Section intitulée « Exercices »Exercice · Deux jurys
facileDeux jurys classent six projets. Jury A : 1, 2, 3, 4, 5, 6. Jury B (pour les mêmes projets) : 2, 1, 4, 3, 6, 5. Calculez et .
Voir la solution
Les différences de rang valent toutes : , d’où
Paires : il y a paires. Les discordantes sont les trois paires inversées, (1, 2), (3, 4) et (5, 6) ; toutes les autres sont concordantes. , , . Les deux jurys sont largement d’accord ; on retrouve plus petit que .
En code
from scipy import stats
jury_A = [1, 2, 3, 4, 5, 6]jury_B = [2, 1, 4, 3, 6, 5]print(stats.spearmanr(jury_A, jury_B).statistic) # 0.829print(stats.kendalltau(jury_A, jury_B).statistic) # 0.6jury_A <- c(1, 2, 3, 4, 5, 6)jury_B <- c(2, 1, 4, 3, 6, 5)cor(jury_A, jury_B, method = "spearman") # 0.829cor(jury_A, jury_B, method = "kendall") # 0.6Exercice · Évaluer un classement prédit
moyenUn moteur de recommandation classe six articles dans l’ordre 3, 1, 2, 6, 4, 5, alors que leur ordre de pertinence réel est 1, 2, 3, 4, 5, 6 (autrement dit, l’article réellement le plus pertinent est placé en 3e position, etc.).
- Calculez entre classement prédit et classement réel.
- Interprétez-le comme une probabilité.
- Calculez .
Voir la solution
- Positions prédites : (3, 1, 2, 6, 4, 5). Une paire avec est discordante si la position de est plus grande que celle de . Paires discordantes : (1, 2) car , (1, 3) car , (4, 5) car , (4, 6) car . , , .
- Deux articles tirés au hasard sont dans le bon ordre avec une probabilité , et dans le mauvais ordre avec une probabilité ; est la différence des deux.
- Différences de rang : , , , , , . , .
En code
import itertoolsfrom scipy import stats
reel = [1, 2, 3, 4, 5, 6]predit = [3, 1, 2, 6, 4, 5] # position prédite de chaque article
# Paires discordantes, comptées une à uneD = sum((predit[i] - predit[j]) * (reel[i] - reel[j]) < 0 for i, j in itertools.combinations(range(6), 2))print(D, 15 - D) # D = 4, C = 11print(stats.kendalltau(reel, predit).statistic) # 0.467 (= 7/15)print(stats.spearmanr(reel, predit).statistic) # 0.657reel <- c(1, 2, 3, 4, 5, 6)predit <- c(3, 1, 2, 6, 4, 5) # position prédite de chaque article
# Paires discordantes, comptées une à unepaires <- combn(6, 2)D <- sum((predit[paires[1, ]] - predit[paires[2, ]]) * (reel[paires[1, ]] - reel[paires[2, ]]) < 0)c(D, 15 - D) # D = 4, C = 11cor(reel, predit, method = "kendall") # 0.467 (= 7/15)cor(reel, predit, method = "spearman") # 0.657Exercice · Choisir un coefficient
difficilePour chaque situation, dites quel coefficient vous calculeriez et pourquoi.
- Le lien entre la surface d’un appartement et son prix, sur 5 000 annonces, avec quelques annonces aberrantes (prix saisi en centimes).
- Le lien entre le niveau de satisfaction (très insatisfait à très satisfait, 5 niveaux) et le nombre de commandes, sur 40 clients.
- Le lien entre la dose d’un engrais et le rendement, sachant qu’au-delà d’une certaine dose l’engrais devient toxique.
Voir la solution
- Spearman (ou Kendall) : sur un grand échantillon, Spearman est rapide et robuste aux quelques prix aberrants, alors que Pearson serait fortement déformé. Mieux encore, nettoyer les erreurs de saisie avant tout calcul.
- Kendall tau-b : la satisfaction est ordinale avec seulement 5 niveaux, donc beaucoup d’ex aequo, et l’échantillon est petit. Tau-b gère bien les ex aequo.
- Aucun des trois ne convient seul : la relation monte puis descend (non monotone), donc Pearson, Spearman et Kendall peuvent être proches de 0 malgré un lien fort. Il faut tracer le nuage de points, puis modéliser la relation (régression avec un terme quadratique, par exemple) ou utiliser une mesure de dépendance générale comme l’information mutuelle.
En code
import numpy as npfrom scipy import stats
# Question 3 : un rendement qui monte puis descend avec la dose d'engraisdose = np.arange(0, 11) # doses 0 à 10rendement = 50 - (dose - 5) ** 2 # maximum à la dose 5, lien parfait
print(stats.pearsonr(dose, rendement).statistic) # 5e-18, soit 0 aux erreurs d'arrondi prèsprint(stats.spearmanr(dose, rendement).statistic) # 0.0print(stats.kendalltau(dose, rendement).statistic) # 0.0# Question 3 : un rendement qui monte puis descend avec la dose d'engraisdose <- 0:10rendement <- 50 - (dose - 5)^2 # maximum à la dose 5, lien parfait
cor(dose, rendement, method = "pearson") # 0cor(dose, rendement, method = "spearman") # 0cor(dose, rendement, method = "kendall") # 0