מתודולוגיה
איך המדד עובד, מאיפה מגיעים הנתונים, ולמה 37 מוצרים זה לא פשוט כמו שזה נשמע
מקור הנתונים
חוק פרסום מחירי מצרכי מזון (2014) מחייב את רשתות הסופרמרקט הגדולות לפרסם קובץ XML מדי יום עם המחיר הנוכחי של כל מוצר בכל סניף. הקבצים האלה זמינים לציבור, ופרויקט Israeli Supermarkets (Kaggle) מרכז אותם ומפרסם גרסה מאוחדת בפורמט CSV. אנחנו מורידים את הנתונים האלה מדי יום.
כל קובץ CSV מכיל שורה אחת לכל מוצר בכל סניף, כולל שדה PriceUpdateDate - תאריך העדכון האחרון של המחיר. שדה זה הוא הבסיס לשחזור הסדרה ההיסטורית.
ברקודים: מה שאנשים לא יודעים
כשמשווים מחירים בין רשתות, הדבר הכי חשוב הוא לוודא שמשווים את אותו מוצר בדיוק. כאן הברקוד נכנס לתמונה - אבל הסיטואציה מסובכת יותר ממה שנדמה.
14 מוצרים - ברקוד אוניברסלי
מותגים לאומיים (תנובה, אסם, יטבתה, עלית וכו') משתמשים בברקוד GS1 ייחודי המוגדר על ידי היצרן. ברקוד זה זהה בכל הרשתות - 7290004131074 הוא תמיד חלב תנובה 3% קרטון 1 ליטר, לא משנה אם קנינו בשופרסל או בחצי חינם.
דוגמאות: חלב, קוטג', גבינה, חמאה, אורז, סוכר, קולה, קפה, במבה, שוקולד
23 מוצרים - ברקוד לפי רשת
שני מקרים מחייבים מיפוי פרטני לכל רשת: (1) פירות, ירקות ועוף טרי הנמכרים לפי משקל - כל רשת מקצה קוד PLU משלה(ברמי לוי עגבניה היא קוד X, בשופרסל קוד Y); (2) מוצרים ארוזים שהברקוד ה"אוניברסלי" שלהם חסר או ללא מחיר בחלק מהרשתות - אז ממפים כל רשת לפריט המקביל שלה.
דוגמאות: עגבניה, מלפפון, בצל, גזר, תפוח, תפוח אדמה, חזה עוף, לחם, ספגטי, טחינה, חומוס, תה, ביצים, אפונה קפואה
למה זה משנה?
כאשר בונים סל קניות להשוואה בין-רשתית, אי אפשר לחפש "עגבניה" לפי ברקוד אחד בכל הרשתות - צריך לדעת את הקוד הספציפי שכל רשת השתמשה בו. עבור 23 המוצרים האלה, בנינו מיפוי ידני לכל רשת בנפרד. עבור 14 המוצרים הנותרים, ברקוד אחד מספיק.
מה קורה כשמחליפים מוצר במדד?
ברקודים לא חיים לנצח. רשת מפסיקה למכור פריט, ממחזרת קוד פנימי, או עוברת משיטת קידוד אחת לאחרת. לפעמים גם מתברר בדיעבד שהברקוד שמדדנו הוא בכלל לא המוצר שהתכוונו אליו - למשל זן פרימיום במקום הירק הרגיל בתפזורת. בכל המקרים האלה אין ברירה אלא להחליף את הברקוד שאנחנו מודדים.
וכאן נמצאת המלכודת: המחיר שאנחנו מודדים משתנה בבת אחת, בלי ששום מחיר בעולם האמיתי זז. אם פשוט נחליף ברקוד ונמשיך, המדד יראה צניחה או זינוק חדים - נתון שנראה בדיוק כמו מציאות, אבל הוא רק תוצאה של החלפת סרגל המדידה.
דוגמה אמיתית.באחת הרשתות מדדנו "עגבניה" לפי ברקוד שהתברר כזן פרימיום במחיר 15.90 ש"ח לק"ג, בזמן שהעגבניה בתפזורת באותה רשת נמכרת ב-5.90 ש"ח לק"ג.
- החלפה נאיביתהייתה מציגה ירידה של כ-63% ביום אחד - "העגבניות התרסקו". שקר.
- שרשור (chain-linking) לוקח יום שבו שני הברקודים מתומחרים במקביל, מחשב את היחס ביניהם, ומחבר את הסדרה החדשה לרמה של הסדרה הקודמת. אין קפיצה מזויפת, וההיסטוריה שפורסמה לא משתנית.
העיקרון הוא שהמדד מודד תנועה, לא רמה. בתוך כל קטע אנחנו מודדים שינויים באחוזים על אותו מוצר בדיוק, והשרשור מחבר בין הקטעים. המשמעות המעשית, וחשוב שתהיה שקופה: הרמה ההיסטורית שנצברה נשמרת כמו שהיא, ומהרגע שבו בוצעה ההחלפה כל התנועות הן של המוצר הנכון.
זו לא שיטה שהמצאנו
שרשור הוא הפרקטיקה הסטנדרטית של לשכות סטטיסטיקה בכל העולם, כולל הלמ"ס בישראל, בכל פעם שמוצר בסל המדד מוחלף בדגם או בפריט אחר. ההסברים הרשמיים על אופן חישוב מדד המחירים לצרכן מתפרסמים כאן: מדד המחירים לצרכן - הגדרות והסברים, הלמ"ס.
המחיר המוצג לכל רשת: למה חציון ולא ממוצע?
לרשת אחת יש עשרות ומאות סניפים, ולכל סניף מחיר משלו. כדי להציג מספר אחד לרשת צריך לבחור איך לסכם אותם. אנחנו בוחרים חציון - המחיר שנמצא באמצע, כשמסדרים את כל הסניפים מהזול ליקר.
דוגמה אמיתית מהנתונים שלנו.מלפפון ברמי לוי, 75 סניפים: 39 סניפים ב-5.90 ש"ח, 15 ב-3.90, 9 ב-6.90, 6 ב-4.90, 3 ב-8.90 ו-3 ב-1.90. הממוצע יוצא 5.50 ש"ח - מחיר שלא קיים באף סניף. החציון הוא 5.90 - המחיר שבו באמת קונים ברוב הסניפים.
- מספר שאפשר באמת לשלם. בבדיקה על 826 תאים, החציון היה מחיר שקיים בפועל באיזשהו סניף ב-99% מהמקרים. הממוצע - ב-16% בלבד.
- עמידות למבצעים.סניף בודד שמריץ מבצע לא אמור להזיז את המחיר של רשת שלמה. אם סניף אחד מתוך שישה יורד ל-1.90, הממוצע זז ב-0.67 ש"ח - החציון לא זז בכלל. החציון מצוין לתיאור כמה המוצר עולה היום, אבל הוא לא מתאים למדידת השינוי מיום ליום - ראו הסעיף הבא.
- מינימום 5 סניפים. אם רשת מפרסמת את המוצר בפחות מ-5 סניפים, אנחנו לא מציגים לה מחיר בכלל ומסמנים —. עדיף להראות שאין נתון מאשר להציג מספר שנשען על סניף אחד או שניים ונראה בטוח יותר ממה שהוא.
הערה על מה שהשתנה: עד ה-9 באוגוסט 2026 טבלת המוצרים הציגה מחיר של סניף בודד - זה שעדכן מחיר אחרון - ולא סיכום של הרשת. מכיוון שסניף שמעדכן מחיר הוא לרוב סניף שהתחיל מבצע, המספר שהוצג נטה כלפי מטה וייצר פערים לא סבירים בין רשתות. המעבר לחציון תיקן זאת. שימו לב: המדד עצמו לא הושפע מהשינוי הזה. עד 25 בספטמבר 2026 הוא חושב מחציון הסניפים, ומאז הוא מודד שינוי מחיר על אותם סניפים - ראו הסעיף הבא.
איך מודדים שינוי מחיר יומי? אותם סניפים, אתמול מול היום
כדי לדעת בכמה השתנה מחיר של מוצר ברשת מאתמול להיום, לא מספיק להשוות את החציון של היום לחציון של אתמול. הסיבה: הסניפים שמפרסמים משתנים מיום ליום. כשסניף אחד נכנס לקובץ או יוצא ממנו, החציון יכול לזוז גם כשאף סניף לא שינה מחיר.
דוגמה אמיתית מהנתונים שלנו. עגבניות בקרפור, כ-145 סניפים, 19-25 בספטמבר 2026: החציון קפץ 9.90, 10.40, 10.90, 11.40, 10.90 ושוב 11.40 - חמש קפיצות בשישה ימים, ובארבע מהן שינה מחיר לכל היותר סניף אחד. המחירים 10.40 ו-11.40 לא קיימים באף סניף: זה הממוצע של שני הסניפים האמצעיים, שנוצר כשמספר הסניפים יוצא זוגי. בשיטה החדשה אותו שבוע נראה אחרת: אפס, אפס, ירידה של 0.08%, אפס, עלייה של 0.19% - ורק ב-25 בספטמבר, כש-52 מתוך 145 סניפים באמת העלו מחיר, נרשמה עלייה של 2.85%.
איך זה עובד
- כל סניף מול עצמו. לכל סניף משווים את המחיר של היום למחיר הקודם של אותו סניף. סניף שדילג על יום מושווה למחיר האחרון שלו (עד 7 ימים אחורה), כך שגם השינוי שלו נספר. סניף שנעדר יותר משבוע נחשב סניף חדש.
- ממוצע גיאומטרי של השינויים. השינוי של הרשת הוא הממוצע הגיאומטרי של שינויי הסניפים, והרמה מתקדמת ממנו יום אחרי יום (שרשור).
- כניסה ויציאה לא מזיזות את המדד. סניף חדש לא משפיע ביום שבו הוא מצטרף - הוא רק הופך לנקודת ההשוואה של מחר. סניף שיצא לא משפיע בכלל.
- מינימום 5 סניפים להשוואה. אם יש פחות מ-5 סניפים שאפשר להשוות, הרשת לא רושמת שינוי באותו יום והערך הקודם נשמר. סניף בודד אף פעם לא קובע את המדד.
- הגנה ממחירים שגויים. שינוי של יותר מפי 3 למעלה או למטה בסניף בודד נחשב מחיר שגוי ולא נספר.
בבדיקה על כל הנתונים מאז 6 ביוני 2026, בכ-44% מהתזוזות של החציון, החציון של אותם סניפים לא זז בכלל - כל התזוזה נבעה מסניפים שנכנסו או יצאו - והן היוו כשליש מכל התנועה היומית של המדד. ב-38% מהתזוזות אף סניף לא שינה מחיר כלל. בשיטה החדשה התנועה היומית הכוללת ירדה בכמחצית, והמגמה לאורך זמן נשמרה. בפועל כמעט כל הסניפים חוזרים מיום ליום: בחציון, 100% מהסניפים של היום פרסמו גם אתמול.
גם זו לא שיטה שהמצאנו
השוואה של אותו פריט באותה נקודת מכירה לאורך זמן, וסיכום השינויים בממוצע גיאומטרי (שיטת Jevons על מדגם תואם), היא השיטה המועדפת לרמה הזאת של המדד במדריך הבינלאומי למדד המחירים לצרכן (CPI Manual 2020), שפרסמו ה-IMF, ה-ILO וארגונים בינלאומיים נוספים. חשוב להבחין: המחיר שמוצג לכל רשת בטבלאות נשאר חציון הסניפים - הוא עונה על השאלה "כמה זה עולה היום", והמדד עונה על השאלה "בכמה זה השתנה".
איך בונים מדד יומי מנתונים מ-8 רשתות?
- 1
תצלום יומי של המחיר בכל סניף
מאז 6 ביוני 2026 אנחנו שומרים כל יום snapshot של המחיר בפועל בכל סניף, לכל מוצר בסל, בכל הרשתות. השינוי היומי של רשת במוצר נמדד על אותם סניפים בלבד - כל סניף מול המחיר הקודם שלו (ראו הסעיף הקודם). שני סינוני איכות חלים כאן: יום שבו רשת פרסמה רק חלק קטן מהסניפים שלה מדולג (הערך האחרון הטוב מוחזק), ויום נכנס לחישוב רק אם המוצר נצפה ב-5 סניפים לפחות - אותו רף בדיוק שחל על טבלת המוצרים - ויש לפחות 5 סניפים שאפשר להשוות.
- 2
ההיסטוריה שלפני יוני 2026 - שחזור קפוא
לימים שלפני תחילת ה-snapshots, הסדרה שוחזרה פעם אחת משדה "תאריך עדכון אחרון" שבקבצים, הוקפאה לקובץ, ומחוברת לסדרת ה-snapshots בשיטת שרשור מדדים סטנדרטית (chain-linking) - כך ששינויים עתידיים בקבצי המקור לעולם לא משכתבים את העבר. צירוף מוצר-רשת שאין לו לא היסטוריה קפואה ולא נתוני snapshot מספקים פשוט אינו משתתף במדד.
- 3
ממוצע גיאומטרי בין הרשתות
לכל תאריך ולכל מוצר, לוקחים ממוצע גיאומטרי של המחירים מכל הרשתות שיש להן נתון. ממוצע גיאומטרי (לעומת חשבוני) מגביל את ההשפעה של מחיר קיצוני אחד על כלל המדד.
- 4
סינון חריגים
חלק מהקבצים מכילים מחירים פגומים - לעתים ממוצרים "במשקל" עם מחיר של עשרות שקלים לקילו שאינו מתעדכן מ-2019. סינון זה מוריד כל מחיר שגבוה מפי 4 מהמחיר השני-בזול לאותו מוצר, ומסיר את ההשפעה שלו מהמדד.
- 5
חישוב ביחס לתאריך בסיס קבוע
תאריך הבסיס הוא 15 ביוני 2025 = 100. כל יום מחושב ביחס לבסיס: אם סל המוצרים עלה 2.5% מאז הבסיס, המדד מציג 102.5. מחירי הבסיס עצמם קפואים - הם חושבו פעם אחת ונשמרו, כך שתנודות בקבצי המקור אינן יכולות להזיז את נקודת הייחוס שכל המדד נמדד ממנה.
למה החודשים הראשונים (יוני-נובמבר 2025) פחות אמינים?
השחזור ההיסטורי עובד טוב רק כשיש הרבה סניפים עם תאריכי עדכון שונים. כאשר 500 סניפים עדכנו את מחיר המלפפון בתאריכים שונים לאורך 6 חודשים - אנחנו "רואים" את תנועת המחיר בין כל עדכון.
הבעיה: בחודשים המוקדמים (יוני-נובמבר 2025), כשהדאטה עדיין היה דליל, מעט מאוד עדכונים שוחזרו לכל מוצר - ולכן הגרף שטוח באופן מלאכותי. זה לא אומר שהמחירים לא השתנו - זה אומר שאנחנו לא יכולים לראות את השינוי.
מה עשינו בשביל העתיד?
מה-30 במאי 2026, אנחנו שומרים snapshot יומי של מחיר 100 מוצרים בכל סניף בכל הרשתות - ומאז 6 ביוני 2026 המדד עצמו מחושב מה-snapshots האלה, לא משחזור. השחזור משמש רק כזנב היסטורי קפוא לימים שלפני כן. ככל שארכיון ה-snapshots מצטבר, החלק המדויק של הסדרה מתארך.
מגבלות ידועות
- •חצי חינם - היסטוריה שטוחה לפני יוני 2026: יש להם 13 סניפים בלבד עם עדכוני תאריך כמעט זהים, כך שהשחזור ההיסטורי ראה אצלם אפס תנועה. מאז המעבר ל-snapshots (יוני 2026) תנועת המחירים שלהם נמדדת כרגיל; החלק שלפני כן נשאר שטוח.
- •רף 5 סניפים גם במדד: צירוף מוצר-רשת שנצפה בפחות מ-5 סניפים אינו נכנס למדד (בדיוק כמו בטבלת המוצרים, שם מוצג -). המשמעות: מוצר עשוי להיות מחושב מ-6 או 7 רשתות במקום 8. עדיף פחות רשתות מאשר מחיר שנשען על סניף בודד.
- •המחיר המוצג והמדד מחושבים אחרת: המחיר שמוצג לכל רשת בטבלאות הוא חציון הסניפים (רמת מחיר), והמדד מודד שינוי על אותם סניפים. לכן ייתכן שהמחיר המוצג של רשת לא ישתנה ביום שבו המדד רשם שינוי (למשל כשרק הסניפים היקרים מהאמצע העלו מחיר), או להפך - שהחציון יזוז בגלל סניף שנכנס או יצא, בלי שהמדד יזוז. שני המספרים נכונים, כל אחד לשאלה שלו.
- •ברקודים מתים / מחירי 2019: לחלק מהרשתות היה ברקוד "בצל במשקל" שמחירו לא עודכן מאז 2019, או ברקוד שכבר לא קיים בנתונים. מיפינו מחדש מוצרים כאלה לקוד הנכון בכל רשת (כך שהבצל, למשל, שוב מוצג בכל הרשתות), וסינון החריגים נשאר כרשת ביטחון.
- •פערים בקובץ המחירים: לעיתים רשת מפרסמת מוצר ללא מחיר בקובץ ה-XML (למשל ספגטי אסם מס' 8 בשופרסל קיים בקטלוג אך ללא מחיר). במקרים כאלה אנחנו ממפים לפריט המקביל הקרוב ביותר שכן מתומחר, או שהמוצר מוצג בפחות רשתות.
- •ירושלים ובני ברק: חלק מהמוצרים (כגון ביצים) חסרים בנתוני הסניפים שם - מחסור בנתוני Kaggle, לא מחסור בנתוני שוק.
- •הפרש גודל מדגם: שופרסל מיוצגת על ידי 421 סניפים, אושר עד רק 23. ממוצע הרשת אינו ממוצע הסניפים.
יומן עדכוני מתודולוגיה
כשאנחנו מתקנים את שיטת החישוב, כל הסדרה מחושבת מחדש לפי השיטה החדשה - ולכן ערכים היסטוריים עשויים להשתנות. כל שינוי כזה מתועד כאן, כדי שקפיצה בגרף שמקורה בשיפור השיטה לא תיקרא בטעות כתנועת מחירים אמיתית.
1 באוקטובר 2026 - תיקון קריאת הארכיון ובסיס מחושב מחדש
קובצי הארכיון ב-Kaggle דחוסים (תא ריק = "אותו ערך כמו בשורה שמעל"), והקוד שלנו לא פענח זאת - כ-5% משורות המחיר נשמטו. קראנו מחדש את כל הארכיון מ-30 במאי 2026 (כ-426 אלף מחירים נוספו; הוסרו רק מחירים ישנים של 8 סניפים שהפסיקו לפרסם) וחישבנו מחדש את מחירי הבסיס, כך שיום הבסיס נשאר 100. כל הסדרה זזה בעד 0.36 נקודות; המדד ל-28 בספטמבר עבר מ-101.48 ל-101.28 - זה תיקון נתונים, לא ירידת מחירים.
25 בספטמבר 2026 - שינוי מחיר נמדד על אותם סניפים
עד אז השינוי היומי של כל רשת נמדד מחציון כל הסניפים שפרסמו באותו יום, ולכן סניף שנכנס לקובץ או יצא ממנו יכול היה להזיז את המדד בלי שום שינוי מחיר. מעכשיו כל סניף מושווה למחיר הקודם שלו, והשינויים מסוכמים בממוצע גיאומטרי (הסבר מלא). כל התקופה מ-6 ביוני 2026 חושבה מחדש; ההיסטוריה שלפני כן ומחירי הבסיס לא השתנו. כתוצאה, המדד ל-25 בספטמבר עבר מ-101.61 ל-101.36, והתיקון הגדול ביותר לערך של יום בודד היה 0.44 נקודות (22 בספטמבר) - זו הסרת רעש, לא ירידת מחירים. המחירים שמוצגים לכל רשת בטבלאות לא השתנו - הם עדיין חציון הסניפים.
22 באוגוסט 2026 - עיגון מלא, רף 5 סניפים במדד, והקפאת הבסיס
שלושה תיקונים שנכנסו יחד: (1) כל צירוף מוצר-רשת מעוגן עכשיו לנתוני ה-snapshots או להיסטוריה הקפואה - בוטל לחלוטין מנגנון "שחזור חי" שאיפשר לסניף בודד שנכנס או יצא מקובץ המקור לשכתב רטרואקטיבית חודשים של היסטוריה מפורסמת; (2) רף 5 הסניפים שחל על טבלת המוצרים חל מעכשיו גם על המדד עצמו; (3) מחירי הבסיס הוקפאו. כתוצאה מהתיקון המדד ירד באופן חד-פעמי מ-102.11 ל-100.80 - זו הסרת עיוותים, לא ירידת מחירים (למשל: מחיר עגבניה שנשען על ממוצע גולמי מוטה ירד לחציון האמיתי של 54 סניפים, ומחיר בסיס של מלפפון שזז בגלל שורה בודדת מ-2019 קובע מחדש).
9 באוגוסט 2026 - מעבר לחציון בטבלת המוצרים
טבלת המוצרים הציגה עד אז מחיר של הסניף האחרון שעדכן - שנטה כלפי מטה (מבצעים). מאז מוצג חציון כלל הסניפים, עם רף מינימום של 5 סניפים. המדד עצמו תמיד חושב מחציון ולא הושפע.
19 ביוני 2026 - המדד עבר לנתוני snapshots
כל 8 הרשתות מחושבות מאז מארכיון ה-snapshots היומי (לתאריכים מ-6 ביוני 2026), כשההיסטוריה המשוחזרת שלפני כן הוקפאה וחוברה בשרשור מדדים סטנדרטי - ללא אובדן היסטוריה וללא מדרגה מלאכותית.
שאלות? צרו קשר