Forecasting demonstration · Stats SA retail trade sales
Forecasting South African retail sales: does a model beat last year's pattern?
Two statistical models against two simple baselines, 192 forecasts each, scored only on months they had not seen. Under a rule written down before looking at the data, repeating last year's pattern won, so that is the method we recommend.
The verdict
The simple method won.
- Last year's patternRecommended0.758
- Exponential smoothing0.767
- Seasonal ARIMA0.788
- Last month repeated1.990
Average error across 192forecasts per method, on months each method hadn't seen. Lower is better.
The question
What is the likely path of real retail sales over the next 12 months, how uncertain is it, and does a model beat simply repeating last year?
It is the question any consumer-facing business faces when it sets a sales plan. “Real” means sales at constant 2019 prices, so the forecast follows volumes rather than price inflation.
The question, the data series and the selection rule were all fixed before any values were analysed.
One official series, chosen by rules set in advance.
The broadest total, unadjusted (seasonality is part of what is forecast), and at constant prices. Exactly one of the release's 32 series met all three.
Data specification
Retail trade sales, total
- Publication
- Statistics South Africa, Retail trade sales, July 2026 release, published 16 September 2026
- Series
- Total retail trade sales at constant 2019 prices, actual (not seasonally adjusted) values, R million, monthly
- Coverage
- January 2002 to July 2026 (295 months)
- Refreshed
- Rerun on each new Stats SA release
Source: Stats SA. Analysis and results: SA Informatics.
Four methods in the line-up. Two baselines, two statistical models.
The floor
Last month repeated
Repeat the last month. Any method worth using should clear it.
The bar to beat
Last year's pattern
Repeat the same month last year. Retail sales are strongly seasonal, so this is hard to beat.
Candidate
Exponential smoothing
Exponential smoothing with a damped trend and monthly seasonality.
Candidate
Seasonal ARIMA
A statistical model of the series' own trend and seasonal pattern.
The selection rule, fixed in advance.
Recommend a model only ifit beats last year's pattern on months it hasn't seen, and its ranges hold at least 80% of outcomes. Otherwise, recommend last year's pattern.
Any model that failed to fit properly was ruled out before the comparison.
16 forecasts, each scored on a future it hadn't seen.
At 16 points, three months apart from October 2021 to July 2025, each method was fitted only to the data available then and asked for the next 12 months. Those forecasts were scored against what actually happened.
Every method is scored against the same yardstick: how its error compares with simply repeating last year, so methods compare fairly across seasons. The stated uncertainty ranges were checked too.
Sixteen forecasts, each tested on what happened next
Each row is one forecast, made with only the data available at the time. Nov 2021 to Jul 2026 scored.
- Data the methods were fitted on
- The 12 months they forecast, then scored
Result
No statistical model beat the seasonal baseline.
The three seasonal methods finished too close to call. The rule therefore recommends last year's pattern: as accurate, and simpler to run. Repeating last month, which ignores seasonality, was far worse.
| Method | Error score | MAPE | 80% range | 95% range |
|---|---|---|---|---|
| Last year's pattern | 0.758 | 2.71% | 95.8% | 100.0% |
| Exponential smoothing | 0.767 | 2.73% | 95.3% | 98.4% |
| Seasonal ARIMA | 0.788 | 2.90% | 98.4% | 99.0% |
| Last month repeated | 1.990 | 6.16% | 95.8% | 98.4% |
Recommended method highlighted. Error score: lower is better. Ranges: the share of actual values inside each method's 80% and 95% prediction intervals.
Forecasts made in July 2025 against what happened next
The most recent of the sixteen tests. Monthly retail trade sales, R billion at constant 2019 prices.
- Actual
- Last year's pattern
- Exponential smoothing
- Seasonal ARIMA
Show the data
| Month | Actual | Last year's pattern | Exponential smoothing | Seasonal ARIMA |
|---|---|---|---|---|
| Aug 2025 | R96.0 bn | R94.0 bn | R97.1 bn | R98.5 bn |
| Sep 2025 | R95.9 bn | R93.1 bn | R97.3 bn | R98.1 bn |
| Oct 2025 | R98.1 bn | R95.3 bn | R99.0 bn | R99.3 bn |
| Nov 2025 | R117.9 bn | R113.8 bn | R108.2 bn | R113.8 bn |
| Dec 2025 | R138.8 bn | R135.4 bn | R136.6 bn | R139.2 bn |
| Jan 2026 | R97.3 bn | R93.2 bn | R93.5 bn | R95.4 bn |
| Feb 2026 | R95.2 bn | R93.7 bn | R93.6 bn | R97.0 bn |
| Mar 2026 | R99.4 bn | R97.0 bn | R98.2 bn | R100.8 bn |
| Apr 2026 | R96.7 bn | R95.6 bn | R93.2 bn | R93.9 bn |
| May 2026 | R100.9 bn | R98.8 bn | R98.6 bn | R101.4 bn |
| Jun 2026 | R96.8 bn | R95.8 bn | R96.6 bn | R99.1 bn |
| Jul 2026 | R99.4 bn | R96.1 bn | R95.6 bn | R97.5 bn |
One month ahead, a model helped. Over a year, it didn't.
Seasonal ARIMA was clearly better one month ahead, with an error score of 0.47 against 0.67for last year's pattern. Beyond the second month, no method was consistently ahead.
A team that only needs next month's figure has a reason to look at it more closely.
Accuracy by how far ahead the forecast reaches
Error score by months ahead, averaged over 16 tests (lower is better).
- Last year's pattern
- Exponential smoothing
- Seasonal ARIMA
Show the data
| Months ahead | Last year's pattern | Exponential smoothing | Seasonal ARIMA | Last month repeated |
|---|---|---|---|---|
| 1 | 0.67 | 0.69 | 0.47 | 1.60 |
| 2 | 0.64 | 0.55 | 0.61 | 3.24 |
| 3 | 1.01 | 0.81 | 1.17 | 0.47 |
| 4 | 0.70 | 0.91 | 0.73 | 1.95 |
| 5 | 0.63 | 0.65 | 0.64 | 3.44 |
| 6 | 0.96 | 0.85 | 1.35 | 0.49 |
| 7 | 0.72 | 0.89 | 0.85 | 1.88 |
| 8 | 0.64 | 0.63 | 0.65 | 3.57 |
| 9 | 0.91 | 0.82 | 0.89 | 0.68 |
| 10 | 0.75 | 0.91 | 0.76 | 2.08 |
| 11 | 0.62 | 0.67 | 0.56 | 3.62 |
| 12 | 0.84 | 0.82 | 0.76 | 0.84 |
Did the ranges hold?
Share of actual values inside each method's ranges, across 192 test forecasts.
The ranges were wider than they needed to be.
The 95% ranges held 100% of outcomes for the recommended method. The 2020 lockdown inflates the error the ranges are built from.
Planning on these ranges is cautious, not precise, and now you know by how much.
The 12-month forecast. Aug 2026 to Jul 2027.
About R1,232.6 bn over the year, level with the last 12 months, with the seasonal peak in December 2026 at about R138.8 bn.
Retail trade sales: observed, then the recommended method's forecast
R billion at constant 2019 prices, with 80% and 95% prediction ranges. Observed values: Stats SA.
- Observed (Stats SA)
- 12-month outlook
- 95% range
- 80% range
Show the data
| Month | Forecast | 80% range | 95% range |
|---|---|---|---|
| Aug 2026 | R96.0 bn | R90.0 bn to R102.0 bn | R86.8 bn to R105.2 bn |
| Sep 2026 | R95.9 bn | R89.9 bn to R101.9 bn | R86.8 bn to R105.1 bn |
| Oct 2026 | R98.1 bn | R92.1 bn to R104.1 bn | R88.9 bn to R107.3 bn |
| Nov 2026 | R117.9 bn | R111.9 bn to R123.9 bn | R108.7 bn to R127.1 bn |
| Dec 2026 | R138.8 bn | R132.8 bn to R144.8 bn | R129.7 bn to R148.0 bn |
| Jan 2027 | R97.3 bn | R91.3 bn to R103.3 bn | R88.1 bn to R106.5 bn |
| Feb 2027 | R95.2 bn | R89.2 bn to R101.2 bn | R86.0 bn to R104.4 bn |
| Mar 2027 | R99.4 bn | R93.4 bn to R105.4 bn | R90.2 bn to R108.6 bn |
| Apr 2027 | R96.7 bn | R90.7 bn to R102.7 bn | R87.5 bn to R105.9 bn |
| May 2027 | R100.9 bn | R94.9 bn to R106.9 bn | R91.7 bn to R110.1 bn |
| Jun 2027 | R96.8 bn | R90.8 bn to R102.8 bn | R87.7 bn to R106.0 bn |
| Jul 2027 | R99.4 bn | R93.4 bn to R105.4 bn | R90.2 bn to R108.6 bn |
Flat or growing? That depends on what you assume.
Will next year come in below the last 12 months (R1,232.6 bn)? Repeating last year says 50/50 by construction, so we also ran the two statistical models to make the trend assumption visible.
Exponential smoothing puts the year slightly ahead (R1,237.5 bn; a 46% chance of a lower year), and further ahead on the last five years alone (29%). Seasonal ARIMA, which carries more trend, puts it about 2.4% ahead (26%; 11% on five years).
How the 12-month outlook depends on the method and the history assumed
Median and 10% to 90% range of the 12-month total, R billion.
Show the data
| Method · history | Median total | 10% to 90% range | Chance of a lower year |
|---|---|---|---|
| Last year's pattern · full history | R1,232.5 bn | R1,211.8 bn to R1,253.1 bn | 50% |
| Last year's pattern · last 8 years only | R1,232.4 bn | R1,199.6 bn to R1,265.3 bn | 50% |
| Last year's pattern · last 5 years only | R1,232.5 bn | R1,220.4 bn to R1,244.7 bn | 50% |
| Exponential smoothing · full history | R1,237.5 bn | R1,184.1 bn to R1,293.5 bn | 46% |
| Exponential smoothing · last 8 years only | R1,238.1 bn | R1,180.5 bn to R1,298.7 bn | 45% |
| Exponential smoothing · last 5 years only | R1,242.9 bn | R1,219.1 bn to R1,268.0 bn | 29% |
| Seasonal ARIMA · full history | R1,261.9 bn | R1,204.6 bn to R1,321.5 bn | 26% |
| Seasonal ARIMA · last 8 years only | R1,262.0 bn | R1,189.3 bn to R1,339.5 bn | 32% |
| Seasonal ARIMA · last 5 years only | R1,257.9 bn | R1,231.0 bn to R1,284.7 bn | 11% |
Chance of a lower year, by an assumed shift in the sales level
Under the recommended method. A shift is a change the model cannot see.
Show the data
| Assumed shift | Chance of a lower year |
|---|---|
| -5% | 100% |
| -4% | 100% |
| -3% | 99% |
| -2% | 94% |
| -1% | 78% |
| 0% | 50% |
| +1% | 23% |
| +2% | 7% |
| +3% | 1% |
| +4% | 0% |
| +5% | 0% |
A 1% shift moves the answer a lot.
If sales moved 1% lower in a way the model can't see, the chance of a lower year would rise from 50% to 78%, and to 94% at 2% lower. A 1% shift upwards would lower it to 23%. Knowing that before the plan is signed off is the point.
What it means for the decision.
For a 12-month plan
Use last year's pattern as the central estimate. On this evidence, a more complex model does not buy accuracy. Treat its ranges as conservative.
If the plan assumes growth
Record that as an assumption, not a finding. The scenarios show how much it moves the answer.
For next month only
Seasonal ARIMA was clearly better one month ahead, and is worth an evaluation designed for that horizon.
On every release
The pipeline is pinned to a specific Stats SA release and reproduces exactly. Each new release is a fresh run.
Rerun it, get the same answer.
- Pinned to Stats SA's July 2026 release
- Reruns end to end from the published data
- Gives exactly the same results every time
- Ready to run again when the next release arrives

Have a forecast you're not sure you can trust?
Tell us what you forecast, how it is done today, and how often you need it. We'll tell you whether a better method is likely to be worth it.
