Fernando López-Torrijos Flórez y Jose Fernando Zea Castro.
En estadística se denomina detección de outliers, haciendo uso del término anglosajón. En ciencias de la computación se denomina detección de datos anómalos o minería de excepciones.
En español se define anomalía como “Desviación o discrepancia de una regla o de un uso”. En inglés lo definen como “something that is unusual enough to be noticeable or seem strange”. Según Aggarwal (2017) un outlier es un punto que difiere significativamente de los demás puntos o que difiere del mecanismo generador de los datos.
Podría hablarse de muchos tipos de anomalías dentro de un conjunto de datos:
Datos faltantes donde no se esperan.
Valores no probables (¿error de digitación?)
Datos poco usuales.
No respuesta voluntaria en ciertas variables.
Formato incorrecto.
Se realiza la búsqueda de datos anómalos una vez se ha realizado una fase de limpieza de la información, eliminando los errores de transcripción y los formatos incorrectos.
Algunos definen los datos atípicos como datos muy grandes o muy pequeños comparados con el grueso del conjunto de datos. Esos datos es mejor denominarlos valores extremos. Pueden ser anómalos o no serlo.
Este documento se centra en las anomalías entendidas como aquellos datos que difieren del mecanismo generador de los datos, distinguiendo éstas del ruido aleatorio, que también puede generar algunos valores atípicos. La separación entre ruido aleatorio y dato anómalo no es siempre clara. Al hablar de ruido aleatorio, se está haciendo clara referencia al mecanismo generador de los datos.
Desde otro punto de vista conceptual, se denomina como dato anómalo algo que contrasta con la normalidad. Las anomalías se pueden asociar con desconocimiento, irregularidad y rareza. El desconocimiento indica que los eventos anómalos no se pueden observar hasta que realmente suceden. La irregularidad significa que la estructura de categorías de las anomalías es muy heterogénea. Por último, pero no menos importante, las anomalías son raras en términos de cantidad de datos recopilados, lo que conduce a un problema de desequilibrio o desbalance de categorías. Es decir, se suele tener mucha información de lo normal y poca de lo anómalo.
El dato en color rojo de la Figura está dentro de la tendencia de los demás datos, pero es significativamente grande respecto a los restantes mirado desde el punto de vista de la variable \(X\). Desde el punto de vista de la variable \(Y\), podría tratarse de un valor indistinguible. Podría tratarse de un dato aislado alto pero válido o podría tratarse de un dato anómalo.
El dato en color rojo de la Figura está fuera de la tendencia. Dentro de una mirada a sólo la variable \(X\), no resalta. Dentro de solo la variable \(Y\) tampoco. Sólo en la dimensión conjunta \(X, Y\) se observa su anomalía.
El dato en color rojo de la Figura podría ocurrir que pase desapercibido tanto en \(X\) como en \(Y\). Se trata de un dato anómalo en medio de dos conglomerados. Sólo en la dimensión conjunta \(X, Y\) se podría considerar su anomalía.
Este último caso pone en evidencia la dificultad de hallar anómalos no extremos.
Los datos en color rojo de las Figuras y también podría ocurrir que pasen desapercibidos tanto en \(X\) como en \(Y\). Se trata de conglomerados de datos anómalos. Sólo en la dimensión conjunta \(X, Y\) se podría considerar su anomalía.
Dato extremo
Dato fuera de la tendencia
Dato intermedio
Conglomerado de datos anómalos
Otro conglomerado de datos anómalos
La detección de anomalías es inherente al trabajo con datos, pero hay situaciones en las que es propio centrase en éstas:
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.
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.
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
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.
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:
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
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.
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.