Choicery Tutorial Series

Price Elasticity

How to measure and interpret price sensitivity using conjoint-based market simulation, a practical guide for Choicery with methodological background.

Choicery Methodology Reference | July 2026

Contents

Part I: Practical Guide
  1. What Is Price Elasticity?
  2. Prerequisites
  3. Own-Price Elasticity
    • Controls
    • Running the Analysis
    • Results
    • Interpretation
    • Demand Curve
    • Data Points Table
  4. Cross-Price Elasticity
    • Controls
    • Results & Interpretation
  5. Reading the Demand Curve
  6. Exporting Results
  7. Best Practices & Common Pitfalls
Part II: Theoretical Background
  1. Key Definitions
  2. Arc Elasticity Formula
  3. Log-Log Regression
  4. Cross-Price Elasticity Theory
  5. The Revenue Rule
  6. References
Part I

Practical Guide

Everything you need to measure, interpret, and export price elasticity analyses in Choicery.

1. What Is Price Elasticity?

Price elasticity measures how much a product’s market share changes when its price changes. It is the single most important metric for pricing decisions: it tells you whether raising or lowering a price will gain or lose customers, and by how much.

An elasticity of −2 means: a 1% price increase leads to a 2% share decrease. The negative sign reflects the law of demand, higher prices typically mean lower demand.

The core idea

Price elasticity is a property of a product in a market, not of a person or a feature. It depends on which competitors are present and at what prices they are offered. Change the competitive landscape, and the elasticity changes too.

Two Types in Choicery

Empirical benchmark

The typical average own-price elasticity across hundreds of consumer-goods studies is about −2.5 (Rao, 2014). However, elasticity varies enormously by category, brand strength, and competitive context, values between −1 and −5 are all common.

2. Prerequisites

Before running Price Elasticity in Choicery, make sure you have the following:

1

A completed analysis run with individual-level utilities. Price elasticity is computed via market simulation, which requires individual-level part-worth utilities. Choicery accepts a completed Preference Analysis (HB) run or a completed AI-Driven Profile Analysis run. Pick the run you want in the Run dropdown at the top of the Market Simulation page. Without a completed run, the Price Elasticity tab is disabled.

2

A price attribute declared under Price Setup. Your conjoint design must include a price attribute. A linear (continuous) price attribute is preferred for smooth elasticity curves, but categorical price levels also work. Open Price Setup in the top bar of the Market Simulation page and set the global price attribute. The Price Elasticity tab has no price-attribute dropdown of its own: it shows a read-only badge reading “Price Attribute: … · from Price Setup”.

3

Products defined in the Products panel. With no products, the Price Elasticity controls are greyed out and the tab shows “Add at least one product in the Products panel to use Price Elasticity.” One product plus the None alternative is technically enough for an own-price curve, but elasticity is only meaningful against a realistic competitive set. Cross-price elasticity needs at least two products.

4

Open Market Simulation and switch to the Price Elasticity tab. The tab bar on the right-hand panel reads Choice Share, WTP, Reservation Price, Price Elasticity, Sensitivity, Persona. Inside the Price Elasticity tab, two sub-tabs select the analysis type: Own-Price Elasticity and Cross-Price Elasticity. Each sub-tab keeps its own results, so you can switch back and forth without recalculating.

The Price Elasticity tab with the Own-Price Elasticity and Cross-Price Elasticity sub-tabs and the Own-Price controls
Figure 1. The Price Elasticity tab with its two sub-tabs and the Own-Price Elasticity controls before the first calculation.

3. Own-Price Elasticity

3.1 Controls

Own-Price Elasticity Panel
Simulation Method Three pills: Share of Pref. (selected by default), RFC, First Choice.
Include “None” Toggle for the outside option (no-purchase). On by default. The whole toggle is hidden when the estimation has no None alternative.
Calculate Runs the analysis. Sits on the same row as the method pills.
Focal Product The product whose elasticity you want to measure.
Minimum Price Lower bound of tested price range, e.g. 5.00.
Maximum Price Upper bound of tested price range, e.g. 15.00.
Simulations Shown only when RFC is selected. Default 500, allowed range 100 to 5000 in steps of 100. Higher values are slower.
Include unusual price responses in price analyses Lives in the Analysis Settings dropdown in the top bar, not in the tab, and is shared with WTP, Reservation Price and Sensitivity. Off by default: respondents who prefer higher prices or barely react to price are left out, because their share rises with price and would make the demand curve climb again at high prices. Arc, log-log, overall, segment, and demand-curve results all use the same sample. Choice Share always uses all respondents, so the share at the current price can differ from Choice Share.
Allow negative prices Lives in the Analysis Settings dropdown in the top bar, not in the tab. When off, a negative minimum or maximum price is rejected with “Negative prices are disabled in Analysis Settings.”
Price Attribute Read-only badge, taken from Price Setup in the top bar. There is no price-attribute dropdown in this tab.

The Focal Product is the product whose price will be varied. All other products remain at their defined prices, and every product in the Products panel competes. Minimum and Maximum Price are pre-filled with the observed price range of the selected price attribute whenever Choicery can infer it. The elasticity is calculated for exactly the values in these fields: values you enter stay when you switch tabs or apply Price Setup, and the fields are refilled only when they are empty or the price attribute changes. The demand curve’s x-axis runs from the minimum to the maximum price. If you enter values outside the observed range, Choicery computes the run anyway and adds the note “Prices outside the estimated range X to Y were extrapolated. Utilities beyond the design are an assumption of the model, not something the data shows.” to the warnings at the bottom of the tab.

If any product has no price value set, the calculation stops with “Price value missing for product(s): ...”, listing the product numbers. Minimum and Maximum Price replace the price of the focal product only; every other product needs its own price.

The Own-Price Elasticity configuration with the Simulation Method pills, the Include None toggle, Focal Product, Minimum Price and Maximum Price and the Calculate button
Figure 2. The Own-Price Elasticity configuration: Simulation Method pills, Include None, Focal Product, Minimum Price, Maximum Price and Calculate.

3.2 Running the Analysis

Click Calculate to run the simulation. Choicery then performs three passes with the same settings:

The log-log pass requires strictly positive prices. If the minimum price is zero (or negative, which is only possible with Allow negative prices on), the Log-Log Summary Fit (Average Elasticity) card shows a dash with the label N/A and the R² card shows a dash, while arc elasticity and the demand curve are still shown.

3.3 Results

The results block is headed Elasticity Results. Next to the heading, a small chip reports which respondents were used: “n=… (… unusual price responses excluded)” by default, or “All respondents n=…” when Include unusual price responses in price analyses is on in Analysis Settings. On the right sits the Excel download button.

Four metric cards are displayed:

Metric Description
Arc Elasticity A single number summarizing the two-point (midpoint method) elasticity between the minimum and maximum price. Symmetric: the same result whether you go from low-to-high or high-to-low.
Log-Log Summary Fit (Average Elasticity) The constant elasticity estimated by regressing ln(share) on ln(price) across the seven simulated price points. It is a summary fit over the whole tested range, not the elasticity at any single price: a logit share curve is not iso-elastic, so check R² before quoting it as one number. More stable than arc elasticity because it uses more than two points. Own-price only.
R² (Log-Log) The coefficient of determination of the log-log regression. Values close to 1.0 indicate the constant-elasticity model fits the demand curve well. Low R² suggests the elasticity changes substantially across the price range.
Price Change (midpoint) The percentage price change between minimum and maximum price, computed on the midpoint basis used for arc elasticity. The line underneath reads “Share Change (midpoint)” and gives the matching share change.

Below the cards, an interpretation banner spells the result out in words, for example “Elastic demand (|E| > 1): A 1% price increase leads to a …% decrease in simulated preference share.” Inelastic results read “Inelastic demand (|E| < 1): ...”, a flat curve reads “Flat simulated demand: ...”, and a positive value reads “Positive own-price elasticity: Share rises as price increases. Review the price coding and demand curve. The Revenue Rule is not applied to this result.”

The Elasticity Results block with the sample chip, the four cards Arc Elasticity, Log-Log Summary Fit, R-squared (Log-Log) and Price Change (midpoint), and the interpretation banner
Figure 3. The Elasticity Results block: the sample chip, the four cards and the interpretation banner.

3.4 Interpretation

For conventional downward-sloping own-price demand (E < 0), the magnitude is read from the absolute value |E|. The label under each card is Elastic (|E| > 1), Inelastic (|E| < 1), Unit Elastic (|E| exactly 1) or Positive / Unusual (E > 0). The Interpretation row of the Excel Summary sheet is finer grained: it is written from a four-band classification (“highly price-sensitive”, “price-sensitive”, “relatively price-insensitive”, “highly price-insensitive”) with these cut-offs:

|E| Range Classification Meaning
|E| > 1.5 Highly elastic Very price-sensitive. Small price changes cause large share swings.
1 < |E| ≤ 1.5 Elastic Price-sensitive. Share responds more than proportionally to price changes.
0.5 < |E| ≤ 1 Inelastic Price-insensitive. Share responds less than proportionally to price changes.
|E| ≤ 0.5 Highly inelastic Barely price-sensitive. Large price moves shift share only marginally.

If own-price elasticity is positive, simulated share rises as price increases. Choicery marks the result as Positive / Unusual. Review the price coding and demand curve before interpreting it, and do not apply the usual Revenue Rule.

The Revenue Rule (quick version)

If |E| > 1 (elastic): raising price decreases total revenue, the volume you lose outweighs the extra revenue per unit.
If |E| < 1 (inelastic): raising price increases total revenue, you lose some volume, but each unit earns more, and the net effect is positive.
This rule applies only when own-price elasticity is negative and demand slopes downward.

3.5 Demand Curve Chart

Below the summary metrics sits the Demand Curve block, subtitled “Simulated preference share at different price points”. It is a line chart showing how simulated preference share (Y-axis) varies as the focal product’s price (X-axis) changes. This visual is the most intuitive way to understand price sensitivity: a steep, rapidly dropping curve means the product is highly price-elastic; a gently sloping curve means it is relatively price-insensitive.

Two buttons in the header of that block export the chart: CSV and PNG. Both work for own-price and for cross-price curves.

If filters are applied through the Filters button in the left panel, the chart draws one curve per selected group in addition to the full sample, and a row of filter pills above the chart lets you show and hide individual curves. The pills only appear when there are at least two curves.

The Demand Curve block with the plotted curve, the CSV and PNG buttons and the Show Data Points toggle
Figure 4. The Demand Curve block with the CSV and PNG buttons in its header and the Show Data Points toggle below the chart.

3.6 Data Points Table

Under the chart, the Show Data Points button expands a table with the raw simulation data. It has three columns: Price, Simulated Preference Share (%) and Local Arc Elasticity. The last column is the midpoint-formula elasticity between neighbouring simulated price points (central difference inside the curve, one-sided at the two ends), so it is a local arc value, not a derivative. This is useful for checking where along the range the elasticity changes.

If price was estimated as a categorical attribute, a note at the bottom of the tab lists the observed price levels and states that elasticity is interpolated between them, and that values outside that range are treated as extrapolation.

4. Cross-Price Elasticity

4.1 Controls

Cross-Price Elasticity Panel
Simulation Method Same three pills as own-price: Share of Pref. (default), RFC, First Choice.
Include “None” Toggle for the outside option. On by default, hidden when the estimation has no None alternative.
Calculate Runs the cross-price analysis.
Focal Product Product whose share you are measuring.
Competitor Product Product whose price changes.
Competitor Minimum Price Lower bound of competitor price range, e.g. 8.00.
Competitor Maximum Price Upper bound of competitor price range, e.g. 20.00.
Simulations Shown only when RFC is selected. Default 500, range 100 to 5000.
Include unusual price responses in price analyses Analysis Settings dropdown in the top bar, shared with own-price elasticity (section 3.1).
Allow negative prices Analysis Settings dropdown in the top bar, shared with own-price elasticity.

In cross-price analysis, the focal product’s price stays fixed while the competitor product’s price is varied. Competitor minimum and maximum price are pre-filled from the observed price range when available and keep the values you enter; values outside that range are treated as extrapolation. The question being asked is: “When Product B gets more expensive, how much share does Product A gain?”

The Cross-Price Elasticity configuration with Focal Product, Competitor Product, Competitor Minimum Price and Competitor Maximum Price
Figure 5. The Cross-Price Elasticity configuration: Focal Product, Competitor Product, Competitor Minimum Price and Competitor Maximum Price.

4.2 Results & Interpretation

Cross-price elasticity is reported as a single arc value in the Arc Elasticity card, plus a Cross-Price Demand Curve showing how the focal product’s share changes as the competitor’s price moves. The curve subtitle also states the focal product’s fixed price.

No log-log regression is run in cross-price mode, so the Log-Log Summary Fit (Average Elasticity) card shows a dash with the label “N/A” underneath, and the R² card shows a dash as well. The Excel button is hidden in this sub-tab; the curve CSV and PNG buttons remain available.

Cross-Elasticity Value Classification Meaning
> 0.5 Strong substitute The focal product gains substantial share when the competitor raises prices. These products compete head-to-head.
0.1 to 0.5 Substitute Some competitive relationship exists. Price changes in one affect the other moderately.
−0.1 to 0.1 Independent Negligible competitive interaction. These products serve different customer needs.
−0.5 to −0.1 Complement The focal product loses share when the competitor raises prices. Rare in conjoint but theoretically possible (bundled goods, ecosystem effects).
< −0.5 Strong complement A large negative reading. In a conjoint scenario this usually points to a configuration problem rather than a genuine complement relationship. Check the product setup.

The card label under the value is coarser: it reads Substitute above 0.1, Complement below −0.1, and Independent in between.

Identifying your closest competitor

Run cross-price elasticity for your focal product against each competitor in turn. The competitor with the highest cross-price elasticity is your closest substitute, the one that gains the most when you raise prices, and the one you gain the most from when they raise theirs.

5. Reading the Demand Curve

The demand curve is the most intuitive visualization of price sensitivity. Here is how to read it:

In the Cross-Price Elasticity sub-tab the same chart is titled Cross-Price Demand Curve and the X-axis carries the competitor’s price, while the Y-axis still shows the focal product’s share. There, an upward slope is the expected pattern for substitutes.

Curve Shape and Elasticity

Curve Shape Elasticity Interpretation
Steep drop-off Highly elastic Share crashes with small price increases. The product competes primarily on price.
Gentle slope Inelastic Share changes little with price. The product has strong non-price differentiation (brand, features).
S-shaped / concave Varies along curve The product is inelastic in a “sweet spot” and becomes elastic at extreme prices. Check the log-log R², if low, elasticity is not constant.

Segment-Level Demand Curves

When filters are active (the Filters button in the left panel), Choicery overlays a separate demand curve per filtered group on the same chart, alongside the full sample, and reports a per-group elasticity block above the chart. This is useful for pricing strategy: you may discover that one group is highly price-elastic while another is inelastic, suggesting that a differentiated pricing strategy or a product line with premium and value tiers could increase total revenue.

6. Exporting Results

6.1 Excel Workbook

The Excel button in the Elasticity Results header exports the workbook. It is available for own-price elasticity only; the button is hidden in the Cross-Price Elasticity sub-tab. The file is named price_elasticity_<timestamp>.xlsx and contains three sheets:

6.2 Curve CSV and PNG

The CSV and PNG buttons in the Demand Curve header work in both sub-tabs. The CSV is written as demand_curve.csv (own-price) or cross_price_demand_curve.csv (cross-price), with the columns Sample, Price (or Competitor Price), Share (%) and Local Arc Elasticity. When filters are active, each filtered group is written as its own Sample block.

The exports are useful for creating custom visualizations, incorporating elasticity data into pricing models, or sharing results with stakeholders who do not have access to Choicery.

The Elasticity Results header with the sample chip and the Excel button, and the Demand Curve header with the CSV and PNG buttons
Figure 6. The Elasticity Results header with the Excel button and the Demand Curve header with the CSV and PNG buttons.

7. Best Practices & Common Pitfalls

Do

Don’t

Conjoint vs. real-world price sensitivity

Conjoint-based elasticities are directionally correct and excellent for relative comparisons (Product A is twice as elastic as Product B). However, their absolute magnitudes should be treated as lower bounds. In-market elasticities are typically 1.5 to 2× larger because real consumers face budget constraints that survey respondents do not (Orme, 2020).

Part II

Theoretical Background

The mathematical foundations behind price elasticity measurement in conjoint-based market simulation.

8. Key Definitions

Glossary

Price Elasticity of Demand
The ratio of the percentage change in quantity demanded (or market share) to the percentage change in price. Formally: E = (%ΔQ) / (%ΔP).
Own-Price Elasticity
Product j’s share response to its own price change. Almost always negative (law of demand). Notation: Ejj.
Cross-Price Elasticity
Product j’s share response to product k’s price change. Positive for substitutes, negative for complements. Notation: Ejk.
Arc Elasticity
Elasticity computed using the midpoint formula between two discrete price-quantity points. Symmetric: the same result regardless of direction.
Log-Log Summary Fit (Average Elasticity)
The slope coefficient from an OLS regression of ln(share) on ln(price) over all simulated price points. It summarises the whole tested range with one constant elasticity; it is not the elasticity at any single price. More robust than arc elasticity when multiple price points are available.
Local Arc Elasticity
The arc (midpoint-formula) elasticity between two neighbouring points of the simulated demand curve, reported per price point in the data table and the curve CSV. Inside the curve it uses the two neighbours (central difference), at the two ends the single neighbour. It approximates, but is not, the instantaneous point elasticity.
Elastic (|E| > 1)
Price-sensitive: a 1% price increase causes a greater-than-1% share decrease. Revenue falls when price rises.
Inelastic (|E| < 1)
Price-insensitive: a 1% price increase causes a less-than-1% share decrease. Revenue rises when price rises.
Unit Elastic (|E| = 1)
The boundary case: a 1% price increase causes exactly a 1% share decrease. Revenue is unchanged by marginal price changes.

9. Arc Elasticity Formula

Arc elasticity uses the midpoint method to compute elasticity between two price-share observations. The key advantage over simple percentage change is symmetry: the elasticity from point A to point B is identical to the elasticity from B to A.

Earc = [(Q2 − Q1) / ((Q2 + Q1) / 2)] / [(P2 − P1) / ((P2 + P1) / 2)]
Arc (Midpoint) Elasticity Formula

Where:

Worked Example

Suppose a coffee brand has the following simulated market shares:

Numerator (% change in share): (Q2 - Q1) / ((Q2 + Q1) / 2) = (22 - 30) / ((22 + 30) / 2) = -8 / 26 = -0.3077 Denominator (% change in price): (P2 - P1) / ((P2 + P1) / 2) = (4.00 - 3.00) / ((4.00 + 3.00) / 2) = 1.00 / 3.50 = 0.2857 Arc Elasticity: E = -0.3077 / 0.2857 E = -1.08

Interpretation: The elasticity is −1.08, meaning the product is slightly elastic. A 1% price increase leads to roughly a 1.08% share decrease. Since |E| > 1, a price increase would decrease total revenue (adapted from Orme, 2020).

10. Log-Log Regression

When more than two price points are available (Choicery simulates seven evenly spaced points across the tested range for this purpose), a more robust approach is to fit a constant-elasticity model via log-log regression:

ln(Share) = α + β × ln(Price)
Log-Log (Constant Elasticity) Regression

In this model:

Why log-log is preferred

Arc elasticity uses only the two extreme points and ignores everything in between. Log-log regression uses all seven simulated price points, producing a more stable estimate. It also has a natural interpretation: the coefficient is a direct elasticity reading. The trade-off is that it assumes constant elasticity, always check R² to verify this assumption.

When Constant Elasticity Fails

If R² is low (e.g., below 0.90), the demand curve has a shape that the constant-elasticity model cannot capture well, for example, an S-curve where elasticity is low in the middle of the price range and high at the extremes. In such cases, report the full demand curve rather than a single elasticity number, and consider narrowing the price range to a region where the constant-elasticity fit improves.

11. Cross-Price Elasticity Theory

Cross-price elasticity measures competitive interaction between products:

Ejk = (%Δ Sharej) / (%Δ Pricek)
Cross-Price Elasticity: product j’s share response to product k’s price change
IIA caveat

In standard MNL-based simulation (including Share of Preference), cross-price elasticities follow the Independence of Irrelevant Alternatives (IIA) property: when one product loses share, it is distributed proportionally to all remaining products based on their current shares. This means MNL cross-elasticities may not capture asymmetric substitution patterns. Individual-level HB utilities partially mitigate this, but the limitation remains (Train, 2009).

Cross-Elasticity Matrix

For a market with N products, the full cross-elasticity matrix is an N×N table where entry (j, k) gives Ejk. The diagonal entries are own-price elasticities (negative). Off-diagonal entries are cross-price elasticities (typically positive). Products in the same row that have high cross-elasticities are close substitutes for the focal product.

12. The Revenue Rule

The Revenue Rule is arguably the most practically important consequence of price elasticity. It connects elasticity directly to the profit impact of pricing decisions.

The standard rule assumes conventional downward-sloping own-price demand (E < 0). If the estimated elasticity is positive, review the price coding and demand curve instead. Choicery does not apply the Revenue Rule to that result.

The Fundamental Relationship

Revenue = Price × Quantity
Basic Revenue Identity

When you raise a price, two opposing forces act on revenue:

  1. Price effect (positive): Each unit sold generates more revenue.
  2. Volume effect (negative): Fewer units are sold because some customers switch away.

Which force wins depends entirely on elasticity:

Condition Price Increase Effect Price Decrease Effect Why
|E| > 1 (elastic) Revenue decreases Revenue increases Volume loss outweighs per-unit gain. Customers are sensitive (many leave).
|E| < 1 (inelastic) Revenue increases Revenue decreases Per-unit gain outweighs volume loss. Customers are sticky (few leave).
|E| = 1 (unit elastic) Revenue unchanged Revenue unchanged The two effects exactly cancel. This is the revenue-maximizing price.

Worked Example: Revenue Rule in Action

Consider two products in a market of 10,000 potential customers:

Product A: Price = $10, Share = 25% (2,500 units) Revenue = $10 x 2,500 = $25,000 Elasticity = -0.8 (inelastic) Raise price 10% to $11: Share change = -0.8 x 10% = -8% relative New share = 25% x (1 - 0.08) = 23% (2,300 units) New revenue = $11 x 2,300 = $25,300 Revenue INCREASED by $300 (+1.2%) --- Product B: Price = $10, Share = 25% (2,500 units) Revenue = $10 x 2,500 = $25,000 Elasticity = -2.0 (elastic) Raise price 10% to $11: Share change = -2.0 x 10% = -20% relative New share = 25% x (1 - 0.20) = 20% (2,000 units) New revenue = $11 x 2,000 = $22,000 Revenue DECREASED by $3,000 (-12%)

Key insight: The same 10% price increase produced opposite revenue outcomes. For the inelastic Product A, raising price was profitable. For the elastic Product B, it was destructive. This is why measuring elasticity before making pricing decisions is essential.

Optimal pricing

In theory, the revenue-maximizing price is where |E| = 1 (unit elastic). In practice, firms optimize profit (revenue minus cost), not just revenue. The profit-maximizing price depends on the margin: higher-margin products can tolerate more elastic demand. The general rule is that the optimal markup over marginal cost equals 1/|E|, this is the Lerner Index from microeconomic theory.

13. References

Orme, B. K. (2020). Getting started with conjoint analysis (4th ed.). Manhattan Beach, CA: Research Publishers LLC.

Orme, B. K., & Chrzan, K. (2017). Becoming an expert in conjoint analysis. Orem, UT: Commercial conjoint software publisher

Rao, V. R. (2014). Applied conjoint analysis. Berlin: Springer.

Train, K. E. (2009). Discrete choice methods with simulation (2nd ed.). Cambridge: Cambridge University Press.