以 Benford 定律偵測舞弊

R 的詐欺偵測

Bart Baesens

Professor Data Science at KU Leuven

許多資料集符合 Benford 定律

  • 數字代表「事實或事件的規模」的資料
  • 各數字彼此「無關聯」的資料
  • 「指數成長」或來自「乘法波動」的資料集
  • 不同資料集的「混合體」
  • 若干知名的無窮「整數序列」

最好包含「超過 1000」個數字,且跨越「多個數量級」。

R 的詐欺偵測

例如

  • 會計交易
  • 信用卡交易
  • 客戶餘額
  • 死亡率
  • 行星直徑
  • 電費與電話費帳單
  • 費波南西數
  • 所得
  • 保險理賠
  • 河流長度與流量
  • 貸款資料
  • 報紙文章數量
  • 物理與數學常數
  • 城市人口
  • 2 的冪次
  • 採購單
  • 股票與房價
  • ...
R 的詐欺偵測

以 Benford 定律偵測舞弊

  • 舞弊通常透過加入「捏造數字或篡改真實觀測」而犯下。
  • Benford 定律是「常見的舞弊偵測工具」,在美國甚至「可作為法庭證據」。
  • 例如已成功應用於理賠詐欺、支票詐欺、竊電、鑑識會計與付款詐欺。
  • 亦可參考 Nigrini 著作《Benford's Law: Applications for forensic accounting, auditing, and fraud detection》(John Wiley & Sons,2012)。
R 的詐欺偵測

小心適用情境

請注意,資料有時就是不符合 Benford 定律。

  • 若有「下限」與/或「上限」,或數值集中於「狹窄區間」,例如時薪、身高。
  • 若數字用作「識別碼」或標籤,例如社會安全號碼、航班號、車牌、電話號碼。
  • 若為「加法波動」而非乘法波動,例如某天的心跳次數。
R 的詐欺偵測

Benford:前兩位數檢驗

若資料集對「前兩位數」符合 Benford 定律,則首兩位數 $D_1D_2$ 等於 $d_1d_2$ 的機率近似為:

$$P(D_1D_2=d_1d_2)=\log\left(1+\frac{1}{d_1d_2}\right) \qquad d_1d_2\in [10, 11, ..., 98, 99]$$

benlaw <- function(d) log10(1 + 1 / d)
benlaw(12)
0.03476211

此檢驗比只看首位數更可靠,且最常用於舞弊偵測。

R 的詐欺偵測

人口普查資料

bfd.cen <- benford(census.2009$pop.2009, number.of.digits = 2) 
plot(bfd.cen) 

bfd2census

R 的詐欺偵測

員工報銷

  • 內部稽核需檢查員工報銷是否舞弊。
  • 員工會寄送收據掃描影像後報銷餐旅費用。
  • 來分析員工 Sebastiaan 過去 5 年的報銷金額。
  • 資料集 expenses 含 1000 筆報銷。
  • 我們將再次使用套件 benford.analysis 中的函式。
R 的詐欺偵測

首位數的 Benford 分析

bfd1.exp <- benford(expenses, number.of.digits = 1) 
plot(bfd1.exp)

bfd1exp

R 的詐欺偵測

前兩位數的 Benford 分析

bfd2.exp <- benford(expenses, number.of.digits = 2) 
plot(bfd2.exp)

bfd2exp

R 的詐欺偵測

一起來練習吧!

R 的詐欺偵測

Preparing Video For Download...