R 的詐欺偵測
Tim Verdonck
Professor Data Science at KU Leuven
離群值是偏離多數資料模式的觀測值。
離群值可能是詐欺的警訊。
一個常用的離群值偵測工具是:
觀測值 $x_i$ 的 z-score $z_i$ 計算為:
$$z_i=\frac{x_i-\hat{\mu}}{\hat{\sigma}} = \frac{x_i-\overline{x}}{s}$$
資料集 loginc 是 10 人的月收入經對數轉換後:
loginc: 7.876 7.681 7.628 ... 7.764 9.912 # <-- 最後一筆顯然是離群值!
Mean <- mean(loginc)
Sd <- sd(loginc)
zscore <- (loginc - Mean) / Sd
abs(zscore) > 3
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
樣本平均數: $$\overline{x}=\frac{1}{n}\sum_i x_i$$
mean(loginc)mean(loginc9)
7.9864477.772392
loginc9 與 loginc 相同,但移除了離群值。
將 $n$ 個觀測由小到大排序,則樣本中位數 $Med(X_n)$ 為第 $(n+1)/2$ 個觀測(若 $n$ 為奇數),或第 $n/2$ 與第 $n/2+1$ 個觀測的平均(若 $n$ 為偶數)。
median(loginc)
7.816658
median(loginc9)
7.764296
(1) 樣本標準差: $$s= \sqrt{\frac{1}{n-1}\sum_i (x_i-\hat{\mu})^2}$$
sd(loginc)
0.6976615
sd(loginc9)
0.1791729
(2) 中位數絕對離差(MAD): $$Mad(X_n)=1.4826Med(|x_i-Med(X_n)|)$$
(3) 四分位距(標準化): $$IQR(X_n)= IQR = 0.7413(Q_3-Q_1)$$ 其中 $Q_1$ 與 $Q_3$ 為資料的第一與第三四分位數。
IQR(loginc)/1.349
0.2056784
mad(loginc)
0.2396159
mad(loginc9)
0.201305
IQR(loginc9)/1.349
0.1839295
代入穩健估計量以計算穩健 z-score:
$$z_i=\frac{x_i-\hat{\mu}}{\hat{\sigma}} =\frac{x_i-Med(X_n)}{Mad(X_n)}$$
robzscore <- (loginc - median(loginc)) / mad(loginc)abs(robzscore) > 3 ## 檢查離群值
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
robzscore[10] ## 該離群值的穩健 z-score
8.748523

boxplot(los, col = "blue", ylab = "Lenght of Stay (LOS)")$out
59 33 42 67 35 47 102 36 27 31 27 30 29 32 37 27 38


依調整後盒形圖得到的離群值:
library(robustbase)
adjbox(los)$out
59 67 102
調整後盒形圖計算的統計量:
adjboxStats(los)$stats
2 4 8 13 47


R 的詐欺偵測