Analiza cifrelor folosind Legea lui Benford

Detecția fraudelor în R

Bart Baesens

Professor Data Science at KU Leuven

Introducere

  • Luați un ziar la o pagină aleatoare și notați prima cifră (1,2,...,9) a tuturor numerelor.
  • Care sunt frecvențele așteptate ale acestor cifre?

newspaper

Detecția fraudelor în R

Introducere

  • Luați un ziar la o pagină aleatoare și notați prima cifră (1,2,...,9) a tuturor numerelor.
  • Care sunt frecvențele așteptate ale acestor cifre?
  • Estimarea naturală ar fi aproximativ 1/9 = 11%

barplotrnd

Detecția fraudelor în R

Introducere

  • Luați un ziar la o pagină aleatoare și notați prima cifră (1,2,...,9) a tuturor numerelor.
  • Care sunt frecvențele așteptate ale acestor cifre?
  • Estimarea naturală ar fi aproximativ 1/9
  • Legea lui Benford: frecvențe așteptate
    • cifra 1 $\approx$ 30%
    • cifra 9 $\approx$ 4,6%

barplotbf

Detecția fraudelor în R

Newcomb și Benford

  • „Că cele zece cifre nu apar cu frecvență egală trebuie să fie evident pentru oricine folosește mult tabele logaritmice și observă cât de repede se uzează primele pagini față de ultimele." (Newcomb, 1881)
  • Benford a observat prima cifră a numerelor din 20 de seturi de date diferite.

newben

Detecția fraudelor în R

Legea lui Benford pentru prima cifră

Un set de date satisface Legea lui Benford pentru prima cifră dacă probabilitatea ca prima cifră $D_1$ să fie egală cu $d_1$ este aproximativ: $$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$$

  • Exemple

    • $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 a descoperit că Legea lui Benford este invariantă la scalare.

Detecția fraudelor în R

Legea lui Benford pentru prima cifră

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

barplotbf

Detecția fraudelor în R

Generăm primele 1000 de numere 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

Generăm și primele 1000 de puteri ale lui 2.

pow2 <- 2^(1:1000)
head(pow2)
2 4 8 16 32 64
Detecția fraudelor în R

Funcția `benford` din pachetul 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

Detecția fraudelor în R

Să exersăm!

Detecția fraudelor în R

Preparing Video For Download...