Is it churn, or is it seasonality?
In mid-2026 business transaction volume fell behind forecast and slid for five weeks in a row. The CMO wanted to know why, and what would stop it. Before anyone reached for a fix, I tested every lever behind the total on its own, compared each region with the two years before, and wrote the conclusion as a prediction with a date on it.
Situation
Weekly business transaction volume dropped against forecast in weeks 21–25 of 2026, after five weeks of week-on-week decline.
Task
The CMO asked me to find the cause, and to define a remedy that would stop the decline.
Action
Tested every lever behind the total: actual vs forecast by transaction type, new and returning customers, retention and churn, frequency and ticket size, and each region against 2024 and 2025.
Result
Not churn: seasonal drag from the rains, the school break, Eid al-Adha and the June 12 holiday. Volume rebounded from week 38, and the re-engagement campaign under discussion wasn't needed.
Situation and task
Weekly volume had grown steadily through the first months of 2026. Then, from week 21, it fell behind the forecast and went down week on week for five weeks, across every transaction type. A falling line on a growth chart makes people nervous, and the first instinct is usually "we are losing customers". The CMO asked me to find out what was causing it and to define a remedy.
The remedy depended entirely on the cause. If merchants were leaving, the business needed a re-engagement campaign. If the drop was seasonal, that campaign would spend money fixing something that fixes itself. So I treated it as a list of suspects and tested every lever that adds up to total volume, each on its own, rather than looking for evidence for the answer I expected.
Charts use illustrative data rebuilt from the shape of the real results: values are indexed and lightly perturbed, and the real figures stay with the company.
Six suspects, one survivor
| Candidate cause | Test | If true, I'd expect | What I saw | Verdict |
|---|---|---|---|---|
| One product breaking | Actual vs forecast by transaction type, month to date and year to date | One type far off its forecast | All types affected alike; year to date within about 1% of forecast, with withdrawals and transfers the softest | Ruled out |
| Acquisition | Split volume into new vs returning customers | The gap opens in new customers | New customers contributed almost nothing to the change; the drop sat in returning customers | Ruled out |
| Churn | Weekly and monthly churn across the full year | Churn rises in the drop window | Churn flat, at levels seen in other seasonal months | Ruled out |
| Retention of top customers | Retention for the highest-volume merchants | Top-customer retention falls | Steady | Ruled out |
| Regional collapse | Year-on-year growth by region and state | One or more regions shrink | Every region still growing year on year | Ruled out |
| Ticket size | Average transaction value by tier | Smaller transactions | Held roughly level | Ruled out |
| Lower frequency (seasonal) | Transactions per active customer, by tier and region, against prior years | Same customers, fewer transactions, matching past years' shape | Frequency fell, mostly among top customers, most in the north | Survives |
Which factor moved
Volume is a product of three things: how many customers are active, how often each one transacts, and how big each transaction is. Splitting it that way turns "volume fell" into a precise question. Taking logs makes the split additive, so each factor's share of the change can be read straight off a bar.
2026, weeks 3 to 25. Each series is indexed to weeks 4–18 = 100; the shaded band is the drop window. "What moved" compares the drop window with the six weeks before it, in log points (roughly percentage change), so the three factors add up to the total.
The answer was clear. Active customers kept growing slowly. Ticket size barely moved overall (the long tail's slipped a little, but the long tail carries a small share of volume). Almost all of the drop came from transactions per customer, and nearly all of that from the top customers, who carry most of the volume. The same merchants were still here; they were just less busy. That points away from churn and towards something that makes good customers trade less for a few weeks.
Comparing a year with itself
Seasonality is the obvious candidate for "good customers trade less for a few weeks", but comparing raw volume across years is misleading because the business grows. So I indexed each year to its own early-year baseline (weeks 4–18 = 100). That puts every year on the same scale and asks only: compared with its own normal, how did this week look?
That still didn't line up. The reason is that the biggest holiday in the window, Eid al-Adha, follows the Islamic lunar calendar and arrives about eleven days earlier each year. On a calendar-week axis, Eid fell in week 24 in 2024, week 23 in 2025 and week 22 in 2026. Shifting each prior year so that Eid falls in the same week is the fair comparison for trade that follows Eid. Try the toggle, then pick a region: the deck broke the comparison out for all seven.
Each year = 100 on its own weeks 4–18. Hover any week to see which holidays fell in it in each year. Regions start at week 2; nationally, week 1 dips sharply every year because of the New Year holiday, then volume climbs through the first quarter. Triangles mark Eid al-Adha in each year; the shaded band is 2026's drop window. In the Islamic-calendar view 2024 and 2025 are shifted by whole weeks so their Eid falls in 2026's Eid week. The strips across the top show each year's own holidays where they fall on the chart: in the calendar view the Islamic holidays drift a week or two between years, and in the Islamic-calendar view they line up while Easter, Workers' Day and June 12 move instead. Hover a week for the names; 2026 has data only up to the read-out at week 25. Regional lines were read off the original deck's charts, with a few hidden points filled from their neighbours. The shape gap scales each year to its own average over the seven weeks around Eid, so level differences drop out, then takes the mean absolute difference in index points between 2026 and the average of 2024 and 2025.
Two things stand out. First, 2024, 2025 and 2026 have nearly the same shape: the New Year dip, a steady climb through the first quarter, a plateau, then a mid-year dip and a climb into the second half. 2024 and 2025 dipped at this time of year too, and recovered; 2026 sits a touch lower in the drop window, but the dip is shallow. In 2024 the dip was partly masked because new customers were a bigger share of activity; by 2026 they were a smaller share, so the same seasonal dip showed through. Second, the regions disagree about what causes it:
- The north (North Central, North East, North West) follows the Islamic calendar. Volume rises into Eid week and then takes a few weeks to recover; the rains barely register. Aligning on Eid tightens the fit in the North East, the region most sensitive to the Islamic calendar; in North Central and North West the fixed-date holidays matter enough that the calendar view fits about as well.
- The South East and South South follow the rains: a step down when the rainy season starts, no real dip in Eid week, and a dip in the week of the June 12 public holiday.
- Lagos and the South West sit in between: a dip in Eid week, a bounce the week after, and another dip for June 12. In the South West, election activity in one state added to it in the last week of the window.
Nationally the calendar view fits better, because fixed-date holidays, the rains and the school break do not move with the lunar calendar. Calendar alignment is a trade-off: lining up Eid knocks the fixed-date holidays out of line, so I read the two views side by side rather than trusting either alone.
Writing the conclusion so it could fail
Put together, every lever told the same story. Volume per transaction type was tracking its forecast year to date. Retention was steady for top customers and the long tail, in every onboarding channel and every region, and churn was within its normal range. Merchant numbers and ticket size held. What fell was the number of transactions per merchant, concentrated in the top customers who move the national total most. The surviving explanation was seasonal drag: the rainy season, the third-term school break and Eid al-Adha, in a different mix in each region, plus the June 12 holiday. The year before, merchants around schools and universities had dropped up to 75% in volume when schools closed.
"It's seasonal" is easy to say and hard to disprove, which is exactly why I didn't want to leave it there. I wrote it as a falsifiable hypothesis with a date:
The hypothesis
If the drop is seasonal drag, volume per active returning customer should move the way prior years moved from the same point on their Eid-aligned path, climbing back rather than slipping further. First read at week +2 after the read-out; confirmation at week +3. If it is still below the range at +3, the seasonal explanation is rejected and the diagnostic plan below starts.
The metric matters. Total volume would mix in new-customer growth and hide a problem. Volume per active returning customer isolates the behaviour that actually moved. The figure below shows what each outcome would look like against the test; it illustrates the test, not the result. It is drawn on the national seasonal index, which I have for all three years.
National seasonal index, every series rebased so the read-out week (week 0) = 100. Grey band: the range of the two prior years' Eid-aligned paths from that point, with a point of tolerance. Solid line: this year, observed to the read-out. Dashed: illustrative scenarios. Vertical markers: the first read (+2) and confirmation (+3).
What happened
2026 followed the seasonal path of the years before it: the rains and the long school vacation kept volume subdued through the summer, and it rebounded from week 38. Because the rebound came as the seasonal read predicted, the re-engagement campaign that had been on the table was never needed, and the money and team time went elsewhere.
The plan if it didn't rebound
A hypothesis is only useful if you know what you'll do when it fails. I agreed the next checks in advance, so a miss would trigger work immediately instead of a fresh debate. The first and fourth started that same week, so they would already be ruled in or out by the first read:
- Terminal uptime and declines. Are merchants trying to transact and failing? Check device downtime and decline rates by region and device type.
- Competitor displacement. Are top merchants splitting volume to another provider? Look for merchants whose volume fell while their activity days held.
- Pricing and policy changes. Walk the change log for fee, limit and policy changes that landed near the start of the plateau.
- Cohort engagement. Compare engagement curves for recent onboarding cohorts against older ones, to catch a quality problem in acquisition.
- Macro pressure. Inflation, cash availability and fuel prices hit merchant trade directly; check whether the drop tracks them by region.
Caveats and what I'd do differently
- Overlapping causes. Eid, the rains, a public holiday and a school break all fell in or near the same weeks. I could show the shape was seasonal, but not split the drag cleanly between those causes.
- Whole-week alignment. Eid moves by about eleven days, not a whole number of weeks, so shifting by weeks leaves some residual misalignment.
- What I'd add. A standing seasonal-expectation line on the weekly dashboard, so the next mid-year dip is compared with its expected path automatically, before anyone has to ask.