🏦 Técnicas e estudos sobre prevenção de fraudes em instituições bancárias.
Técnicas e estudos sobre prevenção de fraudes em instituições bancárias.
Um título bem jornalístico, eu diria, mas de fato preciso de sua atenção, acredito que podemos aprender muito com esse "artigo"
Ontem recebi um email de uma das newsletters em que estou incrito com o seguinte título: "How Robinhood uses Graph Algorithms to prevent Fraud".
Para os interessados, esse é o link do artigo: https://blog.quastor.org/p/how-robinhood-uses-graph-algorithms-to-prevent-fraud
Logo de cara eu pensei, mas o que grafos têm haver com prevenção de fraudes.
Então, reconhecendo minha ignorância no assunto junto com meu desejo louco de aprender cada vez mais, cliquei no artigo para aprender mais um assunto interessante.
Comecei ler o artigo e confesso que a cada novo parágrafo que lia uma nova sinapse acontecia no meu cérebro, eu quase podia sentir a conexão de vários neurônios e seus
pulsos eletroquímicos sendo passados pelo canal axônio e enviando informações para outro neurônio.
Então, não podia reter esse conteúdo dentro da minha cabeça, então aqui estou eu e espero conseguir compartilhar conhecimento com vocês.
Tudo começa com uma necessidade.
Necessidade essa de previnir uma instituição bancária contra fraudes.
Logo de cara, temos 3 tipos comuns de fraudes:
- Identity Fraud (impersonar outro usuário)
- Account Takeover (tomar controle sobre uma conta e remover todo o recurso financeiro ali existente)
- First-Party fraud (um ótimo exemplo é fazer o famoso empréstimo, mas com intenções diretas em não pagar o recebido)
Agora que temos um problema para resolver, precisamos pensar em uma solução e para isso vamos destacar alguns pontos importantes sobre fraudes.
Quando uma fraude acontece, normalmente involve múltiplas contas e é executada de maneira cordenada.
Devido essa cordenação, conta pertencentes aos atacantes frequentemente compartilham de alguns elementos em comun como, mesmo IP, endereço, conta bancária, etc.
Isso já nos traz uma luz sobre os algoritimos de grafo, pois se pensarmos um pouco iremos perceber que se temos atacantes (vertices) que compartilham de informações em comun (edges),
temos quase que uma estrutura de grafo abstrata.
A propósito, como iremos ver no decorrer do meu texto, os grafos são extremamente efetivos atacando esse tipo de fraude.
A instituição em questão também tem um post sobre isso bem completo: https://newsroom.aboutrobinhood.com/preventing-fraud-at-robinhood-using-graph-intelligence
Dois algoritimos foram utilizados pela instituição:
- Vertex-centric
- Graph-centric
Sendo que o algoritimo vertex-centric em tempo real e o graph-centric de forma offline e depois inserindo os resultados em uma base online para o uso.
O algorítimo vertex-centric nos ajuda a quantificar a probabilidade de um usuário ser um ator malicioso.
Nós iniciamos o algoritimo a partir de um seed (geralmente um ator malicioso já conhecido) e vamos expandindo no grafo a partir dele.
Dessa forma identificamos vizinhos potencialmente perigosos pois basicamente compartilham de muitas informações do nosso ator malicioso usado como seed, já os que ficam
"mais distantes" têm uma menor probabilidade de serem atores maliciosos (com base nesse algoritimo) pois não compartilham de muitas característica de nosso já conhecido atacante.
Combinado com outros sinais de fraude, esse algoritimo se torna muito efetivo em descobrir e mitigar ataques emergentes.
Sendo assim muito interessante seu uso em tempo real, pois, supondo que recebemos uma transação de um usuário, podemos analisar o quanto essa transação se parece com uma transação maliciosa.
Além disso exitem outras técnicas como Temporal Motifis, que iremos ver um pouco logo mais.
O algoritimo graph-centric por sua vez, nos ajuda a encontrar clusteres (ou grupos) em um grafo que compartilham de comportamentos estranhos e potencialmente fraudulosos.
É como se pegassemos um grupo de pessoas e fossemos separando por histórico criminal, acredito que concordamos que uma pessoa que têm um histórico criminal extenso é mais
suscetível a cometer outro ato criminoso do que alguém com um histórico impecável (nesse exemplo estamos deixando de lado todos os outros fatores psicológicos, sociais, ...., alanisando apenas o histórico em si).
Dessa forma é possível identificar grupos potencialmente arriscados, onde devemos, durante uma transação, por exemplo, sermos mais cautelosos e talvez utilizar do algoritimo anterior para ter uma
resposta em probabilidade mais acertiva e usar essas duas técnicas junto de outros sinais para determinar se aquela é uma transação maliciosa ou não com base nos resultados.
Além disso, outros algoritimos como:
- Connected Components
- Page Rank
São muito úteis também, apenas para destacar o Page Rank, esse algoritimo executa a função de medir a importância ou influência
de cada node dentro de um grafo baseado no número e qualidade da conexões dele.
É como se você julgasse a índole de alguém baseado nas suas amizades.
Pois, se uma pessoa recebe transações de um ator malicioso, mesmo essa pessoa não executando nenhuma das três fraudes citadas no começo ela pode ser considerada como
um atacante "passivo"? isso seria uma nomenclatura minha.
Para lidar com esse tipo de dados, temos que usar bases de dados feitas para podermos trabalhar diretamente com grafos, pois dependendo da base de dados e do seu poder monetário
é possível executar coisas como 12.8 BILHÕES de hopes POR SEGUNDO como diz esse artigo: https://dmccreary.medium.com/how-to-explain-index-free-adjacency-to-your-manager-1a8e68ec664a,
isso quer dizer que a partir de um node você pode acessar na casa de BILHÕES de outros nodes em um segundo, o que é assustadoramente absurdo.
Encontrei resultados ainda mais impressionantes aqui: https://graph500.org/.
Dado que os grafos nativos usam a estratégia de pointer-hopping para acessar seus nodes vizinhos, ou seja, cada node tem um endereço físico na memória RAM que é carregado durante o load e não durante uma query
para se tornar mais efciente. ou seja, você tem acesso direto aos nodes, diferentemente de um banco relacional como mysql, por exemplo, que utiliza de índices, então primeiramente você precisa fazer um row scan (mesmo usando
tecnicas com binary search) e então ao achar o item você usa uma foreign key para fazer um relacionamento que está em uma "base de indices" que por sua vez diz onde está o vizinho que você quer buscar.
Por isso temos bancos de dados que são "grafos nativos" como por exemplo:
- Neo4J
- ArangoDB
- OrientDB (possuído agora pela SAS)
Esses bancos lhe dão a possibilidade de lidar com grafos de uma maneira eficiente, mesmo não sendo tão trivial lidar com uma modelagem de dados em grafo de larga escala.
Além do mais eles costuma ter de forma integrada alguns algoritimos prontos como:
- Path finding
- Similarity
- Community Detection
- Entre outros
Além disso, também há uma técnica muito interessante chamada de Temporal Motif Network.
Vou deixar aqui a referência de um artigo do arxiv: https://arxiv.org/abs/2301.07791
Uma Temporal Motif Network é definida como um set de nodes que interagem uns com os outros em um curto período de tempo.
Para friendship detection ("detecçã de amizade"), essa técnica traz melhores resultados que outra heurísticas gerais como por exemplo Jaccard e Adamic-Adar.
Também é capaz de identificar "vendors" com uma alta precisão e observar padrões interessantes em Motifis raros, como ciclos temporais.
Esses chamados "ciclos temporais" são raros, segundo o estudo (A -> B -> C -> A).
Mas, em uma das análises foi encontrado um padrão muito interessante nas notas de pagamento, como pessoas jogando poker e trocando fundos.
Então é possível observar como a base é muito importante quando se fala em tecnologia.
Pois, vimos aqui alguns algoritimos e técnicas complexos mas que quase todos giram em torno da estrutura de dados em grafos.
Além disso aprendemos um pouco sobre técnicas que instituições financeiras utilizam para cada vez mais se proteger contra fraudes.
Uma coisa que percebo cada vez mais é que o termo Machine Learning tem sido cada vez mais "endeusado" quando tudo no final é um conjunto
de técnicas, cálculos e algoritimos que retornam um resultado baseado no padrão encontrado nas entradas fornecidas.
Não estou dizendo que é simples, mas que é algo que precisa ser estudado meticulosamente etapa por etapa, para assim, como diz Pierluigi Piazzi, construir o prédio por etapas para que quando chege no último
andar não esteja com um alicerce ruim e todo o prédio venha abaixo.
Espero ter compartilhado um pouco do que aprendi sobre prevenção de fraudes em instituições financeiras.
#bank #graph #neo4j #algorithms #fraudprevention #financialinstituition #programming #cs #computerscience #keeplearning #cornelluniversity #arxvi