Wykrywanie anomalii za pomocą z-scorów

Wykrywanie anomalii w Pythonie

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

Czym są z-scory?

  • Z-scory informują:
    • o liczbie odchyleń standardowych od średniej

Przykład:

  • Dla rozkładu z $\mu=10$ i $\sigma=3$:
    • $Z_{16.3}=(16.3-10) / 3=2.1$

Wzór do obliczania z-scorów.

Wykrywanie anomalii w Pythonie

Reguła empiryczna i wartości odstające

Reguła empiryczna:

  • 68% mieści się w jednym odchyleniu standardowym
  • 95% mieści się w dwóch odchyleniach standardowych
  • 99,7% mieści się w trzech odchyleniach standardowych

Wartości odstające:

  • poza granicą trzech odchyleń standardowych
  • w ogonach rozkładu (różowe obszary po bokach)

Grafika z Wikipedii przedstawiająca regułę empiryczną: rozkład normalny z zaznaczonymi obszarami 68%, 95% i 99,7%.

1 Grafika ze strony Empirical Rule na Wikipedii
Wykrywanie anomalii w Pythonie

Z-scory w kodzie

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
Wykrywanie anomalii w Pythonie

Z-scory w kodzie

is_over_3 = np.abs(scores) > 3

is_over_3[:5]
0    False
1    False
2    False
3    True
4    False
Wykrywanie anomalii w Pythonie

Z-scory w kodzie

outliers = sales[is_over_3]

print(len(outliers))
90
Wykrywanie anomalii w Pythonie

Wady z-scorów

  • Działa najlepiej dla rozkładu normalnego
  • Średnia i odchylenie standardowe są podatne na wartości odstające
  • Wydajność spada przy dużej liczbie wartości odstających
Wykrywanie anomalii w Pythonie

Medianowe odchylenie bezwzględne (MAD)

  • Mierzy rozproszenie (zmienność)
  • Bardziej odporny na wartości odstające
  • Oparty na medianie

Wzór do obliczania wskaźnika Median Absolute Deviation.

Wykrywanie anomalii w Pythonie

Wskaźnik MAD

from scipy.stats import median_abs_deviation

mad_score = median_abs_deviation(sales)

mad_score
1081.925
Wykrywanie anomalii w Pythonie

Wprowadzenie do PyOD

  • Zmodyfikowane z-scory z MAD są zaimplementowane w PyOD
  • PyOD – biblioteka do wykrywania wartości odstających w Pythonie:
    • ponad 40 algorytmów
    • składnia zgodna ze sklearn
Wykrywanie anomalii w Pythonie

Zmodyfikowane z-scory w kodzie

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)
Wykrywanie anomalii w Pythonie

Zmodyfikowane z-scory w kodzie

labels = mad.fit_predict(sales_reshaped)

print(labels.sum())
83
Wykrywanie anomalii w Pythonie

Czas na ćwiczenia!

Wykrywanie anomalii w Pythonie

Preparing Video For Download...