Bayes yapısal zaman serisi modelleri hakkındaki bu blog yazısını okuduktan sonra , bunu daha önce ARIMA için kullandığım bir sorun bağlamında uygulamaya bakmak istedim.
Bilinen bazı (ancak gürültülü) mevsimsel bileşenlerle ilgili bazı verilerim var - bunun kesinlikle yıllık, aylık ve haftalık bileşenleri ve ayrıca özel günlerden (federal veya dini bayramlar gibi) bazı etkiler var.
Bunu bsts
uygulamak için paketi kullandım ve söyleyebildiğim kadarıyla, yanlış bir şey yapmadım, ancak bileşenler ve tahminler beklediğim gibi görünmüyor. Uygulamamın yanlış, eksik veya başka bir sorunu olup olmadığı bana açık değil.
Tam zamanlı seriler şöyle görünür:
Modeli verilerin bazı alt kümelerinde eğitebilirim ve model genellikle uyum açısından iyi görünüyor (grafik aşağıdadır). Bunu yapmak için kullanıyorum kodu burada:
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)
Model makul görünüyor:
Ama eğer öngörü çizersem, o zaman ilk önce eğilim tamamen yanlıştır ve ikincisi belirsizlik ÇOK hızla büyür - belirsizlik bandını tahminler ile aynı grafikte gösteremediğim noktaya kadar - ölçeği. Bu bölümün kodu burada:
burn <- SuggestBurn(0.1, model)
pred <- predict(model, horizon = predict_length, burn = burn, quantiles = c(.025, .975))
Saf tahmin şuna benzer:
Ve sonra ilk dağılıma geri ölçeklendiğinde (noktalı çizgi eğitimden tahmine geçişi gösterirken, problemler açıktır:
Daha fazla mevsimsel eğilimler eklemeyi, mevsimsel eğilimleri kaldırmayı, bir AR terimi eklemeyi, AddLocalLinearModel'i AddGeneralizedLocalLinearTrend'e değiştirmeyi ve modeli değiştirmeye ilişkin diğer bazı şeyleri denedim, ancak hiçbir şey sorunları çözmedi ve tahminleri daha anlamlı hale getirmedi. Bazı durumlarda yön değişir, bu nedenle 0'a düşmek yerine, zamanın bir fonksiyonu olarak tahmin artmaya devam eder. Modelin neden bu şekilde parçalandığını kesinlikle anlamıyorum. Herhangi bir öneri çok hoş olurdu.