बेयसियन स्ट्रक्चरल टाइम सीरीज़ मॉडल के बारे में इस ब्लॉग पोस्ट को पढ़ने के बाद , मैं इसे एक समस्या के संदर्भ में लागू करना चाहता था जिसे मैंने पहले आईआईएमए के लिए इस्तेमाल किया था।
मेरे पास कुछ ज्ञात (लेकिन शोर) मौसमी घटकों के साथ कुछ डेटा हैं - निश्चित रूप से इसके लिए एक वार्षिक, मासिक और साप्ताहिक घटक हैं, और विशेष दिनों (जैसे संघीय या धार्मिक छुट्टियों) के कारण कुछ प्रभाव भी हैं।
मैंने इसे 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))
शुद्ध भविष्यवाणी इस तरह दिखती है:
और फिर जब प्रारंभिक वितरण में वापस पहुंचा (प्रशिक्षण के लिए भविष्यवाणी से संक्रमण को दर्शाने वाली बिंदीदार रेखा के साथ, समस्याएं स्पष्ट हैं:
मैंने मौसमी रुझानों को जोड़ने की कोशिश की है, मौसमी रुझानों को हटाते हुए, एक एआर शब्द जोड़कर, AddLocalLinearModel को AddGeneralizedLocalLinearTrend और मॉडल को ट्विक करने से संबंधित कई अन्य चीजों को बदल दिया है, लेकिन कुछ भी मुद्दों को हल नहीं किया है और भविष्यवाणियों को अधिक सार्थक बनाया है। कुछ मामलों में दिशा बदल जाती है, इसलिए 0 को छोड़ने के बजाय भविष्यवाणी केवल समय के कार्य के रूप में बढ़ती रहती है। मुझे निश्चित रूप से समझ में नहीं आता है कि मॉडल इस तरह से क्यों टूट रहा है। किसी भी सुझाव बहुत स्वागत होगा।