How to use Contribution Analysis
Contribution analysis answers "why did revenue move?" by decomposing the change into named drivers — new vs returning customers, AOV shifts, channel mix, and seasonality. This guide shows how to size each driver and act on the result.
Contribution Analysis
A diagnostic method that decomposes a revenue change into the named drivers — customer type, AOV, channel mix, seasonality — that caused it.
Contribution analysis is the technique of taking a revenue change between two periods and attributing it to specific, measurable drivers: new versus returning customers, average order value shifts, channel mix changes, vertical or category mix, and seasonality. Instead of saying revenue fell 12% last month, you say new-customer revenue fell 18% (worth -€42k), returning-customer AOV rose 4% (worth +€8k), and paid-social mix shrank from 38% to 29% (worth -€21k).
It sits inside the broader practice of revenue intelligence and turns a vague "why did revenue move?" question into a stack-ranked list of causes you can act on — usually within a single afternoon.
Every revenue line on a P&L is the product of several moving parts. Sessions, conversion rate, AOV, repeat rate, refund rate, and channel mix all shift week to week. When the top-line number moves, it's the sum of those shifts — some pulling up, some pulling down, often cancelling each other out.
Contribution analysis is the discipline of separating those forces. Done well, it turns a 30-minute exec debate ("is it iOS? is it the discount? is it the algorithm?") into a one-page waterfall where each driver is sized in euros and ranked. The number on top of the waterfall is where you spend Monday morning.
How the decomposition works
Start by writing revenue as a product of factors you can measure independently: Sessions × Conversion rate × AOV. Then split each factor by a segmentation dimension that matters — channel, customer type, device, or country.
For a two-period comparison, you hold all but one factor constant and ask: if only this factor had changed, what would revenue have done? That counterfactual is the driver's contribution. Sum the contributions across all drivers and they should reconcile to the actual revenue change, with a small residual for interaction effects.
The choice of dimension matters more than the math. For a Shopify apparel store, splitting by new vs returning customer and by channel usually surfaces 80% of the story. For a beauty brand with strong subscription mechanics, splitting by first-order vs replenishment is more useful than channel.
Don't decompose blindly across every dimension
Slicing by channel × device × country × customer type at once produces 60+ tiny buckets, each statistically noisy. Pick two dimensions max per analysis, and pick them based on a hypothesis ("I think paid social fell") not an exhaustive grid.
The drivers worth tracking
Five drivers cover most online-retail revenue movements. New-customer volume swings with paid acquisition spend and creative performance. Returning-customer revenue swings with email cadence, lifecycle automation, and product launches. AOV moves with merchandising — bundle promotion, free-shipping thresholds, hero SKU price changes.
Channel mix is the silent killer: if Meta CPMs spike and you pull spend, paid-social revenue might drop 30% while organic search holds flat — and the blended number looks like a soft -8% when there's a sharp underlying shift. Seasonality is the inverse — a 14% week-on-week lift in October might be entirely calendar, with zero underlying improvement.
Sample revenue decomposition: €420k → €378k (-10%)
Read the chart top-down: new-customer volume drove most of the loss (-€38k), paid-social channel mix added another -€14k, and AOV slipped €9k from lower bundle attach. Returning customers and a favourable seasonal week clawed €17k back. The story is an acquisition problem, not a site problem — pricing tests won't fix it.
Sizing each driver
The simplest sizing method is the sequential-substitution approach: compute revenue with last period's values, then swap one factor at a time to current-period values and record the delta. Order matters — the residual lands on whichever driver you compute last — so for board-facing analysis, use a symmetric method like Shapley decomposition that averages across all orderings.
For most operational decisions, sequential substitution with a clearly-labelled residual is good enough. The drivers worth investigating are the ones an order of magnitude above the residual; if your top driver is €4k and your residual is €3k, you're chasing noise.
Typical driver magnitude in a month-over-month revenue swing, by vertical
| Vertical | New-customer volume | AOV shift | Channel mix | Seasonality |
|---|---|---|---|---|
| Apparel (Shopify) | 40-55% | 10-15% | 15-25% | 10-20% |
| Beauty / personal care | 30-40% | 8-12% | 20-30% | 15-25% |
| Consumer electronics | 25-35% | 20-30% | 15-20% | 20-30% |
| Home & furniture | 35-45% | 15-25% | 10-20% | 15-20% |
| Food & beverage (subscription) | 20-30% | 5-10% | 10-15% | 5-10% |
Use the table as a sanity check: if your decomposition says channel mix explains 70% of an apparel-store revenue swing, you've probably mislabeled a new-customer volume problem (paid spend pulled back) as a mix problem. Subscription verticals are the exception — their revenue is dominated by cohort retention, so new-customer swings matter less month to month.
Putting it into practice
Run a contribution analysis on every revenue movement larger than your weekly noise band — for most stores that's ±5%. Anything inside the band is regression to the mean and chasing it produces false-positive interventions. Anything outside it deserves a 60-minute decomposition before the team commits to a fix.
The output should be a one-screen waterfall with each driver in euros and a one-line interpretation. Share it with paid, lifecycle, and merchandising at the same time so they see whether the problem is theirs or someone else's — this prevents three teams from independently chasing the same -€40k.
The 5-minute version
If you have GA4 and an order history, you can do a rough contribution analysis in five minutes: pull revenue split by new-vs-returning and by top-3 channels for both periods, calculate each segment's delta, and rank them. The top one or two segments usually account for 70%+ of the movement.
Frequently asked questions
Attribution assigns credit for a conversion to marketing touchpoints (which ad, which email). Contribution analysis decomposes a revenue change between two periods into structural drivers (customer type, AOV, mix). Attribution explains a sale; contribution analysis explains a trend.
Revenue intelligence is the broader practice of understanding why revenue does what it does. Contribution analysis is the specific diagnostic method inside it that answers "why did the number move?" — usually the first question a CFO or Head of E-commerce asks when they see a weekly report.
Week-over-week catches operational issues (a broken checkout, a pulled ad campaign). Month-over-month smooths out daily noise and surfaces structural shifts. Year-over-year controls for seasonality and is the right view for board reporting. Run all three on any movement worth investigating.
Two drivers interact when their combined effect isn't equal to the sum of their individual effects — e.g. AOV and volume both falling makes revenue drop more than either alone would suggest. For most operational use, label the interaction as a residual and ignore it if it's under 10% of the total change. For high-stakes analyses, use Shapley decomposition.
Partially. GA4 gives you sessions, conversion rate, and revenue split by channel and by new-vs-returning user. It doesn't natively decompose AOV or handle multi-period waterfalls, so you'll export to a spreadsheet or use a tool that ingests GA4 history and produces the waterfall automatically.
Anything outside your weekly noise band — typically ±5% for stores in the €1M-€15M revenue range. Smaller stores have wider noise bands (±8-10%) because individual large orders move the number. Don't decompose movements inside the band; they're random and any explanation you find will be coincidence.
Only when they're outside the historical AOV variance for your store, usually ±3-5%. A 2% AOV shift on a €80 average order is two euros — within product-mix noise. A 12% AOV drop usually means a free-shipping threshold change, a discount stacking bug, or a hero SKU going out of stock.
Mix is about how spend or sessions are distributed across channels; performance is about how each channel converted. Compute revenue assuming last period's mix with this period's per-channel performance, then the reverse. The two deltas separate mix from performance cleanly.
Some residual is expected (interaction effects, refunds processed late, currency rounding). If the residual is over 15% of the total change, you've likely missed a driver — usually returns, gift cards, or B2B/wholesale orders mixed into the same revenue line. Pull those out and re-run.
Weekly as a standing report for the e-commerce team, monthly as a board-facing summary, and ad-hoc any time a number surprises you. Standing weekly cadence is what turns it from a fire-drill exercise into a routine diagnostic — and stops the team from speculating in Slack threads.
Get an AI expert review of your site
Paste your URL — Metricuno's AI runs the same heuristic checks a senior CRO consultant would, scoring your page and prioritising the fixes that'll move conversion fastest.