Análise de dígitos com a lei de Benford

Detecção de Fraudes em R

Bart Baesens

Professor Data Science at KU Leuven

Introdução

  • Pegue um jornal em uma página aleatória e anote o primeiro dígito (1,2,...,9) de todos os números.
  • Quais são as frequências esperadas desses dígitos?

jornal

Detecção de Fraudes em R

Introdução

  • Pegue um jornal em uma página aleatória e anote o primeiro dígito (1,2,...,9) de todos os números.
  • Quais são as frequências esperadas desses dígitos?
  • Um palpite natural seria cerca de 1/9 = 11%

gráfico de barras aleatório

Detecção de Fraudes em R

Introdução

  • Pegue um jornal em uma página aleatória e anote o primeiro dígito (1,2,...,9) de todos os números.
  • Quais são as frequências esperadas desses dígitos?
  • Um palpite natural seria cerca de 1/9
  • Lei de Benford: frequências esperadas
    • dígito 1 $\approx$ 30%
    • dígito 9 $\approx$ 4,6%

gráfico de barras Benford

Detecção de Fraudes em R

Newcomb e Benford

  • "Que os dez dígitos não ocorrem com igual frequência deve ser evidente para quem usa muito tabelas logarítmicas e nota como as primeiras páginas se desgastam bem mais rápido que as últimas." (Newcomb, 1881)
  • Benford observou o primeiro dígito de números em 20 conjuntos de dados diferentes.

Newcomb e Benford

Detecção de Fraudes em R

Lei de Benford para o primeiro dígito

Um conjunto de dados satisfaz a lei de Benford para o primeiro dígito se a probabilidade de o primeiro dígito $D_1$ ser igual a $d_1$ é aproximadamente: $$P(D_1=d_1)=\log(d_1+1)-\log(d_1)=\log\left(1+\frac{1}{d_1}\right) \qquad d_1=1,\ldots,9$$

  • Exemplos

    • $P(D_1=1)=\log\left(1+\frac{1}{1}\right)=\log(2)=0.3010300$
    • $P(D_1=2)=\log\left(1+\frac{1}{2}\right)=\log(1.5)=0.1760913$
    • $P(D_1=9)=\log\left(1+\frac{1}{9}\right)=\log(1.111111)=0.04575749$
  • Pinkham descobriu que a lei de Benford é invariante por escala.

Detecção de Fraudes em R

Lei de Benford para o primeiro dígito

benlaw <- function(d) log10(1 + 1 / d)
benlaw(1)
0.30103

gráfico de barras Benford

Detecção de Fraudes em R

Vamos gerar os primeiros 1000 números de Fibonacci.

fibnum <- numeric(1000)
fibnum[1] <- fibnum[2] <- 1
for (i in 3:1000) { fibnum[i] <- fibnum[i-1] + fibnum[i-2] } 
head(fibnum)
1 1 2 3 5 8

Também vamos gerar as primeiras 1000 potências de 2.

pow2 <- 2^(1:1000)
head(pow2)
2 4 8 16 32 64
Detecção de Fraudes em R

Função `benford` do pacote benford.anaysis

library(benford.analysis)
bfd.fib <- benford(fibnum,
                   number.of.digits = 1)
plot(bfd.fib)

fibonacci

library(benford.analysis)
bfd.pow2 <- benford(pow2,
                    number.of.digits = 1)
plot(bfd.pow2)

potências de 2

Detecção de Fraudes em R

Vamos praticar!

Detecção de Fraudes em R

Preparing Video For Download...