Coordenador de Dados & Analytics de Canais. Framing do problema, requisitos, priorização e o caminho até as áreas que usaram o dado.
Engenharia de dados, segurança, crédito, atendimento e as cooperativas fizeram o resto. Case publicado em medium.com/@fernandocarliniguimaraes
Maio · 2024
A água entrou em casa. Na minha também.
Uma segunda-feira, a empresa inteira para tudo que não fosse ajudar o Rio Grande do Sul. E no meio daquele caos chega uma mensagem num grupo de WhatsApp: "a gente teve uma ideia".
01 · O problema
Uma pergunta que parecia óbvia
Onde estão os nossos associados afetados?
Quem são. Onde estão. Qual o nível da água na casa deles. E na agência mais perto da casa deles.
01 · O problema
O endereço cadastral conta um lugar.
A vida da pessoa acontece em vários. E o cadastro envelhece: a gente muda de bairro, de cidade, de estado, e o banco é o último a saber.
Exemplo real: o meu cadastro ainda aponta pra cidade onde eu morava quando me associei.
01
A casa onde mora
02
A casa dos pais
03
O trabalho
04
O negócio próprio
05
A propriedade rural
02 · O insight
O dado já existia
Geolocalização das transações PIX
Quando o associado permite a localização no app, a transação carrega latitude e longitude. O dado nasceu pra segurança e prevenção a fraude.
A pergunta nova:
O mesmo dado mostra onde a pessoa vive a vida?
As pessoas transacionam repetidamente em volta dos lugares que importam pra elas.
Como funciona
Quinze minutos de mão na massa.
Tudo o que vocês vão ver rodando aqui é um associado fictício, com dados sintéticos. Nenhum ponto é de uma pessoa real.
03 · Arquitetura
Quatro paradas, da transação ao mapa.
01
Filtro geográfico
A transação aconteceu dentro do RS? Ponto-em-polígono contra o contorno do estado. Corta o volume antes de tudo.
02
Clusters por pessoa
DBSCAN no histórico de cada associado. Milhares de submodelos, um por pessoa.
03
Centros de gravidade
Cada cluster vira um centroide, com o peso de quantas transações ele concentra.
04
Interseção com a mancha
Centroide dentro dos polígonos de inundação publicados pela UFRGS? Associado potencialmente afetado.
Databricks · Python · PySpark · DBSCAN · MLflow · Google Maps API · polígonos de inundação da UFRGS
04 · Demo · Uma pessoa, um ano de transações
Quantos lugares importam pra essa pessoa?
Associado fictício · 12 meses · dados sintéticos
Ver como
k (clusters fixos)
2
Pontos
—
Grupos
—
Ruído
—
Precisa de k?
—
Cada ponto é uma transação com geolocalização.
05 · O algoritmo
Density-Based Spatial Clustering of Applications with Noise
Dois parâmetros. Três tipos de ponto.
ε
Raio da vizinhança"quão perto" é perto. Aqui, em metros (distância haversine na esfera).
minPts
Mínimo de vizinhosquantas transações dentro de ε fazem um lugar ser "denso".
06 · Demo · DBSCAN rodando
Mexam no raio. Vejam o que acontece.
ε em metros · associado fictício
ε · raio
120 m
minPts
5
Clusters
—
Ruído
—
Núcleos
—
Bordas
—
Aperte ▶ pra ver o algoritmo visitando ponto por ponto.
07 · Escolha do algoritmo
Por que ele
Onde ele sofre
01
Não precisa saber kuma pessoa tem 1 lugar, outra tem 4.
02
Tem conceito de ruídoa viagem não vira um "centro de gravidade".
03
Aceita qualquer formae qualquer métrica, inclusive haversine.
01
Um ε pra densidades diferentescidade densa e zona rural pedem raios diferentes.
02
Memória em dado muito densoe GPS de quem paga conta em casa é o dado mais denso que existe.
03
Não escala "de graça"o próximo bloco é sobre isso.
08 · Demo · Do cluster ao centro de gravidade
Cada cluster vira um ponto e um peso.
× = centroide (média das coordenadas do cluster)
O centroide não é "onde a pessoa mora". É onde o comportamento dela se concentra, de forma recorrente.
No caso real, a entrevista com associados confirmou o padrão: a casa, a casa dos pais, o comércio do bairro.
09 · Demo · Ponto-em-polígono
Cadastro × comportamento, contra a mancha.
Clique em qualquer lugar do mapa para testar
Procurar o associado por
Na mancha?
—
Cruzamentos
—
Ray casting: solta um raio do ponto pra direita e conta quantas bordas do polígono ele cruza. Ímpar = dentro. Par = fora.
Escala
Rodar DBSCAN numa pessoa é fácil.
Rodar em milhares de pessoas e milhões de transações por mês, numa semana, durante uma enchente, não é.
10 · Demo · A conta da memória
Por que não rodar um DBSCAN só pra todo mundo?
Transações no recorte
10 mi
Transações por associado (média)
200
RAM do nó
256 GB
Pior caso do DBSCAN em dado denso: cada ponto vizinho de todo mundo, ~n² pares de vizinhos guardados (8 bytes cada).
Um DBSCAN global
—
RAM
Um DBSCAN por associado
—
RAM
11 · Engenharia
Não tinha biblioteca pronta. Então o time fez uma.
As capacidades geoespaciais do PySpark disponíveis na época não davam conta, juntas, de:
01
escala do dado
02
clustering individualizado
03
processamento geográfico + performance
A decisão
Uma solução própria de processamento single-node, dentro do Databricks que já existia.
Em crise, reaproveitar a plataforma que tu já tem vale mais do que desenhar uma stack nova.
12 · Demo · O padrão: dividir por pessoa e paralelizar
Uma fila de associados. Todos os núcleos ocupados.
Ilustração do padrão · cada bloco = o DBSCAN de um associado
Núcleos no nó
16
Associados
—
Tempo
—
Sequencial
—
Speed-up
—
Associados independentes = nenhuma comunicação entre tarefas. O gargalo vira a maior tarefa e a memória de cada uma, não a rede.
13 · Do slide pro notebook
# esqueleto ilustrativo (não é o código de produção)import numpy as np
from sklearn.cluster import DBSCAN
from joblib import Parallel, delayed
R = 6_371_000# raio da Terra, em metrosdef lugares_do_associado(pdf, eps_m=120, min_pts=5):
xy = np.radians(pdf[["lat", "lon"]].to_numpy())
pdf["cluster"] = DBSCAN(
eps=eps_m / R, min_samples=min_pts,
metric="haversine", algorithm="ball_tree",
).fit_predict(xy) # -1 = ruídoreturn pdf
# 1 tarefa por associado, todos os núcleos do nó
grupos = df_rs.groupby("associado_id")
partes = Parallel(n_jobs=-1)(
delayed(lugares_do_associado)(g) for _, g in grupos)
O que faz caber num nó só
01
Filtrar antes (só o RS)case
02
Particionar por associadocase
03
Índice espacial + haversinecase
04
Deduplicar coordenadas com pesocase
05
Paralelizar nos núcleoscase
06
MLflow pra rastrear parâmetroscase
Do mapa à ação
Modelo que não entra numa decisão é só uma análise bonita.
14 · Uso 01 · Atendimento
Perdeu o celular na enchente. A agência está debaixo d'água.
O único canal que sobrou era o telefone e o WhatsApp. E os golpistas sabiam disso.
A decisão real
Como facilitar o acesso de quem foi atingido sem criar uma nova brecha de segurança?
O sinal geográfico entrou na fila de reativação do token: quem tinha centro de gravidade na área atingida ganhava prioridade, com os controles de segurança mantidos.
15 · Usos 02–04
A capacidade ficou. A pergunta mudou.
Crédito
De "foi afetado?" pra "quanto a capacidade de pagar foi afetada?"
Severidade da área como sinal pro risco de atraso de parcelas.
Reconstrução
Que infraestrutura importa pra onde as pessoas vivem?
Insumo para estudos com BCG e Oliver Wyman: estradas, energia, recursos de desenvolvimento social.
Alcance
1.500+ acessos de 400+ pessoas
Dashboards e relatórios analíticos consumidos pelas áreas e cooperativas, inclusive de fora do RS.
16 · Produto
A enchente foi o primeiro caso de uso
O produto era a geografia comportamental.
Os centros de gravidade foram calculados pra associados do Brasil inteiro. A próxima emergência climática não começa do zero: cruza a nova mancha com centros que já existem.
Fraude · plausibilidade geográfica
18:02 Porto Alegre
18:20 São Paulo
≈ 2.800 km/h
~850 km em 18 minutos. Ninguém viaja assim. Distância, tempo e proximidade dos lugares habituais viram sinal de fraude.
17 · Pra levar
Pra levar
01
Endereço oficial não é geografia da vida.Cadastro e comportamento se complementam, não competem.
02
Teu dado responde perguntas pra que ele não foi desenhado.Pra quem tem startup: o log de segurança é ativo de produto.
03
O produto mais valioso pode estar escondido no 1º caso de uso.
04
Às vezes o problema grande são milhares de problemas pequenos.Antes de escalar a máquina, olha a forma do problema.
05
Ninguém construiu essa plataforma esperando uma enchente.Governança, dado padronizado e time de ciência criaram opções.
06
"O céu e a LGPD são o limite."Gunnar Guilherme Mayer
O valor de uma plataforma de dados não está só nos casos que você planejou.
Às vezes a capacidade que tu constrói hoje vira essencial pra um problema que ainda nem existe.