Case study 04 · Forecasting · Planning

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.

Role
Built the forecast in 2024; reviewed it against actuals after 2025
Context
Business banking transactions across card and POS channels at a leading Nigerian fintech
Methods
Prophet time-series models (trend, weekly and yearly seasonality), forecast evaluation, error decomposition
Tools
SQL (ClickHouse), Python (pandas, Prophet), Excel

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%.

Part 1 · Looking forward, August 2024

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:

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.

What the card models learned from 2022–2024Traced from the model's charts

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

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.

The 2025 baseline in the plan, by channelIndexed

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.

Part 2 · Looking back, December 2025

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.

Forecast against actual, month by monthIndexed
full year, actual vs forecast
months within ±10%
first half vs second half, actual vs forecast
average monthly error, either direction

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 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

Caveats

Skills shown

Time-series forecastingProphetSeasonality decompositionForecast evaluationError decompositionBusiness planning