(คำตอบนี้ตอบคำถามที่ซ้ำกัน (ปิดแล้ว) ที่การตรวจจับเหตุการณ์ที่โดดเด่นซึ่งนำเสนอข้อมูลบางส่วนในรูปแบบกราฟิก)
การตรวจจับที่ผิดปกติขึ้นอยู่กับลักษณะของข้อมูลและสิ่งที่คุณยินดีที่จะพิจารณา วิธีการทั่วไปนั้นใช้สถิติที่มีประสิทธิภาพ จิตวิญญาณของวิธีนี้คือการจำแนกลักษณะของข้อมูลจำนวนมากในลักษณะที่ไม่ได้รับอิทธิพลจากค่าผิดปกติใด ๆ และจากนั้นชี้ไปที่ค่าของแต่ละบุคคลที่ไม่เหมาะสมภายในลักษณะนั้น
เนื่องจากนี่เป็นอนุกรมเวลาจึงเพิ่มความซับซ้อนของความต้องการตรวจสอบค่าผิดปกติอย่างต่อเนื่อง หากสิ่งนี้จะต้องทำในฐานะซีรีส์ที่แผ่ออกไปเราจะได้รับอนุญาตให้ใช้ข้อมูลเก่าสำหรับการตรวจจับไม่ใช่ข้อมูลในอนาคต! ยิ่งกว่านั้นเพื่อเป็นการป้องกันการทดสอบซ้ำหลายครั้งเราต้องการใช้วิธีการที่มีอัตราการบวกผิดพลาดต่ำมาก
พิจารณาเหล่านี้ขอแนะนำให้ทำงานง่าย, การทดสอบการย้ายหน้าต่างขอบเขตที่แข็งแกร่งกว่าข้อมูล มีความเป็นไปได้มากมาย แต่ง่าย ๆ เข้าใจง่ายและนำไปปฏิบัติได้ง่ายขึ้นอยู่กับ MAD ที่ทำงานอยู่: ค่าเบี่ยงเบนสัมบูรณ์แบบมัธยฐานจากค่ามัธยฐาน นี่คือการวัดความแปรปรวนที่แข็งแกร่งอย่างมากภายในข้อมูลซึ่งคล้ายกับค่าเบี่ยงเบนมาตรฐาน ยอดเขาที่อยู่ไกลออกไปจะเป็น MAD หลายแห่งหรือมากกว่าค่าเฉลี่ย
R
x=(1,2,…,n)n=1150y
# Parameters to tune to the circumstances:
window <- 30
threshold <- 5
# An upper threshold ("ut") calculation based on the MAD:
library(zoo) # rollapply()
ut <- function(x) {m = median(x); median(x) + threshold * median(abs(x - m))}
z <- rollapply(zoo(y), window, ut, align="right")
z <- c(rep(z[1], window-1), z) # Use z[1] throughout the initial period
outliers <- y > z
# Graph the data, show the ut() cutoffs, and mark the outliers:
plot(x, y, type="l", lwd=2, col="#E00000", ylim=c(0, 20000))
lines(x, z, col="Gray")
points(x[outliers], y[outliers], pch=19)
นำไปใช้กับชุดข้อมูลเช่นโค้งสีแดงที่แสดงในคำถามมันสร้างผลลัพธ์นี้:
ข้อมูลจะแสดงเป็นสีแดงหน้าต่าง 30 วันของค่ามัธยฐาน +5 * MAD เป็นสีเทาและค่าผิดปกติซึ่งเป็นเพียงค่าข้อมูลเหล่านั้นเหนือเส้นโค้งสีเทา - ในสีดำ
(ขีด จำกัด สามารถคำนวณได้เฉพาะจุดเริ่มต้นที่ส่วนท้ายของหน้าต่างเริ่มต้นสำหรับข้อมูลทั้งหมดภายในหน้าต่างเริ่มต้นนี้จะใช้ขีด จำกัด แรก: นั่นเป็นสาเหตุที่ทำให้เส้นโค้งสีเทาแบนระหว่าง x = 0 และ x = 30)
ผลของการเปลี่ยนพารามิเตอร์คือ (a) การเพิ่มค่าของwindow
จะมีแนวโน้มที่จะทำให้เส้นโค้งสีเทาเรียบและ (b) การเพิ่มขึ้นthreshold
จะเพิ่มเส้นโค้งสีเทา เมื่อรู้สิ่งนี้ผู้ใช้สามารถแบ่งส่วนเริ่มต้นของข้อมูลและระบุค่าของพารามิเตอร์ที่แยกส่วนที่อยู่ห่างไกลออกจากส่วนที่เหลือของข้อมูลได้อย่างรวดเร็วที่สุด ใช้ค่าพารามิเตอร์เหล่านี้เพื่อตรวจสอบข้อมูลที่เหลือ หากพล็อตแสดงให้เห็นว่าวิธีการเลวลงเมื่อเวลาผ่านไปนั่นหมายถึงลักษณะของข้อมูลที่มีการเปลี่ยนแปลงและพารามิเตอร์อาจต้องปรับใหม่
ขอให้สังเกตว่าวิธีการนี้น้อยเกี่ยวกับข้อมูล:พวกเขาไม่จำเป็นต้องกระจายตามปกติ พวกเขาไม่จำเป็นต้องแสดงเป็นระยะ ๆ ; พวกเขาไม่จำเป็นต้องเป็นคนที่ไม่เป็นลบ ทั้งหมดจะถือว่าเป็นข้อมูลที่ทำงานในลักษณะที่คล้ายกันในช่วงเวลาที่เหมาะสมและยอดเขาที่อยู่ไกลกว่าอย่างเห็นได้ชัดกว่าส่วนที่เหลือของข้อมูล
หากใครต้องการทดลอง (หรือเปรียบเทียบโซลูชันอื่น ๆ กับที่เสนอที่นี่) นี่คือรหัสที่ฉันใช้ในการผลิตข้อมูลเหมือนที่แสดงในคำถาม
n.length <- 1150
cycle.a <- 11
cycle.b <- 365/12
amp.a <- 800
amp.b <- 8000
set.seed(17)
x <- 1:n.length
baseline <- (1/2) * amp.a * (1 + sin(x * 2*pi / cycle.a)) * rgamma(n.length, 40, scale=1/40)
peaks <- rbinom(n.length, 1, exp(2*(-1 + sin(((1 + x/2)^(1/5) / (1 + n.length/2)^(1/5))*x * 2*pi / cycle.b))*cycle.b))
y <- peaks * rgamma(n.length, 20, scale=amp.b/20) + baseline