אימון Prophet: היכן התחזית נשברת ומדוע
חיזוי סדרות עתיות נראה כמשימה של מודל, אך שגיאת התחזית כמעט תמיד נולדת בנתונים. Prophet מפרק את הסדרה למגמה, עונתיות והשפעות אירועים, ומשחזר בנאמנות את מה שקיבל בקלט. באיכות נמוכה של נתונים היסטוריים המודל לא יתקן את הסדרה, אלא יחזק את פגמיה בביטחון עצמי.
הראשון — חורים. ימים חסרים, ערוץ איסוף שנפל, הדבקה של שתי תפוקות: הסדרה מאבדת אחידות, והמגמה נבנית על קו שבור. יש להקדים אימון Prophet בכלל מפורש להבאה לרשת אחידה — מה להיחשב אפס, מה עצירה, מה חריגה. אינטרפולציה שקטה מסתירה את הבעיה עד לתחזית הראשונה.
השני — החלפת משטר. תעריף חדש, הפעלה מחדש של מבצע, תהליך ששונה: ההיסטוריה לפני ואחרי מתארת התנהגות שונה, והמודל ממצע את התקופות ולא פוגע באף אחת. נקודות שבירה מוגדרות במפורש, וחלון ההיסטוריה מוגבל כדי שהמשטר הישן לא ימשוך את המגמה אחורה.
השלישי — אירועים לא מסומנים. מבצע, שחרור, תקלה — אם לא מוציאים אותם כרגרסורים או כלוח שנה, הם שוקעים בשארית ומנפחים את הרווח. הרביעי — אופק שגוי: ארוך מהתקופה שבה העונתיות יציבה, הוא מרחיב את הרווחים עד לחסרי תועלת.
יש לבדוק זאת על קטע מושהיה, ולא על קטע האימון: התאמה בתוך ההיסטוריה מעידה רק על יכולת לזכור. לכן את אימון Prophet אנחנו מתחילים בביקורת הסדרה ובמדד איכות, ולא בכיוונון פרמטרים.
מה נותן מודל תקין: אפקט במדדים ובכשלים
איכות המודל נראית בבדיקה רטרוספקטיבית על חלון מחליק, ולא בנקודת ביקורת אחת. המודל מתאמן רק על נתוני עבר, חוזה את המרווח הבא, והשגיאה ממוצעת לפי MAE, MAPE ו-SMAPE. את התוצאה משווים לתחזית נאיבית עונתית: אם המודל לא מכה אותה, משטר העונתיות או הרגרסורים הוגדרו לא נכון.
עמידות לחריגים מוטמעת בשלב האימון. חגים, מבצעים ותקלות חד-פעמיות מתוארים כרגרסורים נפרדים, ולא נחתכים מההיסטוריה — אז הזינוק מסומן כאירוע ולא גורר אחריו את המגמה הבסיסית.
ב-Prophet הרגישות לנקודות שינוי במגמה מוגדרת אפריורית: גמישות גבוהה יותר — התאמה מהירה יותר, אך גם סיכון גבוה יותר לתפוס רעש במקום אות.
אופק התכנון קובע את הדרישות לנתונים. השגיאה גדלה עם כל צעד קדימה, לכן דיוק התחזית נקבע בנפרד באופק קצר ובאופק ארוך: לתכנון שבועי ולתכנון רבעוני נדרשים מערכי רגרסורים שונים. מדד מעשי — שיעור התקופות שנסגרו אוטומטית, כאשר התחזית נפלה בתוך רווח הסמך ולא נדרש בירור ידני.
מכאן גם סוג הכשלים שנעלם. כל עוד המודל אומן מחדש ידנית לפי אירוע, החלפת משטר — ספק חדש, רשת תעריפים שונתה, שינוי בביקוש — הבחינו בה ברגע שבו התחזית כבר נפרדה מהמציאות. כאשר יש לוח זמנים לאימון מחדש ובקרת סחיפה של סדרות הקלט, החלפת המשטר מזוהה לפני שהעסק רואה אותה.
אימון Prophet וחלופות: השוואת גישות
כל שלושת הווריאנטים פותרים משימה אחת — תחזית לפי סדרה היסטורית, אך בנויים באופן שונה, ומכך תלויים גם האיכות וגם עלות התמיכה.
מודל דקומפוזיציוני מפרק את הסדרה למגמה, עונתיות וחגים; תוספת רשת עצבית מוסיפה לכך פיגורים ואוטורגרסיה; מודל מאומן מראש מגיע עם משקלים מוכנים, ולעיתים קרובות ביתר דיוק על היסטוריה קצרה בלי אימון מאפס.
הפיצול פשוט: פרשנות מול דיוק על נתונים לא סדירים. אם צריך להסביר את התחזית — להראות רכיבים, תרומת רגרסורים, גבולות הרווח — הגישה הדקומפוזיציונית נשארת בסיסית. וריאנטים מבוססי רשת עצבית דורשים יותר היסטוריה ובדיקה מדוקדקת על תקופה מושהית.
| וריאנט | מתי מתאים | מגבלות |
|---|---|---|
| מודל דקומפוזיציוני | סדרה עם עונתיות מובהקת וחגים, היסטוריה קצרה, נדרשת תחזית ניתנת להסבר | צורת המגמה והעונתיות מוגדרת ידנית; בסדרות לא סדירות מפסיד לרשתות עצביות |
| תוספת רשת עצבית | נדרשים פיגורים, אוטורגרסיה ורגרסורים חיצוניים תוך שמירה על הפירוק | מתאמן זמן רב יותר, רגיש לנפח הנתונים, הרכיבים נקראים בקושי רב יותר |
| מודל מאומן מראש | הרבה סדרות קצרות, אימון מאפס יקר או בלתי אפשרי | ניתן לפרשנות פחות, תלוי בתחום האימון המקדים, דורש כוונון עדין לנתונים שלך |
נתוני הקלט בכל שלושת זהים: אינדקס זמן סדיר, טיפול בחסרים, רגרסורים חיצוניים. לכן נכון להשוות גישות חיזוי על אותה קבוצת סדרות ואותו מדד שגיאה, ולא לבחור מודל מראש.
שלבי העבודה: מביקורת הסדרה ועד מסירת המודל
אימון מודל לסדרות עתיות הוא לא הרצה אחת, אלא רצף שלבים שבו כל שלב נשען על התוצאה של הקודם. להלן שלבי אימון המודל שאנחנו עוברים יחד עם הלקוח, עם תיעוד מדדים בכל שלב.
- ביקורת והכנת הסדרה: בודקים תדירות, חסרים, חריגים, החלפת משטרים ולוח חגים. חסרים משלימים באינטרפולציה, אנומליות לא מוחקים בשקט, אלא מסמנים כאירועים נפרדים.
- בחירת סכמת ולידציה: את הקטע האחרון של הסדרה מפרידים ולא מראים למודל, כדי שההערכה תהיה הוגנת. עבור נתונים עונתיים קובעים אופק שהוא כפולה של התקופה.
- כיוונון פרמטרים של המודל: עוברים על עונתיות, מגמה, נקודות שינוי והחלקה על קטע האימון, תוך בקרת התוצאה על קטע ביניים.
- אימון: מריצים אימון Prophet על הסדרה המלאה המוכנה ושומרים את הארטיפקט יחד עם הקונפיגורציה — יכולת שחזור חשובה יותר מהרצה מוצלחת אחת.
- ולידציה על תקופה מושהית: מחשבים שגיאה לפי אופקים, בודקים היכן המודל מאבד דיוק, וחוזרים לפרמטרים אם הפער גדל.
- מסירת המודל ללקוח: מוסרים קוד, קונפיגורציות, מדדים ותקנון אימון מחדש, ומקיימים סקירה עם הצוות שלכם כדי שההרצה לא תהיה תלויה בנו.
בהמשך המודל חי במערכת שלכם: אימון מחדש לפי לוח זמנים או לפי ירידת דיוק מתחת לסף מוסכם.
מה מוסרים לידיים: ארטיפקטים, קונפיגורציות, תקנונים
פרויקט חיזוי לא מסתיים בגרף על שקופית, אלא בסט ארטיפקטים שלפיהם הצוות שלכם יוכל להריץ אימון ותמיכה בלעדינו. אנחנו מוסרים את כל מה שנדרש להרצה ניתנת לשחזור ולאימון מחדש לאחר מכן — מקונפיגורציה ועד כללי תגובה לירידת מדדים.
- קונפיגורציית המודל: היפר-פרמטרים, עונתיויות, רשימת רגרסורים חיצוניים, חלון ולידציה ואופק תחזית — בקובץ שממנו ההרצה משוחזרת אחד לאחד.
- סכמת הכנת נתונים: כיצד מתפוקות גולמיות נבנית מדגם האימון, כיצד מטפלים בחסרים, בחריגים ובהחלפת תוכניות תעריפים בתוך ההיסטוריה.
- סימון אירועים: לוח חגים, מבצעים ותקלות — כדי שהמודל לא יזקוף זינוק חד-פעמי לעונתיות ולא ימשוך אותו לתחזית.
- תקנון אימון מחדש: תדירות, טריגרים לפי מדד, סדר ההרצה והשוואה מחייבת לתחזית נאיבית לפני פרסום גרסה חדשה.
- תיעוד המודל: קלטים ופלטים, אופק מותר, גבולות תחולה, נקודות תורפה ידועות והסיבות לסטיות קודמות.
- ניטור איכות התחזית: מדדים על חלון מחליק, השוואה לקו בסיס, התראה כאשר השגיאה חורגת מהסף.
- כללי תמיכה ונסיגה: גרסאות למודלים ולנתונים, סדר חזרה לגרסה קודמת אם החדשה מתנהגת גרוע יותר.
לפני המסירה עוברים על הרשימה יחד עם המהנדסים שלכם: הם מריצים אימון על הנתונים שלהם, ואנחנו משווים את התוצאה. כך תקנון האימון מחדש והניטור לא נשארים טקסט במסמך, אלא עובדים מהיום הראשון של המסירה.
מקרה בוחן: כיצד צמצמנו שגיאת תחזית על סדרה אמיתית
תכננו ביקוש שבועי על סדרה עם שני שיאים עונתיים ולוח מבצעים קטוע. מודל בסיסי החליק זינוקים של חגים: הזזת ימי חופש ומשלוחים לפני חג נכנסו לשארית, והשגיאה הצטברה לקראת סוף הרבעון.
שיעור התקופות שבהן הפספוס עלה על הסף המותר הגיע ל-38%, והמתכננים תיקנו את התחזית ידנית כ-60 פעמים במחזור — זה יומיים עבודה על כל חישוב מחדש.
מה שינינו
חגים והזזות של ימי חופש הוצאו למאפיינים-רגרסורים נפרדים, במקום עקומה שנתית אחת הושארו עונתיות שבועית ושנתית, וזינוקי מבצעים — בגורמים חיצוניים.
כמודל ראשי אימנו Prophet, עבור סדרות עם תלות חזקה בערכים קודמים — NeuralProphet, ובהתחלה קרה, שבה ההיסטוריה קטנה, לקחנו עוגן מהיר מ-TimesFM. את האיכות מדדנו בקרוס-ולידציה מחליקה לפי חתכים עונתיים, ולא לפי חודש אחרון אחד.
מה קיבלנו
שגיאת התחזית הממוצעת באופק של ארבעה שבועות ירדה בערך פי שניים. תיקון ידני הפסיק להיות שלב חובה במחזור.
| מדד | לפני | אחרי |
|---|---|---|
| תקופות עם פספוס מעל הסף | 38% | 11% |
| תיקונים ידניים במחזור תכנון | ~60 | 8 |
| זמן לתיקון | יומיים | 3 שעות |
11% הנותרים — בעיקר מבצעים חד-פעמיים שלא היו בהיסטוריה; אותם מנהלים ברשימת חריגים נפרדת שאותה המתכנן מאשר ידנית. תקנון האימון מחדש — אחת לחודש ובנוסף הרצה שלא לפי לוח זמנים בעת שינוי במגוון המוצרים.
ספקות טכניים: חסרים, משטרים, אימון משלים
לפני פיילוט לאימון Prophet הספקות ההנדסיים בדרך כלל אותם ספקות: כמה היסטוריה להזין בקלט, מה לעשות עם חסרים, כיצד לסמן אירועים והאם אפשר לעדכן את המודל בלי בנייה מחדש מלאה. להלן תשובות קצרות לכל אחד.
כמה היסטוריה נדרשת למודל?
Prophet ו-NeuralProphet יציבים על שניים-שלושה מחזורים עונתיים מלאים. עבור עונתיות שבועית מדובר בכמה חודשים, עבור שנתית — 12 חודשים מלאים ויותר. בהיסטוריה קצרה הרכיב השנתי מוערך בצורה לא יציבה: אנחנו מכבים אותו או מעבירים את המשימה למודל בלעדיו.
מה לעשות עם חסרים בנתונים?
תחילה מפרידים את החסרים לפי טבעם. כשל טכני של האוסף משלימים באינטרפולציה ומסמנים כקטע משוחזר. אפס מהותי — חג, עצירת קו — הוא עובדה, ואסור למלא אותו בממוצע: המודל ילמד דינמיקה כוזבת. ההחלטה מתקבלת לכל קטע בנפרד, לפי מפת החסרים.
כיצד לסמן אירועים בלוח השנה?
חגים, מבצעים, שחרורים ותקלות מוזנים כרגרסורים נפרדים, ולא מוסתרים בתוך העונתיות — אחרת קפיצה חד-פעמית נמרחת על פני כל השנה. הסימון נשמר כטבלת תאריכים ומשקלים, וניתן לערוך אותו בלי שינוי בקוד.
האם אפשר לאמן את המודל משלים בלי בנייה מחדש מלאה?
כן: Prophet מקבל נקודות חדשות למודל שכבר אומן, ו-NeuralProphet ממשיך אימון מהמשקלים הנוכחיים. בנייה מחדש מלאה מופעלת בעת החלפת משטר של הסדרה — מבנה העונתיות השתנה, נוסף רגרסור חדש וגדול, או שהנתונים עברו לקנה מידה אחר. ההחלטה נקבעת לפי מדדים על קטע מושהיה, ולא לפי הערכה בעין.
נדון במשימה שלכם: שלחו סדרה ודרישות
כדי לדון במשימת החיזוי באופן ענייני ולא במילים כלליות, אנחנו צריכים את הסדרה עצמה ואת ההקשר של השימוש בה. הדרישות לנתונים שונות בין גישות: אחת זקוקה לרשת זמן סדירה בהחלט, אחרת — לעומק היסטוריה כדי להפריד עונתיות ממגמה, ושלישית — לגורמים חיצוניים הידועים מראש. ככל שהתמונה הראשונית מלאה יותר, כך הערכת הפרויקט מדויקת יותר ופחות עיבודים מחדש בשלב ההטמעה.
- סדרה בצורה קריאה למכונה — CSV או Parquet, חתימת זמן עם אזור זמן, צעד קבוע, חסרים ועצירות מסומנים במפורש. ערך ריק ואפס — לא אותו דבר.
- עומק היסטוריה — לפחות שניים-שלושה מחזורים עונתיים מלאים. עבור עונתיות שבועית ושנתית מדובר באופקים שונים, והם קובעים מה בכלל אפשר ללמוד.
- אופק ותדירות התחזית — לכמה צעדים קדימה, באיזו תדירות מחשבים מחדש, נדרש חתך אחד או התפלגות עם קוונטילים.
- גורמים חיצוניים — לוח שנה וחגים, מבצעים, מזג אוויר, תיקונים. העיקר: מה ידוע במועד התחזית ומה מופיע רק בדיעבד.
- אירועים ששוברים את הסדרה — תקלות, מעברי שיטת רישום, החלפת מתודולוגיה. כדאי לסמן אותם: חלק מהחריגים חותכים, וחלק משאירים כאות.
- קריטריון קבלה — מדד (שגיאה סימטרית, שגיאה על קוונטיל) וסף שבו המודל נחשב לעובד, בתוספת כלל התנהגות ביציאה ממנו.
- כיצד התחזית משתלבת במערכת שלכם — חישוב מחדש לפי לוח זמנים או חישוב לפי דרישה, לאן מוסרים את התוצאה ובאיזו השהיה.
בתגובה אתם מקבלים הערכת פרויקט, תוכנית עבודה ושניים-שלושה וריאנטים של סכמת אימון: מודל עוגן פשוט כעוגן מהיר, מודל מקומי עם רגרסורים לסדרה שלכם ומודל גלובלי מאומן מראש — אם ההיסטוריה שלכם קטנה.
את הווריאנטים משווים על חלונות היסטוריים, מראים איזה מהם נכנס לסף, וקובעים את סכמת האימון המשלים: לפי לוח זמנים או לפי סחיפת נתונים.
מה לעשות אם הסדרה כבר מחוזית בכלי אחר
סדרה שכבר מחוזית בכלי אחר — זה לא סיבה להתחיל מאפס, אלא נקודת התחלה. תחילה אוספים את התנהגות המודל הנוכחי: הרצות רטרוספקטיביות על חלונות היסטוריים, שגיאה לפי אופקים ולפי חתכים עונתיים. בלי המספרים האלה כל השוואה לפתרון חדש תהיה שיחה על טעם, ולא על איכות התחזית.
בנפרד מעבירים את כל מה שהמודל יודע מעבר לסדרה עצמה: לוח חגים והזזות, תקופות מבצעים, רגרסורים, כללי טיפול בחסרים ובחריגים. אם מעבירים רק את עמודת הערכים, הסכמה החדשה תפסיד — אבל לא בגלל האלגוריתם, אלא בגלל מאפיינים שאבדו ועיבוד מקדים שונה.
דרך פשרה — להריץ שני מודלים במקביל: המודל הנוכחי נשאר עובד, והחדש מחושב במצב צל ואינו משפיע על ההחלטות. לאחר כמה מחזורי חיזוי משווים את השגיאה לפי אופקים ולפי קבוצות סדרות, ובודקים היכן הפער מערכתי והיכן רעש. כך המעבר נשען על סטטיסטיקה מצטברת, ולא על הרצה מוצלחת אחת.
את מסלול המעבר משאירים הפיך: הפתרון הנוכחי נשמר במלואו, בחירת המודל נקבעת בקונפיגורציה, ולא בעריכת קוד. זה מאפשר לחזור אחורה בצעד אחד, אם האיכות על נתונים חיים תתגלה כגרועה יותר.
אם אצלכם כבר עובד Prophet או חישוב משלכם — תארו אילו מאפיינים ואופקים חשובים, ואנחנו נחזור עם תוכנית מעבר והערכת לוחות זמנים.







