בדף הזה מוסבר על תחזיות היררכיות, על המטרות שלהן ועל אסטרטגיות אימון שאפשר להשתמש בהן כדי לצמצם את ההטיה במודלים של התחזיות.
הוראות מפורטות להגדרת תחזית היררכית כשמאמנים את מודל התחזית באמצעות ה-API זמינות במאמר בנושא אימון מודל תחזית.
מהו חיזוי היררכי
הרבה פעמים סדרות זמן בנויות בהיררכיה מקוננת. לדוגמה, אפשר לחלק את כל מלאי המוצרים של קמעונאי לקטגוריות של מוצרים. אפשר לחלק את הקטגוריות האלה למוצרים ספציפיים. כשמבצעים חיזוי של ערך המכירות הצפוי, סכום החיזויים של מוצרים בקטגוריה מסוימת צריך להיות שווה לחיזוי של הקטגוריה עצמה, וכן הלאה בהיררכיה.
באופן דומה, גם למאפיין הזמן של סדרת זמן יחידה יכולה להיות היררכיה. לדוגמה, סכום המכירות החזויות של מוצר מסוים ברמת היום צריך להיות שווה לסכום המכירות החזויות של המוצר בשבוע. האיור הבא מציג את ההיררכיה הזו של קבוצות וזמנים כמטריצה:
לחיזוי היררכי יש שלוש מטרות:
- צמצום ההטיה הכוללת כדי לשפר את המדדים בכל סדרות הזמנים (סך המכירות).
- צמצום הטיה זמנית כדי לשפר את המדדים לאורך זמן (מכירות עונתיות).
- הפחתת הטיה ברמת הקבוצה כדי לשפר את המדדים על פני קבוצה של סדרות זמן (מכירות פריטים).
ב-Vertex AI, חיזוי היררכי לוקח בחשבון את המבנה ההיררכי של סדרות זמן על ידי שילוב של מונחי הפסד נוספים עבור מסקנות מצטברות.
Hierarchical loss = (1 x loss) +
(temporal total weight x temporal total loss) +
(group total weight x group total loss) +
(group temporal total weight x group temporal total loss)
לדוגמה, אם הקבוצה ההיררכית היא category, ההסקות ברמה category הן סכום ההסקות של כל המוצרים בקטגוריה. אם היעד של המודל הוא שגיאה ממוצעת מוחלטת (MAE), הפסד כולל את ה-MAE עבור מסקנות ברמות 'מוצר' ו'קטגוריה'. כך אפשר לשפר את העקביות של התחזיות ברמות שונות בהיררכיה, ובמקרים מסוימים, אפילו לשפר את המדדים ברמה הנמוכה ביותר.
הגדרת צבירה היררכית לאימון המודל
כדי להגדיר צבירה היררכית כשמאמנים מודלים של תחזיות, צריך להגדיר את AutoMLForecastingTrainingJob ב-Vertex AI SDK או להגדיר את hierarchyConfig ב-Vertex AI API.
הפרמטרים שזמינים ל-AutoMLForecastingTrainingJob ול-hierarchyConfig כוללים:
group_columnsgroup_total_weighttemporal_total_weightgroup_temporal_total_weight
הפרמטרים מאפשרים שילובים שונים של הפסדים מצטברים לפי קבוצה וזמן. בנוסף, אפשר להקצות משקלים כדי להגדיל את העדיפות של מזעור ההפסד המצטבר ביחס להפסד האישי. לדוגמה, אם המשקל הוא 2.0, הוא מקבל משקל כפול מההפסד האישי.
group_columns
שמות העמודות בטבלת נתוני האימון מזהים את הקיבוץ של רמת ההיררכיה. העמודות צריכות להיות time_series_attribute_columns. אם לא מגדירים את עמודת הקבוצה, כל סדרות הזמן נחשבות לחלק מאותה קבוצה ומצטברות על פני כל סדרות הזמן.
group_total_weight
משקל ההפסד המצטבר של הקבוצה ביחס להפסד האישי. מושבתת אם המדיניות מוגדרת לערך 0.0 או לא מוגדרת.
temporal_total_weight
המשקל של ההפסד המצטבר לאורך זמן ביחס להפסד האישי. מושבתת אם המדיניות מוגדרת לערך 0.0 או לא מוגדרת.
group_temporal_total_weight
המשקל של ההפסד הכולל (קבוצה x זמן) המצטבר ביחס להפסד האישי. התכונה מושבתת אם המדיניות מוגדרת לערך 0.0 או לא מוגדרת. אם לא מגדירים את עמודת הקבוצה, כל סדרות הזמן נחשבות לחלק מאותה קבוצה ומצטברות על פני כל סדרות הזמן.
אסטרטגיות לצמצום הטיה
מתחילים עם סוג אחד של צבירה (קבוצה או זמן) עם משקל של
10.0, ואז מחלקים או מכפילים את הערך בהתאם לתוצאות.
הפחתת ההטיה הכוללת
בתחזיות מפורטות לחלוקת מלאי בין חנויות, שבהן נעשה שימוש בשגיאת אחוז מוחלט משוקלל (WAPE) ברמת המוצר x חנות x תאריך כמדד תחזיתי, התחזיות לרוב נמוכות מדי ברמות המצטברות. כדי לפצות על ההטיה הכוללת הזו, אפשר לנסות את הפתרונות הבאים:
- מגדירים את
group_total_weightלהיות10.0. - לא מגדירים את
group_columns. - משאירים את המשקלים האחרים ללא הגדרה.
השיטה הזו מצטברת על פני כל סדרות הזמן ומפחיתה את ההטיה הכוללת.
הפחתת הטיה זמנית
בתכנון לטווח ארוך, יכול להיות שהתחזיות יתבצעו ברמה של מוצר x אזור x שבוע, אבל המדדים הרלוונטיים יימדדו ביחס לסיכומים העונתיים. כדי לפצות על ההטיה הזמנית הזו, אפשר לנסות את הפתרונות הבאים:
- מגדירים את
temporal_total_weightלהיות10.0. - לא מגדירים את
group_columns. - משאירים את המשקלים האחרים ללא הגדרה.
החישוב הזה מצטבר על פני כל התאריכים באופק של סדרת זמן, ומצמצם את ההטיה הזמנית.
הפחתת הטיה ברמת הקבוצה
תחזיות שמשמשות למטרות שונות בתהליך החידוש של המלאי, יכולות להיות תחזיות מפורטות ברמת המוצר x החנות x התאריך או השבוע, או תחזיות ברמת המוצר x מרכז ההפצה x התאריך להפצה, או ברמת קטגוריית המוצר x התאריך להזמנות של חומרים. כדי לעשות את זה:
- מגדירים את
group_total_weightלהיות10.0. - מגדירים את
group_columns, לדוגמה, ["region"] או ["region", "category"]. אם מגדירים כמה עמודות לקבוצה, המערכת משתמשת בערך המשולב שלהן כדי להגדיר את הקבוצה. כדי לקבל את התוצאות הטובות ביותר, כדאי להשתמש בעמודות של קבוצות עם 100 ערכים משולבים שונים או פחות. - משאירים את המשקלים האחרים ללא הגדרה.
הערך הזה הוא סכום של כל סדרות הזמן באותה קבוצה לאותו תאריך, והוא מפחית את ההטיה ברמת הקבוצה.
מגבלות
- יש תמיכה רק ברמה אחת של צבירת נתונים בסדרת זמן. אם מציינים יותר מעמודת קיבוץ אחת, כמו 'מוצר, חנות', סדרת הזמן תהיה באותה קבוצה רק אם יש לה את אותם ערכים של 'מוצר' ושל 'חנות'.
- מומלץ להשתמש ב-100 קבוצות או פחות.