• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Encuestas: Tamaño de Muestra
    • Lotería: Probabilidad de Ganar
    • Reparto de Escaños (D’Hondt)
    • Tres en Raya con IA
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • Banggood
      • GeekBuying
      • Lenovo

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • Excel
  • Matlab

Explorando Clustering-Based Local Outlier Factor (CBLOF) para la detección de anomalías

mayo 31, 2024 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 7 minutos

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

  • 1 Fundamentos de Clustering-Based Local Outlier Factor (CBLOF)
    • 1.1 1. Creación de una agrupación de los datos
    • 1.2 2. Evaluación del factor de anomalía local
    • 1.3 3. Identificación de anomalías
    • 1.4 Ventajas de CBLOF
    • 1.5 Hiperparámetros importantes en CBLOF
  • 2 Uso de Clustering-Based Local Outlier Factor (CBLOF) en Python
    • 2.1 Creación de un conjunto de datos de ejemplo
  • 3 Creación de un modelo
  • 4 Conclusiones

Fundamentos de Clustering-Based Local Outlier Factor (CBLOF)

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:

Publicidad


1. Creación de una agrupación de los datos

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.

2. Evaluación del factor de anomalía local

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

Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo
En Analytics Lane
Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo

Para calcular el LOF de un punto p, se sigue este proceso:

  1. Densidad local: Se calcula la densidad local para cada punto p como la inversa de la distancia promedio a sus k vecinos más cercanos dentro del mismo clúster. \text{Densidad Local}(p) = \frac{1}{\text{Distancia Promedio a los } k \text{ Vecinos Más Cercanos}}
  2. Densidad de vecinos: Se calcula la densidad de los clústeres vecinos al clúster al que pertenece p. Esto se hace localizando los k vecinos más cercanos de p que pertenecen a diferentes clústeres y calculando la densidad local para cada uno de estos.
  3. Factor de anomalía local (LOF): El LOF de p se calcula como la razón entre la densidad local de p y la densidad media de sus vecinos. \text{LOF}(p) = \frac{\text{Densidad Local}(p)}{\text{Densidad Media de los Vecinos}}

Un LOF alto indica que p es valor poco probable, lo que sugiere que podría ser una anomalía.

Publicidad


3. Identificación de anomalías

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.

Ventajas de CBLOF

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:

  • Robustez en datos con variabilidad en las densidades: CBLOF muestra una gran robustez en conjuntos de datos donde los valores de densidad local es variable. Lo que se debe a la evaluación del factor de anomalía local dentro de los clústeres. Haciendo que sea efectivo para identificar anomalías en regiones densas y dispersas.
  • Interpretación intuitiva de los resultados: Al combinar el análisis de clúster con la evaluación del factor de anomalía local los resultados son más fáciles de comprender. Provocando que esto sea más fácil de interpretar que otros algoritmos.
  • Mantiene un buen rendimiento en grandes conjunto de datos: CBLOF puede escalar bien a conjuntos en grandes conjuntos de datos debido a su eficiencia a la hora de calcular el factor de anomalía local dentro de los clústeres.
  • Detección de patrones anómalos en regiones: Al evaluar el factor de anomalía local dentro de clústeres, CBLOF es capaz de detectar anomalías locales en diferentes regiones. Esto lo hace efectivo para identificar anomalías que pueden estar en áreas específicas.
  • No requiere el ajuste de hiperparámetros altamente sensibles: CBLOF no requiere ajuste de hiperparámetros sensibles como el número de árboles en Isolation Forest o la selección de la función de kernel en One-Class SVM. Esto hace más sencillo su utilización por partes de usuarios con poca experiencia.
  • Independiente de distribución: A diferencia de otros métodos como Elliptic Envelope, CBLOF no hace suposiciones específicas sobre la distribución subyacente de los datos. Por lo tanto, puede adaptarse a una variedad más amplia de conjuntos de datos con diferentes distribuciones.

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.

Publicidad


Hiperparámetros importantes en CBLOF

Los hiperparámetros CBLOF no son claves como en otros algoritmos, pero aun así los más importantes son:

  • n_clusters: El número de clústeres en los que se agruparán los datos. Este parámetro puede afectar significativamente el rendimiento de CBLOF y debe seleccionarse cuidadosamente para cada conjunto de datos.
  • contamination: El porcentaje esperado de anomalías en el conjunto de datos. Este parámetro es clave para determinar el umbral a partir del cual se identifican los registros como anomalías.
  • alpha: Un parámetro que controla la sensibilidad de CBLOF al ruido en los datos. Al aumentar el valor de alpha se pueden reducir el impacto del ruido en la detección de anomalías, pero también pueden aumentar el riesgo de obtener falsos negativos en la detección de anomalías.

Uso de Clustering-Based Local Outlier Factor (CBLOF) en Python

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.

Publicidad


Creación de un conjunto de datos de ejemplo

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()
Conjunto de datos creado con make_moons al que se le ha agregado datos aleatorios.
Lunas con anomalías para detectar con Clustering-Based Local Outlier Factor (CBLOF)

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.

Creación de un modelo

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()
Conjunto de datos creado con make_moons en el que se han detectados los datos aleatorios como anomalías.
Anomalías detectas, en rojo, en el conjunto de datos con Clustering-Based Local Outlier Factor (CBLOF)

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.

Publicidad


Conclusiones

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

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicaciones relacionadas

  • Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo
  • ¿Está concentrado el MSCI World? Un análisis con Gini, Lorenz y leyes de potencia
  • Curiosidad: ¿Por qué usamos p < 0.05? Un umbral que cambió la historia de la ciencia
  • Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)
  • La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento
  • Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows
  • Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte
  • Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)
  • Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

Publicado en: Ciencia de datos Etiquetado como: Aprendizaje no supervisado, Detección de anomalías, Machine learning, PyOD

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

octubre 23, 2025 Por Daniel Rodríguez

Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)

octubre 21, 2025 Por Daniel Rodríguez

Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte

octubre 16, 2025 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Hoja de cálculo para repartir los escaños en base al método D’Hont Aplicar el método D’Hondt en Excel publicado el abril 14, 2021 | en Herramientas
  • Cómo solucionar problemas de red en VirtualBox: Guía completa publicado el junio 11, 2025 | en Herramientas
  • Cómo calcular el tamaño de la muestra para encuestas publicado el septiembre 9, 2025 | en Ciencia de datos
  • La tabla de la web finalmente importada en Excel Importar tablas desde la web en Excel publicado el octubre 21, 2020 | en Herramientas
  • pandas Pandas: Cómo iterar sobre las filas de un DataFrame en Pandas publicado el septiembre 13, 2021 | en Python

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.5 (10)

Diferencias entre var y let en JavaScript

Publicidad

Comentarios recientes

  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown
  • Daniel Rodríguez en Tutorial de Mypy para Principiantes

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2025 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto