Anomalidetektion med z-poäng

Avvikelsedetektering i Python

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

Vad är z-poäng?

  • Z-poäng anger:
    • antalet standardavvikelser från medelvärdet

Exempel:

  • I en fördelning med $\mu=10$ och $\sigma=3$:
    • $Z_{16.3}=(16.3-10) / 3=2.1$

Formeln för att beräkna z-poäng.

Avvikelsedetektering i Python

Empiriska regeln och avvikare

Empiriska regeln:

  • 68 % ligger inom en standardavvikelse
  • 95 % ligger inom två standardavvikelser
  • 99,7 % ligger inom tre standardavvikelser

Avvikare:

  • utanför tremstandardavvikelsesgränsen
  • hamnar i svansarna (rosa områden på sidorna)

En bild av den empiriska regeln från Wikipedia som visar en normalfördelning med 68 %-, 95 %- och 99,7 %-delarna markerade med stöd.

1 Bild från sidan om den empiriska regeln på Wikipedia
Avvikelsedetektering i Python

Z-poäng i kod

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
Avvikelsedetektering i Python

Z-poäng i kod

is_over_3 = np.abs(scores) > 3

is_over_3[:5]
0    False
1    False
2    False
3    True
4    False
Avvikelsedetektering i Python

Z-poäng i kod

outliers = sales[is_over_3]

print(len(outliers))
90
Avvikelsedetektering i Python

Nackdelar med z-poäng

  • Fungerar bäst med normalfördelade data
  • Medelvärde och standardavvikelse påverkas kraftigt av avvikare
  • Prestanda försämras vid för många avvikare
Avvikelsedetektering i Python

Median Absolute Deviation (MAD)

  • Mäter spridning (variabilitet)
  • Mer robust mot avvikare
  • Bygger på medianen

Formeln för att beräkna MAD-poäng (Median Absolute Deviation).

Avvikelsedetektering i Python

MAD-poäng

from scipy.stats import median_abs_deviation

mad_score = median_abs_deviation(sales)

mad_score
1081.925
Avvikelsedetektering i Python

Introduktion till PyOD

  • Modifierade z-poäng med MAD finns i PyOD
  • PyOD – Python Outlier Detection-biblioteket:
    • erbjuder fler än 40 algoritmer
    • alla algoritmer har sklearn-liknande syntax
Avvikelsedetektering i Python

Modifierade z-poäng i kod

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)
Avvikelsedetektering i Python

Modifierade z-poäng i kod

labels = mad.fit_predict(sales_reshaped)

print(labels.sum())
83
Avvikelsedetektering i Python

Nu kör vi en övning!

Avvikelsedetektering i Python

Preparing Video For Download...