Fundamentos de la detección de anomalías con distribución gaussiana multivariante

'Detección de anomalías con distribución gaussiana multivariante'

Resumen de la detección de anomalías, revisión de la distribución gaussiana multivariante e implementación del algoritmo básico de detección de anomalías en Python con dos ejemplos

Nuestra habilidad innata para reconocer patrones nos permite utilizar esta habilidad para rellenar espacios o predecir lo que va a suceder a continuación. Sin embargo, ocasionalmente ocurre algo que no encaja en nuestras expectativas y no se ajusta a nuestra percepción de un patrón. A esas ocurrencias las llamamos anomalías. Si estamos tratando de predecir algo, es posible que queramos excluir las anomalías de nuestros datos de entrenamiento. O tal vez queremos identificar anomalías para ayudar a mejorar nuestra vida. En cualquier caso, las técnicas de detección de anomalías pueden resultar útiles y aplicables en la mayoría de las industrias y áreas temáticas.

Este artículo te guiará a través de los conceptos básicos de detección de anomalías e implementación de un modelo estadístico de detección de anomalías.

¿Qué es la detección de anomalías?

En términos generales, la detección de anomalías se refiere al proceso de identificar fenómenos que están fuera de lo común. El objetivo de la detección de anomalías es identificar eventos, ocurrencias, puntos de datos o resultados que no se ajustan a nuestras expectativas y no encajan en algún patrón subyacente. Por lo tanto, la clave para implementar la detección de anomalías es comprender el patrón subyacente de los eventos esperados. Si conocemos el patrón de lo esperado, podemos usarlo para mapear los puntos de datos nunca antes vistos; si nuestro mapeo no tiene éxito y nuestro nuevo punto de datos cae fuera de nuestro patrón esperado, es probable que hayamos encontrado nuestra anomalía.

Existen tres tipos de anomalías que suelen ocurrir. El primer tipo incluye instancias individuales que se consideran anómalas en relación con el conjunto de datos completo (por ejemplo, un automóvil que circula a una velocidad muy baja en una autopista es anómalo en comparación con todo el tráfico de la autopista). El segundo tipo incluye instancias que son anomalías dentro de un contexto específico (por ejemplo, transacciones con tarjeta de crédito que parecen estar bien en comparación con todas las transacciones con tarjeta de crédito, pero son anómalas en relación con el patrón de gasto específico del individuo). El tercer tipo de anomalías es colectivo: un conjunto de instancias puede considerarse anómalo aunque cada instancia por sí sola siga una cierta expectativa (por ejemplo, una única transacción fraudulenta con tarjeta de crédito en Amazon puede no parecer fuera de lo común, pero un conjunto de transacciones que ocurren una tras otra en poco tiempo es sospechoso) [1].

Las técnicas de detección de anomalías se dividen en tres categorías:

  1. Detección supervisada requiere etiquetas positivas y anómalas en el conjunto de datos. Algoritmos de aprendizaje supervisado como redes neuronales o bosques aumentados se pueden aplicar para categorizar puntos de datos en clases esperadas/anómalas. Desafortunadamente, los conjuntos de datos de anomalías tienden a estar muy desequilibrados y generalmente no tienen suficientes muestras de entrenamiento para permitir técnicas de sobre o submuestreo que ayuden al aprendizaje supervisado.
  2. Detección semisupervisada se ocupa de datos que están parcialmente etiquetados. Las técnicas semisupervisadas asumen que los datos de entrada solo contienen instancias positivas y que los datos de entrada siguen un patrón esperado. Estas técnicas intentan aprender la distribución de los casos positivos para poder generar instancias positivas. Durante las pruebas, el algoritmo evaluará la probabilidad de que la instancia anómala pueda haber sido generada por el modelo y utilizará esta probabilidad para predecir casos anómalos. [2]
  3. Detección no supervisada utiliza datos completamente no etiquetados para crear un límite de expectativa y cualquier cosa que caiga fuera de este límite se considera anómalo.

Las técnicas de detección de anomalías se pueden aplicar a cualquier tipo de datos y el formato de los datos afecta qué algoritmo será más útil. Los tipos de datos incluyen series (series temporales, listas enlazadas, lenguaje, sonido), tabulares (por ejemplo, datos de sensores del motor), imágenes (por ejemplo, imágenes de rayos X) y grafos (por ejemplo, flujo de trabajo o proceso).

Ejemplo de detección de anomalías en imágenes de rayos X de tórax [4]

Dada la variedad de problemas y técnicas, la detección de anomalías es en realidad un vasto campo de la ciencia de datos con muchas aplicaciones. Algunas de estas aplicaciones incluyen: detección de fraude, aplicaciones de ciberseguridad, análisis de datos de ventas o transacciones, identificación de enfermedades raras, monitoreo de procesos de fabricación, búsqueda de exoplanetas, preprocesamiento de aprendizaje automático y muchas más. Por lo tanto, el acceso a algoritmos potentes y eficientes tiene el potencial de tener un impacto significativo en muchos campos.

Echemos un vistazo al algoritmo más básico que se puede utilizar para detectar anomalías.

Distribución Gaussiana para la Detección de Anomalías

Una de las técnicas básicas de detección de anomalías utiliza el poder de la distribución Gaussiana (es decir, Normal) para identificar valores atípicos.

Descubierta por Carl Friedrich Gauss, la distribución Gaussiana modela muchos fenómenos naturales y, por lo tanto, es una elección popular para modelar características en un conjunto de datos. La función de densidad de probabilidad de esta distribución es una curva de campana centrada en la media aritmética y la anchura de la curva está definida por la varianza del conjunto de datos. Con la mayoría de los casos estando en o cerca del centro, la función de densidad de probabilidad presenta dos colas alargadas en cada extremo. Cuanto más rara sea la instancia —más lejos esté del centro— más probable será que sea un valor atípico o una anomalía. ¡Eureka! Podemos usar este concepto para modelar anomalías en nuestro conjunto de datos.

La función de densidad de probabilidad, definida como f(x), mide la probabilidad de algún resultado x en nuestro conjunto de datos. Formalmente,

Supongamos que nuestro conjunto de datos tiene solo una característica y esa característica sigue una distribución normal, entonces podemos modelar nuestro algoritmo de detección de anomalías usando f(x) de arriba. Luego podemos establecer un umbral epsilon que determinará si un caso es anómalo o no. Epsilon debe establecerse de manera heurística y su valor dependerá del caso de uso y de la sensibilidad preferida para las anomalías.

Gráfico que representa la Distribución Normal [5]

En una distribución normal, el 2.5% de las instancias ocurren a dos desviaciones estándar por debajo del valor medio. Entonces, si establecemos nuestro umbral en 0.054, aproximadamente el 2.5% de los eventos en nuestro conjunto de datos se clasificarán como anomalías (la CDF de dos desviaciones estándar por debajo de la media es 2.5 y la PDF en -2 es 0.054). Umbrales más bajos darán menos anomalías clasificadas y umbrales más altos serán menos sensibles.

En el mundo real, es probable que haya un compromiso ya que algunos casos positivos pueden caer por debajo del umbral y algunas anomalías pueden ocultarse por encima del umbral. Será necesario comprender el caso de uso y probar diferentes valores de epsilon antes de decidir cuál es el más adecuado.

Un ejemplo con una sola característica es trivial, ¿qué hacemos si tenemos más de una característica? Si nuestras características son completamente independientes, en realidad podemos tomar el producto de las funciones de densidad de probabilidad de las características para clasificar anomalías.

Para el caso de dos características no correlacionadas, esto se convierte en

En esencia, el producto de las probabilidades de las características puede asegurar que si al menos una característica tiene un valor atípico, podemos detectar una anomalía (siempre que nuestro epsilon sea lo suficientemente alto); si nuestra instancia muestra un valor atípico en varias características, nuestra probabilidad será aún más pequeña (ya que nuestro valor total de probabilidad es un producto de fracciones) y es aún más probable que sea una anomalía.

Sin embargo, no podemos asumir que nuestras características sean independientes. Y aquí es donde entra en juego una función de densidad de probabilidad multivariada. En el caso multivariado, construimos una matriz de covarianza (denotada por Σ) para capturar cómo las características están relacionadas entre sí. Luego, podemos usar la matriz de covarianza para evitar la “doble contabilización” de las relaciones de características (esta es una forma muy rudimentaria de describir lo que realmente está sucediendo). La fórmula para la función de densidad de probabilidad de la distribución multivariada se muestra a continuación y estas diapositivas de Duke hacen un buen trabajo al derivar la fórmula.

Aquí, x es un vector de entrada, μ es un vector de medias de características y Σ es una matriz de covarianza entre las características.

Para facilitarnos la vida, podemos usar la biblioteca scipy para implementar esta función: scipy.stats.multivariate_normal toma como entrada un vector de medias y desviaciones estándar de características y tiene un método .pdf para devolver la densidad de probabilidad dada un conjunto de puntos.

Vamos a probar esta implementación en un ejemplo real.

Implementación de un modelo de dos características en Python

Primero, observemos un ejemplo de dos características que nos permitirá visualizar anomalías en el espacio euclidiano. Para este ejemplo, generé dos características con 100 muestras extraídas de una distribución normal (estas son las muestras positivas). Calculé las medias y desviaciones estándar de las características y ajusté un modelo normal multivariado de la biblioteca scipy.stats con la información de distribución. Es importante destacar: Ajusté mi modelo solo con muestras positivas. En los datos del mundo real, queremos limpiar nuestro conjunto de datos para asegurarnos de que las características sigan una distribución normal y no contengan valores atípicos ni valores extraños, esto mejorará la capacidad del modelo para localizar anomalías (especialmente porque ayudará a garantizar el requisito de distribución normal de la característica). Finalmente, agregué 5 muestras anómalas a mi conjunto de datos y utilicé el método .pdf para informar las probabilidades.

El siguiente diagrama de dispersión muestra el resultado: la característica x1 se representa en el eje x, la característica x2 se representa en el eje y, las anomalías están anotadas y el color representa la probabilidad de la función de densidad de probabilidad multivariada.

Diagrama de dispersión que muestra puntos positivos y anómalos [5]

Una vez que establezcamos nuestro umbral lo suficientemente bajo, podremos distinguir las anomalías de los valores esperados. Los dos gráficos a continuación comparan los valores de épsilon entre 1×10^-7 y 1×10^-9. Un valor de épsilon de 1×10^-9 tiende a capturar mejor nuestras anomalías previstas, mientras que 1×10^-7 identifica algunas muestras positivas como anomalías.

Comparación de diagramas de dispersión de anomalías identificadas a épsilon más alto y más bajo [5]

En este ejemplo, es fácil identificar el épsilon porque podemos representar y identificar visualmente las anomalías y analizar nuestros resultados. Veamos cómo esto cambia en un ejemplo con algunas características más.

Implementación de un modelo multivariado con Python

Para este ejemplo, utilizaré el conjunto de datos de vinos de la biblioteca ODDS [3]. Este conjunto de datos contiene 13 características numéricas y 129 instancias. Las características capturan información sobre el vino y el conjunto de datos original se utilizó para tareas de clasificación basadas en el análisis de vinos. Con el fin de detectar anomalías, se submuestreó una de las clases objetivo y se presenta como una anomalía. Hay un total de 10 anomalías entre 129 instancias (~8%). Estamos trabajando con un conjunto de datos bastante limpio sin valores faltantes.

Lo primero que debemos hacer es asegurarnos de que nuestras características sigan una distribución gaussiana. Si es posible, debemos eliminar las anomalías y normalizar la distribución utilizando una de las tácticas de normalización. En este conjunto de datos, 4 características ya siguen una distribución normal (alcohol, ceniza, alcalinidad de la ceniza y fenoles no flavonoides) y 4 características se pueden normalizar tomando su logaritmo (fenoles totales, proantocianidinas, intensidad del color y tonalidad). Si bien existen mejores estrategias para las características restantes, para este ejercicio simplemente las excluímos de nuestro conjunto de datos de entrenamiento. Finalmente, eliminé las anomalías excluyendo todas las filas que contienen al menos un valor de característica que está por encima o por debajo de 2 desviaciones estándar de la media. El resto del código es igual que en el ejemplo anterior.

A diferencia del ejemplo de dos características de la sección anterior, ya no es factible visualizar los resultados en un plano bidimensional, pero podemos usar métricas de matriz de confusión (incluyendo la sensibilidad y precisión) y el área bajo la curva ROC para ayudarnos a encontrar el épsilon correcto para el caso de uso.

Dado que generalmente hay un equilibrio entre precisión y sensibilidad, la configuración de épsilon depende del requisito de sensibilidad de nuestro caso de uso. Para este ejemplo, busqué un épsilon que maximice el área bajo la curva. Algunos casos de uso pueden requerir encontrar tantas anomalías como sea posible (a costa de incluir valores positivos), mientras que otros casos de uso pueden requerir detectar anomalías solo si estamos absolutamente seguros (a costa de omitir algunas anomalías de nuestro informe final). Calculé métricas de evaluación para varios valores de épsilon diferentes.

Gráfico de línea que compara las métricas de evaluación por valor de épsilon [5]

A medida que epsilon aumenta, aumenta el recall. La precisión es bastante baja en todos los valores de epsilon propuestos, pero tiende a alcanzar su máximo alrededor de 0.0035 y 0.0065. El AUC intenta equilibrar la precisión y el recall y alcanza su máximo alrededor de 0.0065. Echemos un vistazo a la matriz de confusión.

Tabla que muestra la matriz de confusión [5]

Nuestro modelo tiene un buen desempeño al encontrar todas las anomalías y solo se pierde una. Este es un resultado fantástico considerando que excluí un tercio de las características. Desafortunadamente, nuestro modelo también muestra 40 instancias positivas como anomalías, lo que significa que si usamos el modelo para la detección de anomalías, tendríamos que verificar manualmente la mitad de las instancias positivas para ver si realmente son anómalas.

Para mejorar este modelo, podemos mejorar aún más las características restantes y encontrar valores de epsilon que sean un poco menos sensibles a los valores atípicos. El resto de este problema es trivial y se deja como ejercicio para el lector (iykyk). Puedes encontrar el código fuente aquí .

Posibles Desventajas de la Detección de Anomalías Gaussiana

La distribución gaussiana multivariada es un gran modelo para la detección de anomalías: es simple, rápido y fácil de ejecutar. Sin embargo, sus desventajas pueden evitar su utilización en numerosos casos de uso.

Primero, la distribución multivariada puede producir valores de densidad de probabilidad bastante bajos. Por lo general, esto no es un problema para las computadoras modernas. Pero puede haber casos en los que los valores sean demasiado bajos para ser manejados de manera efectiva por una computadora.

Segundo, debemos asegurarnos de que nuestras características sigan una distribución normal. Esto puede no ser demasiado problema si se dedica tiempo y esfuerzo para realizar una ingeniería de características adecuada y manipulación de datos, pero invertir esfuerzo es arriesgado ya que no sabremos qué resultado obtendremos hasta que hagamos el trabajo.

Tercero, este modelo no maneja características categóricas y si nuestro conjunto de datos incluye características categóricas, debemos crear un modelo separado para cada combinación de características categóricas (lo que puede resultar en mucho trabajo).

Finalmente, el modelo asume que todas las características son igualmente relevantes y que no hay una relación compleja entre las características. Una opción para lidiar con esto es implementar la función de densidad de probabilidad de la distribución multivariada desde cero e incluir algún parámetro para ayudar con la importancia de las características. Para resolver el problema de las relaciones entre características, podríamos realizar una ingeniería de características adicional y crear nuevas características, pero este proceso puede ser difícil, consumir mucho tiempo y ser arriesgado (en términos de resultado).

No obstante, el uso de la distribución gaussiana multivariada para la detección de anomalías es un gran primer paso para problemas de detección de anomalías en tablas. Se puede utilizar para establecer un punto de referencia o puede resultar una herramienta perfecta para detectar anomalías en un conjunto de datos y nos proporciona una forma intuitiva de comprender la detección de anomalías.

¡Gracias por leer! En un futuro cercano, espero hacer una serie completa sobre detección de anomalías, así que si este tema te interesa, mantente atento.

Fuentes:

  1. https://www.kaggle.com/code/matheusfacure/semi-supervised-anomaly-detection-survey
  2. https://ai.googleblog.com/2023/02/unsupervised-and-semi-supervised.html
  3. Saket Sathe y Charu C. Aggarwal. LODES: Local Density meets Spectral Outlier Detection. SIAM Conference on Data Mining, 2016.
  4. Nakao, T., Hanaoka, S., Nomura, Y. et al. Detección de anomalías profundas no supervisadas en radiografías de tórax. J Digit Imaging 34 , 418–427 (2021). https://doi.org/10.1007/s10278-020-00413-2
  5. https://github.com/viyaleta/Anomaly-Detection/blob/main/Examples/1%20Anomaly%20Detection%20with%20Guassian%20Distribution.ipynb

Tipografía matemática cortesía del editor de LaTeX en línea de Codecogs .

Puedes encontrar el cuaderno de Jupyter con ejemplos aquí .

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Maximizar el rendimiento en aplicaciones de IA de borde

Este artículo proporciona una visión general de las estrategias para optimizar el rendimiento del sistema de IA en im...

Noticias de Inteligencia Artificial

¡No más trampas! ¡Sapia.ai detecta respuestas generadas por inteligencia artificial en tiempo real!

En un emocionante avance, Sapia.ai ha presentado una nueva función que puede identificar y marcar respuestas creadas ...

Inteligencia Artificial

Conoce a SeamlessM4T el nuevo modelo base de Meta AI para la traducción de voz

El habla se está convirtiendo rápidamente en una de las próximas fronteras de los modelos fundamentales. Aunque los d...

Inteligencia Artificial

La Declaración de Bletchley de los países que asistieron a la Cumbre de Seguridad de la IA

Damos la bienvenida a los esfuerzos internacionales pertinentes para examinar y abordar el posible impacto de los sis...