Personal Grocery Inflation Index

Grocery prices get talked about a lot. But most inflation stats describe averages, not what you actually feel at the checkout. I wanted to know how much prices had really gone up for me.

Over the past two years, I collected every single Albert Heijn grocery receipt through their loyalty program. These weren’t just totals. They were detailed, line-by-line records of what I bought, when, and at what price. After parsing more than 600 receipts into structured data (see the receipt parser project), I set out to model my personal inflation experience using formal CPI logic.

Why I Built It

National CPI is built to reflect a representative consumer. But individuals aren’t representative. We have different habits, preferences, budgets, and behavioral patterns. If inflation is going to shape real decisions, about spending, saving, or even wages, then it makes sense to ask: how much is my cost of living actually rising?

This project was my answer. It wasn’t just exploratory. It was a personal replication of formal index construction, grounded in raw data, and constrained by what’s actually available through grocery receipts.

How I Measured Personal Inflation

I built three custom indices, each using the same underlying data but different logic:

All indices were benchmarked against official CPI data for food and non-alcoholic drinks from CBS Netherlands, rebased to April 2023 = 100.

Figure 1: Indexed Inflation Measures (April 2023 = 100)

Comparison of all personal CPI indices and CBS

This figure shows all three personal inflation indicators alongside the CBS CPI for food and non-alcoholic drinks. The total expenditure index stands out as the most volatile, with large swings that dominate the chart. These movements mostly reflect behavior. For instance, during vacation periods, overall household spending might stay consistent, but spending at Albert Heijn drops significantly since fewer groceries are purchased. To focus more clearly on price-based patterns, we remove the expenditure proxy in the next figure.

Figure 2: Indexed Inflation Measures Without Expenditure Proxy

Zoom on Laspeyres indices vs CBS

With the expenditure-based index removed, we get a clearer view of how the personal Laspeyres indices compare to official CPI. Both personal indices remain more volatile throughout, but the more surprising result is that they end below the CBS benchmark. This suggests that, based on this specific basket, the household experienced less grocery inflation than reported nationally.

There are a few possible explanations. First, we use a fixed basket from April 2023, which introduces a lot of sensitivity to idiosyncratic product choice. At the individual level, what ends up in the basket can vary widely depending on that month’s habits. Second, the CBS category includes restaurant and take-out food, which likely followed a different inflation path than grocery items. While imperfect, this was the closest available proxy for grocery prices, so it was used for benchmarking.

Figure 3: Month-over-Month Inflation Rates

Month-over-month price change

This figure shows the same series as Figure 2, but in terms of monthly inflation rates rather than cumulative price levels. The conclusions are similar. The personal indices remain more volatile than the CBS series, with noticeable spikes and dips. The expenditure- and frequency-weighted Laspeyres indices move closely together, as expected, though the frequency-weighted version shows larger month-to-month changes. This reflects its stronger focus on frequently purchased staples like bread, milk, or fruit.

What Didn’t Work

I initially tried to compute Paasche and Fisher indices. But real receipts are messy. Sparse overlap and inconsistent naming made matching impossible. The results were unstable and meaningless.

I then used total grocery spend as a rough proxy for rolling baskets. But that didn’t separate price effects from behavior changes. It picked up things like holiday travel or bulk shopping, which skewed the signal. I kept it for completeness, but excluded it from most interpretations.

What This Project Shows

Explore the Full Analysis

This page summarizes the key findings and design decisions. If you're interested in the full academic writeup, including methodology, data sources, and references, you can read the complete research notebook as a PDF.

For code, project setup, and replicability, the full repository is available on GitHub.