หลังจากอ่านโพสต์บล็อกนี้เกี่ยวกับแบบจำลองอนุกรมเวลาของ Bayesian ฉันต้องการดูการใช้สิ่งนี้ในบริบทของปัญหาที่ฉันเคยใช้ ARIMA สำหรับ
ฉันมีข้อมูลบางส่วนที่มีส่วนประกอบตามฤดูกาลที่ทราบ (แต่มีเสียงดัง) มีองค์ประกอบประจำปีรายเดือนและรายสัปดาห์สำหรับเรื่องนี้และยังมีผลกระทบบางอย่างเนื่องจากวันพิเศษ (เช่นวันหยุดราชการหรือวันหยุดทางศาสนา)
ฉันใช้bsts
แพคเกจเพื่อใช้งานและเท่าที่ฉันสามารถบอกได้ว่าฉันไม่ได้ทำอะไรผิดพลาดถึงแม้ว่าส่วนประกอบและการคาดการณ์จะไม่ดูอย่างที่ฉันคาดไว้ ไม่ชัดเจนสำหรับฉันหากการนำไปใช้ของฉันผิดไม่สมบูรณ์หรือมีปัญหาอื่น
ซีรี่ส์เต็มเวลามีลักษณะดังนี้:
ฉันสามารถฝึกโมเดลในส่วนย่อยของข้อมูลและโมเดลโดยทั่วไปจะดูดีในแง่ของความพอดี (พล็อตต่ำกว่า) รหัสที่ฉันใช้ในการทำสิ่งนี้อยู่ที่นี่:
library(bsts)
predict_length = 90
training_cut_date <- '2015-05-01'
test_cut_date <- as.Date(training_cut_date) + predict_length
df = read.csv('input.tsv', sep ='\t')
df$date <- as.Date(as.character(df$date),format="%Y-%m-%d")
df_train = df[df$date < training_cut_date,]
yts <- xts(log10(df_train$count), order.by=df_train$date)
ss <- AddLocalLinearTrend(list(), yts)
ss <- AddSeasonal(ss, yts, nseasons = 7)
ss <- AddSeasonal(ss, yts, nseasons = 12)
ss <- AddNamedHolidays(ss, named.holidays = NamedHolidays(), yts)
model <- bsts(yts, state.specification = ss, niter = 500, seed=2016)
รูปแบบดูสมเหตุสมผล:
แต่ถ้าฉันพล็อตคำทำนายแนวโน้มแรกจะผิดอย่างสมบูรณ์และประการที่สองความไม่แน่นอนเพิ่มขึ้นอย่างรวดเร็วมาก - จนถึงจุดที่ฉันไม่สามารถแสดงแถบความไม่แน่นอนบนพล็อตเดียวกับการคาดการณ์โดยไม่ทำให้แกน y บนบันทึก ขนาด รหัสสำหรับส่วนนี้อยู่ที่นี่:
burn <- SuggestBurn(0.1, model)
pred <- predict(model, horizon = predict_length, burn = burn, quantiles = c(.025, .975))
การทำนายที่บริสุทธิ์มีลักษณะเช่นนี้:
และเมื่อปรับสเกลกลับไปที่การแจกแจงเริ่มต้น (ด้วยเส้นประที่แสดงการเปลี่ยนจากการฝึกอบรมเป็นการทำนายปัญหาที่เห็นได้ชัด:
ฉันได้ลองเพิ่มแนวโน้มตามฤดูกาลลบแนวโน้มตามฤดูกาลเพิ่มคำศัพท์ AR เปลี่ยน AddLocalLinearModel เป็น AddGeneralizedLocalLinearTrend และสิ่งอื่น ๆ อีกมากมายที่เกี่ยวข้องกับการปรับเปลี่ยนโมเดล แต่ไม่มีอะไรแก้ปัญหาได้และทำให้การคาดการณ์มีความหมายมากขึ้น ในบางกรณีทิศทางจะเปลี่ยนดังนั้นแทนที่จะปล่อยให้เป็น 0 การคาดการณ์จะเพิ่มขึ้นเรื่อย ๆ ตามหน้าที่ของเวลา ฉันไม่เข้าใจอย่างแน่นอนว่าทำไมตัวแบบถึงพังลงด้วยวิธีนี้ ข้อเสนอแนะใด ๆ จะยินดีมาก