Identifiera univariata avvikare

Bedrägeridetektering i R

Tim Verdonck

Professor Data Science at KU Leuven

Avvikare

En avvikare är en observation som skiljer sig markant från majoriteten av data. outlierfish En avvikare kan vara en varningssignal för bedrägeri.

Bedrägeridetektering i R

Avvikardetektering

  • Ett populärt verktyg för avvikardetektering är

    • att beräkna z-poäng för varje observation
    • flagga observationen som avvikare om z-poängens absolutvärde är större än 3
  • Z-poängen $z_i$ för observation $x_i$ beräknas som:

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

  • $\overline{x}$ är stickprovsmedelvärdet: $\overline{x}=\frac{1}{n}\sum_i x_i$
  • $s$ är stickprovsstandardavvikelsen: $s= \sqrt{\frac{1}{n-1}\sum_i(x_i-\hat{\mu})^2}$
Bedrägeridetektering i R

Datamängden loginc innehåller månadsinkomster för 10 personer efter logaritmtransformation:

loginc: 7.876 7.681 7.628  ...  7.764 9.912 # <-- last income is clearly an outlier!
  • (1) Beräkna z-poängen för varje observation
Mean <- mean(loginc)
Sd <- sd(loginc)
zscore <- (loginc - Mean) / Sd
  • (2) Kontrollera om z-poängen är större än 3 i absolutvärde
abs(zscore) > 3
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
  • Inga avvikare identifieras med dessa z-poäng!
Bedrägeridetektering i R

Robust statistik

  • Klassiska statistiska metoder förutsätter (normalfördelning), men redan en enstaka avvikare kan påverka slutsatserna avsevärt och ge missvisande resultat.
  • Robust statistik ger tillförlitliga resultat även när data innehåller avvikare och möjliggör automatisk avvikardetektering.
  • "Det är utmärkt att rutinmässigt använda både klassiska och robusta metoder, och bara oroa sig när de skiljer sig tillräckligt mycket för att det ska spela roll... Men när de skiljer sig bör du tänka noga." J.W. Tukey (1979)
Bedrägeridetektering i R

Lägesestimatorerna: medelvärde och median

Stickprovsmedelvärde: $$\overline{x}=\frac{1}{n}\sum_i x_i$$

mean(loginc)

mean(loginc9)
7.986447

7.772392

loginc9 innehåller samma observationer som loginc men utan avvikaren.

Ordna $n$ observationer från minst till störst. Stickprovsmedian, $Med(X_n)$, är den $(n+1)/2$:te observationen (om $n$ är udda) eller medelvärdet av den $n/2$:te och $n/2+1$:te observationen (om $n$ är jämnt).

median(loginc)
7.816658
median(loginc9)
7.764296
Bedrägeridetektering i R

Spridningsestimatorer: sd

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

sd(loginc)
0.6976615
sd(loginc9)
0.1791729
Bedrägeridetektering i R

Spridningsestimatorer: mad, IQR

(2) Medianabsolutavvikelse: $$Mad(X_n)=1.4826Med(|x_i-Med(X_n)|)$$

(3) Interkvartilsavstånd (normerat): $$IQR(X_n)= IQR = 0.7413(Q_3-Q_1)$$ där $Q_1$ och $Q_3$ är datamängdens första och tredje kvartil

IQR(loginc)/1.349
0.2056784
mad(loginc)
0.2396159
mad(loginc9)
0.201305
IQR(loginc9)/1.349
0.1839295
Bedrägeridetektering i R

Robusta z-poäng för avvikardetektering

Använd de robusta estimatorerna för att beräkna robusta z-poäng:

$$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
Bedrägeridetektering i R

Lådagram

  • Tukeys lådagram är också ett populärt verktyg för att identifiera avvikare
  • En observation flaggas som avvikare om den hamnar utanför lådagrammets stängsel $$[Q_1-1.5IQR; Q_3+1.5IQR]$$

boxplotexplanation

Bedrägeridetektering i R

Exempel: vårdtid (LOS) på sjukhus

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

boxplotlos_ggplot

Bedrägeridetektering i R

Anpassat lådagram

  • Vid asymmetriska fördelningar kan lådagrammet flagga många vanliga punkter som avvikare.
  • Det skevanpassade lådagrammet korrigerar för detta genom att använda ett robust snedhetsmått vid beräkning av stängslet (Hubert och Vandervieren, 2008)

chisqbp

Bedrägeridetektering i R

Exempel LOS: anpassat lådagram

Avvikare enligt anpassat lådagram:

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

Statistik beräknad av anpassat lådagram:

adjboxStats(los)$stats
2  4  8 13 47
Bedrägeridetektering i R

Exempel LOS: lådagram vs anpassat lådagram

LOS_boxplot

LOS_adjbox

Bedrägeridetektering i R

Nu kör vi en övning!

Bedrägeridetektering i R

Preparing Video For Download...