שְׁאֵלָה:
חיזויים ממודל BSTS (ב- R) נכשלים לחלוטין
anthr
2016-04-26 21:38:24 UTC
view on stackexchange narkive permalink

לאחר שקראתי את פוסט הבלוג הזה על מודלים של סדרות זמן מבניות של בייסיה, רציתי לבדוק יישום זה בהקשר לבעיה שבעבר השתמשתי ב- ARIMA.

יש לי כמה נתונים עם כמה רכיבים עונתיים ידועים (אך רועשים) - יש בהחלט מרכיב שנתי, חודשי ושבועי, וגם כמה השפעות בגלל ימים מיוחדים (כגון חגים פדרליים או דתיים).

השתמשתי בחבילת bsts כדי ליישם את זה וככל שיכולתי לדעת לא עשיתי שום דבר לא בסדר, אם כי הרכיבים והניבוי פשוט לא נראים כמו שהייתי מצפה. לא ברור לי אם היישום שלי שגוי, לא שלם או שיש לו בעיה אחרת.

סדרת המשרה המלאה נראית כך:

Full data

אני יכול לאמן את המודל על תת קבוצה מסוימת של הנתונים, והמודל בדרך כלל נראה טוב מבחינת ההתאמה (העלילה למטה). הקוד בו אני משתמש כדי לעשות זאת נמצא כאן:

  ספרייה (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)  

המודל נראה סביר:

Model Plot

אבל אם אני מתכנן את החיזוי אז ראשית המגמה שגויה לחלוטין, ושנית חוסר הוודאות גדל מהר מאוד - עד כדי כך שאני לא יכול להראות את פס הוודאות באותה עלילה s התחזיות מבלי לעשות את ציר y בסולם יומן. הקוד לחלק זה נמצא כאן:

  צריבה <- SuggestBurn (0.1, דגם) לפני <- חזו (דגם, אופק = חזית_אורך, צריבה = צריבה, כמויות = c (.025, .975))  

התחזית הטהורה נראית כך:

pure prediction

ואז כשמצנים אותה חזרה להתפלגות הראשונית (כשהקו המקווקו מראה את המעבר מאימון לחיזוי, הבעיות ברורות:

full distro

ניסיתי להוסיף עוד מגמות עונתיות, להסיר מגמות עונתיות, להוסיף מונח AR , שינוי ה- AddLocalLinearModel ל- AddGeneralizedLocalLinearTrend ועוד כמה דברים הנוגעים לשינוי המודל, אך שום דבר לא פתר את הבעיות והפך את התחזיות למשמעותיות יותר. בחלק מהמקרים הכיוון משתנה, אז במקום לרדת ל 0 החיזוי רק ממשיך לגדול כפונקציה של זמן. אני בהחלט לא מבין מדוע המודל מתקלקל בצורה כזו. כל הצעה תתקבל בברכה.

מדוע שלא תפרסם את הנתונים שלך ואנסה לעזור ... לא אוכל לענות מדוע המודל מתקלקל מכיוון שאינני משתמש בגישה זו מכיוון שיש בו יותר מדי הנחות.מדויק לגבי מספר הערכים שנמנעו, תאריך ההתחלה ומדינת המוצא.
תודה רבה על תגובתך.העליתי את הנתונים הגולמיים [כאן] (http://pastebin.com/PUrWVC2J) למקרה שיש לך זמן להעיף מבט.הנתונים נעים מתחילת 2013 ועד סוף השנה.ניסיתי גם לחזות עם מודל ARIMA אך גם התחזיות ממנו לא תאמו את נתוני ההחזקה.נתוני ההחזקה הם בעצם רק חלק קטן משנת 2015 או 2016, תלוי בכמה נתוני אימונים רציתי להשתמש.
יש לי בעיה להוריד אותו .. אנא שלח קובץ csv לכתובת הדוא"ל שלי
שתיים תשובות:
Steve Scott
2016-04-28 23:14:04 UTC
view on stackexchange narkive permalink

סטיב סקוט כאן. כתבתי את חבילת ה- bsts. יש לי כמה הצעות בשבילך. ראשית, הרכיבים העונתיים שלך לא עושים מה שאתה חושב שהם. אני חושב שיש לך נתונים יומיים מכיוון שאתה מנסה להוסיף רכיב של 7 עונות, שאמור לעבוד כראוי. אבל אמרת למרכיב העונתי השנתי שלך לחזור כל 12 יום. קשה להשיג רכיב עונתי חודשי עם נתונים יומיים, אך אתה יכול לעשות עונתיות של 52 שבועות על ידי AddSeasonal (..., nseasons = 52, season.duration = 7) .

הוויכוח season.duration אומר למודל כמה נקודות זמן כל עונה צריכה להימשך. הטיעון nseasons אומר לו כמה עונות הן במחזור. המספר הכולל של נקודות זמן במחזור הוא season.duration * nseasons .

ההצעה השנייה היא שתרצה לחשוב על מודל אחר למגמה. המודל LocalLinearTrend גמיש מאוד, אך גמישות זו יכולה להופיע כשונות לא רצויה בתחזיות לטווח הארוך. ישנם כמה דגמי טרנד אחרים המכילים מעט יותר מבנה. GeneralizedLocalLinearTrend (סליחה על השם הלא תיאורי) מניח שמרכיב ה"שיפוע "של המגמה הוא תהליך AR1 במקום הליכה אקראית. זו אפשרות ברירת המחדל שלי אם ברצוני לחזות הרבה בעתיד. נראה שרוב הווריאציה של סדרות הזמן שלך מגיעה מעונתיות, אז אולי נסה AddLocalLevel או אפילו AddAr במקום AddLocalLinearTrend .

לבסוף, באופן כללי אם אתה מקבל תחזיות מוזרות, ואתה רוצה להבין איזה חלק מהמודל אשם, נסה את העלילה (דגם, "רכיבים") כדי לראות את המודל מפורק לחתיכות הבודדות שביקשת.

לידיעתך: אני נתקל בבעיות דומות מאוד עם הנתונים שלי, שהם גם מדי יום.יישמתי את כל ההצעות שלך המפורטות כאן ונראה כי אף אחת מהן לא עוזרת.
@Steve סקוט מצטער שהפריעתי לך סטיב, אני רוצה לשאול אותך את זה: אם אני מנסה לדגמן מספר סדרות זמן ואני נמצא במסגרת מודל מעורב היררכי, האם אוכל לדגם זאת באמצעות החבילה שלך? אגב: תודה רבה על החבילה שלך!
Elderkm2012
2016-05-12 15:41:44 UTC
view on stackexchange narkive permalink

אני חושב שתוכל לשנות גם את צריבת ברירת המחדל. כאשר השתמשתי ב- bsts יצרתי רשת של ערכי צריבה וחנקות עם MAPE כנתון הסטטיסטי שלי לתקופת ההשהיה. נסה להשתמש במקום זאת ב- AddStudentLocalLinearTrend אם לנתונים שלך יש וריאציה עצומה על מנת שהמודל יכול לצפות לריאציה כזו

היה מועיל במקרה שלי כשהיו לי מעט נקודות נתונים (20)


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...