การพยากรณ์หลายช่วงเวลาด้วยการเรียนรู้ของเครื่อง


9

เมื่อเร็ว ๆ นี้ฉันได้ทบทวนความรู้เกี่ยวกับอนุกรมเวลาของฉันและรู้ว่าการเรียนรู้ด้วยเครื่องส่วนใหญ่ให้การคาดการณ์ล่วงหน้าเพียงขั้นตอนเดียว

ด้วยการคาดการณ์ล่วงหน้าหนึ่งขั้นฉันหมายถึงการคาดการณ์ที่เช่นถ้าเรามีข้อมูลรายชั่วโมงให้ใช้ข้อมูลตั้งแต่ 10.00 น. ถึง 11.00 น. และ 11.00 น. สำหรับ 12.00 น. เป็นต้น

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

วิธีการเรียนรู้ของเครื่องสามารถสร้างการคาดการณ์ล่วงหน้าล่วงหน้าได้หรือไม่? ด้วยการคาดการณ์ h-step-ahead ฉันหมายถึงเช่นสมมติว่าข้อมูลรายชั่วโมงเราใช้ข้อมูลจาก 10:00 ในการคาดการณ์ล่วงหน้า 7 ขั้นตอนเพื่อรับการประมาณการสำหรับ 11,12,13,14,15,16,17 ' o นาฬิกา

ตัวอย่างรูป: ป้อนคำอธิบายรูปภาพที่นี่

เกี่ยวข้องกับคำถามหลักของฉันฉันสงสัยว่า:

  • อะไรคือสาเหตุที่ฉันไม่เห็นใครก็ตามที่ใช้การเรียนรู้ของเครื่องเพื่อทำการพยากรณ์ล่วงหน้าแบบ h-step
  • หากมีวิธีการที่ใช้การเรียนรู้ของเครื่องมันแม่นยำมากกว่าหรือน้อยกว่า ARIMA หรือไม่?

คำตอบ:


7

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

  • ในการพยากรณ์แบบเรียกซ้ำ (หรือที่เรียกว่าการพยากรณ์ซ้ำ) คุณฝึกโมเดลของคุณสำหรับการคาดการณ์ล่วงหน้าหนึ่งก้าวเท่านั้น หลังจากเสร็จสิ้นการฝึกอบรมคุณใช้แบบจำลองสุดท้ายของคุณซ้ำเพื่อคาดการณ์ล่วงหน้า 1 ขั้นตอนล่วงหน้า 2 ขั้นตอนไปข้างหน้า ฯลฯ ... จนกว่าคุณจะไปถึงขั้นตอนการคาดการณ์ขั้นตอนที่ต้องการ เมื่อต้องการทำเช่นนั้นคุณป้อนการพยากรณ์จากแต่ละขั้นตอนที่ต่อเนื่องกลับสู่โมเดลเพื่อสร้างขั้นตอนถัดไป วิธีการนี้จะถูกใช้โดยขั้นตอนวิธีการพยากรณ์แบบดั้งเดิมเช่น ARIMA และ Exponential Smoothing ขั้นตอนวิธีการและสามารถนำมาใช้สำหรับการเรียนรู้เครื่องการคาดการณ์ตาม (ดูโพสต์นี้สำหรับตัวอย่างและโพสต์นี้สำหรับการอภิปรายบางส่วน)n
  • การคาดการณ์ทางตรงคือเมื่อคุณฝึกอบรมรุ่นที่แยกต่างหากสำหรับแต่ละขั้นตอน (ดังนั้นคุณกำลังพยายามที่จะ "โดยตรง" คาดการณ์ก้าวไปข้างหน้าแทนถึงขั้นตอนซ้ำ. ดูเบน Taied et al.สำหรับการอภิปรายของการคาดการณ์โดยตรงและ วิธีการรวมที่ซับซ้อนมากขึ้นnthn

ตอนนี้เพื่อตอบคำถามหลักของคุณ:

วิธีการเรียนรู้ของเครื่องสามารถสร้างการคาดการณ์ล่วงหน้าล่วงหน้า

ใช่วิธีการ ML สามารถทำได้และพวกเขาสามารถสร้างการคาดการณ์ล่วงหน้าแบบ h- ขั้นตอนโดยใช้การพยากรณ์แบบเรียกซ้ำและแบบหลายขั้นตอนโดยตรง ไม่เพียงแค่นั้น แต่สำหรับการพยากรณ์หลายขั้นตอนโดยตรงพวกเขาจะเหมาะกับงานมากกว่ารุ่นดั้งเดิมเช่น ARIMA หรือ Exponential Smoothing อย่างไรก็ตามโปรดทราบว่าสำหรับการพยากรณ์หลายขั้นตอนโดยตรงคุณต้องระบุล่วงหน้า h-steps ล่วงหน้าที่คุณต้องการพยากรณ์และฝึกอบรมโมเดลของคุณตามนั้นในขณะที่การพยากรณ์ซ้ำคุณสามารถใช้แบบจำลองของคุณสำหรับขั้นตอนใด ๆ ในอนาคตที่คุณต้องการ .

ยิ่งกว่านั้นChevillon & Hendryยืนยันว่าในบางกรณีการพยากรณ์หลายขั้นตอนโดยตรงนั้นแม่นยำกว่าการพยากรณ์แบบเรียกซ้ำ - ซึ่งหมายความว่า ML จะแม่นยำกว่าวิธีการทั่วไป

สำหรับคำถามอื่น ๆ ของคุณ:

  • อะไรคือสาเหตุที่ฉันไม่เห็นใครก็ตามที่ใช้การเรียนรู้ของเครื่องเพื่อทำการพยากรณ์ล่วงหน้าแบบ h-step

หลายคนกำลังใช้ ML สำหรับการพยากรณ์หลายขั้นตอนโดยเฉพาะอย่างยิ่งการใช้เครือข่ายประสาท: วิธี nynar ของ Hyndman มีอยู่ในแพ็คเกจ R Forecast, แพ็คเกจ Kourentzes 'nnfor R, โมเดล DeepAR ของ Amazon และอื่น ๆ อีกมากมาย

XGBoost ถูกใช้อย่างประสบความสำเร็จในการแข่งขันซีรีย์ Kaggle บางครั้งเช่นกัน

ดูBontempi และคณะ สำหรับการสนทนาทั่วไป

  • หากมีวิธีการที่ใช้การเรียนรู้ของเครื่องมันแม่นยำมากกว่าหรือน้อยกว่า ARIMA หรือไม่?

นั่นเป็นคำถามเปิดและแน่นอนขึ้นอยู่กับข้อมูลและแอปพลิเคชันที่คาดการณ์ไว้


1

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

ซีรีย์เวลาที่ฉันทำงานด้วยนั้นมีสองฤดูกาล (รายวันและรายสัปดาห์) ไม่มีเทรนด์และยอดเขาจำนวนมากในช่วงกลางวัน

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

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

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

สำหรับวัตถุประสงค์ในการวิเคราะห์ของฉันฉันพบว่า N = 4 (2 ชั่วโมงในอนาคต) จะเป็นการประนีประนอมที่ดี


1

ที่จะตอบคำถามของคุณในระยะทั่วไปมากขึ้นก็เป็นไปได้ที่จะใช้กลไกการเรียนรู้และคาดการณ์คาดการณ์ H-ขั้นตอนข้างหน้า ส่วนที่ยุ่งยากคือคุณต้องเปลี่ยนรูปร่างข้อมูลของคุณเป็นเมทริกซ์ที่คุณมีสำหรับการสังเกตแต่ละครั้งมูลค่าที่แท้จริงของการสังเกตและค่าที่ผ่านมาของอนุกรมเวลาสำหรับช่วงที่กำหนด คุณจะต้องกำหนดด้วยตนเองว่าช่วงของข้อมูลที่เกี่ยวข้องกับการทำนายอนุกรมเวลาของคุณในความเป็นจริงในขณะที่คุณจะพารามิเตอร์รูปแบบ ARIMA ความกว้าง / ขอบฟ้าของเมทริกซ์มีความสำคัญอย่างยิ่งต่อการคาดเดาค่าถัดไปของเมทริกซ์ของคุณอย่างถูกต้อง หากขอบฟ้าของคุณถูก จำกัด คุณอาจพลาดเอฟเฟกต์ตามฤดูกาล

เมื่อคุณทำเช่นนั้นแล้วเพื่อคาดการณ์ h-steps-ahead คุณจะต้องทำนายค่าถัดไปแรกตามการสังเกตครั้งสุดท้ายของคุณ จากนั้นคุณจะต้องเก็บการทำนายว่าเป็น "ค่าจริง" ซึ่งจะใช้ในการทำนายค่าถัดไปที่สองผ่านการเลื่อนเวลาเช่นเดียวกับแบบจำลอง ARIMA คุณจะต้องทำซ้ำขั้นตอน h เพื่อให้ได้ h-steps-ahead การวนซ้ำแต่ละครั้งจะขึ้นอยู่กับการทำนายก่อนหน้านี้

ตัวอย่างการใช้รหัส R จะเป็นดังต่อไปนี้

library(forecast)
library(randomForest)

# create a daily pattern with random variations
myts <- ts(rep(c(5,6,7,8,11,13,14,15,16,15,14,17,13,12,15,13,12,12,11,10,9,8,7,6), 10)*runif(120,0.8,1.2), freq = 24)
myts_forecast <- forecast(myts, h = 24) # predict the time-series using ets + stl techniques
pred1 <- c(myts, myts_forecast1$mean) # store the prediction

# transform these observations into a matrix with the last 24 past values
idx <- c(1:24)
designmat <- data.frame(lapply(idx, function(x) myts[x:(215+x)])) # create a design matrix
colnames(designmat) <- c(paste0("x_",as.character(c(1:23))),"y")

# create a random forest model and predict iteratively each value
rfModel <- randomForest(y ~., designmat)
for (i in 1:24){
  designvec <- data.frame(c(designmat[nrow(designmat), 2:24], 0))
  colnames(designvec) <- colnames(designmat)
  designvec$y <- predict(rfModel, designvec)
  designmat <- rbind(designmat, designvec)
}
pred2 <- designmat$y

#plot to compare predictions
plot(pred1, type = "l")
lines(y = pred2[216:240], x = c(240:264), col = 2)

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


แม้ว่าคุณอาจต้องการพูดถึงว่าสิ่งที่คุณโทรเวลาขยับเป็นจริงสิ่งที่ arima มาตรฐานกำลังทำ นั่นคือเหตุผลที่ Arima-Predictions มีแนวโน้มที่จะเป็นเส้นตรงมาก
5

ใช่แน่นอน ฉันจะแก้ไขคำตอบเพื่อชี้แจงขั้นตอนนี้
AshOfFire

1
ในรุ่นอนุกรมเวลาคุณยังสามารถรวมคุณสมบัติเพิ่มเติมได้อีกด้วย
ทิม

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