Lei de Benford na investigação: como testar dados e quando não usar
A regra do primeiro dígito ajuda a priorizar auditorias e a achar números fabricados, mas só funciona em dados com o perfil certo, e nunca prova fraude sozinha.
Em resumo
- A Lei de Benford prevê que o dígito 1 lidera cerca de 30% dos números em muitos dados reais, e o 9 menos de 5%.
- O teste serve para triagem: aponta onde examinar documentos, mas nunca prova fraude sozinho.
- Códigos, valores tabelados e faixas estreitas, como votos por seção eleitoral, não seguem o padrão.
- Em bases grandes, use o MAD: acima de 0,015 indica não conformidade no teste do primeiro dígito.
- Teste subconjuntos, combine com outros sinais e guarde script, filtros e hash da base.
A Lei de Benford é uma regularidade estatística: em muitos conjuntos de números reais, o primeiro dígito 1 aparece em cerca de 30% dos casos, e o 9 em menos de 5%. Na investigação em fontes abertas, ela serve para triagem: aponta onde uma planilha de pagamentos, notas ou transações merece olhar mais atento. Ela não prova fraude, e em alguns tipos de dado, como votos por seção eleitoral, o teste simplesmente não se aplica.
O tema voltou ao debate no fim de outubro de 2026. Segundo checagens do Aos Fatos e da Lupa, um documento apócrifo apresentado como "relatório pericial independente" sobre o 2º turno da eleição presidencial dizia ter submetido os dados das seções ao teste de Benford, entre outras alegações classificadas como falsas pelas agências. É um bom ponto de partida para entender o que a ferramenta mede, como rodá-la com Python e por que o contexto do dado decide tudo.
O que é a Lei de Benford e por que ela funciona?
A observação é antiga: o astrônomo Simon Newcomb notou, no século XIX, que as primeiras páginas das tábuas de logaritmos eram mais gastas. O físico Frank Benford testou a ideia em milhares de números, de áreas de rios a estatísticas populacionais, e chegou à mesma distribuição.
A probabilidade de o primeiro dígito significativo ser d é dada por log10(1 + 1/d). Na prática:
| Primeiro dígito | Frequência esperada |
|---|---|
| 1 | 30,1% |
| 2 | 17,6% |
| 3 | 12,5% |
| 4 | 9,7% |
| 5 | 7,9% |
| 6 | 6,7% |
| 7 | 5,8% |
| 8 | 5,1% |
| 9 | 4,6% |
A intuição é a do crescimento proporcional. Um valor que cresce 10% ao mês passa muito tempo entre 100 e 199 (precisa dobrar para chegar a 200) e pouco tempo entre 900 e 999 (basta crescer 11% para virar 1.000). Dados que nascem de multiplicações, juros, somas de muitas parcelas e processos que atravessam várias ordens de grandeza tendem a seguir esse padrão.
Que problema ela resolve na investigação?
Pessoas que inventam números costumam distribuir os dígitos de forma mais "uniforme" do que a realidade. Fraudadores que fabricam notas fiscais tendem a evitar valores que começam com 1 e a repetir faixas logo abaixo de limites de aprovação (R$ 9.900 quando o teto é R$ 10.000, por exemplo). A auditoria contábil usa o teste há décadas, popularizado pelo pesquisador Mark Nigrini, para decidir por onde começar a examinar documentos.
Para quem faz OSINT, isso tem aplicações concretas:
- triagem de despesas publicadas em portais de transparência;
- análise de valores de contratos e aditivos de um mesmo fornecedor;
- verificação de planilhas vazadas ou divulgadas por terceiros, antes de usá-las numa reportagem;
- checagem de números citados em relatórios de autoria desconhecida.
Em todos os casos, o resultado é uma pergunta, não uma resposta: "por que esse conjunto destoa?".
Quais dados seguem a Lei de Benford e quais não seguem?
Essa é a parte que mais se erra. A literatura lista condições em que o padrão não deve ser esperado, e a Wikipédia resume bem os critérios usados em auditoria:
- Números atribuídos: números de cheque, de nota fiscal, de telefone, CEP, matrícula. São códigos, não medidas.
- Valores com piso ou teto: tarifas fixas, diárias tabeladas, benefícios com valor definido em lei.
- Faixas estreitas: altura, peso, notas de prova, idade. Se tudo cabe entre 150 e 200, não há como o dígito 1 dominar como em dados que vão de 10 a 1.000.000.
- Números escolhidos por pessoas: preços psicológicos como R$ 9,99.
Por que o teste não serve para votos por seção eleitoral?
As seções eleitorais são desenhadas para ter tamanhos parecidos, com algumas centenas de eleitores cada. A contagem de votos por seção fica, portanto, numa faixa estreita, e a distribuição do primeiro dígito reflete o tamanho das seções e a força do candidato em cada região, não a honestidade da apuração.
O estudo de Deckert, Myagkov e Ordeshook, publicado em 2011 na revista Political Analysis, simulou eleições limpas e fraudadas e examinou casos reais. A conclusão dos autores foi que a conformidade ou o desvio em relação à lei não seguiam padrão algum: o "acerto" do teste para separar eleição limpa de fraudada ficou equivalente ao de jogar uma moeda. Nigrini, uma das maiores referências no uso do método em auditoria, também afirmou em 2020 que o teste do primeiro dígito não é válido para detectar fraude eleitoral, justamente pelo tamanho semelhante das seções.
No Brasil, o TSE publicou em 2018 um esclarecimento sobre um vídeo que usava a lei para apontar fraude em 2014. Segundo o tribunal, o método, por si só, não prova irregularidade, e há inúmeros trabalhos acadêmicos que questionam sua aplicação a resultados eleitorais.
Como testar a Lei de Benford com Python?
O teste cabe em poucas linhas com pandas. O exemplo abaixo é hipotético: uma planilha pagamentos.csv, com uma coluna valor, exportada de um portal de transparência.
import numpy as np
import pandas as pd
df = pd.read_csv("pagamentos.csv")
valores = pd.to_numeric(df["valor"], errors="coerce")
valores = valores[valores >= 10] # descarta centavos e valores muito baixos
# primeiro dígito significativo
primeiro = valores.astype(str).str.lstrip("0.").str[0].astype(int)
observado = primeiro.value_counts(normalize=True).reindex(range(1, 10), fill_value=0)
esperado = pd.Series(np.log10(1 + 1 / np.arange(1, 10)), index=range(1, 10))
tabela = pd.DataFrame({"observado": observado, "esperado": esperado})
tabela["diferenca"] = tabela["observado"] - tabela["esperado"]
print(tabela.round(3))
mad = (tabela["observado"] - tabela["esperado"]).abs().mean()
print(f"MAD = {mad:.4f} | n = {len(primeiro)}")
Como interpretar o resultado?
O indicador mais usado em auditoria é o MAD (desvio absoluto médio entre as proporções observadas e esperadas). Para o teste do primeiro dígito, as faixas atribuídas a Nigrini (2012) são:
- abaixo de 0,006: conformidade próxima;
- de 0,006 a 0,012: conformidade aceitável;
- de 0,012 a 0,015: conformidade marginal;
- acima de 0,015: não conformidade.
O MAD é preferido ao teste qui-quadrado em bases grandes porque o qui-quadrado fica "sensível demais": com dezenas de milhares de linhas, qualquer desvio pequeno vira "estatisticamente significativo". Em bases pequenas, o problema é o inverso, e o teste tem pouco poder. Uma regra de bolso razoável é desconfiar de qualquer conclusão com poucas centenas de registros.
Se não quiser escrever o cálculo, a biblioteca de código aberto benford_py (pip install benford_py) implementa os testes e gera os gráficos. Vale ler a documentação para saber exatamente o que cada função calcula antes de citar números.
Exemplo de leitura responsável
Imagine que os pagamentos de uma secretaria municipal, ao longo de três anos, deram MAD de 0,009 no conjunto geral. Ao separar por fornecedor, um deles aparece com excesso de valores começando por 4 e 9. A leitura correta não é "o fornecedor frauda". É: "os pagamentos desse fornecedor concentram valores em faixas específicas; vale verificar se há tabela de preços, limite de dispensa de licitação ou parcelamento de serviço que explique isso". Muitas vezes há explicação legítima, como um contrato com preço unitário fixo.
Benford no fluxo de uma investigação OSINT
O teste rende mais quando entra como uma etapa de um método, e não como conclusão:
- Entenda a origem do dado. Identifique quem o gerou, com que regra e se há valores tabelados ou limites. Isso decide se faz sentido testar.
- Limpe antes de testar. Remova duplicatas, estornos, valores negativos e registros abaixo de um piso razoável. Documente cada filtro.
- Rode o teste no conjunto e em subconjuntos. Por fornecedor, por ano, por unidade. Desvios localizados dizem mais que o geral.
- Combine com outros testes. Valores repetidos, números redondos, concentração logo abaixo de limites de aprovação e datas atípicas (fins de semana, último dia do exercício).
- Volte aos documentos. O teste aponta onde olhar; a prova está na nota, no contrato, no empenho.
- Registre tudo. Script, versão das bibliotecas, hash do arquivo de origem e data da coleta permitem que outra pessoa reproduza o resultado.
E a inteligência artificial nisso?
Modelos de linguagem ajudam a escrever o script, explicar o resultado e sugerir hipóteses. Mas também produzem análises de aparência técnica sobre dados inadequados com a mesma confiança. Se um relatório de autoria desconhecida apresenta um "teste forense" sem mostrar a base, o código e os filtros, trate-o como alegação a verificar, não como evidência.
Na prática
- Antes de aplicar Benford, confira se os dados cobrem pelo menos duas ou três ordens de grandeza e não são códigos, valores tabelados ou faixas estreitas.
- Use o MAD como medida principal em bases grandes e desconfie de conclusões com poucas centenas de registros.
- Teste subconjuntos (fornecedor, ano, unidade): o desvio localizado é mais informativo que o geral.
- Combine com análise de valores repetidos, números redondos e concentração abaixo de limites de aprovação.
- Nunca publique "indício de fraude" com base só no teste; volte aos documentos e ouça os envolvidos.
- Guarde script, filtros e hash do arquivo de origem para que o resultado possa ser reproduzido.
Conclusão
A Lei de Benford é uma boa lanterna e uma péssima sentença. Em despesas, contratos e transações que variam por várias ordens de grandeza, ela ajuda a decidir onde gastar o tempo de análise. Em dados com faixa estreita, como votos por seção, ela produz ruído com cara de prova. O trabalho do Hunter é saber a diferença, mostrar o método e tratar cada desvio como uma pergunta que precisa de documento para ser respondida.
Referências
- Aos Fatos: Relatório apócrifo distorce microdados do TSE para alegar fraude eleitoral
- Lupa: Documento falso distorce dados do TSE para alegar fraude na eleição presidencial de 2026
- TSE: Aplicação do modelo estatístico Lei de Benford em resultados eleitorais
- Caltech: Benford's Law and the Detection of Election Fraud (Deckert, Myagkov e Ordeshook, 2011)
- Mark J. Nigrini: 2020 Presidential Election, Wall Street Journal publishes an article on fraud and Benford's Law
- MetricGate: Benford's Law Analysis (faixas de MAD de Nigrini)
- Wikipédia: Benford's law
- GitHub: benford_py, implementação dos testes de Benford em Python
Perguntas frequentes
A Lei de Benford prova que houve fraude?
Não. Ela indica que a distribuição de dígitos de um conjunto difere do padrão esperado. Isso pode ter explicações legítimas, como preços tabelados, limites de valor ou um conjunto pequeno demais. Na auditoria, o teste serve para escolher onde examinar documentos com mais atenção, e a conclusão sobre irregularidade depende sempre da análise desses documentos.
Por que a Lei de Benford não funciona em eleições?
Porque as seções eleitorais têm tamanhos parecidos, e a contagem de votos por seção fica numa faixa estreita. Nesse cenário, o primeiro dígito reflete o tamanho das seções e o desempenho regional dos candidatos. Estudos com eleições simuladas e reais concluíram que o teste não separa eleições limpas de fraudadas melhor do que o acaso, e o TSE já esclareceu que o método, sozinho, não prova irregularidade.
Qual é o tamanho mínimo de amostra para aplicar o teste?
Não há número mágico, mas com poucas centenas de registros o teste perde poder e pequenas oscilações parecem desvios. Bases com milhares de registros dão resultados mais estáveis. Em bases muito grandes, prefira o MAD ao qui-quadrado, que tende a marcar como significativa qualquer diferença mínima.
Que ferramentas posso usar para testar a Lei de Benford?
Uma planilha resolve o cálculo básico, extraindo o primeiro dígito e comparando com log10(1 + 1/d). Em Python, o pandas faz o teste em poucas linhas, e a biblioteca benford_py implementa os testes e gera gráficos. Em qualquer opção, documente filtros e versão da base para permitir a reprodução.
Referências
- Aos Fatos: Relatório apócrifo distorce microdados do TSE para alegar fraude eleitoral
- Lupa: Documento falso distorce dados do TSE para alegar fraude na eleição presidencial de 2026
- TSE: Aplicação do modelo estatístico Lei de Benford em resultados eleitorais
- Caltech: Benford's Law and the Detection of Election Fraud (Deckert, Myagkov e Ordeshook, 2011)
- Mark J. Nigrini: 2020 Presidential Election, Wall Street Journal publishes an article on fraud and Benford's Law
- MetricGate: Benford's Law Analysis (faixas de MAD de Nigrini)
- Wikipédia: Benford's law
- GitHub: benford_py, implementação dos testes de Benford em Python
