Rilevamento di outlier univariati

Rilevamento delle frodi in R

Tim Verdonck

Professor Data Science at KU Leuven

Outlier

Un outlier è un’osservazione che devia dal modello della maggior parte dei dati. pesce fuori dal gruppo Un outlier può segnalare frodi.

Rilevamento delle frodi in R

Rilevamento outlier

  • Uno strumento comune per trovare outlier è

    • calcolare lo z-score per ogni osservazione
    • segnare come outlier se lo z-score ha valore assoluto > 3
  • Lo z-score $z_i$ per l’osservazione $x_i$ si calcola così:

$$z_i=\frac{x_i-\hat{\mu}}{\hat{\sigma}} = \frac{x_i-\overline{x}}{s}$$

  • $\overline{x}$ è la media campionaria: $\overline{x}=\frac{1}{n}\sum_i x_i$
  • $s$ è la deviazione standard campionaria: $s= \sqrt{\frac{1}{n-1}\sum_i(x_i-\hat{\mu})^2}$
Rilevamento delle frodi in R

Il dataset loginc contiene i redditi mensili di 10 persone dopo trasformazione log:

loginc: 7.876 7.681 7.628  ...  7.764 9.912 # <-- l’ultimo reddito è chiaramente un outlier!
  • (1) Calcola lo z-score di ogni osservazione
Mean <- mean(loginc)
Sd <- sd(loginc)
zscore <- (loginc - Mean) / Sd
  • (2) Verifica se gli z-score sono > 3 in valore assoluto
abs(zscore) > 3
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
  • Nessun outlier identificato con questi z-score!
Rilevamento delle frodi in R

Statistiche robuste

  • I metodi statistici classici si basano su assunzioni (di normalità), ma anche un solo outlier può influenzare molto le conclusioni e portare a risultati fuorvianti.
  • Le statistiche robuste danno risultati affidabili anche con outlier e offrono strumenti automatici per rilevarli.
  • "È ideale usare di routine metodi classici e robusti, e preoccuparsi solo quando differiscono in modo rilevante... Ma quando differiscono, pensa con attenzione". J.W. Tukey (1979)
Rilevamento delle frodi in R

Stimatori di posizione: media e mediana

Media campionaria: $$\overline{x}=\frac{1}{n}\sum_i x_i$$

mean(loginc)

mean(loginc9)
7.986447

7.772392

loginc9 contiene le stesse osservazioni di loginc tranne l’outlier.

Ordina $n$ osservazioni dalla più piccola alla più grande, poi la mediana campionaria, $Med(X_n)$, è la $(n+1)/2$-esima (se $n$ è dispari) o la media tra la $n/2$-esima e la $(n/2+1)$-esima (se $n$ è pari).

median(loginc)
7.816658
median(loginc9)
7.764296
Rilevamento delle frodi in R

Stimatori di scala: sd

(1) Deviazione standard campionaria: $$s= \sqrt{\frac{1}{n-1}\sum_i (x_i-\hat{\mu})^2}$$

sd(loginc)
0.6976615
sd(loginc9)
0.1791729
Rilevamento delle frodi in R

Stimatori di scala: mad, IQR

(2) Deviazione assoluta mediana (MAD): $$Mad(X_n)=1.4826Med(|x_i-Med(X_n)|)$$

(3) Intervallo interquartile (normalizzato): $$IQR(X_n)= IQR = 0.7413(Q_3-Q_1)$$ dove $Q_1$ e $Q_3$ sono il primo e terzo quartile

IQR(loginc)/1.349
0.2056784
mad(loginc)
0.2396159
mad(loginc9)
0.201305
IQR(loginc9)/1.349
0.1839295
Rilevamento delle frodi in R

Z-score robusti per rilevare outlier

Sostituisci con stimatori robusti per calcolare gli z-score robusti:

$$z_i=\frac{x_i-\hat{\mu}}{\hat{\sigma}} =\frac{x_i-Med(X_n)}{Mad(X_n)}$$

robzscore <- (loginc - median(loginc)) / mad(loginc)

abs(robzscore) > 3 ## Check for outliers
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
robzscore[10] ## Robust z-score of the outlier
8.748523
Rilevamento delle frodi in R

Boxplot

  • Il boxplot di Tukey è uno strumento diffuso per trovare outlier
  • Un’osservazione è outlier se è fuori dalle barriere del boxplot $$[Q_1-1.5IQR; Q_3+1.5IQR]$$

spiegazione boxplot

Rilevamento delle frodi in R

Esempio: durata degenza (LOS) in ospedale

boxplot(los, col = "blue", ylab = "Lenght of Stay (LOS)")$out
59  33  42  67  35  47 102  36  27  31  27  30  29  32  37  27  38

boxplot LOS (ggplot)

Rilevamento delle frodi in R

Boxplot aggiustato

  • Con distribuzioni asimmetriche, il boxplot può segnalare molti punti regolari come outlier.
  • Il boxplot corretto per asimmetria usa una misura robusta di skewness per definire le barriere (Hubert e Vandervieren, 2008)

boxplot corretto

Rilevamento delle frodi in R

Esempio LOS: boxplot aggiustato

Outlier secondo il boxplot aggiustato:

library(robustbase)
adjbox(los)$out
59  67 102

Statistiche calcolate dal boxplot aggiustato:

adjboxStats(los)$stats
2  4  8 13 47
Rilevamento delle frodi in R

Esempio LOS: boxplot vs boxplot aggiustato

Boxplot LOS

Boxplot LOS aggiustato

Rilevamento delle frodi in R

Ayo berlatih!

Rilevamento delle frodi in R

Preparing Video For Download...