← 全部作品

[ 数据分析案例 · 独立项目 · 2026 ]

转机该留多久?

我把 2025 年 700 万个美国真实航班拼成 484 万次枢纽转机,逐一核对实际有没有误机,最后落成一条订票规则和 TripMate 里的风险提示。

试一试 · 全国风险曲线2025 · 41 个枢纽
转机时长45min
误机10.6%约每 9 次转机误 1 次
其中约 1.3 个百分点来自前段航班取消,留多久都救不回来。

30 秒看懂

问题
航司会卖 30–45 分钟的转机。这种转机多常失败?误机的代价有多大?留多久平均最快到?
我做了什么
从美国交通部的原始文件搭数据集,按真实结果给 484 万次转机打标签,检验规律,在模型没见过的月份上验证,最后做成期望成本决策。
结论
误机率从 30 分钟的 15.9% 降到 60 分钟的 7.6%。一次误机中位要多等 5.5–8.4 小时,所以几乎每个枢纽都是 45–75 分钟最快;晚上落地要再多留一些。
技能
Python · pandas · scikit-learn · 数据管道 · 假设检验 · 跨时间验证 · 概率校准 · 决策分析 · 产品思维
角色
独立完成: 从提问到建议
数据
美国交通部准点数据 7,001,619 个航班 · 2025
工具
Python · pandas · scikit-learn
交付
风险曲线 · 模型 · 订票规则 · 风险提示
次转机打了标签
4.84M
30 分钟转机的误机率
15.9%
未见月份上的 AUC
0.69
分钟:平均最快的转机时长
45-75
01

问题

订票网站很乐意卖你 35 分钟的转机,却不会告诉你成功率。

航司公布最短转机时间,订票引擎只要高于它就照卖。但对旅客、也对我做的出行助手 TripMate 来说,真正有用的问题是:这次转机失败的概率多大?失败了会怎样?把误机算进去,留多久平均最快?我把它拆成三个数据能回答的问题。

风险多大?

按转机时长、枢纽、航司、时段和季节看误机率,带置信区间。

代价多大?

误机后,按真实时刻表找下一班飞往同一目的地的航班,算要多等多久。

所以呢?

让期望耗时最短的转机时长,以及产品在订票时能展示的风险提示。

02

搭建数据集

世上没有现成的“误机数据集”,我用真实发生的结果搭了一个。

美国交通部的文件记录了大航司每个国内航班的计划和实际时间,但不记录谁转了机。所以我构造真实可订的行程:每个飞进航司枢纽的航班,配上该航司 30–180 分钟后出发的下一班,每个进港航班随机抽三种转机时长。每一对都用两个航班的真实结果打标签,同一场暴雨让两班都晚点的情况会被如实记录,而不是被假设掉。

  1. 017.0M载入航班12 个月度文件,保留 18 列;实际时间 = 计划时间 + 延误
  2. 0241枢纽6 家主线航司在自家枢纽(AA、DL、UA、WN、AS、B6)
  3. 034.84M构造转机merge_asof 配对,每个进港航班随机 3 种 30–180 分钟转机
  4. 04277k标为误机总体 5.73% · 95% 置信区间 5.71–5.75%
打标签规则基于真实结果

误机 = 进港航班取消或备降 或 出港航班在进港落地后不到 20 分钟就推出

45 分钟转机 · 进港晚 10 分钟赶上
进港出港
还剩 35 分钟
45 分钟转机 · 进港晚 40 分钟误机
进港出港
只剩 5 分钟
45 分钟转机 · 两班都晚 40 分钟赶上
进港出港
延误相关反而救了你

20 分钟登机口到登机口

03

数据告诉我们

第一个小时里风险下降最快,之后趋平;几点落地和留多久一样重要。

风险曲线484 万次转机
0%5%10%15%30507090110130150170
  • 全部误机
  • 仅因进港晚点
  • 取消造成的下限
按计划转机时长(分钟)的误机比例。阴影为 95% 置信区间,样本量大所以很窄。
A

从 30 分钟加到 60 分钟,风险减半(15.9% → 7.6%);再翻倍到 120 分钟只多降 3.8 个百分点。大约 1.2–1.3 个百分点始终降不下去:那是进港航班取消,留多久都没用。

落地时段45–75 分钟转机
00
03
4.806
5.609
5.812
8.415
11.518
13.921
按枢纽当地落地时间的误机率,45–75 分钟转机。
B

延误会在一天里层层累积。早上 7 点落地误机约 4.8%;晚上 9 点以后是 13–15%,同样的转机时长,风险高了近三倍。

季节45–75 分钟转机
8.01
7.22
7.23
7.64
8.75
10.66
11.47
8.98
6.29
6.710
8.511
9.112
各月误机率(%),45–75 分钟转机。
C

6–7 月最差(10.6–11.4%):夏季雷暴叠加满排航班。9 月最平稳(6.2%)。

延误是相关的真实 vs. 打乱
0%5%10%15%30507090110130150170
  • 真实结果
  • 假如延误互相独立
按转机时长的误机率:真实配对 vs. 把出港延误随机打乱后的同一批配对。
D

进港晚点时,出港往往也晚:同一场天气、同一组机组。把这层关联打断,误机率会从真实的 5.73% 变成 6.66%:常见的“两个延误率相乘”的算法会把风险高估约 16%。用真实配对结果打标签,这个功夫值得花。

为什么会误机27.7 万次误机
78%进港晚点造成误机时中位晚点 124 分钟
22%取消 / 备降

延误分钟按上报原因

前序航班晚到42%
航司自身(机组、维修)39%
空管系统14%
天气5%
E

天气很少是直接原因。前序航班的连锁延误和航司运营占了五分之四的延误分钟,这正是越晚落地越危险的原因。

04

能提前预测吗?

模型有帮助;但诚实地测,订票时能拿到的信息有天花板。

如果 TripMate 要展示一个风险数字,它必须是校准过的(标 10% 的转机,大约就该有 10% 失败),而且要在模型没见过的月份上测。我用订票时就知道的信息训练梯度提升模型:转机时长、落地时段、枢纽、航司、出发地、星期几、距离;并和两个产品经理用表格就能做的基线对比。

  1. 训练1–8 月322 万次转机
  2. 校准9 月保序回归
  3. 测试10–12 月122 万 · 从没见过
成绩单测试集 · 10–12 月
方法AUC平均精度Brier
只看转机时长0.6570.0960.0504
枢纽 × 航司 × 时长查表0.6640.1040.0503
梯度提升(已校准)0.6900.1230.0499
AUC 和平均精度越高越好;Brier 越低越好。测试月份的基础误机率:5.43%。
校准10 个分位组
0%0%5%5%10%10%15%15%predictedobserved
每个点是测试集的十分之一,落在对角线上才算诚实。点整体高出约 1.5 个百分点,见下方说明。
预测靠什么置换重要性
转机时长52%
落地时段26%
从哪里飞来10%
枢纽4%
星期几4%
航司3%
进港航程2%
把每个特征随机打乱后,模型损失的信号占比(对数损失增加量)。

提升不大,但是真的

AUC 0.690,查表是 0.664。转机时长和落地时段贡献约八成信号;剩下的风险来自当天的天气和运营,订票时没人知道。

展示档位,不展示小数

有这个天花板,产品就该展示低 / 中 / 高三档风险并附上百分比,而不是一个看似精确的分数。

我发现的一个问题

用平稳的 9 月校准,模型会把 10–12 月低估约 1.5 个百分点。早期版本把月份当特征,效果更差。解决办法:用 2023–2025 三年数据训练,让它学到季节性。

05

决策

一次误机的代价以小时计,所以最快的转机不是最短的那个。

对每一次误机,我在真实时刻表里找当天或次日从该枢纽飞往同一目的地的下一班。给出两个边界:任意航司(乐观)和同一主线航司(大多数机票的现实情况)。

5.5-8.4
小时:额外等待中位数
42-51%
的误机要等到第二天
误机后要多等多久基于真实时刻表
任意航司6271848
同一航司201959
  • < 1 h
  • 1–3 h
  • 3–6 h
  • > 6 h / 过夜
误机后到下一班同目的地航班的额外等待,各档占比。
转机环节的期望耗时美国航空 · 华盛顿 DCA · 下午
0601201804575105135165180最快
  • 同一航司
  • 任意航司
  • 转机时长本身
把误机概率算进去后,在转机环节的期望分钟数(下午落地)。

期望耗时 = 转机时长 + 误机概率 × 误机后的等待

美国航空在 DCA 的 45 分钟转机有 16% 会误机,期望耗时 118–151 分钟。订 60–75 分钟平均反而更快(115–140),也安心得多。时间价值按每小时 25 美元还是 100 美元算,结论几乎不变,因为误机的代价本身主要就是时间。

最繁忙的 16 个枢纽按转机时长分段的误机率
枢纽30–5960–8990–119最快过夜
ATLDL10.96.14.345 min29-30%
DFWAA15.29.97.345-75 min41-43%
CLTAA11.87.15.160 min40-42%
DENUA12.36.64.945-75 min34-57%
DENWN9.35.03.345-60 min35-50%
LASWN8.14.52.645-60 min41-49%
ORDUA10.16.44.460 min33-54%
SEAAS13.76.64.260 min47-59%
BWIWN8.04.53.345 min51-53%
PHXWN8.35.03.345 min44-52%
DALWN8.65.13.645 min53-53%
MDWWN8.54.83.245 min58-58%
MSPDL11.16.34.160 min56-58%
IAHUA10.25.73.945 min46-51%
MIAAA14.48.45.760-75 min45-46%
PHXAA12.57.95.360-75 min37-59%
各转机时长段的误机率(%);最快 = 期望耗时最短的转机时长(两种改签边界的区间);过夜 = 误机后要等到第二天的比例。
06

建议

给旅客三条规则,给 TripMate 一个功能。

01

订 45–75 分钟

几乎每个枢纽平均都最快。别订 30 分钟:六次里就有一次赶不上。

02

越晚越要多留

下午 5 点后落地、或者 6–7 月出行?多留 15–30 分钟,风险是平时的两到三倍。

03

当心末班

大约一半的误机意味着过夜。如果是当天最后一班转机,就订长一点的。

TripMate · 转机检查原型
BOS → DCA → CLT
45 min 高风险 · 16%

60–75 分钟的转机误机率 9–12%,平均还更快。

来源:美国交通部 2025 准点数据 · 下午落地

模型输出一张校准后的误机概率查找表:航司 × 枢纽 × 落地时段 × 转机时长(`risk_table.json`),小到可以直接放进前端,不需要模型服务器。在 TripMate 里,它就是每个转机行程旁边的风险提示。

07

局限与下一步

01

只有一年的季节

加入 2023–2024 年数据,让模型学会月份效应,而不是低估冬季。

02

只看主线航司

支线合作航司用自己的代码申报,转到它们的航班不在范围内。下一步:把合作航班映射回销售航司。

03

固定的 20 分钟

登机口之间的时间因航站楼而异。下一步:按枢纽航站楼图调整,并区分是否托运行李。

04

改签是近似的

我用下一班直飞同一目的地来近似。真实改签可能经别的枢纽(更快),也可能遇上满座(更慢)。

数据:美国交通部运输统计局(BTS)Reporting Carrier On-Time Performance,2025 年 1–12 月。本页所有数字都由我自己的代码从原始文件算出;代码可应要求提供。

SAY HI.

想看代码,或者听我讲讲怎么把这个分析推到产品团队面前?