לאחר שקראתי את פוסט הבלוג הזה על מודלים של סדרות זמן מבניות של בייסיה, רציתי לבדוק יישום זה בהקשר לבעיה שבעבר השתמשתי ב- ARIMA.
יש לי כמה נתונים עם כמה רכיבים עונתיים ידועים (אך רועשים) - יש בהחלט מרכיב שנתי, חודשי ושבועי, וגם כמה השפעות בגלל ימים מיוחדים (כגון חגים פדרליים או דתיים).
השתמשתי בחבילת bsts
כדי ליישם את זה וככל שיכולתי לדעת לא עשיתי שום דבר לא בסדר, אם כי הרכיבים והניבוי פשוט לא נראים כמו שהייתי מצפה. לא ברור לי אם היישום שלי שגוי, לא שלם או שיש לו בעיה אחרת.
סדרת המשרה המלאה נראית כך:
אני יכול לאמן את המודל על תת קבוצה מסוימת של הנתונים, והמודל בדרך כלל נראה טוב מבחינת ההתאמה (העלילה למטה). הקוד בו אני משתמש כדי לעשות זאת נמצא כאן:
ספרייה (bsts) predict_length = 90training_cut_date <- '2015-05-01'test_cut_date <- as.Date (training_cut_date) + predict_lengthdf = read .csv ('input.tsv', sep = '\ t') df $ date <- as.Date (כ-. 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 <- ss 7) ss <- AddSeasonal (ss, yts, nseasons = 12) ss <- AddNamedHolidays (ss, named.holidays = NamedHolidays (), yts) דגם <- bsts (yts, state.specification = ss, niter = 500, = 2016)
המודל נראה סביר:
אבל אם אני מתכנן את החיזוי אז ראשית המגמה שגויה לחלוטין, ושנית חוסר הוודאות גדל מהר מאוד - עד כדי כך שאני לא יכול להראות את פס הוודאות באותה עלילה s התחזיות מבלי לעשות את ציר y בסולם יומן. הקוד לחלק זה נמצא כאן:
צריבה <- SuggestBurn (0.1, דגם) לפני <- חזו (דגם, אופק = חזית_אורך, צריבה = צריבה, כמויות = c (.025, .975))
התחזית הטהורה נראית כך:
ואז כשמצנים אותה חזרה להתפלגות הראשונית (כשהקו המקווקו מראה את המעבר מאימון לחיזוי, הבעיות ברורות:
ניסיתי להוסיף עוד מגמות עונתיות, להסיר מגמות עונתיות, להוסיף מונח AR , שינוי ה- AddLocalLinearModel ל- AddGeneralizedLocalLinearTrend ועוד כמה דברים הנוגעים לשינוי המודל, אך שום דבר לא פתר את הבעיות והפך את התחזיות למשמעותיות יותר. בחלק מהמקרים הכיוון משתנה, אז במקום לרדת ל 0 החיזוי רק ממשיך לגדול כפונקציה של זמן. אני בהחלט לא מבין מדוע המודל מתקלקל בצורה כזו. כל הצעה תתקבל בברכה.