Detección de Anomalías

  • Artículos
  • Data Science & IA

Introducción

Los términos outlier y anomalía usualmente se utilizan indistintamente. Sin embargo, son sutilmente diferentes: mientras que un outlier es un punto legítimo que está muy alejado del promedio o de la mediana, una anomalía es un punto ilegítimo que es generado por un proceso diferente a aquel que generó el resto de los datos. Es por esto que muchos métodos para encontrar outliers se utilizan para detectar anomalías.

Hoy en día, eventos anómalos suceden en diferentes campos, y esto hace que una pronta y precisa detección sea muy importante. Por ejemplo, en el ámbito financiero, se hace necesario poder identificar transacciones fraudulentas; en diferentes áreas donde se utilice maquinaria es muy importante detectar cuándo dicha máquina puede fallar. Así mismo, tener algoritmos precisos de detección de anomalías permiten predecir futuros ataques cibernéticos. Otras aplicaciones se encuentran en detección de deforestaciones, derretimiento de glaciares, y de cáncer en imágenes

En este post se mostrarán dos algoritmos para identificar transacciones financieras fraudulentas: One-Class Support Vector Machines (OCSVM) y Autoencoders. SVM es un método clásico de detección de anomalías que se basa en encontrar de manera geométrica la mejor separación de los datos anómalos y los datos normales, mientras que los Autoencoders son un tipo de redes neuronales que utilizan las propiedades intrínsecas de dichas redes para aprender el comportamiento general de los datos y de esta manera reconstruir este comportamiento. Cuando una nueva observación no se puede reconstruir, es calificada como una observación anómala.

Datos

El conjunto de datos a utilizar contiene transacciones realizadas con tarjetas de crédito en dos días durante septiembre de 2013 por titulares de tarjetas europeos. Este conjunto de datos consiste en 492 fraudes de 284,807 transacciones. Esto significa que un 0.172% de transacciones corresponde a fraudes.

Casi todas las columnas vienen anonimizadas, lo que significa que no podemos saber qué significa cada variable. Se compone de 28 variables, definidas como V1, V2, …, V28, todas numéricas. Sólo dos columnas no se anonimizaron: Time y Amount. La variable Time muestra los segundos transcurridos entre una transacción y el primer registro presente, mientras que Amount es el monto de la transacción (de todas maneras, Time no se utiliza en el análisis).  Finalmente, la columna Class es la variable de respuesta que toma valor 1 en caso de fraude y 0 en caso contrario. Un extracto de los datos se observa en la siguiente tabla:

Muestreo de datos

Como la base de datos está desbalanceada, se realiza un muestreo, quedando la nueva base con 20.000 registros normales y 400 anormales, es decir, un 2% de los datos son transacciones fraudulentas. Si se utiliza la proporción original (0.172%), puede suceder que ambos algoritmos no tengan la sensibilidad para detectar una observación anómala. Al aumentar levemente la proporción, logramos que los algoritmos tengan la cantidad suficiente de datos normales/anómalos para aprender los patrones que existentes en la base de datos. Por otra parte, para la evaluación del modelo se utiliza un 80% de esta nueva base para el entrenamiento y el 20% para el testeo.

One-Class Support Vector Machine (OCSVM)

La idea detrás de este algoritmo es encontrar el hiperplano que divida ambas clases de manera tal que optimice el margen entre ambas como se muestra en la figura siguiente.

Muchas veces una línea recta no logra separar de manera óptima las clases, para estos casos se realiza una transformación Kernel. En específico, se transforman las coordenadas para luego aplicar el método y separarlo mediante un plano como se muestra en la siguiente figura.

Luego del sampleo de los datos transaccionales, la proporción de transacciones fraudulentas quedan con un porcentaje de alrededor del 2%. Este porcentaje o estimado de anomalías se debe ingresar como parámetro «nu» al modelo. Las métricas luego de aplicar el modelo en el set de testeo se observan en la siguiente tabla.

Lo que nos interesa es la capacidad del modelo para encontrar anomalías. Viendo la tabla, tenemos que hay una precisión del 40% y un recall del 60% (accuracy en casos desbalanceados no es una buena métrica puesto que, si el modelo me entrega solo 0s, tendré un accuracy de ~1). Otra métrica importante para considerar es el AUC: este valor representa el área bajo la curva del ratio de verdaderos positivos vs. el ratio de falsos positivos al variar el threshold de probabilidad para considerar la observación como anomalía. Un AUC de 0.5 quiere decir que se clasifica de manera aleatoria mientras que más cercano al 1 quiere decir que clasifica de manera perfecta. A continuación, se muestra un ejemplo de un AUC de 0.75.

En nuestro caso, y utilizando el set de testeo, se obtiene un AUC de 0.79. Por último, podemos observar la matriz de confusión, que es de donde podemos calcular las métricas anteriores. Se observa que de las 93 transacciones fraudulentas se identificaron 56. Hubo 83 falsos positivos y 37 falsos negativos.

Autoencoders

Los Autoencoders son un tipo de redes neuronales capaces de descubrir representaciones de menor dimensión en datos de alta dimensión y logran reconstruir los datos de entrada. Se componen de dos partes, un Encoder y un Decoder. El primero reduce la dimensionalidad y el segundo expande esta representación de vuelta a la dimensionalidad original. Dentro de las aplicaciones de este tipo de redes se encuentran: compresión de imágenes, clasificación, detección de anomalías y modelos generativos. Esta propiedad de Autoencoders es lo que permite clasificar una anomalía: el algoritmo aprende qué son datos de comportamiento normal, y es capaz de reconstruirlo. Cuando ingresa un registro nuevo, si no lo puede reconstruir, lo califica como anomalía.

La figura anterior muestra un diagrama básico de Autoencoder: en la primera etapa (Encoder), los datos son codificados, luego se reduce su dimensionalidad en la etapa de compresión, y en la última etapa (Decoder), éstos se reconstruyen.

El Autoencoder luego se utiliza este modelo sobre la data de testeo. Para la obtención del resultado, se utiliza el error del Autoencoder asociado a la reconstrucción del input. De esta manera, se utilizan diferentes cortes para encontrar aquel que maximiza el recall. En nuestro caso, utilizamos MSE 5, 10 y 15. Esto se muestra en la tabla siguiente:

En la tabla anterior, se observa un aumento en el Recall cuando se utiliza el MSE 10 como límite de error en comparación a MSE 5. Y por otra parte, al aumentar a MSE 15,  Recall baja de 0.87 a 0.59 para la clase de anomalías. Por esto, se considera que la mejor opción es MSE 10 para este caso. La figura siguiente muestra de manera gráfica el corte. Las cruces en rojo son los puntos anómalos y los verdes son los reales. El Autoencoder decide que los puntos sobre la línea azul son anomalías.

Para este modelo con MSE 10 se obtiene un AUC de 0.92, lo cual es una mejora con respecto al OCSVM de la sección anterior. Esta mejoría se observa también en la precisión que subió de un 40% a un 44% y el Recall que subió de un 60% a un 87%. Por último, podemos observar con la matriz de confusión que, de las 93 transacciones fraudulentas, esta vez se identificaron 81, lo cual es una mejora en comparación con las 56 del OCSVM. Por otro lado, aumentaron los falsos positivos de 83 a 102. Variando el límite del error puede ayudar a disminuir estos falsos positivos y encontrar el equilibrio que mejor se adapte a las necesidades del caso. En este caso, es preferible encontrar la mayor cantidad de transacciones fraudulentas, por lo que el Recall es la métrica que nos ayuda a escoger el mejor modelo.

Conclusión

En este blog se mostraron dos metodologías para identificar anomalías, los OCSVM y los Autoencoders. Las anomalías por lo general representan un bajo porcentaje de los datos, aunque la identificación de estos puede ser de gran importancia para una gran cantidad de aplicaciones y rubros.

En este blog se probaron ambos modelos para un conjunto de datos transaccionales y el objetivo fue encontrar las transacciones fraudulentas. Para este caso, el Autoencoder resultó ser superior en términos de las métricas. Se obtuvo una mejora en el AUC, precisión y recall del set de testeo, aunque el OCSVM es una buena opción por su simplicidad y su fácil interpretabilidad.

Existen otros métodos clásicos como el Isolation Forest y también en el mundo del Deep Learning existen otros tipos de Autoencoders como los Deep Autoencoders y los Sparse Autoencoders. También, para anomalías en series de tiempo son bastante comunes las redes LSTM y los Temporal Convolutional Networks.

Referencias

Sridhar Alla, S. K. (2019). Beginning Anomaly Detection Using Python-Based Deep Learning. Apress  Berkeley, CA.

Credit Card Fraud Detection | Kaggle