Análisis de grafos de dispositivos: conectando los puntos entre sesiones
Cómo las bases de datos de grafos revelan conexiones ocultas entre dispositivos, permitiendo la detección de multicuentas y la identificación de redes de fraude a escala.
Cuando un solo defraudador opera docenas de cuentas, las cuentas individuales parecen legítimas de forma aislada. Cada una tiene un correo electrónico único, una dirección IP plausible, patrones de navegación realistas. La detección tradicional basada en reglas comprueba cada cuenta de forma independiente y no encuentra nada sospechoso. Las conexiones entre cuentas —los dispositivos compartidos, las sesiones solapadas, las huellas de red comunes— son invisibles para los sistemas que procesan las cuentas de una en una.
Por qué grafos
El análisis de grafos de dispositivos cambia el modelo. En lugar de evaluar las cuentas de forma independiente, construimos un grafo donde los nodos son dispositivos, cuentas, direcciones IP y sesiones, y las aristas representan conexiones observadas: "este dispositivo se usó para crear esta cuenta", "esta IP se vio con este dispositivo", "estas dos cuentas compartieron una cookie de sesión". El grafo revela una estructura que las tablas planas no pueden mostrar.
Una red de fraude que usa 50 cuentas en 5 dispositivos y 3 direcciones IP forma un clúster distintivo en el grafo. La densidad del clúster —muchas conexiones dentro de un pequeño grupo de nodos— es una señal fuerte. Los usuarios legítimos rara vez comparten dispositivos con desconocidos, y sus conexiones cuenta-dispositivo forman estructuras dispersas, en forma de árbol, en lugar de clústeres densos.
Arquitectura de la base de datos de grafos
Usamos un modelo de grafo de propiedades con cuatro tipos de nodo: Device (identificado por el ID de visitante), Account (su ID de usuario), Network (dirección IP + ASN) y Session (evento de identificación individual). Las aristas llevan metadatos: marca de tiempo, puntuación de confianza y tipo de evento.
El grafo se almacena en un índice de adyacencia construido a medida y optimizado para recorridos de 2 saltos. Cuando llega un nuevo evento de identificación, insertamos el evento como un nodo Session, lo conectamos a los nodos Device y Network y comprobamos si alguna Account vinculada tiene conexiones con otros dispositivos. Esta operación de inserción y consulta se completa en menos de 5ms para grafos de hasta 10 millones de nodos.
En realidad, primero probamos Neo4j. Funcionó de maravilla en desarrollo con 100,000 nodos. Luego cargamos datos de producción —500 millones de nodos— y las consultas Cypher que tardaban 2ms empezaron a tardar 800ms. David pasó una semana comparando alternativas antes de que construyéramos nuestro propio índice de adyacencia respaldado por RocksDB fragmentado. A veces la solución aburrida y a medida supera a la elegante solución lista para usar.
Algoritmos de clustering
Aplicamos dos algoritmos de clustering al grafo de dispositivos:
Componentes conexos
El enfoque más simple: encontrar todos los nodos alcanzables desde un dispositivo dado. Si el Device A está conectado a la Account 1 y a la Account 2, y el Device B también está conectado a la Account 2, entonces los Device A y B están en el mismo componente conexo. Esto identifica todas las cuentas que comparten cualquier conexión transitiva de dispositivo.
Los componentes conexos son rápidos de calcular, pero pueden producir clústeres muy grandes cuando dispositivos compartidos legítimos (ordenadores familiares, terminales de biblioteca) crean puentes entre cuentas no relacionadas. Abordamos esto con la ponderación de aristas: las conexiones a través de entornos compartidos conocidos reciben menor peso.
Detección de comunidades
Para un análisis más matizado, ejecutamos la detección de comunidades de Louvain sobre el grafo ponderado. Este algoritmo divide el grafo en comunidades donde las conexiones intracomunidad son densas y las conexiones intercomunidad son dispersas. Las redes de fraude forman comunidades compactas incluso cuando están conectadas al grafo más amplio a través de infraestructura compartida.
El algoritmo de Louvain se ejecuta en tiempo O(n log n), lo que lo hace práctico para grafos con millones de nodos. Lo ejecutamos de forma incremental: cuando se añaden nuevas aristas, actualizamos las asignaciones de comunidad localmente en lugar de recalcular toda la partición.
Patrón del mundo real: detección de redes de fraude
Una plataforma de gaming integró nuestra API de grafos de dispositivos para detectar redes de fraude organizadas. En la primera semana, el grafo reveló un clúster de 127 cuentas conectadas a través de 8 dispositivos y 4 direcciones IP. Las cuentas se habían creado a lo largo de un período de 3 meses, cada una con un correo electrónico único y un perfil realista. La detección basada en reglas no había marcado ninguna de ellas.
La estructura del grafo fue la delación: 127 cuentas que comparten 8 dispositivos produce una media de 15.8 cuentas por dispositivo. Los usuarios legítimos promedian 1.2 cuentas por dispositivo en esta plataforma. La densidad del clúster estaba 47 veces por encima de la línea base: una señal de fraude inequívoca.
Rendimiento a escala
Nuestro grafo de dispositivos de producción maneja 2,300 millones de nodos y 8,100 millones de aristas. La latencia de inserción es de 2.4ms en el p99. El recorrido de dos saltos (encontrar todas las cuentas conectadas a un dispositivo a través de cualquier ruta de longitud 2) se completa en 4.1ms en el p99. Las actualizaciones de la detección de comunidades procesan 50,000 nuevas aristas por segundo.
El grafo se fragmenta por hash del ID de dispositivo en 12 nodos, y cada shard contiene aproximadamente 190 millones de nodos. Un factor de replicación de 3 garantiza la disponibilidad. Tomamos una instantánea del grafo cada hora para la recuperación ante desastres y ejecutamos un recálculo completo de la detección de comunidades a diario como comprobación de consistencia frente a las actualizaciones incrementales.
Integración
El grafo de dispositivos es accesible a través de dos interfaces: una API de consulta en tiempo real para búsquedas individuales (¿está este dispositivo conectado a otras cuentas?) y una API de exportación por lotes para analítica (dame todos los clústeres con más de N cuentas). La API en tiempo real está diseñada para decisiones de fraude en línea: consulta durante la creación de la cuenta para comprobar si el dispositivo ha visto otras cuentas. La API por lotes alimenta los flujos de trabajo de investigación de su equipo de datos.