Utilizarea z-scorurilor pentru detectarea anomaliilor

Detecția anomaliilor în Python

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

Ce sunt z-scorurile?

  • Z-scorurile indică:
    • numărul de deviații standard față de medie

Exemplu:

  • Într-o distribuție cu $\mu=10$ și $\sigma=3$:
    • $Z_{16.3}=(16.3-10) / 3=2.1$

Formula pentru calculul z-scorurilor.

Detecția anomaliilor în Python

Regula Empirică și valorile aberante

Regula Empirică:

  • 68% se află în cadrul unui DST
  • 95% se află în cadrul a două DST-uri
  • 99,7% se află în cadrul a trei DST-uri

Valori aberante:

  • în afara limitei de trei DST-uri
  • în cozile distribuției (zonele roz laterale)

Imaginea Regulii Empirice de pe Wikipedia, prezentând o distribuție normală cu zonele de 68%, 95% și 99,7% adnotate cu marcaje.

1 Imagine din pagina Regulii Empirice de pe Wikipedia
Detecția anomaliilor în Python

Z-scoruri în cod

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
Detecția anomaliilor în Python

Z-scoruri în cod

is_over_3 = np.abs(scores) > 3

is_over_3[:5]
0    False
1    False
2    False
3    True
4    False
Detecția anomaliilor în Python

Z-scoruri în cod

outliers = sales[is_over_3]

print(len(outliers))
90
Detecția anomaliilor în Python

Dezavantajele z-scorurilor

  • Funcționează optim doar cu date normal distribuite
  • Media și deviația standard sunt influențate puternic de valori aberante
  • Performanța scade la prea multe valori aberante
Detecția anomaliilor în Python

Deviația Absolută față de Mediană (MAD)

  • Măsoară dispersia (variabilitatea)
  • Mai rezistent la valori aberante
  • Se bazează pe mediană

Formula pentru calculul scorului Deviației Absolute față de Mediană.

Detecția anomaliilor în Python

Scorul MAD

from scipy.stats import median_abs_deviation

mad_score = median_abs_deviation(sales)

mad_score
1081.925
Detecția anomaliilor în Python

Introducere în PyOD

  • Z-scorurile modificate cu MAD sunt implementate în PyOD
  • PyOD - bibliotecă Python pentru detectarea valorilor aberante:
    • oferă peste 40 de algoritmi
    • toți algoritmii au sintaxă similară sklearn
Detecția anomaliilor în Python

Z-scoruri modificate în cod

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)
Detecția anomaliilor în Python

Z-scoruri modificate în cod

labels = mad.fit_predict(sales_reshaped)

print(labels.sum())
83
Detecția anomaliilor în Python

Să exersăm!

Detecția anomaliilor în Python

Preparing Video For Download...