偵測單變量離群值

R 的詐欺偵測

Tim Verdonck

Professor Data Science at KU Leuven

離群值

離群值是偏離多數資料模式的觀測值。 outlierfish 離群值可能是詐欺的警訊。

R 的詐欺偵測

離群值偵測

  • 一個常用的離群值偵測工具是:

    • 計算每筆觀測的 z-score
    • 若其 z-score 的絕對值大於 3,則標記為離群值
  • 觀測值 $x_i$ 的 z-score $z_i$ 計算為:

$$z_i=\frac{x_i-\hat{\mu}}{\hat{\sigma}} = \frac{x_i-\overline{x}}{s}$$

  • $\overline{x}$ 為樣本平均數:$\overline{x}=\frac{1}{n}\sum_i x_i$
  • $s$ 為樣本標準差:$s= \sqrt{\frac{1}{n-1}\sum_i(x_i-\hat{\mu})^2}$
R 的詐欺偵測

資料集 loginc 是 10 人的月收入經對數轉換後:

loginc: 7.876 7.681 7.628  ...  7.764 9.912 # <-- 最後一筆顯然是離群值!
  • (1) 計算每筆觀測的 z-score
Mean <- mean(loginc)
Sd <- sd(loginc)
zscore <- (loginc - Mean) / Sd
  • (2) 檢查 z-score 的絕對值是否大於 3
abs(zscore) > 3
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
  • 用這些 z-score 並未找出離群值!
R 的詐欺偵測

穩健統計

  • 古典統計方法仰賴(常態性)假設,但單一離群值就可能大幅影響結論,導致誤導。
  • 穩健統計在資料含有離群值時也能給出可靠結果,並提供自動離群值偵測工具。
  • 「例行同時使用古典與穩健方法是很理想的,只有在兩者差異大到影響判斷時才需要擔心……但當它們不同時,你應該好好思考。」J.W. Tukey(1979)
R 的詐欺偵測

位置估計量:mean 與 median

樣本平均數: $$\overline{x}=\frac{1}{n}\sum_i x_i$$

mean(loginc)

mean(loginc9)
7.986447

7.772392

loginc9loginc 相同,但移除了離群值。

將 $n$ 個觀測由小到大排序,則樣本中位數 $Med(X_n)$ 為第 $(n+1)/2$ 個觀測(若 $n$ 為奇數),或第 $n/2$ 與第 $n/2+1$ 個觀測的平均(若 $n$ 為偶數)。

median(loginc)
7.816658
median(loginc9)
7.764296
R 的詐欺偵測

尺度估計量:sd

(1) 樣本標準差: $$s= \sqrt{\frac{1}{n-1}\sum_i (x_i-\hat{\mu})^2}$$

sd(loginc)
0.6976615
sd(loginc9)
0.1791729
R 的詐欺偵測

尺度估計量:mad、IQR

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

用穩健 z-score 偵測離群值

代入穩健估計量以計算穩健 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
R 的詐欺偵測

盒形圖(Boxplot)

  • Tukey 的盒形圖也是常見的離群值判定工具。
  • 若觀測值落在盒形圖圍欄之外,則標記為離群值: $$[Q_1-1.5IQR; Q_3+1.5IQR]$$

boxplotexplanation

R 的詐欺偵測

範例:住院天數(LOS)

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

boxplotlos_ggplot

R 的詐欺偵測

調整後盒形圖

  • 不對稱分布下,盒形圖可能把許多正常點標成離群值。
  • 偏態調整盒形圖利用穩健的偏態量來決定圍欄,改善此問題(Hubert 與 Vandervieren,2008)。

chisqbp

R 的詐欺偵測

LOS 範例:調整後盒形圖

調整後盒形圖得到的離群值:

library(robustbase)
adjbox(los)$out
59  67 102

調整後盒形圖計算的統計量:

adjboxStats(los)$stats
2  4  8 13 47
R 的詐欺偵測

LOS 範例:盒形圖 vs 調整後盒形圖

LOS_boxplot

LOS_adjbox

R 的詐欺偵測

一起來練習吧!

R 的詐欺偵測

Preparing Video For Download...