La detección de anomalías es una parte del aprendizaje automático resulta clave en múltiples aplicaciones. Poder saber qué registros son atípicos de un conjunto de datos resulta fundamental en sectores como la seguridad informática, el mantenimiento predictivo o la detección de fraudes. Uno de los algoritmos que se pueden emplear en estos casos es Clustering-Based Local Outlier Factor (CBLOF). En esta entrada se analizará en qué consiste, cómo funciona y algunas de sus ventajas respecto a otros métodos.
Tabla de contenidos
Clustering-Based Local Outlier Factor (CBLOF) es una extensión del algoritmo Local Outlier Factor (LOF) que utiliza el análisis de clúster para dividir los datos en grupos antes de calcular el factor de anomalía local para cada uno de los registros. Un enfoque puede mejorar los resultados. Básicamente, los pasos para implementar CBLOF son los siguientes:
El primer paso en CBLOF es agrupar los datos en clústeres utilizando un algoritmo como K-Means. Lo que divide el espacio de características en diferentes regiones y realizar de esta forma una evaluación más precisa del factor de anomalía local en cada una de las regiones.
Una vez que los datos están agrupados en clústeres, se evalúa el factor de anomalía local de cada uno de los registros solamente en su clúster. No de forma global como es el cómo se hace en LOF. Lo que hace el cálculo más preciso al emplear únicamente los vecinos en el mismo clúster
Para calcular el LOF de un punto p, se sigue este proceso:
Un LOF alto indica que p es valor poco probable, lo que sugiere que podría ser una anomalía.
Finalmente, los registros con un LOF alto son identificados como anomalías, ya que tienen una densidad local significativamente menor que la de sus vecinos dentro del mismo clúster. Estos puntos se consideran anómalos en su entorno local y, por lo tanto, son etiquetados como anomalías.
Algunas de las ventajas de Clustering-Based Local Outlier Factor (CBLOF) en comparación con otras técnicas de detección de anomalías son las que se muestra a continuación:
Clustering-Based Local Outlier Factor (CBLOF) ofrece varias ventajas, incluida su robustez en conjuntos de datos con variabilidad en la densidad, una interpretabilidad intuitiva, escalabilidad, capacidad para detectar anomalías locales y falta de dependencia de distribución específica. Estas características lo hacen una opción atractiva para la detección de anomalías en una amplia variedad aplicaciones.
Los hiperparámetros CBLOF no son claves como en otros algoritmos, pero aun así los más importantes son:
Actualmente CBLOF no está implementado en Scikit-learn, pero si existe una implementación en la librería PyOD. Una librería de Python especializada en algoritmos de detección de anomalías. Como es habitual se puede instalar a través de pip escribiendo el siguiente comando:
pip install pyod
Alternativamente, para aquellos que usan conda, se puede instalar con el siguiente comando:
conda install -c conda-forge pyod
Una vez instalado PyOD en el sistema, ya se puede usar implementar modelos basado en CBLOF, al igual que otros algoritmos, para la detección de anomalías.
Antes de poder evaluar CBLOF en Python es necesario contar con un conjunto de datos con anomalías. Una de las opciones es crear un conjunto de datos, por ejemplo, con la función de make_moons() de Scikit-learn, y agregar datos aleatorios al conjunto de datos. Esto es lo que se hace en el siguiente ejemplo.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
# Generar el conjunto de datos de moons con ruido
X, _ = make_moons(n_samples=1000, noise=0.1, random_state=42)
# Agregar algunas anomalías artificiales
outliers = np.random.uniform(low=-2, high=3, size=(50, 2))
X = np.vstack([X, outliers])
# Visualizar el conjunto de datos
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], s=10)
plt.title("Conjunto de Datos de Moons con Anomalías")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show() En este ejemplo, en primer lugar, se importan las funciones y se crea un conjunto de datos aleatorios con la make_moons(). Fijando la semilla a 42 para que los resultados sean fácilmente reproducibles. Posteriormente se agregan unos outliers con las funciones aleatorias de NumPy. Finalmente, se crea una gráfica para ver el conjunto de datos generado.
Una vez se dispone de los datos en los que se desea detectar las anomalías solamente se tiene que importar la clase CBLOF de PyOD para entrenar el modelo. Lo que se muestra en el siguiente ejemplo.
from pyod.models.cblof import CBLOF
# Inicializar y ajustar el modelo CBLOF
cblof_model = CBLOF(contamination=0.1, n_clusters=8) # Definimos la proporción de datos que consideramos anomalías y el número de clústeres
cblof_model.fit(X)
# Obtener las puntuaciones de anomalía
anomaly_scores = cblof_model.decision_scores_
# Etiquetar los puntos de datos como anomalías o no anomalías
labels = cblof_model.predict(X)
# Visualizar el conjunto de datos con las anomalías detectadas
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='coolwarm', s=10)
plt.title("Conjunto de Datos de Moons con Anomalías Detectadas (CBLOF)")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show() En este caso, una vez importado CBLOF, se crea una instancia del modelo con una contaminación del 10%, la proporción de los datos en el modelo de entrenamiento que se consideran anomalías, y 8 clusters. A continuación, se llama al método fit() con el conjunto de datos usado. Las puntuaciones de las anomalías en el conjunto de datos de entrenamiento se pueden obtener del parámetro decision_scores_. Aunque, como es habitual, es más interesante usar el método predict() para obtener una predicción de las anomalías. Finalmente, se usa el resultado para crear una gráfica donde las anomalías y los datos se representan con un color diferente.
En este ejemplo, se puede ver como CBLOF detecta bastante bien las anomalías en este conjunto de datos. Como es habitual el uso para que el algoritmo muestre más o menos anomalías se puede gestionar con el parámetro contamination. En el ejemplo se ha decidido un 10%, pero es un valor que se puede cambiar.
Clustering-Based Local Outlier Factor (CBLOF) es un algoritmo para la detección de anomalías que combina la agrupación de datos con la evaluación de la rareza local. Lo que le permite obtener una gran precisión. Al identificar anomalías dentro de clústeres específicos, CBLOF puede proporcionar una detección efectiva de anomalías en conjuntos de datos heterogéneos y con diferentes densidades locales.
Imagen de Nicky ❤️🌿🐞🌿❤️ en Pixabay
En la era del dato, las organizaciones se enfrentan al reto de gestionar volúmenes masivos…
En la serie Creación de una API REST con Express y TypeScript construimos una API…
Durante la Segunda Guerra Mundial, la Fuerza Aérea de Estados Unidos quería reforzar sus aviones…
En muchas situaciones —ya sea para grabar un tutorial, tomar capturas de pantalla profesionales, probar…
Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…
En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…
This website uses cookies.