Correção Inteligente de Geolocalização: Quando a Média Não é Suficiente
Um método para identificar outliers em coordenadas geográficas usando análise de pares, ideal para bases de dados com ruído e pontos extremos.
1. O Problema: Dados de Geolocalização Inconsistentes
Recebi uma base de vendas com 35 clientes distribuídos em 6 cidades. O objetivo era analisar a distribuição geográfica das vendas, mas havia um problema grave: coordenadas inconsistentes.
PROBLEMAS IDENTIFICADOS
- Cliente com latitude 51.5074 (Londres) mas cidade registrada como Recife/PE
- Cliente com coordenadas 40.7128, -74.0060 (Nova York) mas cidade São Paulo/SP
- Cliente com longitude 139.6917 (Tóquio) mas cidade Belo Horizonte/MG
- Amostras pequenas por cidade (3 a 14 registros), tornando métodos tradicionais frágeis
2. Por que Média + Z-Score Falhou?
Inicialmente tentei usar métodos estatísticos tradicionais (média, desvio padrão, z-score). Mas eles falharam por um motivo simples:
Problema 1: Média Distorcida
Quando um outlier está muito distante (ex: Recife - Londres), a média se desloca completamente, tornando o cálculo do desvio padrão inútil.
Exemplo Recife:
Pontos válidos: -8.05, -8.12
Outlier: 51.51 (Londres!)
Média: 11.78 (Nenhum ponto está perto disso)
Z-score: Todos seriam outliers ou nenhum
Problema 2: Amostras Pequenas
Com poucos pontos (3-14 por cidade), o desvio padrão não é estatisticamente confiável. Um único outlier já distorce tudo.
• Recife/PE: 3 clientes
• Fortaleza/CE: 5 clientes
• Salvador/BA: 5 clientes
💡 Insight fundamental: O problema não era quem está mais distante da média, mas sim quem não forma nenhum par consistente com os demais.
3. A Solução: Análise de Pares Dentro da Cidade
1. Agrupar por cidade
Divide os dados por cidade e estado
2. Gerar todos os pares
Combinações possíveis dentro do grupo
3. Calcular desvio euclidiano
Distância normalizada entre pontos
4. Identificar pares bons
Usa quartil como limite dinâmico
5. Corrigir outliers
Substitui pela média dos pontos bons
Função de Desvio Entre Pares
def desvio_par(p1, p2):
# Calcula distância euclidiana normalizada entre dois pontos
lat1, lon1 = p1
lat2, lon2 = p2
# Distância euclidiana padrão
dist = np.sqrt((lat1 - lat2)**2 + (lon1 - lon2)**2)
# Normalização pelo valor máximo possível (√2)
return dist / np.sqrt(2)
4. Exemplo Prático: O Caso de Recife/PE
Recife tinha 3 clientes. Dois com coordenadas corretas e um com coordenadas de Londres (51.5074, -0.1278).
| Cliente | Latitude | Longitude | Status |
|---|---|---|---|
| Ana Souza | -8.0476 | -34.8770 | ✅ Correto |
| Bruno Lima | -8.1200 | -34.9500 | ✅ Correto |
| Carlos Silva | 51.5074 | -0.1278 | ❌ Outlier (Londres) |
Par (Ana, Bruno):
desvio = √[(-8.0476+8.12)² + (-34.877+34.95)²] / √2
desvio = √[0.0724² + 0.073²] / 1.414
desvio = 0.0728 (baixo)
Considerado par bom!
Pares Inválidos
Par (Ana, Carlos):
desvio = √[(-8.0476-51.5074)² + (-34.877+0.1278)²] / √2
desvio = √[59.555² + (-34.7492)²] / 1.414
desvio = 48.4 (muito alto)
Carlos não forma par bom com Ninguém
🎯 Resultado: Carlos foi identificado como outlier porque sua frequência em pares bons foi zero. Suas coordenadas foram substituídas pela média dos pontos válidos:
Latitude corrigida = (-8.0476 + -8.1200) / 2 = -8.0838
Longitude corrigida = (-34.8770 + -34.9500) / 2 = -34.9135
5. Resultados Alcançados
📊 Antes vs Depois
ANTES
- • Clientes com coordenadas erradas (Londres, NY, Tóquio)
- • Dashboards de mapa inutilizáveis
- • Análises por região comprometidas
DEPOIS
- • Todos os pontos corrigidos para a região correta
- • Mapas de calor precisos
- • Análises geográficas confiáveis
5.5 Visualização Interativa: Antes vs Depois da Correção
Compare visualmente o impacto da correção. Os pontos vermelhos são os outliers identificados. Após a correção, eles se reposicionam para o centro geográfico correto de sua cidade (pontos laranjas). O tamanho do círculo representa a quantidade de itens comprados.
ANTES DA CORREÇÃO
🔴 Pontos vermelhos = Outliers com coordenadas erradas (Londres, Nova York, Tóquio, etc.)
DEPOIS DA CORREÇÃO
🟠 Pontos laranjas = Outliers corrigidos para o centro da cidade | 🟢 Pontos verdes = Dados corretos desde o início
Legenda dos tamanhos: 🟢 Pequeno (1 item) 🟡 Médio (2-3 itens) 🔴 Grande (4-5 itens) | Clique nos marcadores para ver detalhes do cliente
6. Lições Aprendidas
🎯 Nem todo outlier está longe da média
Às vezes, o problema é que ele não se conecta com ninguém. A análise de pares capta isso perfeitamente.
📊 Método funciona com amostras pequenas
Enquanto z-score precisa de n ≥ 30, a análise de pares funciona com apenas 3-4 pontos por grupo.
🔧 Preserva a variação natural
Ao invés de forçar TODOS os pontos para a média, corrige apenas os outliers, mantendo a dispersão real dos dados.
🧠 Insight > Técnica
Às vezes, a melhor solução não é a mais complexa estatisticamente, mas a que melhor entende o padrão dos dados.
Código completo disponível no GitHub
Ver no GitHubRepositório com o código Python, base de dados exemplo e documentação completa do método.