Fernando López-Torrijos Flórez y Jose Fernando Zea Castro.

Aplicaciones

La detección de anomalías es inherente al trabajo con datos, pero hay situaciones en las que es propio centrase en éstas:

Presentación de las técnicas tradicionales.

Las técnicas tradicionales están asociadas a métodos estadísticos robustos, entendido robusto como aquello que no se altera significativamente a pesar de la presencia de valores extremos o fuera de tendencia.

Análisis univariado.

El primer caso que se trabaja es la definición de un dato anómalo cuando se trabaja con una única variable a la vez.

El primer contexto en el que se encuentran es en el diagrama de caja o boxplot.

El Diagrama de caja se construye con base en los cuartiles (ver Figura ):

Cuartil 1 (q1): valor a partir del cual el 25% de los datos tienen un valor menor a éste. O leído al revés, el valor a partir del cual el 75% de los datos tienen un valor mayor a éste.

Ojo. El 25% hace referencia a la cantidad de datos, no a sus valores.

Cuartil 2 (q2): valor a partir del cual el 50% de los datos tienen un valor menor. Se denomina también mediana. Es un valor robusto frente a datos extremos, es decir, no se afecta por la presencia de datos extremos.

Cuartil 3 (q3): valor a partir del cual el 75% de los datos tienen un valor menor a éste. O leído al revés, el valor a partir del cual el 25% de los datos tienen un valor mayor a éste.

Rango intercuartil (RI): La diferencia entre el cuartil 3 y el 1. \(RI = q3 - q1\)

Bajo las reglas de Tukey, un estadístico activo en las décadas del 40 al 80 del siglo XX, y quien popularizó los diagramas de caja, todo dato que está alejado más de \(1.5\) veces el \(RI\) del cuartil más cercano se dice que es un dato atípico. Un dato atípico lo denominan extremo si está ubicado a una distancia mayor de \(3\) veces el \(RI\) del cuartil más cercano y se llama moderado en caso contrario.

\label{boxplot}Elementos de un diagrama de caja

Elementos de un diagrama de caja

Sobre el conjunto de datos que generó el diagrama del ejemplo (ver Figura ), hay dos círculos que reflejan los datos atípicos.

Atípico moderado: 142.2

Atípico extremo: 179.1

Los cuartiles de la Figura son: 81.9, 93.9, 105.5

Regla empírica de Tukey

Tukey en los años 60 construyó una regla para identificar valores extremos en datos con distribuciones acampanadas (simétricas y unimodales), para esto se basó en el uso de dos cantidades conocidas como bisagras o bigotes (hinges/whiskers en la literatura anglosajona).

El bigote inferior se calcula como \(BI = q_{1} - k \times RI\). Es decir, el bigote inferior (lower whisker) se calcula como el percentil 25 (o primer cuartil) menos k veces el rango intercuartílico (RI). Tukey propuso como valor de k = 1,5.

Si BI es menor al mínimo de los datos el valor que finalmente se deja como bigote inferior es el mínimo. Es decir, \[BI = max(min(x), q_{1} - k \times RI)\]

El bigote superior se calcula como: \[BS = min(max(x), q_{3} + k \times RI)\]

Bajo normalidad, con un valor de 1,5 la probabilidad de que un dato sea considerado como un valor extremo es de 0.006977. En otras palabras aproximadamente 7 de cada mil valores serán detectados como valores extremos.

Filzmoser, Gussenbauer, and Templ (2016) propusieron realizar previamente una transformación de las distribuciones asimétricas con el objeto de aproximarlas a una distribución normal y posteriormente aplicar la regla de Tukey para detección de valores extremos.

\[ y(\lambda)= \begin{cases} \frac{x^\lambda - 1}{\lambda}, \text{ si } \lambda \neq 0\\ log(\lambda), \text{ si } \lambda = 0 \end{cases} \] Ilustraremos la transformación de Box - Cox con un ejemplo:

Simularemos una distribución asimétrica a la izquierda. En específico, una variable aleatoria con distribución exponencial.

La función boxcox del paquete EnvStats realiza el trabajo de hallar el \(\lambda\) adecuado.

\label{maximizar}Logverosimilitud para cada lambda

Logverosimilitud para cada lambda

Se selecciona el \(\lambda\) con mayor log-verosimilitud, es decir, \(\lambda =\) 0.293709. (Ver Figura ). Se compara la distribución original con la transformada mediante Box - Cox:

\label{compara}

Ejercicio: Se ilustra la identificación de atípicos con la base de datos iris. Se utiliza para la demostración la variable Sepal.Length. Dada la aparentemente normalidad de los datos se detectarán directamente los outliers mediante la regla de Tukey.

Se calculan los 5 números de Tukey y se guardan en la variable fnums.

Min. X1st.Qu. Median X3rd.Qu. Max.
2 2.8 3 3.3 4.4

Al aplicarlo sobre la variable Sepal.Length, el número de outliers hallados son 4.

Ejemplo sobre una variable sesgada

Se realizará sobre la variable de Ingreso de una base de datos de empresas.

Se evidencia que la distribución del ingreso es muy asimétrica a la derecha, por lo tanto se aplica la transformación de Box-Cox.

El valor lambda considerado por parte de la función stats.boxcox es 0.3589009.

Se calculan los cinco números de Tukey y se determinan los outliers.

Min. X1st.Qu. Median X3rd.Qu. Max.
0 16.8315784313345 20.9253159673863 24.4873843056679 43.4700702669978

Esta es la lista de ingresos que se consideran outlier: 1, 10, 1, 1, 1, 10, 9, 1620, 1614, 2510, 1616, 1600, 1911, 1565, 1551, 1640, 1860

Prueba de Grubbs

Una primera prueba para detección de datos extremos anterior a los cinco de Tukey fue el test de Grubbs, denominada así por Frank E. Grubbs, quien la publicó en 1950. Se conoce también como prueba residual máxima normalizada o prueba de desviación extrema studentizada. Se utiliza para detectar valores atípicos en un conjunto de datos univariados que se supone que proviene de una población distribuida normalmente. Obsérvese el supuesto. Es importante.

La prueba de Grubbs detecta un valor atípico a la vez. Este valor atípico se elimina del conjunto de datos y la prueba se repite hasta que no se detectan valores atípicos adicionales. Sin embargo, las probabilidades de detección cambian en cada iteración. La prueba no debe usarse para tamaños de muestra de seis datos o menos, ya que con frecuencia etiqueta la mayoría de los puntos como valores atípicos.

La hipótesis nula \(H_0\) es que no hay datos atípicos. Y la estadística de prueba es: \[G = \frac{max_{1,\dots,n}\mid y_i - \bar{y}\mid}{s}\] siendo \(\bar{y}\) la media y \(s\) la desviación estándar.

Mide la máxima desviación y la divide entre la desviación estándar. El resultado lo compara con respecto a un valor de referencia sacado a partir de la distribución t de student. De ahí el origen de su nombre alternativo.

La hipótesis se rechaza si \(G > \frac{n-1}{n}\sqrt{\frac{t_{\alpha/(2n), n-2}^2}{n-2+t_{\alpha / (2n), n-2}^2}}\)

donde \(t_{\alpha / (2n), n-2}^2\) denota el valor crítico después del cual se debe considerar un valor extremo.

Se puede definir el test con la estadística sólo hacia un lado (test de una cola): \(G = \frac{\bar{y}-y_{min}}{s}\) ó \(G = \frac{y_{max} - \bar{y}}{s}\)

r tiene la función grubbs, pero no realiza iterativamente la búsqueda de outliers, por tanto, se escribe la función grubbs() correspondiente:

grubbs.flag <- function(x) {
  outliers <- NULL
  # grubbs.result$alternative recorta a 13 cifras
  test <- x
  grubbs.result <- grubbs.test(test)
  pv <- grubbs.result$p.value
  # Error si hay demasiados pocos valores a evaluar
  if (length(test) < 3 ) stop("Grubb's test requires > 2 input values")
  while(pv < 0.1) {
    outliers <- c(outliers, as.numeric(strsplit(grubbs.result$alternative," ")[[1]][3]))
    test <- x[!round(x, 5) %in% round(outliers, 5)]
    # pare si casi todos los valores resultan outlier
    if (length(test) < 3 ) {
      warning("All but two values flagged as outliers")
      break
    }
    grubbs.result <- grubbs.test(test)
    pv <- grubbs.result$p.value
  }
  res <- data.frame(cbind(x, round(x, 5) %in% round(outliers, 5)))
  return(res)
}

Sean simulados 30 datos mediante una distribución normal, y se añaden dos datos outlier:

-32.118708 -21.7740050 -16.355372 -15.561604
-13.456204 -10.2535686 -8.139528 -7.431715
-3.832045 -0.5288228 2.594044 9.141078
11.115049 14.4089392 15.363704 16.083556
16.112414 17.6844415 18.848300 20.266210
21.675733 23.7751316 27.707333 33.208973
37.676431 40.8440971 42.981169 49.349237
49.499294 53.2152918 63.731558 91.997748

El resultado de la llamada a la función es:

res <- grubbs.flag(x)
knitr::kable(res[res$V2 == 1,], row.names = FALSE, col.names = c('Valor', 'Outlier'))
Valor Outlier
91.99775 1

Consideró un solo valor como outlier.

Criterio de Chauvenet

Hoy en día se utiliza habitualmente el criterio de Chauvenet (1863) para la eliminación racional de los datos “atípicos” por parte de los laboratorios gubernamentales y universidades.

Primero se ha de calcular la media y la desviación estándar de la información observada. Basándose en cuánto difiere el valor dudoso de la media, se utiliza la función de distribución normal (o la tabla de la misma) para determinar la probabilidad de que una dato dado sea del valor del dato dudoso. Se multiplica esta probabilidad por el número de datos de la muestra escogida. Si el resultado es inferior a 0.5, el dato dudoso se puede descartar.

La función en R es la siguiente:

chauvenet.criterion <- function(datos, cval = 0.5) {
  val <- 1 - pnorm(abs((datos - mean(datos))/sd(datos)), mean = 0, sd = 1)
  val <- val*length(datos)
  return(list(mean = mean(datos), sd = sd(datos),
   data = data.frame(data = datos, chauvenet = val, outlier = (val < cval))))
}

El resultado es el siguiente:

Outliers
91.99775

El mismo que con Grubbs.

La prueba de Grubbs y el criterio de Chauvenet se mencionan como antecedentes históricos de cómo en el análisis unidimensional datos extremos y datos anómalos son equivalentes. Pero también es un ejemplo de una de las formas de determinar anomalías.

Si el valor de la estadística es mayor al umbral especificado, es anómalo. Si no, es normal. Se trata de una asignación binaria. Sin ambigüedades. Se verán métodos que asignan una probabilidad, y es deber del analista determinar de una manera razonable el umbral de probabilidad a partir del cual lo clasificará como dato anómalo.