Sau khi đọc bài đăng trên blog này về các mô hình chuỗi thời gian cấu trúc Bayes, tôi muốn xem xét việc thực hiện điều này trong bối cảnh của một vấn đề mà trước đây tôi đã sử dụng ARIMA.
Tôi có một số dữ liệu với một số thành phần theo mùa (nhưng ồn ào) - chắc chắn có các thành phần hàng năm, hàng tháng và hàng tuần cho điều này, và cũng có một số hiệu ứng do những ngày đặc biệt (như ngày lễ liên bang hoặc tôn giáo).
Tôi đã sử dụng bsts
gói để thực hiện điều này và theo như tôi có thể nói rằng tôi đã không làm gì sai, mặc dù các thành phần và dự đoán đơn giản là không giống như tôi mong đợi. Tôi không rõ ràng nếu việc triển khai của tôi sai, không đầy đủ hoặc có một số vấn đề khác.
Chuỗi toàn thời gian trông như thế này:
Tôi có thể huấn luyện mô hình trên một số tập hợp con của dữ liệu và mô hình nhìn chung có vẻ tốt về mặt phù hợp (cốt truyện bên dưới). Mã tôi đang sử dụng để làm điều này là ở đây:
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)
Mô hình có vẻ hợp lý:
Nhưng nếu tôi vẽ dự đoán thì trước tiên, xu hướng hoàn toàn sai và thứ hai là sự không chắc chắn tăng RẤT nhanh chóng - đến mức tôi không thể hiển thị dải không chắc chắn trên cùng một âm mưu như dự đoán mà không tạo trục y trên log- tỉ lệ. Mã cho phần này là ở đây:
burn <- SuggestBurn(0.1, model)
pred <- predict(model, horizon = predict_length, burn = burn, quantiles = c(.025, .975))
Dự đoán thuần túy trông như thế này:
Và sau đó khi thu nhỏ lại phân phối ban đầu (với đường chấm chấm cho thấy sự chuyển đổi từ đào tạo sang dự đoán, các vấn đề rất rõ ràng:
Tôi đã thử thêm nhiều xu hướng theo mùa, loại bỏ xu hướng theo mùa, thêm thuật ngữ AR, thay đổi AddLocalLinearModel thành AddGeneralizedLocalLinearTrend và một số điều khác liên quan đến điều chỉnh mô hình, nhưng không có gì giải quyết được vấn đề và làm cho các dự đoán có ý nghĩa hơn. Trong một số trường hợp, hướng thay đổi, thay vì giảm xuống 0, dự đoán sẽ tiếp tục tăng theo hàm thời gian. Tôi chắc chắn không hiểu tại sao mô hình bị phá vỡ theo cách này. bất kì gợi ý nào cũng đều được hoan nghênh.