Monte Carlo simulation of airline overbooking

By Mira Khare, Melanie Huynh, Arni Sturluson, Cory Simon

Airlines overbook flights to maximize profits.

Consider a flight with seats for 100 passengers.

If the airline allows only up to 100 reservations for the flight, each customer will be guarenteed a seat on the plane. However, several seats will likely be empty because a fraction of the customers that reserve a seat will likely miss the flight. For each empty seat, the airline looses revenue.

If the airline allows greater than 100 reservations– i.e. if the airline overbooks the flight– it is more likely that enough customers show up to fill the plane so that the airline receives revenue from each seat on the airplane. However, if more than 100 customers that reserved a flight show up, then (i) customers bumped from the flight will be angry and not fly with that airline again and (ii) the airline must pay out vouchers to incentivize volunteers to take a different flight. This is costly.

Clearly, there is a delicate balance of how much to overbook. Don’t overbook at all: all customers are happy, but flights operate below full capacity and we lose out on revenue. Overbook too much: flights are likely operating near full capacity so we receive revenue from each seat, but customers bumped from the flight are angry and costly vouchers must be paid to volunteers.

We wrote a code in the Julia programming language to simulate the process of customers showing up to flights and identify the optimal amount to overbook.

As input, we need the probability that a given customer shows up to the flight after making a reservation.

The function show_up simulates the stochastic process of a customer showing up for the flight after making a reservation.

The function simulate_flight simulates the stochastic process of nb_tickets_sold reservations made for a flight and returns the number of customers that show up.

The revenue received from a flight will depend on the number of reservations made (nb_tickets_sold), number of seats on the plane (nb_seats), the probability that a given customer shows up (probability_show), the revenue received per seat (revenue_per_seat), and the cost of a voucher to incentivize volunteers to take a different flight when the plane is overbooked, (voucher_cost). The latter may include the implicit cost of losing customers to different airlines after angering them. The function simulate_net_revenuesimulates the stochastic process and returns the net revenue from the flight.

For a \$350 flight on a plane of 100 seats, where vouchers are twice the cost of the ticket:

We now simulate the process of different amounts of overbooking to identify the optimal amount of overbooking. Since this is a stochastic process, we run 10,000 simulations to simulate 10,000 flights so we can calculate the average net revenue for each amount of overbooking and gauge the variance among flights.

We depict the results using a box plot for each amount of overbooking:

The box plot shows that, if we do not overbook (0 on the x-axis), we on average receive less net revenue than if we do overbook. If we overbook too much, e.g. sell 15 tickets beyond capacity, we see that the average net revenue is less than if we overbook because we are paying out costly vouchers. The optimal amount of overbooking with these parameters is shown by the box plot to be 5-7 tickets beyond capacity. Of course, this result depends on the probability that a customer will show up, the cost of the flight and voucher, and number of seats on the plane.

Note: airlines hire analysts to do exactly this. See this NYT article.

This code was developed by Mira Khare, Melanie Huynh, Arni Sturluson, and two high school students for the Summer Experience in Science and Engineering for Youth (SESEY) at Oregon State University.