+150 XP

Optimizing assortment and price with AI elasticity models

# Optimizing assortment and price with AI elasticity models

A mid-tier sparkling water brand walks into its quarterly review with a national grocer and learns it is losing two shelf facings (the visible front-row slots on a shelf) to the retailer's private label. The private label costs less, sells fine, and carries a fatter margin for the retailer. The brand's ask is simple: keep our space. The retailer's question is sharper: prove you earn it.

This is the everyday battleground of FMCG (fast-moving consumer goods, the packaged food, drink, and household products that sell quickly at low margin). Shelf space is finite. Every SKU (stock-keeping unit, a single product variant like "12oz lemon-lime, 6-pack") competes for it. AI elasticity models are now the tool that decides who wins.

The core problem: space is a zero-sum game

A planogram is the visual map of what goes where on a shelf. Adding one product means removing another. So the retailer needs to answer two linked questions:

1. Assortment: Which SKUs should we stock at all?

2. Price: What everyday shelf price maximizes category profit, not just one brand's sales?

The old way was gut plus spreadsheets. The new way uses machine learning to estimate two things precisely: how demand responds to price, and how products steal sales from each other.

Price elasticity, defined

Price elasticity of demand measures how much unit sales change when price changes. If you raise price 10 percent and volume drops 20 percent, elasticity is roughly -2.0 (elastic, price-sensitive). If volume drops only 3 percent, elasticity is about -0.3 (inelastic, loyal buyers).

FMCG categories vary enormously:

  • Premium coffee, energy drinks: often inelastic. Buyers pay up.
  • Bottled water, sugar, paper towels: often elastic. Shoppers switch on a few cents.

The catch: elasticity is not one number. It changes by retailer, region, season, promo state, and competitor price. A single blended estimate is useless. That is why AI matters. It can estimate elasticity conditioned on dozens of variables at once.

Why machine learning beats a simple regression

A basic linear regression gives you one elasticity per product. Real demand is messier:

  • Elasticity is nonlinear. Dropping price from $4.00 to $3.50 may do little, but crossing the $2.99 threshold triggers a jump.
  • Effects interact. Rain, holidays, competitor promotions, and endcap displays all move the curve.
  • Data is sparse for new or niche SKUs.

Gradient-boosted trees and, increasingly, deep learning demand models handle these interactions without you hand-coding every rule. For a solid, free primer on the economics side before the ML, see the FRED / economics elasticity overview style resources and open courseware, but the modeling ideas below are what teams actually deploy.

The piece everyone misses: cannibalization

Cannibalization is when one of your products steals sales from another of your own products instead of from a competitor. Promote your 6-pack and your 12-pack volume may fall. That is not incremental growth. It is shuffled revenue.

Cross-price elasticity measures this. It captures how the price of Product B affects demand for Product A.

  • Positive cross-elasticity: substitutes. Cutting Coke Zero price pulls buyers from regular Coke.
  • Negative cross-elasticity: complements. Cheaper chips can lift salsa sales.

A cannibalization matrix maps every SKU pair. This is the single most important artifact for assortment decisions. It tells you whether dropping a slow SKU actually loses sales, or whether those buyers simply shift to your other products on the same shelf.

A simple cannibalization matrix

| | Std Cola drops price | Diet Cola drops price | Private Label drops price |

|----------------|----------------------|-----------------------|---------------------------|

| Std Cola units | +18% (own) | -6% (cannibalized) | -9% (lost to PL) |

| Diet Cola units | -5% (cannibalized) | +15% (own) | -7% (lost to PL) |

Read the off-diagonal cells. The -6% and -5% are internal theft. The -9% and -7% are true competitive losses. Retailers care about the net across the whole category, not any single row.

Building the model: what goes in

A workable AI elasticity system needs these inputs, most of which retailers and brands already collect:

  • POS scan data (point-of-sale, actual checkout transactions) by store, week, SKU.
  • Price and promotion history, including display and feature ads.
  • Competitor and private-label prices.
  • Store attributes: format, region, shopper demographics.
  • Seasonality and calendar events.

A minimal modeling loop looks like this:

python
# Illustrative only: estimate demand, then simulate a price change
import lightgbm as lgb

features = ["price", "comp_price", "pl_price", "promo_flag",
            "week_of_year", "store_format", "region"]

model = lgb.LGBMRegressor()
model.fit(X_train[features], y_train_units)

# Simulate: what if we cut price 5%?
X_sim = X_current.copy()
X_sim["price"] *= 0.95
predicted_units = model.predict(X_sim)
# Compare predicted_units vs baseline to get implied elasticity
# Then repeat for neighboring SKUs to capture cannibalization

You never trust the raw prediction alone. You run counterfactual simulations: change one price, hold others fixed, read the effect on the target SKU and its neighbors. That is how you extract elasticity and cross-elasticity the model has implicitly learned.

From model to shelf: the optimization step

Estimating demand is half the job. The other half is choosing the assortment and prices that maximize an objective, usually category profit, subject to real constraints:

  • Shelf holds a fixed number of facings.
  • Some SKUs are mandatory (must-stock brands shoppers expect).
  • Minimum inventory turns to avoid dead stock.
  • Retailer margin floors.

This becomes a constrained optimization problem. The model proposes: drop the slow 500ml variant, give its two facings to the fast 1L, hold everyday price at $2.79 instead of $2.99 because the volume gain more than offsets the per-unit margin loss, and net category profit rises.

Back to our sparkling water brand

Armed with a cannibalization matrix, the brand walks back into the review. Their pitch changes from "please keep our space" to a data claim: "Your private label and our brand serve different shoppers. Cross-elasticity is low. If you cut our facings, most of our lost volume walks out of the category entirely rather than moving to your label. Here is the category profit simulation."

If the numbers hold, the retailer keeps the facings because the whole shelf earns more. If the numbers show the brand really is replaceable, the honest answer is to renegotiate on price or trade promotion instead. Either way, the decision is grounded.

Knowledge check

1. A product's price is raised by 10% and unit sales drop by 25%. What does this tell you about the product's price elasticity?

2. Why does the lesson argue that a single 'blended' elasticity estimate is useless for FMCG decisions?

3. When the retailer asks the brand to 'prove you earn it' regarding shelf facings, what underlying principle is being invoked?

MULTIPLE CHOICE

4. Select ALL correct answers about what AI elasticity models help retailers and brands decide.

Select all the correct answers.

MULTIPLE CHOICE

5. Select ALL correct answers that reflect sound reasoning about FMCG price elasticity.

Select all the correct answers.

Practical Cautions

Correlation is not causation. If price and sales both drop during a recession, a naive model may "learn" that low prices cause low sales. Use holdout tests, geo experiments (change price in some stores, not others), and causal methods where possible.

Elasticity drifts. Post-inflation, many shoppers became more price-sensitive on staples. Models trained on old data understate elasticity. Retrain regularly.

Endogeneity. Prices are often set in response to demand, which biases naive estimates. This is a known econometric trap. Analysts use instrumental variables or experimental price variation to correct it. If your vendor cannot explain how they handle it, be skeptical.

Per-retailer, not one-size. A model tuned on a national average will mis-price at any single chain. The value is in conditioning on retailer, region, and format.

Where this is heading in 2026

Three shifts are live now:

  • Retail media data (the shopper and ad data retailers sell to brands) is feeding richer, faster elasticity estimates.
  • Faster reprice cycles. Some retailers with electronic shelf labels update everyday prices more frequently, so models must run more often.
  • Joint optimization. Assortment, price, and promotion are increasingly solved together rather than in silos.

Key Takeaways

  • Elasticity is conditional, not a single number. AI earns its keep by estimating how price sensitivity shifts by retailer, region, season, and competitor state.
  • Cannibalization is the decisive input for assortment. The cross-elasticity matrix separates true competitive loss from internal shuffling, which is what actually justifies shelf space.
  • Modeling is only half the job. Pair demand estimates with constrained optimization against real shelf and margin limits to get actionable planograms and prices.
  • Guard against bias. Endogeneity, correlation traps, and elasticity drift will quietly ruin naive models. Validate with experiments and retrain often.
  • Frame the pitch around category profit. Whether you are the brand or the retailer, the winning argument is total shelf performance, not one SKU's sales.