רוב הפריטים בקמעונאות לא נמכרים כל יום. לפריטים כאלה העצה המקובלת היא להפסיק להשתמש בשיטות חיזוי רגילות ולעבור לשיטה שנבנתה לביקוש לסירוגין, ובראשן שיטת קרוסטון משנת 1972. בדקתי את העצה הזאת על נתונים אמיתיים, עם המודלים כפי שהם מגיעים ב־statsforecast, ומדדתי אותם עם forelint, ספריית הקוד הפתוח שכתבתי לבדיקת תחזיות לאחור.
הרשימה הקודמת על ערך מוסף לפי סוג ביקוש עשתה את אותו הדבר למודל של למידת מכונה. הרשימה הזאת שואלת את השאלה הקלאסית: לאיזו מהשיטות המקובלות מתכנן צריך לפנות.
המערך
הנתונים הם מאגר M5 הציבורי של מכירות יומיות ביחידות בוולמארט: חנות CA_1, מחלקה FOODS_3, 823 פריטים, 730 הימים האחרונים. כל תחזית מכסה 28 ימים, ו־StatsForecast.cross_validation חוזרת עליה בעשר נקודות חיזוי במרווח של 28 ימים, כך שחלונות התחזית לא חופפים וכל השוואה נשענת על עשר תוצאות נפרדות.
רצו שמונה מודלים: AutoETS עם עונתיות שבועית, הנאיבי העונתי, שיטת קרוסטון (בגרסה המותאמת), ADIDA, IMAPA, TSB, התחזית הנאיבית, וממוצע נע של 28 ימים, שהוא קו הבסיס. כל פריט מסווג לפי כלל סינטטוס־בוילן על ההיסטוריה שלו לפני הנקודה הראשונה: יציב, לא סדיר, לסירוגין או מקוטע. הסקריפט נמצא במאגר של forelint.
בסך הכול
בשגיאה מוחלטת על פני כל הפריטים:
| מודל | MAE | ערך מוסף מול הממוצע הנע | פריטים שבהם הוא גרוע יותר | הטיה |
|---|---|---|---|---|
| AutoETS | 1.649 | +1.6% | 45% | −0.2% |
| ADIDA | 1.676 | 0.0% | 56% | +4.3% |
| ממוצע נע של 28 ימים | 1.676 | קו בסיס | קו בסיס | −0.7% |
| IMAPA | 1.681 | −0.3% | 58% | +4.9% |
| TSB | 1.702 | −1.5% | 64% | +6.9% |
| נאיבי עונתי | 1.927 | −14.9% | 86% | +0.7% |
| קרוסטון (מותאם) | 1.960 | −16.9% | 84% | +17.2% |
| נאיבי | 2.398 | −43.0% | 86% | +35.0% |
רק AutoETS גבר על הממוצע הנע בפער שמבחן מסוגל לראות: 1.6 אחוז, עם מבחן Diebold-Mariano שנתן p = 0.02 על פני עשר הנקודות. ADIDA השתווה אליו בדיוק (p = 0.97). TSB היה גרוע יותר (p = 0.03), ושיטת קרוסטון הייתה גרועה ב־17 אחוז (p < 0.001). קבוצת ביטחון של מודלים ברמה של 10 אחוז השאירה רק את AutoETS; הממוצע הנע, ADIDA ו־IMAPA נפלו ממש מחוץ לה, ב־p = 0.09.
לפי סוג ביקוש
ערך מוסף מעל הממוצע הנע, בשגיאה מוחלטת, לכל סוג:
| סוג ביקוש | פריטים | AutoETS | ADIDA | TSB | קרוסטון |
|---|---|---|---|---|---|
| יציב | 145 | +5.2% | −1.3% | −3.3% | −6.2% |
| לא סדיר | 36 | +1.1% | −0.4% | −0.2% | −6.1% |
| לסירוגין | 463 | 0.0% | +0.6% | −0.9% | −24.6% |
| מקוטע | 175 | −1.1% | +1.5% | 0.0% | −24.8% |
על 463 הפריטים לסירוגין, הסוג ששיטת קרוסטון קיימת בשבילו, היא הייתה גרועה ב־24.6 אחוז מהממוצע הנע, וגרועה יותר ב־83 אחוז מהם. על הפריטים המקוטעים היא הייתה גרועה ב־24.8 אחוז. ADIDA, שגם היא נבנתה לביקוש לסירוגין, הייתה מעט טובה מהממוצע הנע בשני הסוגים. AutoETS הרוויח 5.2 אחוז על הפריטים היציבים ולא הרוויח כלום על הפריטים לסירוגין.
למה קרוסטון הפסיד כאן
התחזיות שלו היו גבוהות מדי. על פני החנות הן היו גבוהות ב־17.2 אחוז מהמכירות בפועל, מול פחות מאחוז אחד לממוצע הנע ול־AutoETS, וההטיה הייתה מובהקת ב־8 אחוז מהפריטים. ידוע ששיטת קרוסטון נוטה לחזות ביתר, ולכן סינטטוס ובוילן הציעו לה תיקון ב־2001. הממצא הוא גודל ההטיה על נתונים אמיתיים, לא הכיוון שלה.
הסתייגות אחת פועלת בכיוון ההפוך. בפריטים שנמכרים בימים מעטים, שגיאה מוחלטת מתגמלת תחזית שנוטה לאפס, ולכן MAE יכול לקפח שיטה שחוזה את קצב הביקוש הממוצע. אבל גם הציון בשגיאה ריבועית אומר כאן אותו דבר: ה־RMSSE של קרוסטון היה 0.857 מול 0.810 לממוצע הנע. הוא הפסיד בשני המדדים.
מה הייתי לוקח מזה
- שיטה שנקראת על שם סוג ביקוש היא מועמדת, לא תוצאה. בודקים אותה מול ממוצע נע על אותו סוג.
- בודקים הטיה לצד ציון השגיאה. הבעיה של קרוסטון כאן הופיעה קודם בעמודת ההטיה.
- בודקים הבדלים על פני נקודות חיזוי שהחלונות שלהן לא חופפים. בלי זה, רווח של 1.6 אחוז ותיקו נראים אותו דבר.
- זו חנות אחת ומחלקה אחת, שנמדדו על מכירות ולא על ביקוש. ימים של חוסר במלאי נספרים כביקוש נמוך, כמו ברשימה על ביקוש מצונזר. הריצו את זה על הנתונים שלכם לפני שסומכים על זה.
forelint קוראת את הפלט של cross_validation כפי ש־statsforecast מחזירה אותו, כך שכל הבדיקה שלמעלה היא קריאה אחת אחרי הבדיקה לאחור. היא מותקנת עם pip install forelint.
מקורות
- Croston, J. D. Forecasting and stock control for intermittent demands. Operational Research Quarterly 23(3), 1972.
- Syntetos, A. A. and Boylan, J. E. On the bias of intermittent demand estimates. International Journal of Production Economics 71(1-3), 2001.
- Teunter, R. H., Syntetos, A. A. and Babai, M. Z. Intermittent demand: Linking forecasting to inventory obsolescence. European Journal of Operational Research 214(3), 2011.
- Nikolopoulos, K., Syntetos, A. A., Boylan, J. E., Petropoulos, F. and Assimakopoulos, V. An aggregate-disaggregation intermittent demand approach (ADIDA) to forecasting. Journal of the Operational Research Society 62(3), 2011.