Phát hiện ngoại lệ đơn biến

Phát hiện gian lận với R

Tim Verdonck

Professor Data Science at KU Leuven

Ngoại lệ

Ngoại lệ là quan sát lệch khỏi mẫu hình của đa số dữ liệu. outlierfish Ngoại lệ có thể cảnh báo gian lận.

Phát hiện gian lận với R

Phát hiện ngoại lệ

  • Một công cụ phổ biến để phát hiện ngoại lệ

    • tính z-score cho từng quan sát
    • gắn cờ ngoại lệ nếu trị tuyệt đối z-score lớn hơn 3
  • Z-score $z_i$ cho quan sát $x_i$ được tính:

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

  • $\overline{x}$ là trung bình mẫu: $\overline{x}=\frac{1}{n}\sum_i x_i$
  • $s$ là độ lệch chuẩn mẫu: $s= \sqrt{\frac{1}{n-1}\sum_i(x_i-\hat{\mu})^2}$
Phát hiện gian lận với R

Bộ dữ liệu loginc chứa thu nhập hằng tháng của 10 người sau biến đổi log:

loginc: 7.876 7.681 7.628  ...  7.764 9.912 # <-- thu nhập cuối rõ ràng là ngoại lệ!
  • (1) Tính z-score cho từng quan sát
Mean <- mean(loginc)
Sd <- sd(loginc)
zscore <- (loginc - Mean) / Sd
  • (2) Kiểm tra z-score lớn hơn 3 về trị tuyệt đối
abs(zscore) > 3
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
  • Không phát hiện ngoại lệ với các z-score này!
Phát hiện gian lận với R

Thống kê vững

  • Các phương pháp thống kê cổ điển dựa trên giả định (chuẩn), nhưng chỉ một ngoại lệ cũng có thể ảnh hưởng mạnh và gây sai lệch kết quả.
  • Thống kê vững vẫn cho kết quả tin cậy khi dữ liệu có ngoại lệ và cung cấp công cụ tự động phát hiện ngoại lệ.
  • "Tốt nhất là dùng thường quy cả phương pháp cổ điển và vững, và chỉ lo khi chúng khác nhau đáng kể... Khi khác, hãy cân nhắc kỹ." J.W. Tukey (1979)
Phát hiện gian lận với R

Ước lượng vị trí: mean & median

Trung bình mẫu: $$\overline{x}=\frac{1}{n}\sum_i x_i$$

mean(loginc)

mean(loginc9)
7.986447

7.772392

loginc9 chứa cùng các quan sát như loginc trừ ngoại lệ.

Sắp $n$ quan sát tăng dần, trung vị mẫu, $Med(X_n)$, là quan sát thứ $(n+1)/2$ (n lẻ) hoặc trung bình của quan sát thứ $n/2$ và $n/2+1$ (n chẵn).

median(loginc)
7.816658
median(loginc9)
7.764296
Phát hiện gian lận với R

Ước lượng độ phân tán: sd

(1) Độ lệch chuẩn mẫu: $$s= \sqrt{\frac{1}{n-1}\sum_i (x_i-\hat{\mu})^2}$$

sd(loginc)
0.6976615
sd(loginc9)
0.1791729
Phát hiện gian lận với R

Ước lượng độ phân tán: mad, IQR

(2) Độ lệch tuyệt đối theo trung vị (MAD): $$Mad(X_n)=1.4826Med(|x_i-Med(X_n)|)$$

(3) Khoảng tứ phân vị (chuẩn hóa): $$IQR(X_n)= IQR = 0.7413(Q_3-Q_1)$$ trong đó $Q_1$ và $Q_3$ là tứ phân vị thứ nhất và thứ ba

IQR(loginc)/1.349
0.2056784
mad(loginc)
0.2396159
mad(loginc9)
0.201305
IQR(loginc9)/1.349
0.1839295
Phát hiện gian lận với R

Z-score vững để phát hiện ngoại lệ

Thay các ước lượng vững để tính z-score vững:

$$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 ## Kiểm tra ngoại lệ
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
robzscore[10] ## Z-score vững của ngoại lệ
8.748523
Phát hiện gian lận với R

Boxplot

  • Boxplot của Tukey cũng là công cụ phổ biến để nhận diện ngoại lệ
  • Gắn cờ ngoại lệ nếu nằm ngoài hàng rào boxplot $$[Q_1-1.5IQR; Q_3+1.5IQR]$$

boxplotexplanation

Phát hiện gian lận với R

Ví dụ: thời gian nằm viện (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

Phát hiện gian lận với R

Boxplot điều chỉnh

  • Với phân phối bất đối xứng, boxplot có thể gắn cờ nhiều điểm bình thường là ngoại lệ.
  • Boxplot điều chỉnh theo độ lệch khắc phục bằng cách dùng thước đo độ lệch vững để xác định hàng rào (Hubert & Vandervieren, 2008)

chisqbp

Phát hiện gian lận với R

Ví dụ LOS: boxplot điều chỉnh

Ngoại lệ theo boxplot điều chỉnh:

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

Thống kê do boxplot điều chỉnh tính:

adjboxStats(los)$stats
2  4  8 13 47
Phát hiện gian lận với R

Ví dụ LOS: boxplot vs boxplot điều chỉnh

Boxplot_LOS

Boxplot_điều_chỉnh_LOS

Phát hiện gian lận với R

Ayo berlatih!

Phát hiện gian lận với R

Preparing Video For Download...