核心概念与数学基础:阈值、分层、分位数、百分位与累积分布函数
在开始编写 SQL 实现阈值分层试验之前,必须透彻理解支撑这一方法的五个核心概念。它们不仅是数学基础,更是后续 SQL 代码中 CASE WHEN 逻辑、NTILE 函数以及分组聚合的底层依据。
2.1 阈值(Threshold)
阈值是划分数据的分界点。在分层试验中,阈值将连续指标(如用户消费金额、页面停留时长)切割为离散区间,每个区间对应一个“层”。
- 单侧阈值:如“大于 1000 元”为高价值用户。
- 双侧阈值:如“500 元 ≤ 金额 < 2000 元”为中价值层。
- 多阈值序列:一组有序数值将整体数据划分为多个连续区间。
SQL 映射:阈值直接对应
CASE WHEN value <= threshold1 THEN '层1' WHEN value <= threshold2 THEN '层2' ... END 中的边界值。
2.2 分层(Stratification)
分层是将总体按某个特征划分为互不重叠的子集(层),使得层内差异小、层间差异大。分层的目的在于:
- 降低抽样误差:每层独立抽样,保证各层在样本中的比例与总体一致。
- 提升试验灵敏度:在 AB 测试中,分层后组间对比更易检测出真实差异。
- 保证代表性:避免极端值集中在某一试验组。
| 分层方式 | 划分依据 | 典型场景 |
|---|---|---|
| 等宽分层 | 固定区间宽度 | 年龄分组(0-18, 18-35, 35-60) |
| 等频分层 | 每组样本量相等 | 用户消费能力分档(各 20%) |
| 自定义阈值分层 | 业务经验指定边界 | RFM 模型中的高/中/低价值客户 |
2.3 分位数(Quantile)
分位数是将数据按数值大小排序后,将数据划分为若干等份的切割点。最常用的分位数包括:
- 四分位数(Quartiles):Q1(25%)、Q2(中位数,50%)、Q3(75%)。
- 十分位数(Deciles):10 个等分点,每份 10%。
- 百分位数(Percentiles):100 个等分点,每份 1%。
SQL 实现提示:使用窗口函数
NTILE(n) 可将数据均匀分为 n 组,每组即为一个分位数区间。例如 NTILE(4) OVER (ORDER BY amount) 返回 1~4,对应四个四分位组。
2.4 百分位(Percentile)
百分位是分位数的特例,表示某个数值在全体数据中所处的位置百分比。第 p 百分位意味着有 p% 的数据小于等于该值。
百分位与阈值的转换关系:
| 百分位 | 含义 | 作为阈值时的分层效果 |
|---|---|---|
| 第 25 百分位 | 25% 的数据 ≤ 此值 | 区分低价值与中低价值用户 |
| 第 50 百分位(中位数) | 50% 的数据 ≤ 此值 | 将用户等分为高低两组 |
| 第 90 百分位 | 90% 的数据 ≤ 此值 | 识别头部 10% 高价值用户 |
2.5 累积分布函数(CDF)
累积分布函数描述了随机变量小于或等于某个值的概率。对于经验数据,经验 CDF 直接由排序后的样本计算得出:
F(x) = (小于等于 x 的样本数) / (总样本数)
CDF 与百分位互为逆运算:
- 给定数值 x,CDF 返回其百分位位置。
- 给定百分位 p,CDF 的逆函数返回对应的阈值。
常见误区:百分位是位置指标,阈值是数值指标。例如“第 80 百分位”是一个位置概念,而“80% 分位值”才是具体的数值阈值。在 SQL 中,
PERCENTILE_CONT(0.8) 返回的是阈值,而非位置。
2.6 概念关系总览
下图展示了五个核心概念之间的逻辑关系与数据流向:
2.7 数学关系速查表
| 概念 | 数学表示 | SQL 实现 |
|---|---|---|
| 阈值 | \( t_1, t_2, ..., t_{k-1} \) | CASE WHEN ... 中的常量 |
| 分位数 | \( Q(p) = \inf\{x: F(x) \ge p\} \) | PERCENTILE_CONT(p) |
| 百分位 | \( p = F(x) \) | CUME_DIST() OVER(...) |
| CDF | \( F(x) = P(X \le x) \) | COUNT(*) FILTER(WHERE ...) / COUNT(*) |
| 分层 | \( S_i = \{x: t_{i-1} \le x < t_i\} \) | NTILE(n) OVER(...) 或 CASE WHEN |