learn-metric-decomposition-with-phoebe / Builder session 4 of 10
Learn Metric Decomposition with Phoebe · Builder track · Session 4 of 10

Ecommerce deep dive

The first of six domain deep-dives. You know the shapes (b2) and the playbook (b3); now you apply both to the metric an online store lives and dies by: GMV. We push the tree two levels deep - traffic splits into channels, AOV splits into units and price - so a drop lands not just on a driver but on a specific branch with a specific owner. Then you diagnose the three classic ecommerce drops live, tree first and SQL second.

🟡 Builder track Analysts · PMs · founders · ops Live tree simulator + SQL 45 min
0-3 · Recap 3-18 · The full GMV tree 18-42 · Diagnose a drop 42-45 · Q&A
Part 0

Recap, and the first deep dive

Three sessions in, you have the general engine: build a tree (b1), name its shape (b2), run the diagnosis playbook with leading indicators and baselines (b3). Now we specialise. Ecommerce is the ideal first domain because its top line - GMV - is a clean, deep, multiplicative tree that every other domain borrows from. Get this one into your hands and marketing (b5), branding (b6), and the rest will feel familiar. Today the tree goes two levels deep and the diagnosis gets specific.

Live - presented in session Self-study - read after class ▶ Live tree - editable & runnable Framework sources covered
★ What you walk out with today A two-level GMV tree you can read cold - Traffic (SEO + Paid + Direct + Email) x Conversion x AOV (Units x Price) - and a symptom-to-branch map for the three drops every store sees: a channel dying, checkout breaking, and discounting eroding AOV.
Part 1 · covers Lean Analytics ecommerce model, domain canon

The full GMV tree, two levels deep 7 min live

In b1 the GMV tree was one level: Traffic x Conversion x AOV. That is enough to name a driver, but not to route a fix. So we go deeper. Traffic is really a sum of acquisition channels - SEO + Paid + Direct + Email. AOV is really a product - Units-per-order x Price-per-unit. Now a drop lands on "Paid traffic" or "Price per unit", not just "Traffic" or "AOV" - a branch a single team owns and can act on this afternoon.

GMV $208K / mo x x Traffic (sum) Conversion 2.8% AOV (product) SEO 52K Paid 38K Direct 20K Email 10K Units/order 2 Price/unit $31 Two levels down, a drop lands on one channel or on price - a branch a single team owns.
🔍 Click to zoom - Traffic is a sum of channels, AOV is a product of units and price
LiveWhy two levels beats one3 min

A one-level tree tells you "traffic fell". A two-level tree tells you "Paid traffic fell while SEO, Direct, and Email held" - which is a different meeting, a different owner, and a different fix. Notice the tree nests the patterns from b2: the root is multiplicative, but Traffic underneath it is additive (a sum of channels) and AOV is multiplicative again (units x price). Real trees are patterns stacked inside patterns.

  • Root ( x ): GMV = Traffic x Conversion x AOV. A percentage move in any child passes through.
  • Traffic ( + ): a sum of channels. A drop is usually one channel dying; read it by each channel's weight.
  • AOV ( x ): Units-per-order x Price-per-unit. Discounting hits price; smaller baskets hit units.
Real world

The "traffic is down" that was really one channel. A store panicked over a 12% traffic dip and nearly cut its whole marketing budget. The two-level tree showed Paid alone collapsed - a broken ad account - while organic channels were flat. The fix was a billing fix, not a strategy pivot. One level would have hidden it.

One level hides the fix; two levels find it ✗ One-level: "traffic fell" Traffic down 12% overall No branch named, no owner Nearly cut the whole budget ✓ Two-level: name the channel Paid alone collapsed 12% SEO, Direct, Email all held Cause: a broken ad account A broken Paid ad account, not a strategy pivot - the fix was billing, and only depth found it.
🔍 Click to zoom - depth turns "traffic fell" into a billing ticket, not a budget cut
{
  "unit": "$",
  "root": {
    "label": "GMV", "op": "x",
    "children": [
      { "label": "Traffic", "op": "+", "children": [
        { "label": "SEO",    "value": 52000, "unit": "visits" },
        { "label": "Paid",   "value": 38000, "unit": "visits" },
        { "label": "Direct", "value": 20000, "unit": "visits" },
        { "label": "Email",  "value": 10000, "unit": "visits" }
      ] },
      { "label": "Conversion", "value": 0.028, "pct": true },
      { "label": "AOV", "op": "x", "children": [
        { "label": "Units per order", "value": 2,  "unit": "units" },
        { "label": "Price per unit",  "value": 31, "unit": "$" }
      ] }
    ]
  }
}
Part 2 · covers Amplitude leading inputs, applied to ecommerce

Leading vs lagging in ecommerce 5 min live

GMV is the ultimate lagging number - it lands at the end. Near the leaves live the early warnings: add-to-cart rate and channel traffic move before GMV, so a dip there is your reaction time. Refunds, by contrast, lag GMV - they show up weeks after the sale. Steer by the leading leaves; report the lagging root. The deeper your ecommerce tree, the earlier the signal you can act on.

LiveWhich ecommerce drivers lead, which lag3 min

Map every driver on the lead-lag axis and you know which to watch daily and which to report monthly. Simulate a drop on the tree above to feel it: knock down Paid traffic and GMV follows - but in the real world the traffic dip was visible a week earlier, if anyone was watching the leading leaf.

  • Leading: ad impressions, sessions, add-to-cart rate. Move first, warn early, watch daily.
  • Lagging: GMV, refunds, repeat-purchase rate. Land late, report on a cadence.
  • The skill: hang a leading indicator on each branch. When Paid traffic is the branch, its leading leaf is ad spend and impressions - watch those, not GMV, for early warning.
Steer by leaves, report the root The board wants GMV. Your team should be watching add-to-cart rate and channel sessions - the leaves that move a week before GMV does. Same tree, two audiences, two altitudes.
Part 3 · covers domain canon, symptom-to-branch mapping

The three common ecommerce drops 5 min live

Almost every ecommerce GMV drop is one of three stories, and each maps to a specific branch of the tree. Learn the map and diagnosis starts before you open the data: the symptom already tells you which branch to walk to. This is the payoff of a two-level tree - the shape of the fall names the cause.

LiveSymptom to branch: the ecommerce cheat map3 min

Three drops, three branches. Notice each drop has a signature pattern from b2 - a channel dying is an additive failure inside Traffic; a broken checkout is a leaf failure at Conversion; discount erosion is a leaf failure inside the AOV product.

Three GMV drops, three branches, three patterns GMV dropped A channel dies Traffic - one channel leaf Additive: one part falls, others hold Checkout breaks Conversion leaf Multiplicative: the rate leaf drops Discounting erodes AOV AOV - price-per-unit leaf Multiplicative: the value leaf drops Traffic flat but conversion down is checkout; AOV down but units flat is discounting on price.
🔍 Click to zoom - the symptom already names the branch, before you open any data
SymptomTree branchPattern
A channel dies (ad account breaks, SEO update hits)Traffic -> one channel leafAdditive: one part falls, others hold
Checkout breaks (new bug, slow page, payment error)Conversion leafMultiplicative: the rate leaf drops
Discounting erodes basket valueAOV -> Price-per-unit leafMultiplicative: the value leaf drops
Read the shape, name the cause Traffic flat but conversion down? Checkout. AOV down but units flat? Discounting on price. One channel's traffic gone but others fine? A channel died. The tree turns a symptom into a branch before you write a single query.
Demo 1 of 2

Diagnose a GMV drop live ★ 12 min · everyone builds

The full loop on the deep tree. Simulate a drop, read the coral path down to the exact leaf, then confirm the fall in SQL by segmenting revenue by channel. Tree says which branch; SQL says which slice - and now the branch is specific enough to route the fix to one team.

{
  "unit": "$",
  "root": {
    "label": "GMV", "op": "x",
    "children": [
      { "label": "Traffic", "op": "+", "children": [
        { "label": "SEO",    "value": 52000, "unit": "visits" },
        { "label": "Paid",   "value": 38000, "unit": "visits" },
        { "label": "Direct", "value": 20000, "unit": "visits" },
        { "label": "Email",  "value": 10000, "unit": "visits" }
      ] },
      { "label": "Conversion", "value": 0.028, "pct": true },
      { "label": "AOV", "op": "x", "children": [
        { "label": "Units per order", "value": 2,  "unit": "units" },
        { "label": "Price per unit",  "value": 31, "unit": "$" }
      ] }
    ]
  }
}
SELECT o.channel,
       COUNT(DISTINCT o.order_id)                 AS orders,
       ROUND(SUM(oi.quantity * oi.unit_price), 0) AS revenue
FROM orders o
JOIN order_items oi ON o.order_id = oi.order_id
WHERE o.status = 'completed'
GROUP BY o.channel
ORDER BY revenue DESC;

Simulate a drop and trace the coral leaf. Is it a channel (Traffic branch), the Conversion leaf, or a leaf inside AOV?

Name the pattern from the symptom map: channel death (additive), checkout break (conversion leaf), or discount erosion (price leaf).

Run the SQL to segment revenue by channel and confirm which slice moved in the actual store data.

State the full diagnosis: "GMV fell X% - [branch] on [channel/leaf] - here is the confirming query." Reset and run another drop.

Demo 2 of 2

Your turn: segment the drivers ★ 10 min · everyone builds

Two live queries and one prose call. First a conversion proxy by channel, then AOV by channel, then reason from a symptom to the next query without any data at all - the skill this whole session builds.

LiveQ1 · Conversion proxy - completed vs total orders by channel3 min

We do not have raw sessions, but completion rate is a fair conversion proxy: of all orders started on a channel, how many completed rather than being refunded or cancelled? A channel with a low completion rate is where checkout is leaking.

SELECT channel,
       COUNT(*)                                       AS all_orders,
       COUNT(*) FILTER (WHERE status = 'completed')   AS completed,
       ROUND(100.0 * COUNT(*) FILTER (WHERE status = 'completed')
             / COUNT(*), 1)                           AS completion_pct
FROM orders
GROUP BY channel
ORDER BY completion_pct DESC;
LiveQ2 · AOV by channel - which basket shrank?3 min

If the tree pointed at AOV, split it by channel. Average order value is revenue divided by distinct orders. A channel whose basket is far smaller is where discounting or a product-mix shift is eroding value.

SELECT o.channel,
       COUNT(DISTINCT o.order_id)                      AS orders,
       ROUND(SUM(oi.quantity * oi.unit_price) * 1.0
             / COUNT(DISTINCT o.order_id), 2)          AS avg_order_value
FROM orders o
JOIN order_items oi ON o.order_id = oi.order_id
WHERE o.status = 'completed'
GROUP BY o.channel
ORDER BY avg_order_value DESC;
Self-studyQ3 · GMV down, traffic flat, AOV flat - who is guilty?2 min write

Reason it out in prose before touching data. GMV = Traffic x Conversion x AOV. If GMV fell but Traffic and AOV are both flat, arithmetic leaves only one driver that can have moved. Name it, then name the single next query you would run to localise it. This is the move that separates fast analysts from slow ones - the tree points, you do not guess.

Real world

The answer: in a product tree, if two of three drivers are flat and the top line fell, the third - Conversion - is guilty. Next query: segment conversion (completion rate) by channel and by device to find which slice broke. Checkout is the usual suspect.

Homework

Try it yourself - this week ◐ 20-30 min total

Framework sources

Frameworks this session draws on

The ecommerce GMV tree is the domain canon - the same decomposition Lean Analytics and every store's analytics stack use, applied here live instead of described. This page draws on:

Lean Analytics (Croll & Yoskovitz) - the ecommerce business modelPart 1 · GMV = Traffic x Conversion x AOV, the canonical store tree
Ecommerce domain canon - channel mix and AOV decompositionParts 1 & 3 · Traffic as a channel sum, AOV as units x price
Amplitude North Star Playbook - leading inputs in ecommercePart 2 · add-to-cart rate and sessions as leading leaves
Check yourself

Three questions before you go 🎯 ◐ 90 seconds

1 · What is the canonical ecommerce GMV formula?

GMV is a product of three drivers: traffic (how many arrive), conversion (what share buy), and average order value (how much each spends). Two levels down, traffic splits into channels and AOV into units x price.

2 · A single acquisition channel dies while the others hold. Which pattern is that, and where in the tree?

Traffic is a sum of channels, so a channel dying is an additive failure: one part collapses, the rest hold. Read it by each channel's weight - a dead small channel barely dents GMV; a dead big one hurts.

3 · GMV is down, but traffic is flat and AOV is flat. Which driver is guilty?

GMV = Traffic x Conversion x AOV. With traffic and AOV both flat, only conversion can explain the fall. Next query: segment conversion by channel and device - checkout is the usual suspect.

Builder session 4 cheat sheet · pin this

GMV formulaGMV = Traffic x Conversion x AOV. The canonical store tree, multiplicative at the root.
Two levels deepTraffic = SEO + Paid + Direct + Email (sum). AOV = Units-per-order x Price-per-unit (product).
Patterns nestMultiplicative root, additive Traffic, multiplicative AOV. Real trees stack the b2 shapes.
Channel dies = additiveOne channel falls, others hold. Read by weight - a dead small channel barely dents GMV.
Checkout break = conversion leafTraffic flat, AOV flat, GMV down - the only driver left is conversion. Segment by channel and device.
Discount erosion = price leafAOV down with units flat means price fell. Split AOV by channel to find where the basket shrank.
Steer by leavesAdd-to-cart rate and sessions lead GMV; refunds lag it. Watch leaves daily, report the root.
Running skillRead a deep GMV tree and route a drop to one team. Next: b5, the marketing deep dive.