ฟังก์ชัน ETS () จะหลีกเลี่ยงการคาดการณ์ที่ไม่สอดคล้องกับข้อมูลในอดีตได้อย่างไร


16

ฉันกำลังทำงานกับ alogorithm ใน R เพื่อทำการคำนวณการพยากรณ์รายเดือนโดยอัตโนมัติ ฉันกำลังใช้ฟังก์ชั่น ets () จากแพ็คเกจการคาดการณ์เพื่อคำนวณการคาดการณ์ มันทำงานได้ดีมาก

น่าเสียดายที่ในบางช่วงเวลาผลลัพธ์ที่ฉันได้รับนั้นแปลก

กรุณาค้นหาด้านล่างรหัสฉันใช้:

train_ts<- ts(values, frequency=12)
fit2<-ets(train_ts, model="ZZZ", damped=TRUE, alpha=NULL, beta=NULL, gamma=NULL, 
            phi=NULL, additive.only=FALSE, lambda=TRUE, 
            lower=c(0.0001,0.0001,0.0001,0.8),upper=c(0.9999,0.9999,0.9999,0.98), 
            opt.crit=c("lik","amse","mse","sigma","mae"), nmse=3, 
            bounds=c("both","usual","admissible"), ic=c("aicc","aic","bic"),
            restrict=TRUE)  
ets <- forecast(fit2,h=forecasthorizon,method ='ets')   

โปรดคุณจะพบชุดข้อมูลประวัติที่เกี่ยวข้องด้านล่าง:

 values <- c(27, 27, 7, 24, 39, 40, 24, 45, 36, 37, 31, 47, 16, 24, 6, 21, 
35, 36, 21, 40, 32, 33, 27, 42, 14, 21, 5, 19, 31, 32, 19, 36, 
29, 29, 24, 42, 15, 24, 21)

ที่นี่บนกราฟคุณจะเห็นข้อมูลประวัติ (สีดำ) ค่าติดตั้ง (สีเขียว) และการคาดการณ์ (สีน้ำเงิน) การคาดการณ์ไม่สอดคล้องกับค่าติดตั้ง

คุณมีความคิดเกี่ยวกับวิธี "ผูก" forecat ที่จะ "สอดคล้อง" กับยอดขายในอดีตหรือไม่? ป้อนคำอธิบายรูปภาพที่นี่


etsนี้เป็นหนึ่งในการคาดการณ์ที่แปลกประหลาดที่ฉันได้เจอใช้ ค่าเฉลี่ย / ระดับของข้อมูลประวัติประมาณ 20 และค่าเฉลี่ย / ระดับของการคาดการณ์อยู่ที่ประมาณ 50 ไม่แน่ใจว่าทำไมสิ่งนี้จะเกิดขึ้น คุณสามารถรันพื้นฐานetsและดูว่าคุณได้ผลลัพธ์เดียวกันหรือไม่?
พยากรณ์

ขอบคุณมากสำหรับเวลาและคำตอบของคุณ! ฉันเห็นด้วยกับคุณหนึ่งความจริงที่ว่าจุดสุดท้ายอาจถูกมองว่าเป็น "ค่าผิดปกติ" (21 vs 7 หรือ 6 หรือ 5 ของปีก่อน) มันสามารถตรวจจับได้โดยใช้ช่วงความเชื่อมั่นตามข้อมูลที่ผ่านมาและควรจะสะอาดก่อน การพยากรณ์ทางสถิติ แต่ถ้าเราคิดว่ามันเป็นการขาย "normale" มีวิธีใดที่จะหลีกเลี่ยงพฤติกรรมนี้โดย จำกัด ขอบเขตการคาดการณ์หรืออย่างน้อยควรได้รับการเตือนว่าการคาดการณ์นั้นใหญ่กว่าประวัติศาสตร์เป็นสองเท่าหรือไม่? อัลฟา, เบต้าและแกมม่าที่ถูกผูกไว้นั้นไม่เกี่ยวข้องในกรณีนี้ ขอขอบคุณอีกครั้งสำหรับความช่วยเหลือในประเด็นนี้!
MehdiK

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

ETS และตัวแบบอนุกรมเวลาที่ไม่แปรเปลี่ยนทั้งหมดถือว่าพฤติกรรมที่ผ่านมาทำนายพฤติกรรมในอนาคต หากมีจุดข้อมูลผิดปกติคุณต้องแจ้งให้แบบจำลองทราบว่ามีความผิดปกติ รูปแบบจะไม่ทราบว่าค่าเป็นเรื่องปกติคุณจะต้องระบุในรูปแบบที่ค่าเกิน
ทำนาย

คำตอบ:


10

เนื่องจาก @forecaster ชี้ให้เห็นว่าเกิดจากค่าผิดปกติในตอนท้ายของซีรีส์ คุณสามารถเห็นปัญหาได้ชัดเจนหากคุณวางแผนองค์ประกอบระดับโดยประมาณด้านบน:

plot(forecast(fit2))
lines(fit2$states[,1],col='red')

สังเกตการเพิ่มขึ้นของระดับเมื่อสิ้นสุดซีรีย์

วิธีหนึ่งในการทำให้โมเดลมีความทนทานต่อค่าผิดปกติมากขึ้นคือการลดพื้นที่พารามิเตอร์เพื่อให้พารามิเตอร์การปรับให้เรียบนั้นต้องมีค่าน้อยลง:

fit2 <- ets(train_ts, upper=c(0.3,0.2,0.2,0.98))  
plot(forecast(fit2))

ป้อนคำอธิบายรูปภาพที่นี่


การคาดการณ์ :: auto.arima เทียบเท่ากับข้อเสนอแนะที่สองของคุณสำหรับการจัดการค่าผิดปกติอย่างไร
Brash Equilibrium

1
ด้วยโมเดล ARIMA คุณสามารถจัดการค่าผิดปกติด้วยตัวแปรจำลองที่ตั้งค่าเป็น 1 ในเวลาที่มีปัญหา เพียงใช้อาร์กิวเมนต์ xreg ใน auto.arima หรือ Arima
Rob Hyndman

6

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

เมื่อฉันรันอีกครั้งโดยลบจุดข้อมูลสองจุดสุดท้ายฉันจะได้รับการคาดการณ์ที่สมเหตุสมผล โปรดดูที่ด้านล่าง:

values.clean <- c(27, 27, 7, 24, 39, 40, 24, 45, 36, 37, 31, 47, 16, 24, 6, 21, 
                  35, 36, 21, 40, 32, 33, 27, 42, 14, 21, 5, 19, 31, 32, 19, 36, 
                  29, 29, 24, 42, 15)## Last two points removed

train_ts.clean<- ts(values.clean, frequency=12)
fit2.clean<-ets(train_ts.clean)  
ets.f.clean <- forecast(fit2.clean,h=24)
plot(ets.f.clean)

ป้อนคำอธิบายรูปภาพที่นี่


5

@forecasterคุณถูกต้องว่าค่าสุดท้ายคือค่าผิดพลาด แต่เกินจริง 38 (ค่าสุดท้าย) ไม่ใช่ค่าผิดปกติเมื่อคุณคำนึงถึงแนวโน้มของบัญชีและกิจกรรมตามฤดูกาล นี่คือช่วงเวลาที่กำหนด / สอนสำหรับการทดสอบ / ประเมินวิธีการที่มีประสิทธิภาพทางเลือก หากคุณไม่ได้ระบุและปรับเปลี่ยนสำหรับความผิดปกติความแปรปรวนจะสูงเกินจริงทำให้ไม่พบรายการอื่น งวด 32 ยังเป็นค่าผิดปกติ ช่วงเวลา 3,32 และ 1 เป็นค่าผิดปกติ มีแนวโน้มที่มีนัยสำคัญทางสถิติในซีรีส์สำหรับ 17 ค่าแรก แต่ลดลงหลังจากนั้นเริ่มต้นที่ระยะเวลา 18 ดังนั้นจึงมีสองแนวโน้มในข้อมูล บทเรียนที่จะเรียนรู้ที่นี่คือวิธีการง่าย ๆ ที่ไม่มีแนวโน้มหรือรูปแบบเฉพาะของเทรนด์และ / หรือโดยปริยายสมมติว่ารูปแบบเฉพาะของกระบวนการถดถอยอัตโนมัติต้องถูกสอบสวนอย่างจริงจัง การคาดการณ์ที่ดีในอนาคตควรพิจารณาถึงความต่อเนื่องของกิจกรรมพิเศษที่พบที่จุดสูงสุด (งวด 39) ไม่สามารถแยกข้อมูลนี้ออกจากข้อมูลได้

นี่อาจเป็นรูปแบบที่มีประโยชน์:

ป้อนคำอธิบายรูปภาพที่นี่สถิติของรุ่นสุดท้ายอยู่ที่นี่ป้อนคำอธิบายรูปภาพที่นี่กราฟที่เกิดขึ้นจริง / พอดีและการพยากรณ์เป็นที่น่าสนใจเพราะมันเน้นกิจกรรมพิเศษป้อนคำอธิบายรูปภาพที่นี่


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

@forecaster ใช่เอฟเฟกต์คงที่ / พัลส์ตามฤดูกาลนั้นเป็น dterministic ล้วนๆ ... เช่นเดียวกับพัลส์ / การเลื่อนระดับและแนวโน้มเวลาท้องถิ่น นอกจากนี้เดือนสิงหาคม (8) ก็ไม่มีนัยสำคัญและไม่อยู่ในรายการสุดท้าย
IrishStat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.