Saltar al contenido

¿Qué es la Detección de Anomalías?

La detección de anomalías o outliers es una tarea esencial en el proceso de análisis de datos de cualquier tipo. En este artículo te explicamos las técnicas de detección de patrones raros, sus tipos y su relación con la Ciencia de Datos.

detección de anomalías

¿Qué es la Detección de Outliers?

Una anomalía o outlier es una observación que se desvía tanto de otras observaciones como para despertar la sospecha de que fue generada por un mecanismo diferente.

D. M. Hawkins.

Como dice esta definición de D. M. Hawkins, las anomalías o outliers son datos que se diferencian del resto por algún motivo, lo que hace pensar que se han generado por una causa distinta. Estas instancias son interesantes tanto para eliminarlas de los datos para entrenar a un modelo como porque sean interesantes en sí mismas. Por ejemplo, al detectar una enfermedad queremos encontrar pacientes «raros», pues lo normal es estar sano.

Tipos de Anomalías

Existen muchas clasificaciones, pero probablemente una de las mejores sea la siguiente según su forma de presentarse:

  1. Anomalías puntuales: Se considera la forma de anomalía más simple, consiste en una única observación separada del resto de los datos.
  2. Anomalías contextuales: Son aquellas que lo son en un contexto particular, pero no en todos los casos. Por ejemplo, una altura de 170 cm no es considerada extremadamente alta en personas adultas, sin embargo, en una persona de 10 años sí lo es.
  3. Anomalías colectivas: Son conjuntos de puntos separados de la distribución de la mayoría del conjunto de datos, pero próximos entre sí, e incluso con una densidad similar. Un buen ejemplo podría ser un grupo de cuentas bots de Twitter. Son todas parecidas, pues se comportan igual (mandan muchos mensajes, tienen pocos seguidores…), pero son todas muy parecidas, por lo que realmente existe un grupo (o clúster) de cuentas similares. Sin embargo, son anómalas, ya que no se comportan de forma parecida a la cuenta de una persona real (aunque hay personas que parezcan bots al escribir 😜).

¿Por qué es Importante la Detección de Patrones Raros?

Esto se suele hacer para excluirlos del modelado y así crear modelos con mayor capacidad de generalización, pues utilizar datos sesgados con observaciones muy poco comunes puede llevar a grandes desviaciones para las muestras más habituales.

Sin embargo, en algunas aplicaciones la gracia es justamente detectar estos casos poco comunes. Por ejemplo, la detección de anomalías congénitas permite detectar posibles problemas en el desarrollo de un feto en el vientre materno. En estos casos, lo importante es justamente encontrar esos casos raros que puedan suponer problemas para el bebé o la madre, y así actuar en consecuencia (forzando el parto por cesárea, por ejemplo).

células anómalas
Si analizamos un conjunto de células, ¿cómo podemos encontrar aquellas que son extrañas?

¿Cómo Detectar Anomalías en Data Science?

Cómo encontrar los outliers de un conjunto de datos siempre es difícil. Afortunadamente, existen distintas aproximaciones para detectar estos casos raros:

  1. Utilizar técnicas de clasificación: es posible entrenar modelos de Machine Learning para clasificar las observaciones entre comunes o raras.
  2. Utilizar análisis estadísticos: si se determina la distribución de los datos, cualquier patrón demasiado alejado puede considerarse como extraño, y por lo tanto investigarse.
  3. Realizar un agrupamiento de los datos: las técnicas de clustering permiten crear grupos de elementos similares. De esta forma, es posible medir la diferencia de cada punto a su grupo y examinar o apartar a los más distintos.
  4. Utilizar la teoría de la información: esta aproximación es menos común últimamente, ya que se han hecho más populares los algoritmos de Machine Learning. Sin embargo, utilizar conceptos como la entropía, la entropía relativa o la complejidad de Kolmogorov puede ser muy beneficioso, especialmente teniendo en cuenta que suelen tener un coste computacional que evoluciona linealmente con los datos.
  5. Realizar un análisis de la vecindad:
  6. Utilizar proyecciones: la utilización de técnicas como PCA permite cambiar las dimensiones en las que se presentan los datos a un espacio con menos características. Al realizar este cambio siempre se comete un error. Sin embargo, es posible medirlo y determinar los outliers como los casos con mayor error.
  7. Analizar un grafo de los datos: se puede realizar un análisis de las características de los distintos puntos para aislar a los que más se diferencian de los demás. El mejor ejemplo de esto es el algoritmo de Isolation Forest, basado en árboles.

Los Mejores Algoritmos para Detectar Outliers

Existen muchos algoritmos diferentes de detección de anomalías, y el mejor para una aplicación concreta dependerá de los requisitos específicos y de las características de los datos que se analicen. Algunos algoritmos populares de detección de anomalías son

  • Modelos de mezcla gaussiana (GMM).
  • Máquinas de vectores soporte (SVM).
  • Isoltation Forest.
  • Local Outlier Factor (LOF).
  • k Vecinos más Próximos (kNN).
  • Mapas Autoorganizativos (SOM).
  • Análisis de Componentes Principales (PCA).
  • Optimal Reciprocal Collision Avoidance (ORCA).
  • Redes Bayesianas.
  • Métodos basados en aprendizaje profundo (como los autoencoders).

También vale la pena considerar el uso de métodos de conjunto, que combinan las predicciones de múltiples modelos individuales para mejorar el rendimiento general del sistema de detección de anomalías. En última instancia, el mejor algoritmo para una situación dada sólo puede determinarse mediante experimentación y pruebas.

¿Cuál es la Mejor Forma de Detectar Anomalías?

Esta sección puede resultar un poco polémica, ¡pero igualmente me he atrevido a escribirla! En mi opinión, y resumiendo cantidad de teoría al respecto, probablemente la opción más práctica sea optar por realizar un análisis estadístico mínimo, especiamente si los datos siguen una Distribución Normal. Con la distribución, se pueden utilizar normas fáciles de aplicar como la regla de las 3 desviaciones estándar para determinar los puntos anómalos.

Por otro lado, la alternativa más «automática» sería utilizar tanto Isolation Forest como LOF, que son buenos a nivel global y nivel local, respectivamente. Finalmente, se puede aplicar un agrupamiento, como un DBSCAN, y detectar el ruido del mismo.

¡Espero que te haya aclarado la mayoría de tus dudas sobre la detección de outliers! Si tienes cualquier pregunta, no dudes en ponerla en los comentari