การตรวจจับ outlier แบบตัวแปรเดียว

การตรวจจับการฉ้อโกงใน R

Tim Verdonck

Professor Data Science at KU Leuven

Outliers

outlier คือค่าสังเกตที่เบี่ยงเบนไปจากรูปแบบของข้อมูลส่วนใหญ่ ปลาที่เป็น outlier outlier อาจเป็นสัญญาณเตือนถึงการฉ้อโกง

การตรวจจับการฉ้อโกงใน R

การตรวจจับ outlier

  • เครื่องมือยอดนิยมสำหรับการตรวจจับ outlier คือ

    • คำนวณ z-score ของแต่ละค่าสังเกต
    • ระบุว่าเป็น outlier หาก z-score มี ค่าสัมบูรณ์มากกว่า 3
  • z-score $z_i$ ของค่าสังเกต $x_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 คน หลังแปลงด้วย log:

loginc: 7.876 7.681 7.628  ...  7.764 9.912 # <-- last income is clearly an outlier!
  • (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
  • ไม่พบ outlier จาก z-score เหล่านี้!
การตรวจจับการฉ้อโกงใน R

สถิติ robust

  • วิธีทางสถิติแบบคลาสสิกอาศัยข้อสมมติ (เช่น การแจกแจงปกติ) แต่แม้แต่ outlier เพียงตัวเดียวก็อาจส่งผลต่อผลสรุปได้อย่างมีนัยสำคัญและนำไปสู่ผลที่คลาดเคลื่อน
  • สถิติ robust ให้ผลที่เชื่อถือได้แม้ข้อมูลมี outlier และมีเครื่องมือตรวจจับ outlier แบบอัตโนมัติ
  • "It is perfect to use both classical and robust methods routinely, and only worry when they differ enough to matter... But when they differ, you should think hard." J.W. Tukey (1979)
การตรวจจับการฉ้อโกงใน R

ตัวประมาณตำแหน่ง: ค่าเฉลี่ยและค่ามัธยฐาน

ค่าเฉลี่ยตัวอย่าง: $$\overline{x}=\frac{1}{n}\sum_i x_i$$

mean(loginc)

mean(loginc9)
7.986447

7.772392

loginc9 มีค่าสังเกตเดียวกับ loginc ยกเว้น outlier

เรียงค่าสังเกต $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(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

Robust z-scores สำหรับการตรวจจับ outlier

แทนตัวประมาณ robust เพื่อคำนวณ robust z-scores:

$$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 ## Check for outliers
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
robzscore[10] ## Robust z-score of the outlier
8.748523
การตรวจจับการฉ้อโกงใน R

Boxplot

  • boxplot ของ Tukey เป็นอีกเครื่องมือยอดนิยมสำหรับการระบุ outlier
  • ค่าสังเกตจะถูกระบุว่าเป็น outlier หากอยู่นอกขอบ boxplot $$[Q_1-1.5IQR; Q_3+1.5IQR]$$

คำอธิบาย boxplot

การตรวจจับการฉ้อโกงใน 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

boxplot ระยะเวลาพักรักษาใน ggplot

การตรวจจับการฉ้อโกงใน R

Adjusted boxplot

  • ในการแจกแจงแบบเบ้ boxplot อาจระบุจุดปกติหลายจุดว่าเป็น outlier
  • boxplot ปรับค่าความเบ้ แก้ปัญหานี้โดยใช้การวัดความเบ้แบบ robust ในการกำหนดขอบ (Hubert และ Vandervieren, 2008)

boxplot chi-square

การตรวจจับการฉ้อโกงใน R

ตัวอย่าง LOS: adjusted boxplot

Outliers ตาม adjusted boxplot:

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

สถิติที่คำนวณโดย adjusted boxplot:

adjboxStats(los)$stats
2  4  8 13 47
การตรวจจับการฉ้อโกงใน R

ตัวอย่าง LOS: boxplot vs adjusted boxplot

boxplot ของ LOS

adjusted boxplot ของ LOS

การตรวจจับการฉ้อโกงใน R

มาฝึกกันเถอะ!

การตรวจจับการฉ้อโกงใน R

Preparing Video For Download...