Détection d'anomalies avec les z-scores

Détection d’anomalies en Python

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

Qu'est-ce qu'un z-score ?

  • Les z-scores indiquent :
    • le nombre d'écarts types par rapport à la moyenne

Exemple :

  • Dans une distribution avec $\mu=10$ et $\sigma=3$ :
    • $Z_{16.3}=(16.3-10) / 3=2.1$

La formule pour calculer les z-scores.

Détection d’anomalies en Python

Règle empirique et valeurs aberrantes

La règle empirique :

  • 68 % dans un écart type
  • 95 % dans deux écarts types
  • 99,7 % dans trois écarts types

Valeurs aberrantes :

  • au-delà de trois écarts types
  • dans les queues (zones roses sur les côtés)

Une image de Wikipédia sur la règle empirique montrant une loi normale avec les parties 68 %, 95 % et 99,7 % annotées.

1 Image tirée de la page « Règle empirique » sur Wikipédia
Détection d’anomalies en Python

Z-scores en code

from scipy.stats import zscore


scores = zscore(sales) scores[:5]
0    0.910601
1   -1.018440
2   -0.049238
3    0.849103
4   -0.695373
Détection d’anomalies en Python

Z-scores en code

is_over_3 = np.abs(scores) > 3

is_over_3[:5]
0    False
1    False
2    False
3    True
4    False
Détection d’anomalies en Python

Z-scores en code

outliers = sales[is_over_3]

print(len(outliers))
90
Détection d’anomalies en Python

Limites des z-scores

  • Fonctionne surtout avec des données proches de la normale
  • Moyenne et écart type sont très sensibles aux valeurs aberrantes
  • Trop de valeurs aberrantes dégradent les performances
Détection d’anomalies en Python

Écart absolu médian (MAD)

  • Mesure la dispersion (variabilité)
  • Plus robuste aux valeurs aberrantes
  • Utilise la médiane au cœur du calcul

La formule pour calculer le score MAD (écart absolu médian).

Détection d’anomalies en Python

Score MAD

from scipy.stats import median_abs_deviation

mad_score = median_abs_deviation(sales)

mad_score
1081.925
Détection d’anomalies en Python

Introduction à PyOD

  • Les z-scores modifiés avec MAD sont implémentés dans PyOD
  • PyOD - bibliothèque Python pour la détection de valeurs aberrantes :
    • plus de 40 algorithmes
    • syntaxe proche de sklearn pour tous
Détection d’anomalies en Python

Z-scores modifiés en code

from pyod.models.mad import MAD

# threshold defaults to 3.5
mad = MAD(threshold=3.5)


# Reshape sales sales_reshaped = sales.values.reshape(-1, 1)
Détection d’anomalies en Python

Z-scores modifiés en code

labels = mad.fit_predict(sales_reshaped)

print(labels.sum())
83
Détection d’anomalies en Python

Passons à la pratique !

Détection d’anomalies en Python

Preparing Video For Download...