Airline Economics · Network planning

Hub banks

How an airline times its hub in waves of arrivals and departures, and how many connections those waves create.

Air Canada and WestJet at Toronto, Montréal, Vancouver and Calgary, from one weekday's published schedule. Each block is one flight: arrivals stack above the line, departures below. The shaded bands are the banks this page detects in the schedule. Click a flight to see where it connects.

45 min
3 h 00
Domestic Transborder (US) International Detected bank

Loading schedules…

How it works

Why airlines bank. A connecting passenger needs an inbound flight to land before an outbound one leaves, with enough time to change planes but not so much that the trip stops being attractive. If an airline brings n flights from different cities into the hub within a short window and sends n flights out shortly afterwards, every arrival can feed every departure except the one returning to where it came from: up to n × (n − 1) connections. Connections grow with the square of the flights in a bank. One bank of 20 arrivals and 20 departures can create 380 connections; the same 40 flights split into two banks of 10 and 10 create only 180. That is why hub carriers pack their schedules into waves.

What banks cost. Aircraft wait on the ground for the rest of the bank to arrive, so each plane flies fewer hours a day. The airport needs enough gates, stands, ground crews, security and customs officers for the peak, and many of them sit idle between waves. Runways and taxiways get congested during peaks, and a late inbound flight either holds its outbound connections or strands passengers, so delays spread through the network. Some carriers have de-peaked hubs into a rolling schedule, spreading flights evenly to improve aircraft, gate and staff use at the price of fewer and longer connections. American Airlines de-peaked Chicago O'Hare and Dallas/Fort Worth in 2002 and Delta de-peaked Atlanta in 2005; several of these hubs later went back to banks. The line above each chart shows where a hub sits between the two.

Connections. An arrival at time a connects to a departure at time d when MCT ≤ d − a ≤ max, where MCT is the minimum connecting time and max the longest acceptable wait (defaults 45 and 180 minutes, set above), and the departure doesn't go back to the arrival's origin. Connections past midnight count, since the schedule repeats every day. Connections per arrival is the total number of feasible connections divided by the number of arrivals. O&D pairs counts the distinct one-way origin–destination pairs that at least one connection links through the hub (Winnipeg → Toronto → London and London → Toronto → Winnipeg count as two).

Banked or rolling. Banking is about short connections, so the page counts quick connections, those between the minimum connecting time and one hour more (45 to 105 minutes by default), and compares them with what the same arrivals would get if the day's departures were spread evenly between the first and the last one: ratio = quick connections ÷ Σarrivals D × overlap([a + MCT, a + MCT + 60], departure day) ÷ length of departure day, where D is the number of departures. Both sides ignore the no-return rule and midnight. A ratio near 1 means departures are timed no better than chance. The page calls a hub banked from 1.5, partly banked from 1.2 and rolling below; these thresholds are my own rule of thumb, not an industry standard.

Bank detection. Arrivals and departures are counted in 15-minute buckets and smoothed over 45 minutes (weights 1-2-1). A wave is a run of buckets at least 1.5 times the baseline rate (runs one bucket apart are merged), kept only if it holds at least 4 flights and clearly more than the baseline would put there: at least 3 standard deviations above the Poisson expectation. The baseline starts as the day's average rate per bucket and is then recomputed from the buckets outside the waves found, so that big banks don't hide smaller ones. Each arrival wave is paired with the nearest departure wave whose centre comes 20 to 150 minutes later; a pair is a bank. A bank's width runs from its first arrival to its last departure, and its size is arrivals plus departures. Waves left unpaired are drawn in grey: typically the first departures of the morning, flown by aircraft that spent the night at the hub, and the last arrivals at night. The heatmap counts connections by the wave the arrival and the departure belong to; the outlined diagonal cells are connections within the same bank.

Data. Scheduled departures and arrivals at each hub for one weekday, from the airport departure and arrival boards of AeroDataBox (fetched —). Only flights operated under the airline's own flight numbers are kept: Air Canada includes Air Canada Rouge and Air Canada Express (Jazz, PAL Airlines), WestJet includes WestJet Encore. Codeshares and cargo flights are left out. Domestic, transborder and international come from the country of the other airport. The script that builds the data is in the site's repository (scripts/hubbanks/fetch.mjs).

Limitations. One weekday, as scheduled on that date; weekends, other seasons and later schedule changes will differ. A single minimum connecting time is applied to every connection, while real ones at these airports are longer for flights to the US (US preclearance) and for international flights, so the defaults flatter transborder connections. Any departure in the window counts, even when the routing makes no sense (Calgary to Winnipeg via Toronto), and nothing checks whether the airline actually sells the connection. Partner flights (United, Lufthansa, Delta and others) feed these hubs too but aren't counted. Bank detection is a heuristic and can split or merge waves at a hub that isn't clearly banked.

More on hub design in Network Planning 101, Chapter 04: The Schedule (Banks and waves). This is a personal project and isn't affiliated with any airline.