การตรวจจับการฉ้อโกงใน R
Tim Verdonck
Professor Data Science at KU Leuven
Animals ในแพ็กเกจ MASS มี น้ำหนักสมองและน้ำหนักตัวเฉลี่ยของสัตว์ 28 ชนิด library(MASS)
data("Animals")
body brain
Mountain beaver 1.35 8.1
Cow 465.00 423.0
Grey wolf 36.33 119.5
Goat 27.66 115.0
X <- data.frame(log_body = log(Animals$body), log_brain = log(Animals$brain))
Boxplot ของลอการิทึมของน้ำหนักตัวและน้ำหนักสมอง


ระยะทาง Mahalanobis (หรือระยะทางทั่วไป) ของการสังเกตการณ์คือระยะห่างจากจุดนั้นไปยังจุดกึ่งกลาง โดยคำนึงถึงเมทริกซ์ความแปรปรวนร่วมด้วย

ระยะทาง Mahalanobis แบบคลาสสิก: ใช้ ค่าเฉลี่ยตัวอย่าง เป็นตัวประมาณค่าตำแหน่ง และ เมทริกซ์ความแปรปรวนร่วมตัวอย่าง เป็นตัวประมาณการกระจาย
ในการตรวจจับค่าผิดปกติแบบหลายตัวแปร ระยะทาง Mahalanobis จะถูกเปรียบเทียบกับค่าตัดขาดที่ได้จากการแจกแจงไคสแควร์
ในสองมิติ สามารถสร้าง tolerance ellipsoid ที่ $97.5\%$ ซึ่งกำหนดจากการสังเกตการณ์ที่มีระยะทาง Mahalanobis ไม่เกินค่าตัดขาด
animals.clcenter <- colMeans(X) animals.clcov <- cov(X) rad <- sqrt(qchisq(0.975, df = ncol(X)))library(car) ellipse.cl <- data.frame(ellipse(center = animals.clcenter, shape = animals.clcov,radius = rad, segments = 100, draw = FALSE)) colnames(ellipse.cl) <- colnames(X)fig <- fig + geom_polygon(data=ellipse.cl, color = "dodgerblue", fill = "dodgerblue", alpha = 0.2) + geom_point(aes(x = animals.clcenter[1], y = animals.clcenter[2]), color = "blue", size = 6)

ตัวประมาณ Minimum Covariance Determinant (MCD) ของ Rousseeuw เป็นตัวประมาณแบบ robust ที่นิยมใช้สำหรับตำแหน่งและการกระจายแบบหลายตัวแปร
ตัวประมาณตำแหน่งและการกระจายแบบ robust โดยใช้ MCD
library(robustbase)
animals.mcd <- covMcd(X)
# Robust estimate of location
animals.mcd$center
# Robust estimate of scatter
animals.mcd$cov
เมื่อแทนค่าตัวประมาณ robust ของตำแหน่งและการกระจายเข้าในนิยามของระยะทาง Mahalanobis จะได้ robust distances และสามารถสร้าง robust tolerance ellipsoid ได้
library(robustbase) animals.mcd <- covMcd(X) ellipse.mcd <- data.frame(ellipse(center = animals.mcd$center, shape = animals.mcd$cov, radius = rad, segments = 100, draw = FALSE)) colnames(ellipse.mcd) <- colnames(X)fig2 <- fig + geom_polygon(data = ellipse.mcd, color = "red", fill = "red", alpha = 0.3) + geom_point(aes(x = animals.mcd$center[1], y = animals.mcd$center[2]), color = "red", size = 6)

MCDplot(animals.mcd, which = "dd")


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