Forecasting a year of transactions
In August 2024 the CMO asked me to forecast the year ahead from the actuals of the years before it. I modelled card and POS transactions day by day with Prophet, out to the end of 2025. The CMO took it straight to the CEO, and it became the baseline for the 2025 plan. When the year closed, I checked it against what actually happened.
Situation
In August 2024 the business was planning for 2025 and needed to know how much transaction volume to expect, month by month, across card and POS.
Task
The CMO asked me to use the actuals from the previous years to forecast the coming year.
Action
Built Prophet models for card and POS, volume and value, on daily data from January 2022, capturing trend, weekly and yearly patterns, and forecast 487 days ahead to the end of 2025.
Result
The CMO took it to the CEO as soon as it was built, and it became the 2025 plan baseline. A year later the full-year total landed within 0.84% of actual, with 7 of 12 months inside ±10%.
The ask
Every plan starts with a baseline: how much activity to expect if nothing unusual happens. Targets, budgets and campaign plans are set against it, so a baseline that is too high makes everyone look like they are failing, and one that is too low hides real underperformance.
In August 2024, with 2025 planning starting, the CMO asked me to build that baseline for transaction volume: take the actuals from the previous years and forecast the year ahead, in enough detail to split into monthly and quarterly targets.
The data
I pulled daily transaction counts and values for the two channels the business ran, debit cards and POS terminals, from January 2022 to the end of August 2024. That gave more than two and a half years of daily history for cards, enough for the model to see two full yearly cycles.
POS was younger. It launched in mid-2022 and spent its first weeks ramping up from almost nothing. Fed in as-is, that launch ramp would have looked like explosive growth and pushed the trend far too high. So I started the POS history from the first day it passed 3,000 transactions, when it was trading normally, and dropped the ramp.
The model
I chose Prophet, a forecasting library built for exactly this kind of series: daily business data with a strong weekly rhythm, a yearly pattern, and a growth trend that changes pace. It breaks a series into parts you can see and explain:
- Trend: the underlying growth, allowed to bend where the data shows it speeding up or slowing down.
- Weekly pattern: how each day of the week sits above or below the trend.
- Yearly pattern: how each time of year sits above or below it.
That mattered as much as the accuracy. A CMO taking a forecast to the CEO needs to explain why next December looks the way it does, and a component chart answers that in a way a black-box model can't.
The two channels were growing at very different speeds, and transaction counts behave differently from naira values, so I built four separate models (card volume, card value, POS volume, POS value) rather than one model of the total. Each forecast 487 days past the last actual, to the end of 2025, with an uncertainty band around every day.
Trend
index, end of August 2024 = 100; shaded = forecast
Weekly pattern
each day relative to the week's average
Yearly pattern
each time of year relative to the year's average, card volume and card value
The components of the card models, traced from its component charts and rescaled: the trend is indexed to the last actual day, and the weekly and yearly patterns are shown relative to their own largest swing (+1 = the strongest point, −1 = the weakest). Shapes only; no transaction counts.
What the model saw
- Growth that sped up. The trend was gentle through 2022, then steepened from mid-2023 as POS scaled and card use grew. The model carried that steeper slope forward through 2025.
- A working-week rhythm. Sundays were by far the quietest day. Volume built from Monday to a midweek peak on Wednesday, dipped on Thursday, and rose again to a busy Saturday, when markets and shops trade most.
- A year that opens strong and fades. January was the strongest time of year for the number of transactions, with ripples roughly a month apart through the first half, likely the month-end pay cycle. From August volume slid below the trend, reaching its lowest point in early December before the New Year jump.
- Value peaks later than volume. The card-value model had the same weekly rhythm, but its yearly high came in late March rather than January, and it stayed weaker for longer through the second half, so the average transaction was largest around the end of the first quarter.
I summed the daily forecasts into months and quarters for the plan, with the uncertainty band alongside. The CMO was delighted with it and took it to the CEO as soon as it was built. It became the transaction-volume baseline for 2025, and the monthly and quarterly targets were set against it.
Monthly transactions in the 2025 plan baseline, by channel, stacked and indexed so the January total = 100. Cards rise about 4% a month and POS about 9.5% a month; by December POS overtakes cards. No transaction counts are shown.
How it landed
When 2025 closed, I set every month of the baseline against what actually happened. The headline was strong: actual volume for the full year came in 0.84% above the forecast, close enough that the annual targets were set on the right number. Seven of the twelve months were within 10% of their forecast.
But the three charts below, read side by side, show that the year total was right partly because two errors cancelled. The forecast was below actual for most of the first half and above it for most of the second. The cumulative gap starts at more than 20% in January and closes almost to zero by December.
Monthly volume
index, January forecast = 100
Monthly error
actual vs forecast; shaded band = ±10%
Year to date
cumulative actual vs cumulative forecast
Hover any chart to read the same month on all three. Values are indexed to the January forecast; error percentages are exact. Actuals are total transactions, not split by channel, so only the total can be checked.
Two errors that cancelled
Breaking the miss down showed two separate errors pulling in opposite directions.
- The year started higher than the history suggested. January came in 21.5% above its forecast, and the first quarter as a whole 17% above. Something lifted the start of 2025 beyond anything in the 2022–2024 data, so the baseline began the year well behind.
- The growth was too steep. The model carried forward the fast growth of 2023 and 2024, and the monthly baseline had volume almost doubling between January and December. In reality growth slowed through the second half, and December finished about 48% above January. From August the forecast was ahead of actual every month.
The low start and the steep slope happened to offset each other over twelve months. That doesn't make the forecast wrong for its purpose: the annual baseline was what the plan needed, and it held. But it does mean the monthly targets set against it were too easy in the first half and too hard in the second, and anyone reading only the year total would have learned nothing from the miss.
The steep slope is the same trap as in case study 03, where a compounded growth rate overstated what a TV campaign's audience would have done without it: a growth rate learned in a fast period keeps accelerating on paper long after it has slowed in reality.
What I'd do differently
- Hold the trend back. Make the trend less willing to bend (a smaller changepoint prior) or cap it, so a fast 2023 doesn't set the slope for all of 2025.
- Add the holiday calendar. Prophet ran with its defaults, with no holidays. Eid, Christmas and the New Year move volume sharply in Nigeria and belong in the model as holiday effects.
- Backtest before trusting it. Prophet's cross-validation would have shown how a model fitted to 2022–2023 did on 2024, before using the same set-up for 2025.
- Judge it by the months, and give a range. Report the average monthly error alongside the annual total, and carry the uncertainty band into the targets.
- Re-forecast every quarter. Once Q1 showed a 17% beat, an updated forecast would have reset the level and caught the slowing growth months earlier. Later forecasts I built added inflation as a driver, since naira prices move transaction behaviour directly.
Caveats
- Counts, not value. The review covers the number of transactions. The value forecasts couldn't be checked against the actuals available.
- The channel split can't be checked. The forecast was built by channel, but the actuals available for the review were totals, broken down by transaction type rather than by channel. Deposits were about a quarter of the year's transactions, withdrawals about two-fifths and transfers about a quarter, a mix that stayed stable through the year.
- One year is one test. Landing within 1% once is encouraging, not proof; the monthly errors are the better guide to how the method will do next time.