Detectando outliers univariados

Detecção de Fraudes em R

Tim Verdonck

Professor Data Science at KU Leuven

Outliers

Um outlier é uma observação que se desvia do padrão da maioria dos dados. outlierfish Um outlier pode ser um alerta de fraude.

Detecção de Fraudes em R

Detecção de outliers

  • Uma ferramenta popular para detectar outliers é:

    • calcular o z-score de cada observação
    • marcar como outlier se o valor absoluto do z-score for maior que 3
  • O z-score $z_i$ da observação $x_i$ é calculado como:

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

  • $\overline{x}$ é a média amostral: $\overline{x}=\frac{1}{n}\sum_i x_i$
  • $s$ é o desvio padrão amostral: $s= \sqrt{\frac{1}{n-1}\sum_i(x_i-\hat{\mu})^2}$
Detecção de Fraudes em R

O conjunto loginc contém rendas mensais de 10 pessoas após transformação log:

loginc: 7.876 7.681 7.628  ...  7.764 9.912 # <-- a última renda é claramente um outlier!
  • (1) Calcule o z-score de cada observação
Mean <- mean(loginc)
Sd <- sd(loginc)
zscore <- (loginc - Mean) / Sd
  • (2) Verifique se os z-scores são maiores que 3 em valor absoluto
abs(zscore) > 3
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
  • Nenhum outlier foi identificado com esses z-scores!
Detecção de Fraudes em R

Estatística robusta

  • Métodos estatísticos clássicos dependem de suposições (normalidade), mas mesmo um único outlier pode influenciar muito as conclusões e levar a resultados enganosos.
  • A estatística robusta gera resultados confiáveis mesmo quando há outliers e oferece ferramentas automáticas de detecção.
  • "É perfeito usar rotineiramente métodos clássicos e robustos, e só se preocupar quando diferirem o bastante para importar... Mas, quando diferirem, você deve pensar seriamente." J.W. Tukey (1979)
Detecção de Fraudes em R

Estimadores de posição: média e mediana

Média amostral: $$\overline{x}=\frac{1}{n}\sum_i x_i$$

mean(loginc)

mean(loginc9)
7.986447

7.772392

loginc9 contém as mesmas observações de loginc, exceto o outlier.

Ordene $n$ observações da menor para a maior; a mediana amostral, $Med(X_n)$, é a observação $(n+1)/2$ (se $n$ é ímpar) ou a média entre as observações $n/2$ e $n/2+1$ (se $n$ é par).

median(loginc)
7.816658
median(loginc9)
7.764296
Detecção de Fraudes em R

Estimadores de escala: sd

(1) Desvio padrão amostral: $$s= \sqrt{\frac{1}{n-1}\sum_i (x_i-\hat{\mu})^2}$$

sd(loginc)
0.6976615
sd(loginc9)
0.1791729
Detecção de Fraudes em R

Estimadores de escala: mad, IQR

(2) Desvio absoluto mediano (MAD): $$Mad(X_n)=1.4826Med(|x_i-Med(X_n)|)$$

(3) Intervalo interquartil (normalizado): $$IQR(X_n)= IQR = 0.7413(Q_3-Q_1)$$ onde $Q_1$ e $Q_3$ são o primeiro e o terceiro quartis dos dados

IQR(loginc)/1.349
0.2056784
mad(loginc)
0.2396159
mad(loginc9)
0.201305
IQR(loginc9)/1.349
0.1839295
Detecção de Fraudes em R

Z-scores robustos para detectar outliers

Substitua pelos estimadores robustos para calcular z-scores robustos:

$$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 ## Verificar outliers
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
robzscore[10] ## Z-score robusto do outlier
8.748523
Detecção de Fraudes em R

Boxplot

  • O boxplot de Tukey também é uma ferramenta popular para identificar outliers
  • A observação é marcada como outlier se estiver fora da cerca do boxplot $$[Q_1-1.5IQR; Q_3+1.5IQR]$$

boxplotexplanation

Detecção de Fraudes em R

Exemplo: tempo de internação (LOS) no hospital

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

Detecção de Fraudes em R

Boxplot ajustado

  • Em distribuições assimétricas, o boxplot pode marcar muitos pontos normais como outliers.
  • O boxplot ajustado pela assimetria corrige isso usando uma medida robusta de assimetria para definir a cerca (Hubert e Vandervieren, 2008)

chisqbp

Detecção de Fraudes em R

Exemplo LOS: boxplot ajustado

Outliers segundo o boxplot ajustado:

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

Estatísticas calculadas pelo boxplot ajustado:

adjboxStats(los)$stats
2  4  8 13 47
Detecção de Fraudes em R

Exemplo LOS: boxplot vs. boxplot ajustado

LOS_boxplot

LOS_adjbox

Detecção de Fraudes em R

Vamos praticar!

Detecção de Fraudes em R

Preparing Video For Download...