Skip to content
Pricing 3 min read

Pricing Elasticity and Competitive Context

Elasticity models trained on your own history answer a different question than the one you're asking. Why competitive context belongs in the model — and how to put it there honestly.

Classical elasticity estimation asks: how did demand respond when *we* changed price? But buyers don't see your price in isolation — they see it against a competitive backdrop that your model has, at best, buried in the intercept. When that backdrop shifts, the model keeps confidently answering last year's question.

The missing covariate

Own-history elasticity models systematically confuse your price changes with market movement. If you cut price 5% while competitors quietly cut 7%, your "elasticity" estimate absorbs a relative price *increase* — and you conclude demand is less elastic than it is, exactly the kind of error that compounds quarter over quarter. The fix is unromantic: matched competitor prices as covariates, with the match-quality discipline that implies (see the matching problem).

Your price index vs. competitive backdrop (indexed)
Your indexCompetitive backdrop
Source: Heroku competitive index — one FMCG category, indexed to January = 100. The gap between lines, not either line alone, carries the signal.

What the competitive layer adds

  • Relative-price features — your price against matched competitors, per segment and tier, with promo-adjustment.
  • Regime indicators — windows where the backdrop moved sharply, so the model can learn different behavior instead of averaging it away.
  • Availability context — competitor stock-outs change effective competition; the model should know when the comparison set thinned.

With these in place, elasticity estimates stop being historical trivia and become something a pricing committee can defend: "demand response, holding the competitive backdrop fixed." That phrase — *holding fixed* — is the entire value of the monitoring layer.

Honest caveats

Three limitations to state upfront in any stakeholder deck. Match error propagates: wrong matches bias estimates in ways aggregate data never will, so match audits are model hygiene, not data-team pedantry. Endogeneity persists: competitors respond to you, and the cleanest fix — experiments — is often commercially unavailable. Regimes shift: a model re-estimated after a market disruption isn't broken; it's working.

Model inputWithout competitive layerWith competitive layer
Price coefficientAbsorbs market movementInterpretable as own-price response
Promo effectsConfounded with competitor promosSeparable with promo flags on both sides
Forecast error after market shocksHigh and slow to self-correctBounded by regime indicators
Do not let a better model create false precision. Competitive context narrows the error bars; it does not remove them. Confidence intervals belong in pricing decks.

The practical build order

Start with matched competitor prices on your top-revenue SKUs — not the whole catalog, which is where programs drown. Wire relative price into the existing model as a covariate. Validate on held-out windows *including* a competitive shock if you have one. Expand coverage only after the first segment has earned trust. Elasticity work is a ladder, and the competitive layer is the rung almost everyone skips.

Priya Shah

Priya studies pricing dynamics across digital commerce. She builds the monitoring methodologies and elasticity models that Heroku clients use to understand competitive price movements without overreacting to noise.

Related reading

Continue here

2 comments

Priya Shah

(Team note) Confidence intervals in pricing decks — non-negotiable in our reviews. If your provider can’t quantify match quality, the intervals are fiction.

Clara Voss

The own-price-vs-backdrop confusion example finally explained a coefficient that had bothered our analytics team for two quarters.

Join the discussion