ค่าเฉลี่ยเคลื่อนที่ควรจัดการกับจุดข้อมูลที่ขาดหายไปอย่างไร


10

ฉันกำลังเขียนโปรแกรมที่เฉลี่ยน้ำหนักของผู้ใช้ในแต่ละวัน ฉันวางแผนที่จะใช้ค่าเฉลี่ยเคลื่อนที่ 5 จุด (วันปัจจุบันสองก่อนหน้าและสองหลัง) บางครั้งจุดข้อมูลหายไป 1-2 วัน ปกติแล้วกรณีเหล่านี้มีการจัดการอย่างไร

(ถ้ามีตัวกรอง low-pass ที่ดีกว่าที่ฉันสามารถใช้ได้ฉันชอบคำแนะนำ)


สิ่งแรกที่ควรคำนึงถึงคือการสอดแทรกจุดต่าง ๆ ก่อนที่จะใช้ตัวกรองค่าเฉลี่ยเคลื่อนที่
บางคน

3
จริงมากขึ้นของสถิติคำถามกว่าคำถามการประมวลผลสัญญาณอย่างน้อยในกรณีที่ไม่มีบริบทมากขึ้น แต่คุณสามารถข้ามการคำนวณค่าเฉลี่ยใหม่ใช้ค่าเฉลี่ยปัจจุบันเป็นค่าการแทนที่หรือรอการวัดที่ตามมาและลองแก้ไข, เส้นหรืออื่น ๆ
Daniel R Hicks

ดังที่คนอื่น ๆ ระบุไว้โดยทั่วไปนี่เป็นการตัดสินใจเฉพาะแอปพลิเคชันโดยพิจารณาจากการพิจารณาว่าคุณต้องการให้เอาต์พุตที่กรองแล้วมีพฤติกรรมอย่างไร ทฤษฎีการประมวลสัญญาณส่วนใหญ่อิงจากตัวอย่างที่เว้นระยะเท่ากันดังนั้นคุณจะไม่ได้อะไรที่เรียกว่า "คำตอบที่ถูกต้อง"
Jason R

@JasonR ฉันกรองเพื่อให้การประเมินที่เหมาะสมมากขึ้นของน้ำหนักของผู้ใช้ ณ จุดนั้น ข้อมูลมีการสุ่มตัวอย่างอย่างสม่ำเสมอ (ความถี่การสุ่มตัวอย่าง = 1 / วัน) ยกเว้นบางจุดข้อมูลหายไป
Anna

@Anna: ใช่ฉันเข้าใจว่าทำไมคุณถึงกรองข้อมูล อย่างไรก็ตามข้อมูลของคุณจะไม่ได้รับการสุ่มตัวอย่างอย่างสม่ำเสมอเนื่องจากคุณขาดจุดข้อมูล ดังนั้นอย่างที่ฉันสังเกตคุณไม่น่าจะพบคำตอบเชิงทฤษฎีที่น่าพอใจสำหรับปัญหาของคุณ โซลูชันแบบเฉพาะกิจที่คุณคิดว่า "สมเหตุสมผล" สำหรับแอปพลิเคชันเฉพาะของคุณอาจเป็นคำตอบ
Jason R

คำตอบ:


4

ในฐานะที่เป็นความประทับใจทั่วไปการถดถอยจะทำงานได้ดีขึ้นในการปรับจุดที่หายไปโดยอัตโนมัติแทนที่จะใช้ตัวกรองค่าเฉลี่ยเคลื่อนที่ที่คุณเลือก

หากคุณใช้ตัวกรอง AR (ตัวกรองการถดถอยอัตโนมัติ) หรือตัวกรอง ARMA - คุณสามารถมีค่าที่คาดการณ์ได้ของเอาต์พุตตัวอย่างตามอินพุตที่ผ่านมา

X^[ผม]=Σωk* * * *x[ผม-1-k]+η

X^[ผม]

Xม.ax,Xม.ผมnx[ผม-1]X^[ผม]

มีทางเลือกอื่น ๆ อีกมากมาย - คุณสามารถเก็บไว้ได้

X^[ผม]=X[ผม-1]
X^[ผม]=ค่าเฉลี่ยตัวอย่างระยะยาวของ X 

โดยพื้นฐานแล้วมันเป็นเกมแห่งการทำนายค่าที่กล่าวมาและใช้มันเป็นสัญญาณต่อไป แน่นอนการคาดการณ์จะไม่เหมือนกับตัวอย่างดั้งเดิม แต่นั่นไม่ใช่ราคาที่คุณจ่ายสำหรับการไม่มีข้อมูล


2
ทำไมคุณถึงบอกว่าการถดถอยจะทำงานได้ดีขึ้นในการปรับ? ขอบคุณ
Spacey

3

ที่ง่ายและวิธีการทั่วไปในการกรอกข้อมูลที่ขาดหายไปถ้าคุณมีวิ่งของข้อมูลที่สมบูรณ์คือการใช้การถดถอยเชิงเส้น
สมมติว่าคุณมีการวิ่ง 1,000 ครั้งใน 5 ครั้งติดต่อกันโดยไม่พลาด
ตั้งค่าเวกเตอร์ 1000 x 1 y และเมทริกซ์ X 1000 x 4:

y       X
wt[0]   wt[-2] wt[-1] wt[1] wt[2]
---------------------------------
68      67     70     70    68
...

การถดถอยจะให้ตัวเลข 4 abcd ที่ตรงกับที่ดีที่สุด

wt[0] ~= a * wt[-2]  + b * wt[-1]  + c * wt[1]  + d * wt[2]

สำหรับข้อมูล 1000 แถวของคุณ - ข้อมูลที่แตกต่าง, abc ต่างกัน
จากนั้นคุณใช้ abcd เหล่านี้เพื่อประมาณค่า (คาดการณ์สอดแทรก) ไม่มี wt [0]
(สำหรับน้ำหนักของมนุษย์ฉันคาดว่า abcd จะอยู่ที่ประมาณ 1/4)

ในหลามดู numpy.linalg.lstsq

(มีหนังสือและเอกสารจำนวนมากเกี่ยวกับการถดถอยทุกระดับสำหรับการเชื่อมต่อกับการแก้ไขแม้ว่าฉันไม่รู้เกี่ยวกับการแนะนำที่ดี; ใคร?)



1

ฉันคิดว่าวิธีที่ง่ายที่สุดคือการ "ทำนาย" วันที่ของ "ทั้งหมด" ในอนุกรมเวลาโดยใช้ข้อมูลที่มาก่อน จากนั้นคุณสามารถใช้ชุดเวลานี้สำหรับการประมาณค่าพารามิเตอร์ (จากนั้นคุณสามารถดำเนินการต่อและแก้ไขค่าที่หายไปโดยใช้พารามิเตอร์โดยประมาณของคุณจากไทม์สทั้งหมด (เสร็จสมบูรณ์) แล้วทำซ้ำจนกว่าจะมาบรรจบกัน) คุณควรได้รับขอบเขตความเชื่อมั่นจากจำนวนดาต้าพอยน์ที่แท้จริงที่คุณมีและไม่ได้มาจากความยาวของดาต้าที่สมบูรณ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.