Uso degli z-score per il rilevamento di anomalie

Rilevamento delle anomalie in Python

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

Cosa sono gli z-score?

  • Gli z-score indicano:
    • quante DEV ST dalla media

Esempio:

  • In una distribuzione con $\mu=10$ e $\sigma=3$:
    • $Z_{16.3}=(16.3-10) / 3=2.1$

La formula per calcolare gli z-score.

Rilevamento delle anomalie in Python

Regola empirica e outlier

La Regola empirica:

  • 68% entro una DEV ST
  • 95% entro due DEV ST
  • 99,7% entro tre DEV ST

Outlier:

  • fuori dal limite di tre DEV ST
  • finiscono nelle code (aree rosa ai lati)

Immagine della Regola empirica da Wikipedia con una normale e le parti 68%, 95% e 99,7% annotate.

1 Immagine dalla pagina Regola empirica su Wikipedia
Rilevamento delle anomalie in Python

Z-score nel codice

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
Rilevamento delle anomalie in Python

Z-score nel codice

is_over_3 = np.abs(scores) > 3

is_over_3[:5]
0    False
1    False
2    False
3    True
4    False
Rilevamento delle anomalie in Python

Z-score nel codice

outliers = sales[is_over_3]

print(len(outliers))
90
Rilevamento delle anomalie in Python

Limiti degli z-score

  • Funziona bene solo con dati ~normali
  • Media e DEV ST sono molto influenzate dagli outlier
  • Troppe anomalie peggiorano le prestazioni
Rilevamento delle anomalie in Python

Median Absolute Deviation (MAD)

  • Misura la dispersione (variabilità)
  • Più robusta agli outlier
  • Usa la mediana alla base

La formula per calcolare la Median Absolute Deviation.

Rilevamento delle anomalie in Python

Punteggio MAD

from scipy.stats import median_abs_deviation

mad_score = median_abs_deviation(sales)

mad_score
1081.925
Rilevamento delle anomalie in Python

Introduzione a PyOD

  • Gli z-score modificati con MAD sono in PyOD
  • PyOD - libreria Python per l’Outlier Detection:
    • offre 40+ algoritmi
    • tutti con sintassi tipo sklearn
Rilevamento delle anomalie in Python

Z-score modificati nel codice

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)
Rilevamento delle anomalie in Python

Z-score modificati nel codice

labels = mad.fit_predict(sales_reshaped)

print(labels.sum())
83
Rilevamento delle anomalie in Python

Ayo berlatih!

Rilevamento delle anomalie in Python

Preparing Video For Download...