Filling Seats at the Right Price

Allocating capacity across fare classes

Airlines / HotelsIntermediate

Revenue management is the science of allocating scarce, perishable capacity across fare classes to maximize total revenue. Revenue management emerged in the airline industry after US deregulation in 1978, and its principles now govern pricing in hotels, car rentals, concerts, and cloud computing.

The Problem

Consider an airline operating a single flight leg with a fixed number of seats. The airline sells tickets across multiple fare classes— restricted fares booked months ahead and flexible fares purchased close to departure. Unsold seats perish at departure: their value drops to zero.

The fundamental tension is this: should the airline accept a low-fare booking now, or reject it and hope a higher-fare passenger arrives later? Accept too many low-fare bookings and the airline forgoes premium revenue. Protect too many seats and the plane departs with empty chairs.

Definition — Revenue Management
The application of data-driven methods to sell the right product to the right customer at the right price at the right time, maximizing revenue from a fixed, perishable capacity.

Three structural features define a revenue management setting:

  • Fixed capacity. In the short run, the firm cannot add seats, rooms, or server instances. Supply is a hard constraint.
  • Perishable inventory. Unused capacity at the time of service is lost permanently. An empty hotel room tonight cannot be stored for tomorrow.
  • Uncertain demand. High-fare customers tend to book late. The firm must decide under uncertainty whether future high-value demand will materialize.
Airline Seat Allocation
A 150-seat flight from New York to London offers three fare classes: Economy ($100), Business ($200), and First ($400). Bookings open 90 days before departure. Discount leisure travelers book early, while business travelers book in the final two weeks. The airline must decide how many seats to protect for each class before demand is fully realized.

Mathematical Formulation

We formalize the capacity allocation problem. Suppose a single resource (one flight leg) with capacity CC and nn fare classes indexed j=1,2,,nj = 1, 2, \ldots, n in increasing order of fare: f1<f2<<fnf_1 < f_2 < \cdots < f_n. Demand for class jj is a random variable DjD_j. We seek booking limits bjb_j (the maximum number of class-jj seats to sell) that maximize expected revenue:

max  E ⁣[j=1nfjmin(Dj,bj)]subject tojbjC\max \; \mathbb{E}\!\left[\sum_{j=1}^{n} f_j \cdot \min(D_j, b_j)\right] \quad \text{subject to} \quad \sum_{j} b_j \le C
(1)

Low-fare bookings arrive first. When a class-jj request arrives, the system must decide instantly: accept or reject. This leads to protection levels and booking limits.

Definition — Protection Level
The protection level yjy_j is the number of seats reserved (protected) for fare classes jj and above. Equivalently, the booking limit for class jj is bj=Cyj+1b_j = C - y_{j+1}.

Littlewood’s Rule

The foundational result for the two-class case was derived by Ken Littlewood in 1972. Consider two classes: a low fare fLf_L and a high fare fHf_H. High-fare demand DHD_H arrives after the low-fare booking period closes. The question: how many seats yy should be protected for the high-fare class?

Littlewood's Rule (1972)
Accept a low-fare booking if and only if fLfHPr(DH>y)f_L \ge f_H \cdot \Pr(D_H > y) where yy is the number of remaining seats. Equivalently, the optimal protection level yy^* satisfies Pr(DH>y)=fL/fH\Pr(D_H > y^*) = f_L / f_H.

The intuition is: compare the certain revenue from accepting the low-fare booking (fLf_L) to the expected marginal revenue from the last protected seat—the high fare times the probability that high-fare demand will actually fill that seat. When the certain revenue exceeds the expected opportunity cost, accept.

y=FH1 ⁣(1fLfH)y^* = F_H^{-1}\!\left(1 - \frac{f_L}{f_H}\right)
(2)

Here FH1F_H^{-1} is the inverse CDF (quantile function) of high-fare demand. If DHN(μ,σ2)D_H \sim \mathcal{N}(\mu, \sigma^2), the protection level is y=μ+σΦ1(1fL/fH)y^* = \mu + \sigma \cdot \Phi^{-1}(1 - f_L / f_H).

EMSR Heuristic

Littlewood’s Rule handles two classes. For n3n \ge 3 classes, Belobaba (1987) proposed the Expected Marginal Seat Revenue (EMSR) heuristic, which extends the pairwise comparison idea.

Definition — EMSR-b
For each pair of adjacent classes jj and j+1j{+}1, compute the protection level as if the problem were two-class. Aggregate demand for classes j+1j{+}1 through nn into a single virtual class with weighted-average fare. Then apply Littlewood’s Rule to find yjy_j.

Concretely, EMSR-b proceeds as follows:

  1. For each class j=1,,n1j = 1, \ldots, n{-}1, compute the aggregate demand for classes above jj: Dˉj=Dj+1++Dn\bar{D}_j = D_{j+1} + \cdots + D_n, with mean μˉj\bar{\mu}_j and standard deviation σˉj\bar{\sigma}_j.
  2. Compute the weighted average fare: fˉj=k>jfkE[Dk]/μˉj\bar{f}_j = \sum_{k>j} f_k \cdot \mathbb{E}[D_k] \,/\, \bar{\mu}_j.
  3. Set the protection level yjy_j using Littlewood’s Rule with the virtual high-fare class: Pr(Dˉj>yj)=fj/fˉj\Pr(\bar{D}_j > y_j) = f_j / \bar{f}_j.
yj=Fˉj1 ⁣(1fjfˉj)y_j = \bar{F}_j^{-1}\!\left(1 - \frac{f_j}{\bar{f}_j}\right)
(3)

EMSR-b is the industry standard—simple to implement, fast to compute, and close to optimal in practice. It is used by virtually every airline reservation system.

Nested vs. Partitioned Booking Limits

There are two fundamental approaches to controlling seat inventory:

Partitioned (dedicated) allocation divides capacity into non-overlapping blocks—e.g., 80 seats for Economy, 50 for Business, 20 for First. Each class can only sell from its own block. This is simple but inefficient: if Economy demand is low, those seats go empty even if Business demand overflows.

Nested allocation uses a hierarchy of booking limits. The highest class can access all CC seats. The next-highest can access CynC - y_n seats, and so on. This ensures higher-fare classes always have access to remaining inventory.

Nesting Dominance
Nested booking limits always yield expected revenue at least as high as partitioned booking limits, regardless of the demand distribution. This follows from the fact that nesting allows higher-fare classes to capture leftover capacity from lower-fare blocks.
Nested vs. Partitioned Comparison
Suppose 100 seats, two classes: Economy ($100, mean demand 80) and Business ($300, mean demand 30). Under partitioned allocation with limits (70, 30), if only 50 Economy passengers show up, 20 seats go empty. Under nested allocation with protection level 30, those 20 leftover seats are available to Business if needed—or remain available for last-minute Economy bookings.

Interactive Explorer

The visualizations below illustrate the booking process, protection level computation, and allocation strategy comparison.

The simulator animates the booking process for a single flight. Adjust the parameters to observe how capacity, fare class count, and demand intensity affect revenue and load factor.

Key Insights

  1. The tradeoff is spoilage versus spill. Spoilage is unsold inventory at departure. Spill is turning away a high-fare customer because seats were sold to low-fare passengers. Optimal revenue management balances these two costs.
  2. Protection levels depend on the fare ratio, not absolute fares. Littlewood’s Rule shows that the critical quantity is fL/fHf_L / f_H. Doubling both fares does not change the protection level.
  3. Nesting is always at least as good as partitioning. Nested controls dominate partitioned controls because they allow higher-fare classes to access leftover capacity.
  4. Demand forecasting is the bottleneck. The EMSR heuristic is near-optimal given accurate demand forecasts. In practice, forecast errors—not algorithmic limitations—are the primary source of revenue loss.
  5. The model predicts incremental revenue gains. Within the simulation, yield management produces measurably higher revenue compared to first-come-first-served allocation.

Extensions

The single-leg model presented here is the foundation, but revenue management extends in several directions:

  • Network revenue management. Airlines operate hub-and-spoke networks. A passenger flying A→B→C consumes capacity on two legs. The network problem is exponentially harder and typically solved via LP-based bid-price controls or decomposition methods (Talluri and van Ryzin (2004)).
  • Dynamic pricing. Instead of discrete fare classes with fixed prices, the firm continuously adjusts the price as a function of remaining capacity and time. This merges revenue management with price optimization (Gallego and van Ryzin (1994)). See the dynamic pricing with replenishment topic.
  • Overbooking. Airlines deliberately sell more seats than physical capacity, anticipating cancellations and no-shows. The overbooking level balances denied-boarding costs against the cost of flying with empty seats.
  • Choice-based models. Classical EMSR assumes demand for each class is independent. In reality, a customer denied a low fare may purchase a higher class. Choice-based models (Talluri and van Ryzin (2004)) capture this substitution behavior.
  • Beyond airlines. Revenue management techniques are now standard in hotels, car rentals, cruise lines, broadcasting (ad slots), cloud computing (spot instances), and restaurant reservations.

References

  • Belobaba, P. P. (1987). “Air Travel Demand and Airline Seat Inventory Management.” PhD dissertation, MIT.
  • Belobaba, P. P. (1989). “Application of a Probabilistic Decision Model to Airline Seat Inventory Control.” Operations Research, 37(2), 183–197.
  • Gallego, G. & van Ryzin, G. (1994). “Optimal Dynamic Pricing of Inventories with Stochastic Demand over Finite Horizons.” Management Science, 40(8), 999–1020.
  • Littlewood, K. (1972). “Forecasting and Control of Passenger Bookings.” AGIFORS Symposium Proceedings, vol. 12, pp. 95–117.
  • Phillips, R. L. (2021). Pricing and Revenue Optimization, 2nd ed.. Stanford University Press.
  • Talluri, K. T. & van Ryzin, G. J. (2004). The Theory and Practice of Revenue Management. Springer.