PyGOD (Python Graph Outlier Detection) es una biblioteca especializada diseñada para identificar patrones anómalos en estructuras de datos de grafos. Construida sobre ecosistemas robustos como PyTorch y PyTorch Geometric (PyG), ofrece una interfaz unificada para aplicar algoritmos de vanguardia en redes sociales, sistemas financieros y bioinformática.
Capacidades Principales de la Librería
- Diversidad Algorítmica: Incluye implementaciones optimizadas de modelos como DOMINANT, GAE, ANOMALOUS y CoLA.
- Arquitectura Unificada: Utiliza una API consistente similar a scikit-learn, facilitando la transición entre diferentes modelos.
- Optimización de Recursos: Soporta aceleración por GPU y procesamiento por lotes para manejar grafos de gran escala.
- Utilidades de Evaluación: Herramientas integradas para inyección de anomalías sintéticas y métricas de rendimiento.
Instalación del Entorno
Para comenzar a trabajar con PyGOD, se recomienda utilizar un entorno virtual de Python 3.8 o superior. El proceso de instalación estándar se realiza mediante el gestor de paquetes pip:
pip install pygod
Es fundamental asegurarse de tener instaladas las versiones compatibles de las dependencias base, especialmente PyTorch (>= 2.0.0) y Torch Geometric (>= 2.3.0), para garantizar la estabilidad de los detectores profundos.
Estructura y Clases Fundamentales
La arquitectura de PyGOD se organiza en torno a dos clases abstractas principales que definen el flujo de trabajo:
Detector: La clase base para todos los algoritmos, proporcionando métodos esenciales comofit(),decision_function()ypredict().DeepDetector: Una extensión deDetectordiseñada específicamente para modelos basados en redes neuronales, gestionando la inicialización de pesos y la retropropagación.
Implementación Paso a Paso
1. Preparación de Datos e Inyección de Anomalías
En escenarios reales, las anomalías suelen estar ocultas. Para propósitos de entrenamiento o evaluación, PyGOD permite cargar datasets estándar e inyectar anomalías estructurales o contextuales.
import torch
from pygod.utils import load_data
from pygod.generator import gen_contextual_outlier, gen_structural_outlier
# Carga de un dataset pre-construido
grafo_base = load_data('inj_cora')
grafo_base.y = grafo_base.y.bool()
# Ejemplo de inyección manual de anomalías en un objeto de datos PyG
# Generamos 50 anomalías contextuales y 50 estructurales
grafo_prolongado, etiquetas_c = gen_contextual_outlier(grafo_base, n=50, k=30)
grafo_final, etiquetas_s = gen_structural_outlier(grafo_prolongado, m=15, n=15)
# Combinar etiquetas de anomalías
grafo_final.y = torch.logical_or(etiquetas_c, etiquetas_s).long()
2. Configuración y Entrenamiento del Modelo
Utilizaremos el algoritmo DOMINANT, un autoencoder de grafos que detecta anomalías basándose en errrores de reconstrucción tanto en atributos como en estructura.
from pygod.detector import DOMINANT
# Instanciar el detector con hiperparámetros personalizados
modelo_detect = DOMINANT(hid_dim=128,
num_layers=3,
epoch=150,
lr=0.005,
weight_decay=1e-4)
# Ajustar el modelo al grafo
modelo_detect.fit(grafo_final)
3. Inferencia y Evaluación de Resultados
Una vez entrenado, el modelo puede generar puntuaciones de anomalía y predicciones binarias.
from pygod.metric import eval_roc_auc
# Obtener predicciones y puntuaciones brutas
etiquetas_pred, scores_anomalia = modelo_detect.predict(grafo_final,
return_pred=True,
return_score=True)
# Evaluación del rendimiento mediante el área bajo la curva ROC
valor_auc = eval_roc_auc(grafo_final.y, scores_anomalia)
print(f"Rendimiento del modelo (AUC): {valor_auc:.4f}")
Selección del Algoritmo Adecuado
La elección del modelo depende de la naturaleza de las anomalías esperadas en los datos:
- Enfoque en Atributos: Si las anomalías se definen principalmente por valores de nodos inconsistentes con sus vecinos, algoritmos como
ANOMALOUSson efectivos. - Enfoque Estructural: Para detectar conexiones inusuales o comunidades anómalas,
GAE(Graph Autoencoder) ofrece excelentes resultados. - Enfoque Híbrido:
DOMINANTyCoLAson las opciones más robustas al considerar simultáneamente la topología y los atributos de los nodos.
Consideraciones Técnicas de Rendimiento
Para optimizar el entrenamiento en grafos de gran volumen, se recomienda:
- Normalización de Características: Aplicar transformaciones de escala para asegurar la convergencia del optimizadro.
- Gestión de Memoria: Utilizar el parámetro
batch_sizeen detectores compatibles para evitar desbordamientos de memoria en la GPU. - Ajuste de Contaminación: El parámetro
contaminationdebe reflejar la proporción esperada de anomalías en el conjunto de datos para calibrar correctamante los umbrales de decisión.