Euro area
Last observed print MAR 2026 · the range spans the 4 months since, on this market's average drift · not a forecast
A range, not a forecast: no method we tested beat assuming no change from the last observed print. The dashed anchor carries the market's slow long-run drift; the shaded band is its own past error at each horizon. The dashed line and shaded months are projected, not observed.
Why a range, and how far to trust it →Delta bars: category 12m growth minus total retail, same month · blue = faster than the market, grey = slower · scaled to this market's largest gap (±5.1pp)
12m = growth vs the same month a year earlier · range = 80% band for JUL 2026, built like module 01
Same machinery as the headline range, run per category: each series is anchored on its own last print and its band comes from its own past errors at each horizon. Nothing is borrowed from total retail or pooled across markets, so a category with too little history gets no range rather than a borrowed one.
These categories are read-outs of the same published Eurostat series, not model inputs: the headline range above is built from total retail alone. Automotive fuel is excluded throughout; the non-food line is Eurostat's own ex-fuel index.
Method → Plain terms →We tested whether next month's retail can be forecast. Under honest out-of-sample testing it cannot, so the demand module publishes a calibrated range around the last observed figure rather than a point prediction. Three findings, in plain terms.
Month-to-month changes reverse. A rise in retail volume is typically followed by a fall: the month-on-month change is negatively autocorrelated (its correlation with the prior month's change is −0.12 at the median; of 33 markets, 15 are significantly negative and none positive). Recent momentum therefore carries the wrong sign, so we do not extrapolate it.
The common European pattern has no memory. Europe's markets do move together within a month, and strongly: a single shared pattern explains 40% of the variation and is stable over time. But it is purely same-month, with no persistence to forecast from. In fact it reverses: a European retail upswing gives back roughly 40% of itself two months later (the shared pattern's two-month autocorrelation is −0.41). A naive proxy that averages the earlier-reporting countries to fill in the ones still missing failed out of sample, and because the pattern itself shows no forecastable component we did not build a fuller factor model on it. For a deeper dive into market structure (the four validated scales and their 13 underlying items) see the market matrix.
Nothing beat “no change”. Every method tried, under out-of-sample testing that reselected its inputs at each step, was beaten by the simplest rule: assume the index is unchanged from the last published figure. That held on point accuracy and on the full range (a proper scoring rule that grades the whole interval, not just the middle). Searching leading indicators and extrapolating recent drift both lost.
So the module shows a range. The dashed anchor carries each market's slow long-run drift, not its reversing recent momentum. The shaded band at each month is that market's own past forecast errors: the 10th-to-90th percentile for the 80% range, 25th-to-75th for the 50%. We use the real spread of past errors rather than a symmetric ± figure because in many markets the errors are genuinely lopsided (13 of 32 tilt more than 15% to one side; Luxembourg strongly). The band is the raw error spread, not tuned to a coverage target, so how often it actually holds depends on how turbulent the period is: out of sample the 80% range covered about 73% of outcomes over the full record back to 2018, and about 89% over the calmer 2024–25. The gap is the 2020 collapse, when no fixed band held. We keep each market's full-history spread rather than trimming to the recent calm, which is why the bands currently run a little wide.
Demand by category is the same construction, per series. Each market plate lists the retail sub-categories Eurostat publishes for it (food; non-food excluding fuel; and, where the deeper split exists, ICT, household goods, culture & recreation, other goods, and mail order & internet), on the same basis as the headline series. Each category's range is anchored on that category's own last print and its band comes from that category's own past errors at each horizon: nothing is borrowed from total retail and nothing is pooled across markets, because the series genuinely differ (mail order carries strong persistent drift; ICT and recreation goods are far noisier than food). A category with too little history for stable bands gets no range rather than a borrowed one, so thinner series and smaller markets show more blanks; that is the machinery refusing to guess, not a gap in the data feed. Out of sample the category 80% band covered about 73% of outcomes over the full record and about 87% over the calmer 2024–25, the same 2020-driven gap as the headline range. The categories are a display layer: they enter neither the range model above nor any cross-market structure published from these pages.
Automotive fuel is excluded. Eurostat publishes a fuel sub-category (G473); we leave it out deliberately. Fuel is not a category a retailer manages, and its swings are price events at the pump rather than demand decisions, so folding it in would distort the non-food read. The non-food line shown is Eurostat's own non-food-excluding-fuel index, not our subtraction.
Every range on this page is logged before the outcome exists, then scored as the target months close. The registry is the raw record: one row per market, category, horizon and edition, with the point, the 50% and 80% bands, the anchor it hung from, and the confidence flags. Total retail logs as category G47; the sub-categories log beside it under the same method and are scored by the same code. Nothing is revised after the fact, so a track record can only accumulate, not be edited into existence.
Prefer JSON? predictions.json · static files, no API, refreshed each edition.