Calculer le Z-score ((x - mean) / std)
Introduction
Le Z-score est une mesure statistique qui indique à quel point une valeur est éloignée de la moyenne d’un ensemble de données, en nombre d’écarts-types. C’est un outil fondamental en analyse de données, notamment pour la détection des valeurs aberrantes et la standardisation des variables.
Définition
Le Z-score d’une valeur x se calcule selon la formule :
Z = (x - μ) / σ
- μ : la moyenne de la variable
- σ : l’écart-type (standard deviation)
Cette mesure permet de savoir si une valeur est typique ou non par rapport au reste de la distribution :
- Z proche de 0 : valeur proche de la moyenne
- Z > 0 : valeur au-dessus de la moyenne
- Z < 0 : valeur en dessous de la moyenne
Exemple de calcul manuel
Considérons un petit jeu de données :
valeurs = [10, 12, 14, 13, 11]
Calculons la moyenne :
μ = (10 + 12 + 14 + 13 + 11) / 5 = 12
Calculons l’écart-type (population) :
σ = sqrt(((10-12)² + (12-12)² + (14-12)² + (13-12)² + (11-12)²) / 5)
= sqrt((4 + 0 + 4 + 1 + 1) / 5) = sqrt(10 / 5) = sqrt(2) ≈ 1.41
Calculons maintenant le Z-score de la valeur 10 :
Z = (10 - 12) / 1.41 ≈ -1.41
La valeur 10 est donc à environ 1.41 écarts-types sous la moyenne.
Exemple de calcul avec Python (Pandas)
import pandas as pd
from scipy.stats import zscore
# Exemple de DataFrame
df = pd.DataFrame({
"valeurs": [10, 12, 14, 13, 11, 100]
})
# Calcul du Z-score pour chaque valeur
df["z_score"] = zscore(df["valeurs"])
print(df)
Dans cet exemple, la dernière valeur (100) aura un Z-score élevé car elle s’éloigne fortement de la moyenne des autres observations.
Utilisation : détecter des valeurs extrêmes
Un Z-score supérieur à 3 ou inférieur à -3 est généralement considéré comme une valeur extrême (outlier). En pratique, on peut ajuster ce seuil selon les exigences de précision du domaine étudié.
Standardisation avec le Z-score
La standardisation est le processus qui consiste à transformer chaque valeur d’une variable en son Z-score. Cela permet de :
- Mettre toutes les variables sur une échelle comparable
- Supprimer l’influence de l’unité de mesure
- Améliorer les performances de nombreux algorithmes (régression, k-means, SVM…)
En pratique, une variable standardisée a :
- Une moyenne égale à 0
- Un écart-type égal à 1
Exemple de standardisation avec Python
import pandas as pd
from scipy.stats import zscore
# Données originales
df = pd.DataFrame({
"revenu": [40000, 42000, 50000, 52000, 100000]
})
# Standardisation
df["revenu_zscore"] = zscore(df["revenu"])
print(df)
Résultat :
revenu revenu_zscore
0 40000 -1.115
1 42000 -1.010
2 50000 -0.509
3 52000 -0.404
4 100000 3.038
La dernière valeur (100000) a un Z-score de 3.038, ce qui la qualifie de valeur aberrante dans de nombreux cas.
Implémentation manuelle
mean = df["revenu"].mean()
std = df["revenu"].std()
df["revenu_zscore_manual"] = df["revenu"].apply(lambda x: (x - mean) / std)
Cette méthode donne les mêmes résultats que scipy.stats.zscore
(en utilisant l’écart-type corrigé).
Limites
- Le Z-score suppose que les données suivent une distribution normale ou quasi normale.
- Il est sensible aux valeurs extrêmes : un outlier peut fausser la moyenne et l’écart-type, et donc affecter les Z-scores calculés.
Conclusion
Le Z-score est un outil fondamental pour mesurer l’écart d’une valeur par rapport à la moyenne, en écart-types. Il est très utile pour détecter les valeurs extrêmes, comparer des données sur différentes échelles et préparer les données pour les algorithmes de machine learning. Cependant, il convient de vérifier la distribution des données avant de s’y fier entièrement, car sa robustesse est limitée en présence de valeurs aberrantes.