统计学方法 → 决策工具箱
归属:字节跳动 · 招聘 AB / 监控方法侧 — 支撑简历「招聘策略 AB 实验」。入口 字节。不是独立「人力量化产品」主题页。
开实验前算样本量;跑完看 z/p;漏斗给 Wilson CI;周期用 Kaplan–Meier;评分看校准与 Brier。
Demo · 报告 GitHub1. 架构图
flowchart TB
SC[synth.build_scenarios] --> AB[proportion.two_proportion_z]
SC --> SS[sample_size_two_prop]
SC --> FN[funnel.funnel_rates + wilson_ci]
SC --> KM[survival.kaplan_meier]
SC --> CAL[calibration_bins + brier]
AB & SS & FN & KM & CAL --> REP[report.render]
REP --> HTML[docs/index.html]
flowchart LR
subgraph before [开跑前]
B1[基线率 p1]
B2[目标率 p2]
B3[α / 功效]
B1 & B2 & B3 --> N[每组样本量 n]
end
subgraph after [跑完后]
A1[成功数 / n]
A2[z 与 p]
A3[lift]
end
N -.->|实验执行| A1
2. API 调用
| 函数 | 场景 | 返回 |
|---|---|---|
two_proportion_z(sa,na,sb,nb) | 触达文案 / 分层跟进 AB | rate_a/b, diff, lift, z, p_value |
sample_size_two_prop(p1,p2,α,power) | 实验设计 | n_per_group |
funnel_rates([{name,n}…]) | 招聘漏斗 | 每步 rate + Wilson CI |
wilson_ci(k,n) | 单比例区间 | (lo, hi) |
kaplan_meier(times, events) | 入职周期 | 生存曲线点 |
median_survival(curve) | 一半人已入职的时间 | 天 or None |
calibration_bins(scores, y) | 初筛分 vs 通过 | 分档 mean_score / rate / gap |
brier_score(scores, y) | 概率预测质量 | 标量(越小越好) |
与其它板块的调用关系
# 人才评估报告里的回复率检验 ≈ two_proportion_z # 招聘分析分档通过率 ≈ calibration_bins(分数归一化后) # Hiring Agent 开实验前可先调 sample_size_two_prop
3. 技术栈梳理
| 项 | 选择 |
|---|---|
| 依赖 | 仅 Python 标准库(math / random / unittest) |
| 正态分位数 | Acklam 有理逼近(norm_ppf) |
| 交付 | HTML 报告 + unittest |
| 刻意不用 | scipy / statsmodels(降低复现门槛) |
4. Best practices
- 先算 n 再开跑;样本不够时报告写「效力不足」而不是「没差异」。
- 漏斗同时看点估计与 CI,避免「掉了 2 个人」过度解读。
- 校准 gap 持续为负/正,说明分数系统性偏高/偏低。
- 与业务约定:显著 + 最小可感知提升(如回复率 +5pp)才推全。
5. Demo 路径
- 打开报告 KPI:AB 结论、lift、每组样本量、中位周期。
- 漏斗表指一格 CI,解释为何不能只看转化率数字。
- 校准表:≥60 分档通过率应高于 0–39。
python3 -m unittest discover -s tests -v(9 passed)。