Tiered Demand Curve Estimator

Pricing Analytics Demand Modeling

Estimate per-tier demand curves and substitution patterns when you sell multiple vertically-differentiated products (e.g., Basic / Premium / Elite) to one market and observe how each tier's sales respond to its own price changes — and to the prices of its sibling tiers.

👨‍🏫 Professor Mode: Guided Learning Experience

New to tiered pricing? Enable Professor Mode for step-by-step guidance through where your customers actually go when you reprice one tier of a product line!

OVERVIEW & WHAT THIS TOOL SOLVES

When you sell a vertically differentiated product line—such as Basic, Standard, and Premium subscription tiers—raising the price of your Standard plan doesn't just lose customers to competitors; it pushes some price-sensitive buyers down to Basic and nudges others up to Premium. Fitting separate single-product regressions for each tier ignores cannibalization and breaks down because sibling prices move together. Tiered Demand Curve Estimator applies Berry (1994) Aggregate Discrete-Choice Logit Inversion (with optional 2SLS instrumental variables) to estimate all tier demand curves jointly and recover the full own- and cross-price elasticity matrix from market-level sales snapshots.

🎯 Questions It Answers

  • When we raise the price of one product tier, how many lost buyers switch to our sibling tiers vs. abandoning us for the outside good?
  • What is each tier's intrinsic baseline quality appeal (α_j) after stripping out price differences?
  • Is historical price endogeneity biasing our price sensitivity estimate, and how much does 2SLS cost-instrumenting correct it?

📂 What Data You Need

  • Period-Level Market Snapshots: Observed price (p_jt) and unit sales or share (s_jt) for each tier across T time periods/markets
  • Total Market Potential (M_t): Addressable market size per period so the outside no-purchase share (s_0t) can be computed
  • Optional Cost Shifters / Instruments: A cost index or other shifter that moves price but not demand, to run Two-Stage Least Squares (2SLS)

💡 What You'll Discover

  • Multi-Tier Demand & Substitution Curves: How varying one tier's price bends both its own volume and every sibling tier's volume
  • Full J × J Elasticity Matrix: Own-price elasticities on the diagonal and cross-price substitution elasticities off-diagonal
  • Price Simulator & Customer Flow: How each tier's share and the no-purchase share move when you reprice one or more tiers
🔍 Key Nuances & Common Traps to Watch For
  • The Outside Good (s0t) Is Essential: In Berry's inversion, shares are normalized against the fraction of the addressable market that bought nothing (s_0t = 1 − ∑ s_jt). Without an outside option, raising all tier prices by $10 simultaneously would falsely predict zero total customer loss!
  • Price Endogeneity & When to Use 2SLS: If managers raised prices during high-demand periods (unobserved demand shock ξ_jt > 0), OLS will underestimate how much customers dislike high prices (β will be biased toward zero or even positive). Supplying a cost instrument via 2SLS isolates clean price variation, but only when the instrument is strong: if the first-stage F is below 10, the 2SLS estimate is not reliable. The streaming case shows the correction working, the gym case shows prices that needed no correction, and the software case shows a weak instrument.
  • IIA Proportional Substitution Property: Standard aggregate logit implies that when Tier j raises its price, departing customers switch to Alternative k in proportion to k's market share (producing identical cross-elasticities across rows in column k).
📐 Under the Hood: Model Equations & Variable Definitions

1. Random-Utility Model & Multinomial Logit Market Shares

\[ U_{ijt} = \alpha_j - \beta p_{jt} + \xi_{jt} + \varepsilon_{ijt}, \qquad s_{jt} = \frac{\exp(\alpha_j - \beta p_{jt} + \xi_{jt})}{1 + \sum_{k=1}^{J} \exp(\alpha_k - \beta p_{kt} + \xi_{kt})} \]

💬 Read it in plain English: Each consumer chooses the tier (or outside no-purchase option, whose utility is normalized to 0) that gives them the highest net utility—balancing tier quality α_j against price penalty β·p_jt—which aggregates into the multinomial logit market share formula.

Uijt
Consumer Utility for Tier jOUTPUT ⓘ
Net utility customer i derives from tier j in period/market t (outside option utility U_i0t = ε_i0t).
αj
Tier Fixed Effect (Intrinsic Quality)ESTIMATED ⓘ
Baseline vertical quality/brand appeal of tier j relative to not buying at all.
β
Price Sensitivity ParameterESTIMATED ⓘ
Marginal disutility of paying $1 more (expected β > 0 since entered with a minus sign −β·p_jt). The results table reports the price coefficient itself, which is −β, so it should be negative there.
pjt, sjt
Tier Price & Market ShareYOUR DATA ⓘ
Observed price p_jt and share of total addressable market s_jt = q_jt / M_t for tier j in period t.
ξjt, εijt
Unobserved Demand Shock & Idiosyncratic TasteINFERENCE ⓘ
Market-level unobserved demand shock ξ_jt and consumer i’s Type-I Extreme Value taste draw ε_ijt.

2. Berry (1994) Log-Share Inversion & Own/Cross-Price Elasticities

\[ \ln\!\left(\frac{s_{jt}}{s_{0t}}\right) = \alpha_j - \beta p_{jt} + \xi_{jt}, \qquad \eta_{jj} = -\beta p_j (1 - s_j), \qquad \eta_{jk} = \beta p_k s_k \; (j \neq k) \]

💬 Read it in plain English: Dividing each tier's share by the no-purchase share and taking the natural log transforms a nonlinear choice system into a clean linear regression we can fit with OLS or 2SLS, directly yielding every tier's own-price elasticity (η_jj) and cross-price substitution elasticity (η_jk).

s0t
Outside Good (No-Purchase) ShareYOUR DATA ⓘ
Share of addressable market M_t that did not buy any tier in period t: s_0t = 1 − ∑_{k=1}^J s_kt.
ln(sjt / s0t)
Berry Linearized Log-Share RatioOUTPUT ⓘ
Dependent variable of the Berry inversion equal to mean tier utility δ_jt = α_j − β·p_jt + ξ_jt.
ηjj
Own-Price Elasticity of Tier jOUTPUT ⓘ
Percentage change in tier j’s share per +1% increase in its own price p_j (negative when β > 0).
ηjk (j ≠ k)
Cross-Price Substitution ElasticityOUTPUT ⓘ
Percentage increase in tier j’s share when sibling tier k raises its price p_k by +1%.

DATA SOURCE

📚

Use a Scenario

📊 Tiered-Pricing Case Studies

Pre-built datasets where one firm sells multiple vertically-differentiated tiers. Each scenario varies tier prices over time so you can recover per-tier demand curves and substitution patterns. Loading a case shows what one period is, how many potential customers each period holds and what its instrument column measures.

📤

Enter Your Data

Required columns: period, product, price, units_sold.
Optional: instrument (a numeric cost index or other price shifter that does not move demand; enables 2SLS), outside_share (per-period no-purchase share, enables that outside-option mode).
One row per (period × product). Tool supports 2 to 5 tiers.

Drag & drop CSV (.csv, .tsv, .txt, .xls, .xlsx)

Long format: period, product, price, units_sold (+ optional instrument, outside_share)

No file uploaded.