Análise de grafo de dispositivos: conectando os pontos entre sessões
Como bancos de dados de grafo revelam conexões ocultas entre dispositivos, permitindo detecção de multicontas e identificação de redes de fraude em escala.
Quando um único fraudador opera dezenas de contas, as contas individuais parecem legítimas isoladamente. Cada uma tem um e-mail único, um endereço IP plausível, padrões de navegação realistas. A detecção tradicional baseada em regras verifica cada conta de forma independente e não encontra nada suspeito. As conexões entre contas — os dispositivos compartilhados, as sessões sobrepostas, as impressões digitais de rede em comum — são invisíveis para sistemas que processam as contas uma de cada vez.
Por que grafos
A análise de grafo de dispositivos muda o modelo. Em vez de avaliar as contas de forma independente, construímos um grafo em que os nós são dispositivos, contas, endereços IP e sessões, e as arestas representam conexões observadas: "este dispositivo foi usado para criar esta conta", "este IP foi visto com este dispositivo", "estas duas contas compartilharam um cookie de sessão". O grafo revela uma estrutura que as tabelas planas não conseguem mostrar.
Uma rede de fraude que usa 50 contas em 5 dispositivos e 3 endereços IP forma um cluster distinto no grafo. A densidade do cluster — muitas conexões dentro de um pequeno grupo de nós — é um sinal forte. Usuários legítimos raramente compartilham dispositivos com estranhos, e suas conexões conta-dispositivo formam estruturas esparsas, em forma de árvore, e não clusters densos.
Arquitetura do banco de dados de grafo
Usamos um modelo de grafo de propriedades com quatro tipos de nós: Device (identificado pelo visitor ID), Account (seu ID de usuário), Network (endereço IP + ASN) e Session (evento individual de identificação). As arestas carregam metadados: timestamp, pontuação de confiança e tipo de evento.
O grafo é armazenado em um índice de adjacência sob medida, otimizado para travessias de 2 saltos. Quando um novo evento de identificação chega, inserimos o evento como um nó Session, conectamo-lo aos nós Device e Network e verificamos se qualquer Account vinculada tem conexões com outros dispositivos. Essa operação de inserção e consulta é concluída em menos de 5ms para grafos com até 10 milhões de nós.
Na verdade, primeiro tentamos o Neo4j. Ele funcionou muito bem em desenvolvimento com 100 mil nós. Então carregamos os dados de produção — 500 milhões de nós — e consultas Cypher que levavam 2ms passaram a levar 800ms. O David passou uma semana avaliando alternativas antes de construirmos nosso próprio índice de adjacência apoiado em RocksDB fragmentado. Às vezes, a solução chata e customizada vence a elegante solução de prateleira.
Algoritmos de clustering
Aplicamos dois algoritmos de clustering ao grafo de dispositivos:
Componentes conectados
A abordagem mais simples: encontrar todos os nós alcançáveis a partir de um determinado dispositivo. Se o Device A está conectado à Account 1 e à Account 2, e o Device B também está conectado à Account 2, então os Devices A e B estão no mesmo componente conectado. Isso identifica todas as contas que compartilham qualquer conexão de dispositivo transitiva.
Componentes conectados são rápidos de calcular, mas podem produzir clusters muito grandes quando dispositivos compartilhados legítimos (computadores de família, terminais de biblioteca) criam pontes entre contas não relacionadas. Resolvemos isso com ponderação de arestas — conexões através de ambientes compartilhados conhecidos recebem peso menor.
Detecção de comunidades
Para uma análise mais detalhada, executamos a detecção de comunidades Louvain sobre o grafo ponderado. Esse algoritmo particiona o grafo em comunidades em que as conexões intracomunidade são densas e as conexões intercomunidade são esparsas. As redes de fraude formam comunidades densas mesmo quando conectadas ao grafo mais amplo por meio de infraestrutura compartilhada.
O algoritmo Louvain roda em tempo O(n log n), o que o torna prático para grafos com milhões de nós. Nós o executamos de forma incremental — quando novas arestas são adicionadas, atualizamos as atribuições de comunidade localmente, em vez de recalcular a partição inteira.
Padrão do mundo real: detecção de redes de fraude
Uma plataforma de jogos integrou nossa API de grafo de dispositivos para detectar redes de fraude organizadas. Já na primeira semana, o grafo revelou um cluster de 127 contas conectadas por 8 dispositivos e 4 endereços IP. As contas haviam sido criadas ao longo de um período de 3 meses, cada uma com um e-mail único e um perfil realista. A detecção baseada em regras havia sinalizado zero delas.
A estrutura do grafo foi o que entregou: 127 contas compartilhando 8 dispositivos produz uma média de 15,8 contas por dispositivo. Usuários legítimos têm em média 1,2 conta por dispositivo nesta plataforma. A densidade do cluster estava 47x acima da linha de base — um sinal inequívoco de fraude.
Desempenho em escala
Nosso grafo de dispositivos em produção lida com 2,3 bilhões de nós e 8,1 bilhões de arestas. A latência de inserção é de 2,4ms no p99. A travessia de dois saltos (encontrar todas as contas conectadas a um dispositivo por qualquer caminho de comprimento 2) é concluída em 4,1ms no p99. As atualizações da detecção de comunidades processam 50.000 novas arestas por segundo.
O grafo é fragmentado por hash do ID do dispositivo em 12 nós, com cada shard armazenando aproximadamente 190 milhões de nós. Um fator de replicação de 3 garante a disponibilidade. Fazemos snapshots do grafo a cada hora para recuperação de desastres e executamos o recálculo completo da detecção de comunidades diariamente, como verificação de consistência contra as atualizações incrementais.
Integração
O grafo de dispositivos é acessível por meio de duas interfaces: uma API de consulta em tempo real para buscas individuais (este dispositivo está conectado a outras contas?) e uma API de exportação em lote para análises (dê-me todos os clusters com mais de N contas). A API em tempo real foi projetada para decisões de fraude em linha — consulte durante a criação da conta para verificar se o dispositivo já viu outras contas. A API em lote alimenta os fluxos de investigação da sua equipe de dados.