Phân tích chữ số với định luật Benford

Phát hiện gian lận với R

Bart Baesens

Professor Data Science at KU Leuven

Giới thiệu

  • Lấy một tờ báo ở trang ngẫu nhiên và ghi lại chữ số đầu tiên (bên trái) của mọi con số (1,2,...,9).
  • Tần suất kỳ vọng của các chữ số này là gì?

báo chí

Phát hiện gian lận với R

Giới thiệu

  • Lấy một tờ báo ở trang ngẫu nhiên và ghi lại chữ số đầu tiên (bên trái) của mọi con số (1,2,...,9).
  • Tần suất kỳ vọng của các chữ số này là gì?
  • Phỏng đoán tự nhiên sẽ khoảng 1/9 = 11%

biểu đồ cột ngẫu nhiên

Phát hiện gian lận với R

Giới thiệu

  • Lấy một tờ báo ở trang ngẫu nhiên và ghi lại chữ số đầu tiên (bên trái) của mọi con số (1,2,...,9).
  • Tần suất kỳ vọng của các chữ số này là gì?
  • Phỏng đoán tự nhiên sẽ khoảng 1/9
  • Định luật Benford: tần suất kỳ vọng
    • chữ số 1 $\approx$ 30%
    • chữ số 9 $\approx$ 4.6%

biểu đồ cột Benford

Phát hiện gian lận với R

Newcomb và Benford

  • "Rằng mười chữ số không xuất hiện với tần suất như nhau là điều hiển nhiên với bất kỳ ai thường xuyên dùng bảng logarit và nhận thấy các trang đầu mòn nhanh hơn nhiều so với các trang cuối." (Newcomb, 1881)
  • Benford quan sát chữ số đầu tiên của các số trong 20 bộ dữ liệu khác nhau.

Newcomb và Benford

Phát hiện gian lận với R

Định luật Benford cho chữ số đầu

Một bộ dữ liệu thỏa định luật Benford cho chữ số đầu nếu xác suất chữ số đầu $D_1$ bằng $d_1$ xấp xỉ: $$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$$

  • Ví dụ

    • $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 phát hiện định luật Benford bất biến theo phép co giãn tỷ lệ.

Phát hiện gian lận với R

Định luật Benford cho chữ số đầu

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

biểu đồ cột Benford

Phát hiện gian lận với R

Ta sinh ra 1000 số Fibonacci đầu tiên.

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

Ta cũng sinh 1000 lũy thừa của 2 đầu tiên.

pow2 <- 2^(1:1000)
head(pow2)
2 4 8 16 32 64
Phát hiện gian lận với R

Hàm `benford` từ gói 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

Phát hiện gian lận với R

Cùng luyện tập nào!

Phát hiện gian lận với R

Preparing Video For Download...