การวิเคราะห์หลักด้วยกฎของ Benford

การตรวจจับการฉ้อโกงใน R

Bart Baesens

Professor Data Science at KU Leuven

บทนำ

  • หยิบหนังสือพิมพ์มาสุ่มเปิดหน้าใดก็ได้ แล้วจดตัวเลขหลักแรก (1, 2, ..., 9) ของตัวเลขทุกตัวในหน้านั้น
  • คาดว่าความถี่ของแต่ละหลักจะเป็นเท่าไร?

หนังสือพิมพ์

การตรวจจับการฉ้อโกงใน R

บทนำ

  • หยิบหนังสือพิมพ์มาสุ่มเปิดหน้าใดก็ได้ แล้วจดตัวเลขหลักแรก (1, 2, ..., 9) ของตัวเลขทุกตัวในหน้านั้น
  • คาดว่าความถี่ของแต่ละหลักจะเป็นเท่าไร?
  • การคาดเดาเบื้องต้นคือประมาณ 1/9 = 11%

กราฟแท่งแบบสุ่ม

การตรวจจับการฉ้อโกงใน R

บทนำ

  • หยิบหนังสือพิมพ์มาสุ่มเปิดหน้าใดก็ได้ แล้วจดตัวเลขหลักแรก (1, 2, ..., 9) ของตัวเลขทุกตัวในหน้านั้น
  • คาดว่าความถี่ของแต่ละหลักจะเป็นเท่าไร?
  • การคาดเดาเบื้องต้นคือประมาณ 1/9
  • กฎของ Benford: ความถี่ที่คาดไว้
    • หลัก 1 $\approx$ 30%
    • หลัก 9 $\approx$ 4.6%

กราฟแท่ง Benford

การตรวจจับการฉ้อโกงใน R

Newcomb และ Benford

  • "ที่ตัวเลขสิบหลักไม่ปรากฏด้วยความถี่เท่ากันนั้น ย่อมเห็นได้ชัดสำหรับผู้ที่ใช้ตารางลอการิทึมบ่อย ๆ และสังเกตว่าหน้าแรก ๆ สึกหรอเร็วกว่าหน้าท้าย ๆ มากเพียงใด" (Newcomb, 1881)
  • Benford สังเกตตัวเลขหลักแรกของข้อมูล 20 ชุดที่แตกต่างกัน

นิวคอมบ์และเบนฟอร์ด

การตรวจจับการฉ้อโกงใน R

กฎของ Benford สำหรับหลักแรก

ชุดข้อมูลเป็นไปตามกฎของ Benford สำหรับหลักแรก เมื่อความน่าจะเป็นที่หลักแรก $D_1$ มีค่าเท่ากับ $d_1$ อยู่ในรูปโดยประมาณ: $$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$$

  • ตัวอย่าง

    • $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 พบว่ากฎของ Benford ไม่เปลี่ยนแปลงเมื่อปรับสเกล

การตรวจจับการฉ้อโกงใน R

กฎของ Benford สำหรับหลักแรก

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

กราฟแท่ง Benford

การตรวจจับการฉ้อโกงใน R

สร้าง จำนวน Fibonacci 1000 ตัวแรก

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

และสร้าง กำลังของ 2 จำนวน 1000 ตัวแรก

pow2 <- 2^(1:1000)
head(pow2)
2 4 8 16 32 64
การตรวจจับการฉ้อโกงใน R

ฟังก์ชัน `benford` จากแพ็กเกจ benford.analysis

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

การตรวจจับการฉ้อโกงใน R

มาฝึกกันเถอะ!

การตรวจจับการฉ้อโกงใน R

Preparing Video For Download...