Sifferanalys med Benfords lag

Bedrägeridetektering i R

Bart Baesens

Professor Data Science at KU Leuven

Introduktion

  • Ta en tidning, slå upp en slumpmässig sida och skriv ned den första siffran (1,2,...,9) i varje tal.
  • Vilka frekvenser förväntar du dig för dessa siffror?

tidning

Bedrägeridetektering i R

Introduktion

  • Ta en tidning, slå upp en slumpmässig sida och skriv ned den första siffran (1,2,...,9) i varje tal.
  • Vilka frekvenser förväntar du dig för dessa siffror?
  • En naturlig gissning är ungefär 1/9 = 11%

stapeldiagram slump

Bedrägeridetektering i R

Introduktion

  • Ta en tidning, slå upp en slumpmässig sida och skriv ned den första siffran (1,2,...,9) i varje tal.
  • Vilka frekvenser förväntar du dig för dessa siffror?
  • En naturlig gissning är ungefär 1/9
  • Benfords lag: förväntade frekvenser
    • siffra 1 $\approx$ 30%
    • siffra 9 $\approx$ 4,6%

stapeldiagram Benford

Bedrägeridetektering i R

Newcomb och Benford

  • "Att de tio siffrorna inte förekommer med lika stor frekvens borde vara uppenbart för den som ofta använder logaritmtabeller och lägger märke till hur mycket snabbare de första sidorna slits än de sista." (Newcomb, 1881)
  • Benford undersökte den första siffran i 20 olika datamängder.

Newcomb och Benford

Bedrägeridetektering i R

Benfords lag för den första siffran

En datamängd uppfyller Benfords lag för den första siffran om sannolikheten att den första siffran $D_1$ är lika med $d_1$ approximativt ges av: $$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$$

  • Exempel

    • $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 visade att Benfords lag är invariant under skalning.

Bedrägeridetektering i R

Benfords lag för den första siffran

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

stapeldiagram Benford

Bedrägeridetektering i R

Vi genererar de första 1 000 Fibonacci-talen.

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

Vi genererar också de första 1 000 potenserna av 2.

pow2 <- 2^(1:1000)
head(pow2)
2 4 8 16 32 64
Bedrägeridetektering i R

Funktionen `benford` från paketet 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)

pow2

Bedrägeridetektering i R

Nu kör vi en övning!

Bedrägeridetektering i R

Preparing Video For Download...