Analyse des chiffres avec la loi de Benford

Détection de la fraude en R

Bart Baesens

Professor Data Science at KU Leuven

Introduction

  • Prenez un journal à une page au hasard et notez le premier chiffre (1,2,...,9) de tous les nombres.
  • Quelles sont les fréquences attendues de ces chiffres?

journal

Détection de la fraude en R

Introduction

  • Prenez un journal à une page au hasard et notez le premier chiffre (1,2,...,9) de tous les nombres.
  • Quelles sont les fréquences attendues de ces chiffres?
  • On devine naturellement environ 1/9 = 11 %

diagramme à barres aléatoire

Détection de la fraude en R

Introduction

  • Prenez un journal à une page au hasard et notez le premier chiffre (1,2,...,9) de tous les nombres.
  • Quelles sont les fréquences attendues de ces chiffres?
  • On devine naturellement environ 1/9
  • Loi de Benford : fréquences attendues
    • chiffre 1 $\approx$ 30 %
    • chiffre 9 $\approx$ 4,6 %

diagramme à barres Benford

Détection de la fraude en R

Newcomb et Benford

  • « Que les dix chiffres n'apparaissent pas avec une fréquence égale saute aux yeux de quiconque utilise souvent des tables logarithmiques et remarque à quel point les premières pages s'usent plus vite que les dernières. » (Newcomb, 1881)
  • Benford a observé le premier chiffre de nombres dans 20 ensembles de données.

newben

Détection de la fraude en R

Loi de Benford pour le premier chiffre

Un ensemble de données respecte la loi de Benford pour le premier chiffre si la probabilité que le premier chiffre $D_1$ soit égal à $d_1$ est approximativement : $$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$$

  • Exemples

    • $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 montré que la loi de Benford est invariante par changement d'échelle.

Détection de la fraude en R

Loi de Benford pour le premier chiffre

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

diagramme Benford

Détection de la fraude en R

Nous générons les 1 000 premiers nombres 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

Nous générons aussi les 1 000 premières puissances de 2.

pow2 <- 2^(1:1000)
head(pow2)
2 4 8 16 32 64
Détection de la fraude en R

Fonction `benford` du paquet 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

Détection de la fraude en R

Passons à la pratique !

Détection de la fraude en R

Preparing Video For Download...