作者:喜乐君 · 品牌:XILEJUN · 2026年6月
*本文以约瑟夫·坎贝尔《千面英雄》的叙事结构,记录一次客户标签计算中"比率陷阱"的发现、挣扎与突破。故事的起点,是一个看似简单的需求——为航司旅客打上"辅营消费倾向"的标签。*
一、问题:被单次飞行绑架的标签
1.1 召唤
那是一个寻常的需求会议。业务方希望在旅客标签体系中增加一个"辅营消费倾向"字段——判断旅客是否愿意为升舱、行李、餐食等附加服务付费。逻辑看起来简单:
辅营消费倾向 = 辅营消费总次数 ÷ 实际飞行次数(近2年)按照直觉,我们设了三档:
- 比率 ≥ 0.5 → 高频辅营
- 比率 0.2 ~ 0.49 → 中频辅营
- 比率 > 0 且 < 0.2 → 偶发辅营
- 比率 = 0 → 无辅营消费
会议室里没有人觉得这有问题。比率——消除分母影响、跨群体可比——不正是数据分析中衡量"倾向"的标准做法吗?
1.2 裂隙
上线后一周,一位业务同事发来一条消息。
"为什么飞了一次、买了一次行李的旅客,被标记为'高频辅营'?"
那是一个瞬间的沉默。
1次飞行 ÷ 1次飞行 × 1次辅营 = 1.0 → 高频。
而一个真实的"高频辅营"旅客——飞行200次、消费120次辅营——比率是 0.6。
前者比后者"更高频"?
标签体系在这一刻开裂了。比率的数学正确,掩盖了业务语义的荒谬。
1.3 诊断
问题不在公式,而在前提。比率作为衡量指标,隐含一个假设:分母足够大,比率才稳定。
统计学中这叫做"大数定律下的比率收敛"。一个只掷过3次硬币的人,"正面率"66%不代表什么;一个掷过1000次的人,正面率52%就足以说明微小的偏向。
但在客户标签分析中,这个前提被悄无声息地违反了:
| 旅客类型 | 飞行次数 | 辅营次数 | 比率 | 标签 | 合理吗? |
|---|---|---|---|---|---|
| 一次性旅客 | 1 | 1 | 1.00 | 高频辅营 | ❌ 极其荒谬 |
| 低频旅客 | 3 | 2 | 0.67 | 高频辅营 | ❌ 样本太小 |
| 中频旅客 | 10 | 6 | 0.60 | 高频辅营 | ⚠️ 勉强可接受 |
| 高频旅客 | 200 | 120 | 0.60 | 高频辅营 | ✅ 真正的高频 |
标签在前三行失效了。不是因为数学错了,而是因为我们忘记了比率需要最小样本量的支撑。
flowchart LR
subgraph small["小样本(不稳定)"]
direction LR
s1["1次飞行<br/>1次辅营<br/>比率=1.00"] --> s2["3次飞行<br/>2次辅营<br/>比率=0.67"]
s2 --> s3["5次飞行<br/>1次辅营<br/>比率=0.20"]
end
subgraph large["大样本(稳定)"]
direction LR
l1["50次飞行<br/>30次辅营<br/>比率=0.60"] --> l2["100次飞行<br/>58次辅营<br/>比率≈0.58"]
l2 --> l3["200次飞行<br/>120次辅营<br/>比率=0.60"]
end
small -->|"比率剧烈波动<br/>⚠️ 统计不可信"| danger[/"陷阱"/]
large -->|"比率趋于收敛<br/>✅ 统计可信赖"| safe[/"信度高"/]二、错误之路:在两个极端之间摇摆
2.1 第一个深渊:纯比率
你可能会说——把阈值调高不就行了?比率 ≥ 0.8 才是高频?
不。一个飞行1次、消费1次的旅客,比率依然是 1.0,无论阈值是多少都拦不住。比率型指标的悖论在于:分母越小,极端值越容易出现。小样本天然放大了偶然性。
而且真实的高频旅客(飞行200次、消费120次)比率只有 0.6——提高阈值会把他们错误地排除在外。扩大一类错误的同时,缩小了另一类。
纯比率之路走不通。这不是阈值的问题,是指标维度的问题。
2.2 第二个深渊:纯次数
"那就只看绝对次数。"有人提议。
飞行100次的旅客辅营10次,飞行1次的旅客辅营1次——前者是后者价值的10倍,逻辑上似乎更合理。
但新的问题立刻浮现:
| 旅客 | 飞行次数 | 辅营次数 | 纯次数标签(阈值 ≥ 5) |
|---|---|---|---|
| 高频低倾向 | 200 | 5 | 高频辅营 ✅ |
| 低频高倾向 | 5 | 5 | 高频辅营 ❓ |
一个飞行200次、只在5次行程中购买辅营的旅客,与一个飞行5次、次次购买辅营的旅客——被归为同一类?前者显然对辅营不感兴趣(2.5%的转化),后者却是忠实消费者(100%转化)。
纯次数只衡量"量",丢掉了"率"——它无法区分"大量飞行中的偶尔消费"和"少量飞行中的密集消费"。这就是为什么 RFM 模型必须有 Frequency(频率),而不仅仅是 Monetary(金额)。
2.3 困境的本质
走完这两条断头路,问题的本质逐渐清晰:
- 比率(Rate)衡量的是倾向强度,但在小样本下不稳定。
- 次数(Count)衡量的是绝对规模,但丢失了倾向信息。
- 两者不是替代关系,而是互补关系。关键不是选哪一个,而是如何让它们协作。
这不是一个技术问题。这是一个概念问题:我们到底想衡量什么?
我们想说的是:"这个旅客有充分的证据表明他偏好辅营消费"。这句话本身同时包含两个要求——证据充分(次数够多),偏好明确(比率够高)。
flowchart TD
problem["如何衡量辅营消费倾向?"]
problem --> path1["路径A:纯比率<br/>辅营次数 ÷ 飞行次数"]
problem --> path2["路径B:纯次数<br/>辅营消费总次数"]
path1 -->|"小样本失效"| fail1["❌ 1飞1辅营 = 1.0<br/>→ 误判为'高频'"]
path2 -->|"丢失倾向"| fail2["❌ 200飞5辅营<br/>→ 混淆'偶尔'与'习惯'"]
fail1 --> insight1["💡 比率衡量倾向强度<br/>但需要大样本支撑"]
fail2 --> insight2["💡 次数衡量绝对规模<br/>但需要比率补充"]
insight1 --> merge["两个指标必须协作"]
insight2 --> merge
merge --> solution["双重门槛方案"]
style problem fill:#4dabf7,color:#fff
style fail1 fill:#ff6b6b,color:#fff
style fail2 fill:#ff6b6b,color:#fff
style merge fill:#9775fa,color:#fff
style solution fill:#51cf66,color:#fff三、修正:双重门槛的诞生
3.1 核心方案
修正后的逻辑如下:
IF [辅营消费总次数] = 0 THEN
'无辅营消费'
ELSEIF [辅营消费总次数]/[实际飞行次数(近2年)] >= 0.5
AND [辅营消费总次数] >= 3 THEN
'高频辅营'
ELSEIF [辅营消费总次数]/[实际飞行次数(近2年)] >= 0.2
AND [辅营消费总次数] >= 2 THEN
'中频辅营'
ELSE
'偶发辅营'
END每个等级需要同时满足两个条件——比率达标(倾向明确)且次数达标(证据充分)。
flowchart TD
start(["旅客记录"])
start --> q0{"辅营消费次数 = 0?"}
q0 -->|"是(~75%)"| r0["🟫 无辅营消费"]
q0 -->|"否"| q1{"比率 ≥ 0.5<br/>且 次数 ≥ 3?"}
q1 -->|"是"| r1["🟢 高频辅营<br/>倾向强+证据足"]
q1 -->|"否"| q2{"比率 ≥ 0.2<br/>且 次数 ≥ 2?"}
q2 -->|"是"| r2["🔵 中频辅营<br/>倾向中等+有重复"]
q2 -->|"否"| r3["🟠 偶发辅营<br/>有消费但未形成模式"]
style start fill:#4dabf7,color:#fff
style q0 fill:#ffd43b,color:#333
style r0 fill:#adb5bd,color:#fff
style q1 fill:#ffd43b,color:#333
style r1 fill:#51cf66,color:#fff
style q2 fill:#ffd43b,color:#333
style r2 fill:#74c0fc,color:#fff
style r3 fill:#ffa94d,color:#fff3.2 设计原则
门槛的取值并非随意,背后有三条原则:
原则一:0次优先短路。 绝大多数旅客(约70-80%)的辅营消费为0。将 [辅营消费总次数]=0 放在最前面判断,不仅是逻辑清晰,更是性能优化——绝大多数记录在第一个条件就被分流,后续计算不做。
原则二:门槛由业务含义决定,而非数据分布。 高频 ≥ 3次、中频 ≥ 2次——这个数字的依据是:
- 1次可能是偶然(随手买了一次行李),不足以证明"习惯"。
- 2次开始有重复性,可以谨慎归类为中频。
- 3次及以上形成消费模式,配合高比率才可判定为高频。
如果数据分布中辅营消费次数普遍更高,阈值可以上调。但原则始终是:门槛必须区分"偶然"和"习惯"。
原则三:比率与次数同向判断。 高频要求比率高(≥0.5)且次数多(≥3),两者都是"高"要求。不存在"比率高但次数低就降级"或"次数高但比率低就升级"的交叉补偿——这恰恰是双重门槛优于加权评分的地方:清晰、可解释。
3.3 效果验证
修正后的逻辑,重新审视那些曾被错误标记的旅客:
| 场景 | 飞行 | 辅营 | 比率 | 原逻辑 | 新逻辑 | 变更原因 |
|---|---|---|---|---|---|---|
| 1飞1辅营 | 1 | 1 | 1.00 | 高频 ❌ | 偶发 ✅ | 辅营次数<2,证据不足 |
| 3飞2辅营 | 3 | 2 | 0.67 | 高频 ❌ | 中频 ✅ | 辅营次数<3,不满足高频门槛 |
| 5飞1辅营 | 5 | 1 | 0.20 | 中频 ❌ | 偶发 ✅ | 辅营次数<2,且比率刚触线 |
| 10飞6辅营 | 10 | 6 | 0.60 | 高频 ✅ | 高频 ✅ | 比率和次数双达标 |
| 10飞3辅营 | 10 | 3 | 0.30 | 中频 ✅ | 中频 ✅ | 比率和次数双达标 |
| 200飞120辅营 | 200 | 120 | 0.60 | 高频 ✅ | 高频 ✅ | 大样本下的真正高频 |
| 200飞5辅营 | 200 | 5 | 0.03 | 偶发 ✅ | 偶发 ✅ | 比率本身就很低 |
修正后,无辅营消费的"0次优先短路"也带来巨大性能收益:绝大多数记录仅经过一次 IF 判断即完成计算。
3.4 Tableau 实现
// 辅营消费倾向:比率 + 绝对次数双重门槛
IF [auxiliary_purchase_cnt_24m] = 0 THEN
'无辅营消费'
ELSEIF [auxiliary_purchase_cnt_24m] / ([domestic_flight_cnt_12m] + [international_flight_cnt_12m]) >= 0.5
AND [auxiliary_purchase_cnt_24m] >= 3 THEN
'高频辅营'
ELSEIF [auxiliary_purchase_cnt_24m] / ([domestic_flight_cnt_12m] + [international_flight_cnt_12m]) >= 0.2
AND [auxiliary_purchase_cnt_24m] >= 2 THEN
'中频辅营'
ELSE
'偶发辅营'
END注意:分母使用的是近12个月飞行次数,而非24个月的辅营消费窗口。如果辅营消费窗口是24个月,分母也应使用24个月的飞行次数保持窗口一致。此处留予实现时确认。
四、反思:从一把尺子到一个工具箱
4.1 普适模式
辅营消费倾向的修正,揭示了一个在客户标签分析中反复出现的模式:
| 场景 | 比率指标 | 绝对量指标 | 统一解法 |
|---|---|---|---|
| 辅营消费倾向 | 辅营次数/飞行次数 | 辅营消费总次数 | 比率 + 次数双重门槛 |
| 退票倾向 | 退票次数/飞行次数 | 退票总次数 | 同理 |
| 投诉倾向 | 投诉次数/飞行次数 | 投诉总次数 | 同理 |
| 升舱转化率 | 升舱次数/飞行次数 | 升舱总次数 | 同理 |
| 溢价偏好 | 溢价行程/总行程 | 溢价总金额 | 同理 |
凡是"倾向/偏好/习惯"类标签,都会面临小样本下的比率陷阱。解法统一:比率反映倾向,次数验证证据。
quadrantChart
title 比率与次数的互补:旅客辅营消费四象限
x-axis "辅营消费次数少" --> "辅营消费次数多"
y-axis "辅营比率低" --> "辅营比率高"
quadrant-1 "真正高频(可信赖)"
quadrant-2 "小样本陷阱(比率误导)"
quadrant-3 "真正低频(稳定判定)"
quadrant-4 "大样本低频(兴趣淡薄)"
"飞行200次,辅营120次": [0.85, 0.85]
"飞行10次,辅营6次": [0.72, 0.78]
"飞行1次,辅营1次": [0.15, 0.92]
"飞行3次,辅营2次": [0.2, 0.75]
"飞行200次,辅营5次": [0.85, 0.12]
"飞行10次,辅营0次": [0.72, 0.08]
"飞行2次,辅营0次": [0.15, 0.08]
"飞行5次,辅营1次": [0.25, 0.25]4.2 三条启发
第一,比率不是万能的。 比率解决的是"跨群体可比"的问题,但它假设分母足够大。在客户分析中,大量旅客的飞行次数在个位数,比率在这个区间几乎失去统计意义。数据分析师的第一课,恰恰是学会质疑比率的局限性。
第二,标签的可解释性比数学精确性更重要。 一个标签如果业务人员看不懂、解释不了,再精确的公式也是无效的。双重门槛的优雅之处在于:任何一个读过规则的人,都能立刻理解为什么一个旅客被归为某一类——"因为他飞得多,而且买得多。"不需要统计学术语。
第三,性能是标签设计的一等公民。 将0次放在第一个判断条件,不是代码技巧,而是对数据分布的尊重。当70%以上的记录在第一个条件就被分流时,你为整个Dashboard节省了大量不必要的计算。在Tableau这样的内存计算引擎中,这意味着更快的加载、更流畅的交互。好的设计不只在逻辑上正确,也在工程上正确。
4.3 未竟之路
双重门槛仍然不是终点。下一步值得探索的方向:
- 贝叶斯平滑(Bayesian Smoothing): 对小样本的比率进行"向全局均值收缩",使极端值收敛到更合理的估计。这是统计学上对小样本比率的标准解法,但业务可解释性较低。
- 置信区间下限排序: 用 Wilson 分数区间下限替代原始比率,天然惩罚小样本。Reddit 的评论排序便是基于此原理。适用于"非此即彼"的排行场景。
- 动态门槛: 根据数据分布(如分位数)自动设定次数门槛,而非硬编码。但代价是更新时标签可能漂移,破坏可比性。
这些是觉醒之路的下一程。但双重门槛已经解决了当下最紧迫的问题——标签不再被一次飞行绑架。
尾声
故事的结尾并不惊天动地。一段 IF-ELSEIF-END,几十行代码。但每一步都曾经走错过,每一步的错误都教了一些东西。
这就是客户标签分析的真相:没有一把尺子丈量一切,只有一组工具,在具体的场景中不断校准。
当你在自己的分析中再次遇到比率陷阱——一个飞行次数为个位数的客户,被极端的转化率推上"高频"的宝座——希望这篇文章能提醒你:
比率告诉你方向,绝对量告诉你这个方向有多少底气。两者缺一不可。
这也是《千面英雄》的核心启示:英雄出发时只带着一件武器(比率),在旅途中发现自己需要另一件(次数),归来时两手都握着力量。而真正的战利品,不是那个 IF 语句——是知道下一次遇到类似问题时,该如何思考。
*"唯有知识让我们免于平庸。"* —— XILEJUN
标签:客户标签分析 · 比率陷阱 · 小样本 · 双重门槛 · 辅营消费 · 数据思维
相关文档:
3_旅客衍生标签Tableau计算逻辑.md—— Tableau 实现2.1_旅客衍生标签字段清单.md—— 标签定义
作者:喜乐君 · v1.0 · 2026-06-04
No comments yet