§8.3
Optimal Pricing by Season: Does Countercyclical Pricing Make Sense?
In the real scanner data behind this book — visible firsthand in the Progresso pricing dashboard — Progresso does something that looks, at first glance, like a mistake. Category soup demand is highest in winter and falls off in the warmer months — yet Progresso's own price tends to go up in that quieter off-season, while Campbell's holds a comparatively flat price all year. The intuitive move is the opposite: discount when demand is weak to defend volume, and hold price when demand is strong and customers are buying anyway. Is Progresso's pricing team getting this backwards, or is there an elasticity-based argument that makes the countercyclical move correct?
The Lerner rule derived in the previous article gives a direct way to answer this. It does not care about intuitions or seasonal folklore — it only cares about one number, own-price elasticity, and it returns a markup. Split that number by season, run the formula twice, and the question stops being a matter of instinct.
The Executive Question
Progresso raises price in the off-season, when the category is at its seasonal trough. Campbell's does not. Is Progresso's behavior a pricing error, or does the elasticity data justify it?
Answering this requires exactly two ingredients: an elasticity estimate for winter, an elasticity estimate for everything else, and one formula applied twice.
Splitting Demand by Season
The same log-log specification from Chapter 8.1 — — is re-estimated separately on winter weeks and non-winter weeks, both with store fixed effects. The two samples are large and the two estimates are precise:
| Season | Elasticity | Std. error | 95% CI | R² | n |
|---|---|---|---|---|---|
| Non-winter | −2.486 | 0.028 | [−2.542, −2.431] | 0.445 | 44,731 |
| Winter | −2.820 | 0.021 | [−2.861, −2.780] | 0.533 | 43,678 |
Both estimates sit comfortably in the elastic zone (), so the pricing formula from Chapter 8.2 applies cleanly to each. The confidence intervals do not overlap: winter demand for Progresso is measurably, not just numerically, more elastic than non-winter demand. That is the opposite of what a "discount when demand is weak" instinct would assume — it is not that off-season shoppers are indifferent to price and winter shoppers are price-sensitive; the data says the reverse.
A quick intuition for why: in winter, soup is a category everyone is buying, private label and competing brands included, so a shopper who finds Progresso pricier than usual has the easiest possible substitution sitting right next to it on the shelf. In the off-season, soup buyers are a smaller, more specific group — closer to a habitual purchase than an impulse comparison — and that selection makes remaining demand less sensitive to price.
Applying the Lerner Rule, Twice
Recall the constant-elasticity optimal pricing rule derived last chapter:
Constant-elasticity optimal pricing rule
Holding marginal cost fixed at — the same assumption used throughout this chapter — plug in each season's elasticity separately:
Optimal price, non-winter
Optimal price, winter
Non-winter
$1.67
optimal price at an elasticity of -2.49.
Winter
$1.55
optimal price at an elasticity of -2.82.
Non-winter carries the higher optimal price: demand is less elastic in non-winter (-2.49 vs. -2.82), so a bigger markup still clears at a similar quantity.
The formula recommends a higher price in the non-winter months and a lower price in winter — roughly a 12-cent swing on a dollar of marginal cost, or about an 8% seasonal price differential.
Reading the Result: Does the Real Strategy Hold Up?
The mechanism is the Lerner index working exactly as designed: less elastic demand means a smaller , which means a bigger markup survives before volume erodes it away. Non-winter demand is the less elastic of the two seasons, so the formula assigns it the bigger markup — a higher optimal price — and winter, the more elastic season, gets the smaller markup and the lower optimal price.
That is precisely the shape of Progresso's real pricing behavior: raise price in the off-season, hold it lower when the category is at its winter peak. Run through the logic plainly and it stops looking backwards:
- Winter demand is more elastic, not less — shoppers stocking up on soup in peak season have the most substitutes conveniently in view, and Progresso's volume is more exposed to a price increase precisely when everyone is buying.
- Non-winter demand is less elastic — the shoppers still buying soup in July are a more captive, less price-comparing group, and Progresso can carry a higher markup without losing them.
On this evidence, Progresso's countercyclical habit is not an error to be corrected — it is what the inverse-elasticity rule would recommend if you ran it by season instead of once a year. Campbell's flat, un-seasonalized pricing is the more suspect strategy by comparison: if its own elasticity swings similarly by season (this analysis does not establish that — it would take the identical split re-run on Campbell's data), a flat price is leaving exactly the seasonal margin on the table that Progresso is capturing.
From a Quarterly Recalculation to Continuous Repricing
Nothing about this exercise is conceptually different from what a ride-hailing app does when it raises fares during a Friday-night surge, or what an e-commerce repricer does dozens of times a day on a single SKU. The economics are the same Lerner logic: elasticity is not a single number belonging to a product, it is a number that shifts with context — time of day, season, local competition, even the specific customer being priced. Surge pricing is, structurally, the seasonal split in this article carried to its limit: instead of re-estimating elasticity once a quarter and setting a price for the season, an algorithmic pricing engine re-estimates (or approximates) elasticity continuously and recomputes in real time.
What changes moving from this chapter's hand calculation to an automated system is not the formula — it is the frequency of re-estimation, the granularity of the segment the elasticity is computed on, and the speed of the feedback loop that catches a bad estimate. The economic logic taught here is the same logic running, largely invisibly, behind every dynamic price a customer sees today.