用 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 個不同資料集中觀察數字的首位數。

Newcomb 與 Benford

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 的詐欺偵測

我們產生前 1000 個 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

也產生2 的前 1000 次方

pow2 <- 2^(1:1000)
head(pow2)
2 4 8 16 32 64
R 的詐欺偵測

套件 benford.anaysis 的 `benford` 函式

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)

2 的冪

R 的詐欺偵測

一起來練習吧!

R 的詐欺偵測

Preparing Video For Download...