Skip to the content

The warehouse

Where every number comes from, and how it was checked.

Every scheduled flight of the reporting carriers from January 2015 to July 2026 went through named quarantine rules (flagged and counted, nothing deleted) into a dbt warehouse of 18 models and 206 tests. The metric layer defines each metric once over the flights and once over the shipped mart and compares them at 4 grains.

The quarantine report

RuleWhat it catchesRowsShareExcluded from
duplicate keya second row with the same carrier, date, flight number, origin, destination and scheduled departure40.00%everything
actual without scheduledan actual departure, arrival or elapsed time with no scheduled time to measure it against20.00%everything
impossible timea negative taxi time, or an air time or an actual or scheduled elapsed time at or below zero or longer than the longest a domestic flight can take310.00%everything
elapsed mismatchactual elapsed time that differs from taxi out plus air time plus taxi in by more than the tolerance150.00%everything
status conflicta row flagged both cancelled and diverted, which cannot both have happened to one flight130.00%everything
missing actuala flight neither cancelled nor diverted that reports no departure delay, no arrival delay, no actual elapsed time or no air time9740.00%everything
cause mismatchreported delay causes that do not sum to the arrival delay within the tolerance1190.00%the cause shares in chapter 6
tail missingno tail number on the row338,7150.46%the rotations of chapter 4
tail formata tail number that is not a valid FAA registration (N, a digit 1 to 9, at most two trailing letters) even after a missing leading N is restored, such as an airline's own fleet number1,142,8591.54%the registry join; the rotations keep the row, since the value still names one aircraft
revisiona row that a later download of the same month changed (the later kept, the change counted)00.00%nothing; the earlier version is the one that is replaced

Source: BTS Reporting Carrier On-Time Performance (real); population: every row of every monthly file in the window; as of 2026-10-01.

The quarantine report by carrier and month

Rows flagged by each rule, by carrier and month; a row can trip more than one rule

Loading the chart

Source: BTS Reporting Carrier On-Time Performance (real), the warehouse's mart_quarantine.

The metric layer, reconciled

3,501 cells compared across 4 grains, 0 disagreements.

MetricOver the flightsOver the mart
scheduled flightscount(*)sum(scheduled)
cancellation rateavg(cancelled::int)sum(cancelled) / sum(scheduled)
completion factor1 - avg(cancelled::int)1 - sum(cancelled) / sum(scheduled)
diversion rateavg(diverted::int)sum(diverted) / sum(scheduled)
on time rateavg((arr_delay < 15)::int) filter (where not cancelled and not diverted)sum(on_time) / sum(flown)
mean arrival delayavg(arr_delay) filter (where not cancelled and not diverted)sum(arr_delay_sum) / sum(flown)
median arrival delayquantile_disc(least(greatest(arr_delay, -60), 300), 0.5) filter (where not cancelled and not diverted and arr_delay is not null)median_from_histogram
mean scheduled blockavg(crs_elapsed) filter (where not cancelled and not diverted)sum(crs_elapsed_sum) / sum(flown)
mean actual blockavg(actual_elapsed) filter (where not cancelled and not diverted)sum(actual_elapsed_sum) / sum(flown)
mean paddingavg(padding)sum(padding_sum) / sum(padding_flights)
padding sharesum(padding) / sum(crs_elapsed) filter (where padding is not null)sum(padding_sum) / sum(padding_block_sum)
reported late aircraft sharesum(cause_late_aircraft) filter (where cause_ok) / sum(cause_late_aircraft + cause_carrier + cause_nas + cause_weather + cause_security) filter (where cause_ok)sum(cause_late_aircraft_sum) / (sum(cause_late_aircraft_sum) + sum(cause_carrier_sum) + sum(cause_nas_sum) + sum(cause_weather_sum) + sum(cause_security_sum))
reported carrier sharesum(cause_carrier) filter (where cause_ok) / sum(cause_late_aircraft + cause_carrier + cause_nas + cause_weather + cause_security) filter (where cause_ok)sum(cause_carrier_sum) / (sum(cause_late_aircraft_sum) + sum(cause_carrier_sum) + sum(cause_nas_sum) + sum(cause_weather_sum) + sum(cause_security_sum))
reported nas sharesum(cause_nas) filter (where cause_ok) / sum(cause_late_aircraft + cause_carrier + cause_nas + cause_weather + cause_security) filter (where cause_ok)sum(cause_nas_sum) / (sum(cause_late_aircraft_sum) + sum(cause_carrier_sum) + sum(cause_nas_sum) + sum(cause_weather_sum) + sum(cause_security_sum))
reported weather sharesum(cause_weather) filter (where cause_ok) / sum(cause_late_aircraft + cause_carrier + cause_nas + cause_weather + cause_security) filter (where cause_ok)sum(cause_weather_sum) / (sum(cause_late_aircraft_sum) + sum(cause_carrier_sum) + sum(cause_nas_sum) + sum(cause_weather_sum) + sum(cause_security_sum))
reported security sharesum(cause_security) filter (where cause_ok) / sum(cause_late_aircraft + cause_carrier + cause_nas + cause_weather + cause_security) filter (where cause_ok)sum(cause_security_sum) / (sum(cause_late_aircraft_sum) + sum(cause_carrier_sum) + sum(cause_nas_sum) + sum(cause_weather_sum) + sum(cause_security_sum))
inherited sharesum(inherited_minutes) / sum(arr_delay_pos)sum(inherited_minutes_sum) / sum(arr_delay_pos_sum)

Source: BTS Reporting Carrier On-Time Performance (real); population: every flight in the window, through the metric layer; as of 2026-10-01.

The recovery study

Every estimator, run on simulated networks where the truth is known, 12 conditions with 20 seeds each, before it touched a real flight.

Padding error, by condition

Largest in magnitude under confounding none, propagation strong, noise high

0.00 min0.50 min1.00 minPadding error (absolute)conf. moderate, prop.strong, noise high1.14 minconf. moderate, prop.strong, noise low0.51 minconf. moderate, prop. weak,noise high1.14 minconf. moderate, prop. weak,noise low0.51 minconf. none, prop. strong,noise high1.14 minconf. none, prop. strong,noise low0.51 minconf. none, prop. weak,noise high1.14 minconf. none, prop. weak,noise low0.51 minconf. strong, prop. strong,noise high1.13 minconf. strong, prop. strong,noise low0.50 minconf. strong, prop. weak,noise high1.13 minconf. strong, prop. weak,noise low0.50 min

Source: simulated airline network with known truth; population: the recovery study, every condition and seed; seeds: 20; as of 2026-10-01.

Changepoint date error, by condition

Largest in magnitude under confounding moderate, propagation strong, noise high

0.0 days0.5 days1.0 days1.5 days2.0 daysChangepoint date error (absolute)conf. moderate, prop.strong, noise high1.7 daysconf. moderate, prop.strong, noise low1.7 daysconf. moderate, prop. weak,noise high1.7 daysconf. moderate, prop. weak,noise low1.7 daysconf. none, prop. strong,noise high1.7 daysconf. none, prop. strong,noise low1.7 daysconf. none, prop. weak,noise high1.7 daysconf. none, prop. weak,noise low1.7 daysconf. strong, prop. strong,noise high1.7 daysconf. strong, prop. strong,noise low1.7 daysconf. strong, prop. weak,noise high1.7 daysconf. strong, prop. weak,noise low1.7 days

Source: simulated airline network with known truth; population: the recovery study, every condition and seed; seeds: 20; as of 2026-10-01.

Rho bias, by condition

By condition

0.0000.0050.0100.0150.020Rho bias (absolute)conf. moderate, prop.strong, noise high0.016conf. moderate, prop.strong, noise low0.011conf. moderate, prop. weak,noise high0.014conf. moderate, prop. weak,noise low0.009conf. none, prop. strong,noise high0.017conf. none, prop. strong,noise low0.012conf. none, prop. weak,noise high0.013conf. none, prop. weak,noise low0.009conf. strong, prop. strong,noise high0.015conf. strong, prop. strong,noise low0.010conf. strong, prop. weak,noise high0.014conf. strong, prop. weak,noise low0.010

Source: simulated airline network with known truth; population: the recovery study, every condition and seed; seeds: 20; as of 2026-10-01.

Rho coverage, by condition

Largest in magnitude under confounding none, propagation weak, noise low

0%5%10%15%20%25%30%35%Rho coverage (absolute)conf. moderate, prop.strong, noise high0%conf. moderate, prop.strong, noise low10%conf. moderate, prop. weak,noise high5%conf. moderate, prop. weak,noise low30%conf. none, prop. strong,noise high0%conf. none, prop. strong,noise low5%conf. none, prop. weak,noise high5%conf. none, prop. weak,noise low35%conf. strong, prop. strong,noise high0%conf. strong, prop. strong,noise low10%conf. strong, prop. weak,noise high5%conf. strong, prop. weak,noise low25%

Source: simulated airline network with known truth; population: the recovery study, every condition and seed; seeds: 20; as of 2026-10-01.

Inherited share error, by condition

By condition

0.0 pts0.5 pts1.0 pts1.5 pts2.0 ptsInherited share error (absolute)conf. moderate, prop.strong, noise high1.7 ptsconf. moderate, prop.strong, noise low1.7 ptsconf. moderate, prop. weak,noise high0.7 ptsconf. moderate, prop. weak,noise low1.0 ptsconf. none, prop. strong,noise high1.7 ptsconf. none, prop. strong,noise low1.7 ptsconf. none, prop. weak,noise high0.8 ptsconf. none, prop. weak,noise low1.0 ptsconf. strong, prop. strong,noise high1.6 ptsconf. strong, prop. strong,noise low1.7 ptsconf. strong, prop. weak,noise high0.7 ptsconf. strong, prop. weak,noise low0.9 pts

Source: simulated airline network with known truth; population: the recovery study, every condition and seed; seeds: 20; as of 2026-10-01.

Raw rank correlation, by condition

Largest in magnitude under confounding none, propagation strong, noise high

0.000.200.400.600.80Raw rank correlation (absolute)conf. moderate, prop.strong, noise high0.16conf. moderate, prop.strong, noise low0.10conf. moderate, prop. weak,noise high0.19conf. moderate, prop. weak,noise low0.11conf. none, prop. strong,noise high0.75conf. none, prop. strong,noise low0.75conf. none, prop. weak,noise high0.75conf. none, prop. weak,noise low0.75conf. strong, prop. strong,noise high0.05conf. strong, prop. strong,noise low0.10conf. strong, prop. weak,noise high0.02conf. strong, prop. weak,noise low0.09

Source: simulated airline network with known truth; population: the recovery study, every condition and seed; seeds: 20; as of 2026-10-01.

Adjusted rank correlation, by condition

Largest in magnitude under confounding none, propagation weak, noise high

0.000.200.400.600.801.00Adjusted rank correlation (absolute)conf. moderate, prop.strong, noise high0.93conf. moderate, prop.strong, noise low0.95conf. moderate, prop. weak,noise high0.96conf. moderate, prop. weak,noise low0.97conf. none, prop. strong,noise high0.97conf. none, prop. strong,noise low0.97conf. none, prop. weak,noise high0.98conf. none, prop. weak,noise low0.98conf. strong, prop. strong,noise high0.91conf. strong, prop. strong,noise low0.94conf. strong, prop. weak,noise high0.94conf. strong, prop. weak,noise low0.96

Source: simulated airline network with known truth; population: the recovery study, every condition and seed; seeds: 20; as of 2026-10-01.

Bunching false positives, by condition

Largest in magnitude under confounding moderate, propagation strong, noise high

0.0%20.0%40.0%60.0%80.0%100.0%Bunching false positives (absolute)conf. moderate, prop.strong, noise high0.0%conf. moderate, prop.strong, noise low0.0%conf. moderate, prop. weak,noise high0.0%conf. moderate, prop. weak,noise low0.0%conf. none, prop. strong,noise high0.0%conf. none, prop. strong,noise low0.0%conf. none, prop. weak,noise high0.0%conf. none, prop. weak,noise low0.0%conf. strong, prop. strong,noise high0.0%conf. strong, prop. strong,noise low0.0%conf. strong, prop. weak,noise high0.0%conf. strong, prop. weak,noise low0.0%

Source: simulated airline network with known truth; population: the recovery study, every condition and seed; seeds: 20; as of 2026-10-01.

Bunching power, by condition

Largest in magnitude under confounding moderate, propagation strong, noise high

0%20%40%60%80%100%Bunching power (absolute)conf. moderate, prop.strong, noise high100%conf. moderate, prop.strong, noise low100%conf. moderate, prop. weak,noise high100%conf. moderate, prop. weak,noise low100%conf. none, prop. strong,noise high100%conf. none, prop. strong,noise low100%conf. none, prop. weak,noise high100%conf. none, prop. weak,noise low100%conf. strong, prop. strong,noise high100%conf. strong, prop. strong,noise low100%conf. strong, prop. weak,noise high100%conf. strong, prop. weak,noise low100%

Source: simulated airline network with known truth; population: the recovery study, every condition and seed; seeds: 20; as of 2026-10-01.

Weather share error, by condition

Largest in magnitude under confounding strong, propagation strong, noise low

0.0 pts0.1 pts0.2 pts0.3 ptsWeather share error (absolute)conf. moderate, prop.strong, noise high0.0 ptsconf. moderate, prop.strong, noise low0.1 ptsconf. moderate, prop. weak,noise high0.2 ptsconf. moderate, prop. weak,noise low0.0 ptsconf. none, prop. strong,noise high0.0 ptsconf. none, prop. strong,noise low0.2 ptsconf. none, prop. weak,noise high0.2 ptsconf. none, prop. weak,noise low0.1 ptsconf. strong, prop. strong,noise high0.0 ptsconf. strong, prop. strong,noise low0.3 ptsconf. strong, prop. weak,noise high0.2 ptsconf. strong, prop. weak,noise low0.1 pts

Source: simulated airline network with known truth; population: the recovery study, every condition and seed; seeds: 20; as of 2026-10-01.

Weather coverage, by condition

Largest in magnitude under confounding moderate, propagation weak, noise low

0%20%40%60%80%100%Weather coverage (absolute)conf. moderate, prop.strong, noise high95%conf. moderate, prop.strong, noise low95%conf. moderate, prop. weak,noise high95%conf. moderate, prop. weak,noise low100%conf. none, prop. strong,noise high95%conf. none, prop. strong,noise low100%conf. none, prop. weak,noise high95%conf. none, prop. weak,noise low100%conf. strong, prop. strong,noise high95%conf. strong, prop. strong,noise low100%conf. strong, prop. weak,noise high95%conf. strong, prop. weak,noise low100%

Source: simulated airline network with known truth; population: the recovery study, every condition and seed; seeds: 20; as of 2026-10-01.

Detector precision, by condition

Largest in magnitude under confounding moderate, propagation weak, noise low

0%10%20%30%40%50%Detector precision (absolute)conf. moderate, prop.strong, noise high44%conf. moderate, prop.strong, noise low45%conf. moderate, prop. weak,noise high45%conf. moderate, prop. weak,noise low48%conf. none, prop. strong,noise high43%conf. none, prop. strong,noise low45%conf. none, prop. weak,noise high44%conf. none, prop. weak,noise low47%conf. strong, prop. strong,noise high43%conf. strong, prop. strong,noise low45%conf. strong, prop. weak,noise high44%conf. strong, prop. weak,noise low47%

Source: simulated airline network with known truth; population: the recovery study, every condition and seed; seeds: 20; as of 2026-10-01.

The data dictionary

Published fileBytes
briefing.json13,679
charts/causes.json4,032
charts/decision.json59,807
charts/definition.json4,565
charts/inherited.json2,851
charts/line.json14,811
charts/meltdowns.json14,744
charts/padding.json18,148
charts/ranking.json6,519
hub_curves.json62,738
manifest.json333,454
marts/mart_airport_day.parquet12,126,757
marts/mart_carrier_day.parquet635,782
marts/mart_carrier_month.parquet132,213
marts/mart_delay_histogram.parquet821,283
marts/mart_hour_profile.parquet247,142
marts/mart_inherited_month.parquet11,284
marts/mart_leg_position.parquet14,938
marts/mart_quarantine.parquet12,513
marts/mart_route_month.parquet17,750,284
marts/rotation_samples.parquet74,290
marts/rotation_worst_days.parquet1,648
recorded_session.json382,570
story.json35,172

Every column of every exported table is named in the CSV bundle's dictionary, and every definition is in docs/definitions.md.

Exports and the BI companions

What the ops director would push back on

A warehouse can agree with itself and still be wrong about the world. The reconcile proves that two expressions over two grains give the same number; it cannot prove the carriers reported their times correctly. That is why the quarantine rules flag impossible times, causes that do not add up and duplicate rows rather than fixing them, and why every flagged row is counted here by carrier and month.