用于欺诈检测的本福德定律

R 中的欺诈检测

Bart Baesens

Professor Data Science at KU Leuven

许多数据集符合本福德定律

  • 数值代表事件或事实的规模的数据
  • 数值彼此无关联的数据
  • 指数增长或源于乘法波动的数据集
  • 不同数据集的混合体
  • 一些著名的无限整数序列

最好包含1000 个以上、跨越多个数量级的数值。

R 中的欺诈检测

例如

  • 会计交易
  • 信用卡交易
  • 客户余额
  • 死亡率
  • 行星直径
  • 电费与电话费
  • 斐波那契数
  • 收入
  • 保险理赔
  • 河流长度与流量
  • 贷款数据
  • 报纸文章数量
  • 物理和数学常数
  • 城市人口
  • 2 的幂
  • 采购订单
  • 股票与房价
  • ...
R 中的欺诈检测

用于欺诈检测的本福德定律

  • 欺诈通常通过杜撰数值或篡改真实观测实施。
  • 本福德定律是常用的欺诈检测工具,在美国甚至可作为法律证据。
  • 已成功应用于理赔欺诈、支票欺诈、窃电、司法会计与支付欺诈等。
  • 另见 Nigrini 著《Benford's Law: Applications for forensic accounting, auditing, and fraud detection》(John Wiley & Sons, 2012)。
R 中的欺诈检测

注意事项

注意:数据不符合本福德定律是可能的。

  • 存在下限和/或上限,或数据集中在狭窄区间,如小时工资、身高。
  • 数字用作识别码或标签,如社会保障号、航班号、车牌号、电话号码。
  • 加法波动而非乘法波动,如某天的心跳次数。
R 中的欺诈检测

前两位数字的本福德定律

若数据集对前两位数字服从本福德定律,则首两位 $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 中的欺诈检测

首位数的本福德定律分析

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

bfd1exp

R 中的欺诈检测

前两位数的本福德定律分析

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

bfd2exp

R 中的欺诈检测

Passons à la pratique !

R 中的欺诈检测

Preparing Video For Download...