Z-scores voor anomaliedetectie

Anomaly Detection in Python

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

Wat zijn z-scores?

  • Z-scores geven aan:
    • aantal SD vanaf het gemiddelde

Voorbeeld:

  • In een verdeling met $\mu=10$ en $\sigma=3$:
    • $Z_{16.3}=(16.3-10) / 3=2.1$

De formule om z-scores te berekenen.

Anomaly Detection in Python

De Empirical Rule en uitschieters

De Empirical Rule:

  • 68% valt binnen één SD
  • 95% valt binnen twee SD
  • 99,7% valt binnen drie SD

Uitschieters:

  • buiten de grens van drie SD
  • in de staarten (roze vlakken aan de randen)

Een afbeelding van de Empirical Rule van Wikipedia met een normale verdeling en de delen 68%, 95% en 99,7% gemarkeerd.

1 Afbeelding van de Empirical Rule-pagina op Wikipedia
Anomaly Detection in Python

Z-scores in 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
Anomaly Detection in Python

Z-scores in code

is_over_3 = np.abs(scores) > 3

is_over_3[:5]
0    False
1    False
2    False
3    True
4    False
Anomaly Detection in Python

Z-scores in code

outliers = sales[is_over_3]

print(len(outliers))
90
Anomaly Detection in Python

Nadelen van z-scores

  • Werkt het best bij normaal verdeelde data
  • Gemiddelde en SD sterk beïnvloed door uitschieters
  • Prestaties lijden bij te veel uitschieters
Anomaly Detection in Python

Median Absolute Deviation (MAD)

  • Meet spreiding (variatie)
  • Robuuster voor uitschieters
  • Gebruikt de mediaan

De formule om de Median Absolute Deviation te berekenen.

Anomaly Detection in Python

MAD-score

from scipy.stats import median_abs_deviation

mad_score = median_abs_deviation(sales)

mad_score
1081.925
Anomaly Detection in Python

Introductie tot PyOD

  • Aangepaste z-scores met MAD staan in PyOD
  • PyOD - Python Outlier Detection-library:
    • meer dan 40 algoritmes
    • alle algoritmes hebben sklearn-achtige syntax
Anomaly Detection in Python

Aangepaste z-scores in 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)
Anomaly Detection in Python

Aangepaste z-scores in code

labels = mad.fit_predict(sales_reshaped)

print(labels.sum())
83
Anomaly Detection in Python

Laten we oefenen!

Anomaly Detection in Python

Preparing Video For Download...