Adjusting The Seasonality Index When Last Year's Q4 Had A One-Off Promo

If last Q4 had a 30%-off event you're not repeating, your seasonality index will over-weight Q4. Here's how to strip or smooth the promo before you annualize.
Quick answer
Replace last year's promo month(s) in your seasonality index with a modelled baseline — either a two-year average, a linear interpolation between the surrounding non-promo months, or the same month scaled by your category's public YoY growth. Re-normalize the twelve monthly weights to sum to 12 before you lock the index. Do not delete the month; you'll break the annualization math.
Adjusting the seasonality index for a prior-year one-off promo
Rebuilding a monthly seasonality index so a non-repeating promo month doesn't inflate the weight you apply when annualizing a test result.
A seasonality index derived from last year's GA4 sessions and AOV assumes each month's share of annual revenue is structurally recurring. When Q4 contained a one-off event — a 30% site-wide sale, a brand collab drop, a viral TikTok moment — that month's share is artificially high, and using it as-is over-weights Q4 when you annualize a Q3 lift.
Adjusting the index means replacing the promo-distorted month(s) with a modelled baseline that represents what Q4 would have looked like without the event, then re-normalizing so the twelve weights still sum to 12.
This page assumes you've already built a monthly seasonality index from GA4 sessions and AOV. If you haven't, do that first — the adjustment happens on top of the raw index, not instead of it.
Why the raw index over-weights the promo month
A seasonality index is a share-of-year calculation. If November last year did €480k of revenue against a €2.4M year, November's weight is 20% — an index value of 2.4 against the monthly mean of 1.0.
Strip out the promo and November was probably closer to €340k, or a 14% share. That's the difference between multiplying a Q3 test win by 2.4x or 1.7x when you extrapolate the November contribution. On a €200k projected annual lift, you've just overstated the number by roughly €35k.
The over-weighting compounds
The distortion isn't only in the promo month. Because the index has to sum to 12, an inflated November mathematically depresses every other month's weight. So you also under-annualize January through October. The whole curve is wrong, not just one point.
How to detect promo distortion in the raw index
Plot last year's monthly index alongside the two-year prior curve, or against a category benchmark. A single-month spike that's 30%+ above its neighbours and doesn't repeat in the earlier year is your signal. For a European apparel store, a genuine seasonal Black Friday spike is usually 1.6-1.9x; anything past 2.2x deserves a look.
Cross-reference with your promo calendar and paid-media spend. If November had a 30% site-wide discount plus a 3x spend push, and neither is planned for this year, that month is a distortion — not a seasonal pattern.
Raw vs promo-adjusted seasonality index — apparel store example
Raw (promo included)
Adjusted (promo stripped)
Three methods to rebuild the promo month
Method 1 — two-year average. If you have GA4 data from the year before the promo year, replace last November with the same month from two years ago, scaled up by the store's overall YoY growth rate. Simplest option when the earlier year is clean.
Method 2 — linear interpolation. Take October and December from last year, drop a straight line between them, and use the November point on that line. Works when you don't have a clean earlier year but the surrounding months are unaffected.
Re-normalize after you replace
Whichever method you use, the twelve adjusted monthly weights must still sum to 12 (or the shares sum to 100%). Divide each replaced weight by the new total and multiply by 12. Skip this step and every downstream annualization is off by a constant factor.
Applying the adjusted index to a Q3 RPV win
Method 3 — category benchmark scaling. Pull the category YoY session curve from a source like Similarweb or your Shopify vertical report, apply that curve's November-to-October ratio to your October, and use the result as November's clean baseline. Useful when both your recent years are dirty.
Once the index is adjusted and re-normalized, annualize the Q3 test lift the normal way: monthly RPV lift × monthly sessions × the adjusted index weight, summed across twelve months. The Q4 contribution will now reflect a normal peak, not a promo peak — which is what you want if this year's Q4 has no equivalent event.
Frequently asked questions
Don't strip the promo month entirely — scale it. If last year was 30% off site-wide and this year is 15% off a category, model the expected discount depth as roughly half the lift, and use that as your November index. Keep a note of the assumption in the model.
Real patterns repeat. Compare at least two prior years and check your promo calendar. If the spike shows up both years at similar magnitude, it's seasonal. If it only shows up in the promo year — or its magnitude is 40%+ higher than the earlier year — it's a distortion.
No. If Black Friday is a repeating annual event with comparable discount depth, it's part of your seasonality. Only strip promo activity that won't recur, or that will recur at materially different magnitude.
The same math applies but the impact is smaller. Subscription revenue smooths across months, so a Q4 acquisition promo mostly distorts new-subscriber cohorts, not total monthly revenue. Adjust the acquisition curve rather than the total-revenue index.
That compounds the distortion. Ideally, rebuild the baseline using organic-only sessions from GA4 for that month, then reapply your normal paid-to-organic ratio. Otherwise you're baking a spend spike into what should be a structural seasonality curve.
Typical impact for a store where one Q4 month was promo-distorted is a 10-20% overstatement of the annualized lift. For a €200k projected annual lift that's €20-40k of phantom revenue in the business case — enough to swing a prioritization decision.
No. The index has to represent twelve months; deleting one breaks the annualization math because your test-period sessions still need a Q4 weight. Replace the month with a modelled baseline instead of dropping it.
Promo months usually have depressed AOV (discount) and inflated sessions (traffic push) — the two partly offset in revenue terms. If you built the index from revenue directly, one adjustment is enough. If you built it from sessions and AOV separately, adjust both series.
Keep two versions of the index side by side — raw and adjusted — with a one-line note per replaced month explaining the method and the assumption. When finance or leadership challenges the annualized number, you can show the delta and the reasoning in under a minute.
Yes, on a rolling basis. Each January, rebuild the index from the most recent twelve months and check whether any months contained non-repeating events. It's a 30-minute task if your promo calendar is documented and a multi-hour excavation if it isn't.
Test ideas before you ship them
Run unlimited A/B tests, attach hypotheses to outcomes, and build a searchable archive of what works — and what doesn't.