Supply ChainCase study 27

Pricing on Causal Elasticity

A structural causal model separates true price elasticity from promotion lift and seasonality — replacing a regression engine that couldn't tell the two apart.

Causal InferenceRevenue ManagementDecision Intelligence
+5.4%margin per SKU across the first full selling season
18% → 3%price-direction calls that disagreed with holdout experiments
1,240SKUs repriced weekly by the causal model

The challenge

The legacy pricing engine fit a regression against three years of observational sales data — price, volume, and whatever else happened that week. It had no way to separate a price cut from the in-store display that usually accompanied it, which meant:

  • Price and promotion effects blended into a single elasticity coefficient per SKU
  • Recommendations that flipped sign quarter over quarter for the same product
  • Category managers manually overriding roughly a third of the model's outputs
  • No mechanism to test a hypothetical price move before committing shelf-reset budget
  • Margin erosion concentrated on high-velocity SKUs where competitors promoted often

A controlled holdout audit found 18% of the model's price-direction calls were wrong — not imprecise, but pointed the wrong way.

How it works

Isolating price from everything that moves with it

The fix wasn't a better regression — it was a different question: what would volume have done if price alone had changed?

  1. 01

    Three years of price, promotion, and volume history assembled across roughly 40 retail partners

  2. 02

    Known confounders catalogued: display flags, feature ads, competitor stockouts, holiday seasonality

  3. 03

    A double machine learning model estimated price elasticity net of those confounders for each SKU

  4. 04

    Instrumental variables built from cost-driven price changes that had no relationship to promotion calendars

  5. 05

    Model validated against a holdout of natural price experiments the retail partners had already run

  6. 06

    Recommendations wired into the revenue management system's weekly repricing cycle

  7. 07

    Category managers given an attribution view splitting each SKU's sales lift into price effect vs. promotion effect

What we built

Key capabilities

01

Elasticity, isolated

The model separates the causal effect of price from promotion, display, and seasonality instead of blending them into one number.

02

Weekly refresh

Elasticity estimates retrain weekly against the latest price and promotion data, so recommendations don't go stale mid-quarter.

03

Attribution category managers trust

Every recommendation ships with a price-vs-promotion breakdown, not just a number to accept or override.

04

Validated against real experiments

Held out against natural price experiments the retailers already ran, not just a backtest on the training data.

Before vs after

What changed in the pricing engine

Price-direction accuracy
82% → 97%
Manual analyst overrides
~33% → 6% of SKUs
Margin per SKU (season over season)
Flat → +5.4%
Time to a price recommendation
Days → same-day

Business impact

What it changed

5.4% margin lift in one season

Correcting the 18% of price calls that had the wrong sign, concentrated in high-velocity SKUs, delivered the bulk of the gain within a single 26-week selling season.

Override rate cut by more than 4x

Category managers now override roughly 1 in 16 recommendations, down from 1 in 3 — freeing analyst time for the exceptions that actually need judgment.

Testable price moves

Category managers can simulate a hypothetical price change against the causal model before committing shelf-reset budget, instead of finding out after the reset.

Technology stack

PythonEconML / DoubleMLSnowflakeAirflowRevenue management system API

Better data wasn't the constraint — asking a causal question of it was. The model that answers 'what would volume have done' outperforms the one that only knows what volume did.