https://www.udacity.com/course/ab-testing-business-analysts--ud979

🎯课程基础信息

  1. 受众定位:面向拥有线上产品(网站 / 移动应用)的企业,聚焦 A/B 测试的设计 + 分析全流程,不涉及工程代码实现。

  2. 核心模块:三大核心内容 —— 实验设计、指标选择、结果分析,形成 “变 - 指 - 设 - 采 - 析 - 决” 的完整闭环。

  3. 讲师背景

    • Diane Tang:计算机博士,Google 12 年 + 经验,负责实验平台架构、指标设计、数据决策。
    • Carrie Grimes Bostock:统计学博士,Google 12 年 + 经验,主导假设检验、置信区间、功效分析等统计环节。
    • Caroline Buckey:优达学城开发人员,前硅谷软件工程师,负责案例拆解与实践落地。
  4. 课程结构:共 5 课,从宏观到微观层层深入

    课程 核心内容
    第一课 A/B 测试定义、适用边界、完整闭环示例
    第二课 实验伦理(用户隐私、知情同意、最小风险)
    第三课 指标体系搭建(OMEC 框架、代理指标选择)
    第四课 实验设计(分流单元、随机化、分层实验)
    第五课 结果分析(置信区间、统计 / 业务显著、决策矩阵)
  5. 先修要求:无需 A/B 测试或编程经验,具备基础统计学知识(正态分布、均值、标准差)即可。

🎯核心认知

官方定义

A/B 测试是在线场景下的假设检验方法,通过设置对照组(原有产品 / 功能)和实验组(新版产品 / 功能),随机分流用户,量化两组指标差异,科学判断新版本是否更优。

本质

  • 本质是局部优化工具:用 “爬山比喻”,A/B 测试能帮你爬上当前山的顶峰(局部最优),但无法帮你判断是否爬错了山(全局战略选择)。
  • 核心原则:单一变量,确保实验组与对照组仅存在一个差异点,否则无法归因。

核心价值

迭代优化

  • 数据决策替代猜想,避免主观臆测。
  • 实现产品迭代式优化,小步快跑、快速验证。

🎯A/B 测试适用边界

(核心:爬山比喻)

  1. 能做的事:局部最优解的探索(可量化、有明确基准
    • UI / 功能迭代:按钮颜色、文案、页面布局、新功能上线(如 Google 测试 41 种蓝色阴影)
    • 算法优化:推荐排序、搜索结果排序(如 Amazon 个性化推荐、LinkedIn Feed 排序)
    • 性能优化:页面加载速度(如 Amazon 证实 100ms 延迟导致收入下降 1%)
    • 核心特征:用户可感知、指标可量化、实验周期可控
  2. 不能做的事:全局战略选择(无基准、难量化、长周期
    • 0-1 创新 / 战略选择:全新产品形态、赛道切换(无现有版本做对照)
    • 长周期目标:低频高客单业务(如公寓租赁、汽车销售)的复购率、口碑推荐(实验周期远超商业耐心)
    • 情感 / 品牌类变更:品牌 Logo 更换(存在改变厌恶症新奇效应,短期数据失真)
    • 缺失品类检测:判断网站是否缺少用户需要的商品(实验只能观测已上架商品,无法检测 “未存在” 的品类)
    • 无法随机分流的场景:Freemium 转 Premium 的付费升级(用户需主动选择,无法强制随机分组)

经典案例

  • Google:测试 41 种蓝色阴影的按钮点击率,验证微观优化的有效性。
  • Amazon:个性化推荐算法测试,显著提升用户购买率;页面延迟测试,量化性能对收入的影响。
  • LinkedIn:测试 Feed 流 “新文章 / 新增联系人” 优先级,平衡内容消费与关系链增长。

替代方法

(A/B 测试不适用时)

方法 作用 特点
日志分析 回溯用户行为,生成实验假设 被动采集、低成本、大数据量
问卷 / 焦点小组 挖掘用户动机、需求 定性数据、补充定量结果
UX 研究 / 人为评价 评估新体验的用户感受 适合创新型、情感类变更

补充:

  • 准实验方法:断点回归、双重差分(DID),适用于无法随机分流的场景。

🎯指标选择

选对指标是实验成功的前提

  1. 指标分类

    • 终极指标(Goal Metric):业务核心目标,如课程完课率、商品购买率,但周期长、反馈慢,不适合直接作为实验指标。
    • 代理指标(Proxy Metric):与终极指标强相关短期可观测指标,如 “点击概率(CTP)”,是实验的核心观测对象。
  2. 核心指标:点击概率(CTP)vs 点击率(CTR)

指标 计算公式 适用场景
点击率(CTR) 总点击数 / 总页面访问数 衡量 UI 可用性(如按钮是否易点击)
点击概率(CTP) 至少点击 1 次的独立访客数 / 总独立访客数 衡量用户覆盖度(如多少人进入漏斗第二层
  • 关键区别:CTR 包含重复点击噪音,CTP 为二项分布数据(点击 = 成功;未点击 = 失败),更适合统计推断。

🎯统计基础

二项分布

(Binomial Distribution)

二项分布适用条件

  • 二元结果:只有成功 / 失败两种可能(如点击 / 未点击)。
  • 事件独立:一次实验结果不影响其他实验(如不同用户的点击行为独立)。
  • 同概率性:实验期间成功概率恒定(排除时间、渠道等干扰因素)。
  • 常见误区:不满足独立性(如同用户连续搜索、购物车多商品结账),事件不独立,需提升分析粒度(用户级 / 订单级)。

参数

  • 均值 = p(成功概率)
  • 标准偏差 = p(1p)n\sqrt{\frac{p (1-p )}{n} }

中心极限定理

(CLT)

  • 当样本量 n 足够大(通常 n≥30),二项分布可近似为正态分布,简化置信区间计算。

标准误差

(SE)

量化抽样波动,即 “不同样本之间的差异程度”

  • 概率估计p^=XN\hat{p} =\frac{X}{N}
  • 比例形式公式:SE=p^(1p^)nSE=\sqrt{\frac{\hat{p} (1-\hat{p} )}{n} }
  • 核心规律:样本量越大,SE 越小;p^\hat{p}越接近 0 或 1,SE 越小。

置信区间

(CI)

描述真实参数的可能范围

  • 定义:95% 置信区间表示重复抽样 100 次,有 95 次的区间会包含真实值(不是 “真实值落在区间的概率为 95%”)
  • 计算公式:95%CI=p^±z×SECI=\hat{p}±z×SE

公式分解

**核心公式:**百分之多少CI=p^±z×SECI=\hat{p}±z×SE

  • 概率估计p^=XN\hat{p} =\frac{X}{N}
  • 标准误差SE=p^(1p^)nSE=\sqrt{\frac{\hat{p} (1-\hat{p} )}{n} }
  • 误差幅度m=z×SEm=z×SE
  • 置信区间[p^m,p^+m][\hat{p} −m,\hat{p} +m]
  • 常用z值
    • 95%置信度:z = 1.96
    • 99%置信度:z = 2.58
  • 正态近似条件N×p^>5N×\hat{p} >5N×(1p^)>5N×(1−\hat{p} )>5

案例计算

  • 已知:n=1000,点击访客数 = 100
  • p^\hat{p}为样本点击概率,n 为样本量
  • p^\hat{p}=0.1
  • 计算 SE:0.1×0.91000\sqrt{\frac{0.1×0.9}{1000} }≈0.0095
  • 计算 95% CI:0.1±1.96×0.0095≈[0.081,0.119]
  • 结论:真实点击概率有 95% 可能落在 8.1%~11.9% 之间
  • 含义:重复抽样时,95% 的区间会包含真实点击概率;区间外的数值属于 “令人吃惊的结果”。

常用临界 Z 值

置信水平 单尾 α 双尾 α 单尾 Z 临界值 双尾 Z 临界值
90% 0.10 0.05 1.28 1.645
95% 0.05 0.025 1.645 1.96
99% 0.01 0.005 2.33 2.576

假设检验

统计显著性判定,判断差异是否显著

核心流程

  1. 建立假设
    • 零假设(H₀):对照组与实验组指标无差异,即PexpP_{exp}=PcontP_{cont}
    • 备择假设(Hₐ):两组指标有差异(双尾:PexpPcontP_{exp}\ne P_{cont} ;单尾:PexpP_{exp}PcontP_{cont}PexpP_{exp}PcontP_{cont}
    • 下面的例子是双尾
  2. 计算 p-value:在 H₀成立的前提下,出现当前样本差异或更极端差异的概率。
  3. ???计算两组指标差异的置信区间,若区间不包含 0,则拒绝零假设,认为差异具有统计显著性
  4. 判定结果:若 p-value < 0.05(显著性水平 α),则拒绝 H₀,认为差异具有统计显著性。

等价判定:95% 置信区间不包含 0 ↔ p-value < 0.05

统计显著性 vs 实际显著性

  • 确定显著性水平
    • 统计显著性:通常设定 α=0.05,即95%置信度。
    • 实际显著性:从业务角度判断的最小有意义变化。本例设定为点击概率提升 2% (dmind_{min}=0.02)。
维度 统计显著性 实际显著性
定义 差异由随机波动导致的概率 < 5% 差异达到业务决策阈值(如点击概率提升 2%)
判定方法 置信区间是否包含 0 差异是否≥预设的最小可探测效果(dmind_{min}
决策价值 排除偶然性 决定是否值得发布新版本
  • 核心结论:只有同时满足统计显著 + 实际显著,才建议发布新版本。

🎯最小样本量

平衡功效与成本

核心概念

  • α(显著性水平):错误拒绝零假设的概率(通常0.05)
  • β:零假设为假时未能拒绝的概率
  • 统计功效/敏感性(1-β):检测到真实差异的能力(通常0.8)
  • dmind_{min}:最小可探测效果(实际显著性边界)

样本量影响因素

因素 变化 对样本量的影响
基准转化率 点击概率接近0.5 越接近 0.5,样本量需求越大
最小可探测效果(dmind_{min} 增加实际显著性界限 越大,样本量需求越小
显著性水平(1-α) 提高置信度 越高(如 99%→95%),样本量需求越大
统计功效(1-β) 提高敏感性 越高(如 90%→80%),样本量需求越大

计算工具

  1. 计算工具:可通过在线计算器、编程语言内置库实现,输入参数包括基准转化率、dmind_{min}、α、1-β。
  2. 案例:页面平均转化率为 10%,想提升​2%,α=0.05,1-β=0.8 → 每组至少需要 3623 个页面浏览量。
  3. 基准转化率(绝对/相对)

image-20260113223219988

  • 绝对提升:直接差值,单位是百分点(pp)
    • 提升 2 个百分点
    • p1= 10% + 2% = 12% = 0.12
  • 相对提升:比例,单位是百分比(%)
    • 提升 2%
    • p1= p0 × (1+2%) = 10% × 1.02 =10.2%=0.102

🎯结果决策

图示来说明。假设实际显著性边界 dmind_{min}=2%

核心思路:我们需要看置信区间落在哪个位置,判断标准有两条线:

  • 零线(0):判断统计显著性
  • 实际显著性边界(±dmind_{min}:判断是否有商业价值
1
2
3
4
    负面          无意义区        正面有意义
←─────────┼─────────┼─────────┼─────────→
-2% 0 +2%
-dmin +dmin

六种情况图解

核心问题就两个

  1. 置信区间是否跨越0?(决定统计显著性)
  2. 置信区间是否超过 dmin?(决定实际显著性)

情况1:发布 ✅

1
2
3
                          [=======]
────┼─────────┼─────────┼─────────→
-2% 0 +2%

置信区间完全在 +2% 右边 → 统计显著 + 实际显著 → 发布!

情况2:不发布(中性结果)

1
2
3
           [=====]
────┼─────────┼─────────┼─────────→
-2% 0 +2%

置信区间包含0,且整体在 ±2% 之间 → 没有变化 → 不发布

情况3:不发布(太小不值得)

1
2
3
                [====]
────┼─────────┼─────────┼─────────→
-2% 0 +2%

置信区间 > 0(统计显著),但 < 2%(无实际意义)→ 变化太小,不值得发布

情况4:重新测试(功效不足)

1
2
3
    [==================]
────┼─────────┼─────────┼─────────→
-2% 0 +2%

置信区间太宽,横跨 -2% 到 +2% → 可能增加10%也可能减少10%,无法判断 → 增大样本量重测

情况5:重新测试(不确定)

1
2
3
            [==========]
────┼─────────┼─────────┼─────────→
-2% 0 +2%

置信区间跨越0,但部分超过 +2% → 可能有效也可能无效 → 增大样本量重测

情况6:不发布(负面影响)

1
2
3
[=======]
────┼─────────┼─────────┼─────────→
-2% 0 +2%

置信区间完全在负数区域 → 变更有害 → 绝对不发布

置信区间位置 含义 决策
完全 > +dmind_{min} 确定有正面且有意义的变化 ✅ 发布
完全 < -dmind_{min} 确定有负面且严重的变化 ❌ 不发布
在0附近,宽度小 确定没什么变化 ❌ 不发布
跨越太多区域 不确定,数据不够 🔄 重测

🎯实验全流程

总结:

  1. 明确变更点:确定要测试的产品 / 功能改动(单变量优先)。
  2. 选择指标:确定代理指标与终极指标,设定实际显著性阈值。
  3. 计算样本量:根据基准转化率、dmind_{min}、α、1-β 确定实验规模。
  4. 随机分流:选择合适的分流单元(user_id/cookie/device),确保组间均衡。
  5. 运行实验:采集数据,避免中途偷看结果(p-hacking 风险)。
  6. 分析结果:计算置信区间,判断统计 / 实际显著性,做出决策。

🎯补充知识

历史渊源

A/B 测试的方法论源于农业随机区组试验(Fisher 20 世纪 20 年代确立),后应用于医学临床试验(随机对照试验 RCT),最终在互联网时代因大数据优势普及,成为 Google、Amazon、Netflix 等大厂的标准配置。

实验伦理 Checklist

  1. 是否侵犯用户隐私(GDPR/CCPA 合规)?
  2. 是否对用户造成伤害(如功能故障、信息泄露)?
  3. 是否需要提前终止实验(如出现严重负向影响)?

核心金句

  1. A/B 测试能帮你爬上当前山峰的顶峰,但无法告诉你该爬哪座山。
  2. 统计显著性回答 “差异是否真实”,实际显著性回答 “差异是否值钱”。
  3. 样本量与最小可探测效果的平方成反比 —— 想探测更小的差异,需要指数级增加样本。
  4. 数据驱动不是数据独裁,当实验结果不确定时,需结合业务战略决策。

真实工作中

数据分析师在真实工作中分析AB实验计算流程

**业务:**某电商测试红色“立即购买”按钮(B组)vs原蓝色按钮(A组),目标提升购物车转化率。

实验数据(各10万用户,7天)

1
2
3
A组(蓝色):成功下单1800,转化率1.80%
B组(红色):成功下单2184,转化率2.184%
相对提升:21.3% = (2.184%-1.80%)/1.80%

数据清洗(第1小时)

SQL查询:SELECT user_id, group, add_to_cart, purchase FROM ab_test WHERE date>='2026-01-06' AND user_id NOT IN (SELECT user_id FROM fraud_list)

  • 剔除5%机器人流量,样本剩A:95000,B:95200
  • 检查分桶:χ2χ²检验p=0.87(流量分配均匀)
  • 基线校验:A/B点击率无差异(p=0.42>0.05)

核心统计计算(Excel/Python,第2小时)

Excel操作

1
2
3
4
选中A列(0/1转化数据)、B列 → 数据 → 数据分析 → t检验:两样本不等方差
结果:p值=0.00012(双尾),显著性通过
置信区间公式:=CONFIDENCE.T(0.05,STDEV.P(A1:A95000)/SQRT(95000))*2 → ±0.12%
最终:B提升21.3%,95%CI [13.2%, 29.4%](下限>0,可信)

Python验证

1
2
3
4
5
pythonfrom scipy.stats import ttest_ind
a = df[df.group=='A']['purchase'] # 1800 True,其余False
b = df[df.group=='B']['purchase']
t_stat, p = ttest_ind(a, b, equal_var=False) # p=0.00012
print("显著!上线B按钮")

守门员指标检查

1
2
3
客单价:A $85.2 vs B $84.9,p=0.67(无恶化)
D1留存:p=0.23(稳定)
新客转化:提升25.1%(p=0.002,一致性好)

多重检验校正:5指标,α=0.05/5=0.01,主指标p=0.00012仍显著。

最终报告与决策(第3小时)

1
2
3
🟢 结论:红色按钮转化率提升21.3% (p<0.001, CI[13%,29%])
🟡 风险:监控D7留存
🟢 决策:1月15日全量上线,预计月增收12万USD

真实结果:上线后稳定提升19%,年化ROI 800%。这个案例90%数据岗都这样干,重点是清洗+双检验+业务阈值。

解释原因

为啥选择卡方检验,方法选择要解释原因

卡方检验在AB实验中常用于二分类计数数据(如“购买/未购买”),因为它直接检验观测频数表与期望频数的偏离,比t检验更稳健,不需假设正态分布。

记忆口诀计数用卡方,均值用t检验

90%电商AB实验直接卡方一键解决,因为指标天然是频数表,无需纠结正态性、方差齐性等t检验前置条件。

假设检验类型

假设检验类型,真实工作中怎么选择

真实工作中AB实验假设检验有单侧/双侧参数/非参数等类型,数据分析师按数据类型+样本量+业务假设选方法。

检验类型分类

1. 方向性:单侧 vs 双侧

1
2
双侧(90%场景):H1: μ1 ≠ μ2(红色按钮可能更好也可能更差)
单侧(10%场景):H1: μ1 > μ2(新支付流程一定比旧快)

为什么双侧为主:商业决策需同时看收益+风险,美团/阿里标准做法。

2. 参数检验 vs 非参数检验

1
2
参数检验(t/Z/卡方):假设正态/二项分布,功效最高
非参数(Mann-Whitney U):分布未知,牺牲功效换鲁棒性

真实工作选择流程(决策树)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Step1: 数据类型?
├── 计数比例(点击率/转化率)→ 卡方/Z检验
├── 连续变量(客单价/时长)→ t检验
└── 排序/等级数据 → Wilcoxon秩和检验

Step2: 样本量?
├── n>1000 → Z检验(精确)
├── 30<n<1000 → t检验
└── n<30 → 非参数或增加样本

Step3: 方差?
├── 已知(历史基线)→ Z检验
└── 未知 → t检验(Welch变种处理不等方差)

Step4: 业务假设?
├── "绝对比旧方案好" → 单侧
└── "有差异就行" → 双侧

电商场景全覆盖表

指标类型 示例 检验方法 Excel公式 Python函数
转化率 1.8%→2.18% 卡方/Z 数据透视→卡方 chi2_contingency
点击率 12.3%→13.1% 卡方/Z 同上 proportions_ztest
客单价 ¥85→¥88 t检验 T.TEST(2,2) ttest_ind
停留时长 45s→48s t检验 同上 ttest_ind
NPS评分 7.2→7.5 Wilcoxon 不支持 mannwhitneyu
分布形状 UV值分布 Kolmogorov-Smirnov 不支持 ks_2samp

特殊场景选择

高方差指标(如订单金额):用对数变换后t检验,或Bootstrap置信区间

1
2
textdf['log_amount'] = np.log1p(df['amount'])
ttest_ind(a_log, b_log)

多臂实验(A/B/C三组):ANOVA首选,再事后t检验

1
2
textfrom statsmodels.stats.anova import anova_lm
anova_lm(df, 'value', 'group')

时间序列(D1/D7留存):CUPED降方差,或分层t检验

工单选择先看指标类型,再看样本量,最后看分布。90%电商场景卡方/t检验覆盖,复杂场景用Bootstrap最稳(无分布假设)。

🎯字幕稿解读

“逐句级”精读,把文件里所有时间轴、所有口语化表达、所有隐含细节全部拆成可检索的条目。
阅读方式:

  • 左侧是“原字幕逐句”→ 右侧是“翻译/拆解/补充/易忽略点”。
  • 如果同一句话里出现 ≥2 个可拆信息,用 ‖ 分隔。
  • 所有括号内文字是我额外补的“课外知识点”或“考试易考辨析”。

文件 1 课程简介

1 00:00:01,010 –> 00:00:02,750
大家好 欢迎来到 A/B 测试
→ 标准开场白,无实质信息,可忽略。

2 00:00:02,750 –> 00:00:06,730
本课中 我们将讨论如何为建有网站或移动应用的企业运行试验或 A/B 测试
→ 受众限定:已有线上产品(Web or App);不面向线下业务。‖ “运行试验”=设计+分析,≠代码实现。

3 00:00:06,730 –> 00:00:10,280
A/B 测试可以通过尝试可能的改变寻找用户更喜欢的方式
→ 关键词“可能的改变”=迭代式优化,非从 0 到 1 的创新。

4 00:00:10,280 –> 00:00:14,910
帮助你科学地确定如何优化网站或移动应用
→ “科学地”=对照+随机+统计显著,后续会反复出现。

5 00:00:14,910 –> 00:00:17,860
使用 A/B 测试意味着你可以根据数据做出决定
→ 对立面:HiPPO(Highest Paid Person’s Opinion)——直接点名“薪酬最高人员的意见”是反面教材。

6 00:00:17,860 –> 00:00:19,551
而不是依赖猜想或臆测
→ 再次强调“数据 > 直觉”。

7 00:00:19,551 –> 00:00:24,380
我们将从头到尾地了解这个过程
→ 课程输出:完整闭环,不是碎片技巧。

8 00:00:24,380 –> 00:00:27,160
从一开始确定你要测试的变更到得出结论的整个过程
→ 流程 6 字诀:变-指-设-采-析-决。

9 00:00:27,160 –> 00:00:29,840
另一方面 我们不会关注如何实施你的 A/B 测试框架
→ 边界声明:不教工程代码(如 Airbnb 的 PlanOut、Google 的 Zanzibar)。

10 00:00:29,840 –> 00:00:32,340
本课程会讲授如何设计任务、选择指标并分析结果
→ 三大核心模块:设计、指标、分析。

11 00:00:32,340 –> 00:00:35,060
听起来十分不错 但是 在我们开始之前我们何不花点时间介绍一下我们自己?
→ 过渡句,提示接下来是讲师背书。

12 00:00:35,060 –> 00:00:36,990
好的 我是 Diane Tang
→ Diane 出场。

13 00:00:36,990 –> 00:00:39,590
计算机博士 在 Google 工作了 12 年多
→ 博士 title + 12 年 = 可信度;后续她负责“工程落地”视角。

14 00:00:39,590 –> 00:00:42,090
我的工作涉及实验的各个方面
→ 暗示她跨域:平台、指标、分析、决策,全部踩过坑。

15 00:00:42,090 –> 00:00:46,230
审查潜在的基础架构、设计指标和 dashboard
→ 潜在基础架构=实验平台性能、分流稳定性、数据漏损。

16 00:00:46,230 –> 00:00:46,880
运行分析实验
→ 她也会亲手跑 SQL/R/Python,不是纯管理。

17 00:00:46,880 –> 00:00:50,400
以及用以推动数据驱动决策的处理环境
→ “处理环境”=Google 内部实时实验看板(Data Studio 前身)。

18 00:00:50,400 –> 00:00:51,650
我叫 Carrie Grimes Bostock 统计学博士
→ Carrie 出场,统计防线。

19 00:00:51,650 –> 00:00:56,640
在 Google 工作近12年 涉及各种不同领域
→ “不同领域”=搜索、广告、Chrome、Android,暗示方法通用。

20 00:00:56,640 –> 00:00:59,790
在如何得出 A/B 试验的结论方面我将给大家提出统计学方面的意见
→ 她负责 p-value、置信区间、多重检验、功效分析。

21 00:00:59,790 –> 00:01:02,700
我是 Caroline Buckey
→ Caroline 出场,负责“让你练手”。

22 00:00:59,790 –> 00:01:06,800
优达学城的开发人员 在此之前我是硅谷的软件工程师
→ 桥梁角色:把 Google 内部方法拆成外部可复现的练习。

23 00:01:06,800 –> 00:01:09,380
我将通过各种示例研究所有细节并确保你能够将自学的内容运用于实践
→ 承诺:每个概念配案例 + 可运行作业(虽然课程里不会给你代码仓库,但会给伪代码/公式)。


文件 2 课程模式

1 00:00:00,370 –> 00:00:02,020
本课程分为五课
→ 给出宏观目录,后续每课对应一个文件簇。

2 00:00:02,020 –> 00:00:05,280
第一课中 我们会大概介绍什么是 A/B 测试以及测试可用和不可用的情况
→ 第一课 = 你现在正在看的 8 个文件。

3 00:00:05,280 –> 00:00:07,250
我们将一起从头到尾地了解 A/B 测试的示例
→ 承诺:第一课就会跑一遍“小闭环”,降低焦虑。

4 00:00:07,250 –> 00:00:10,100
以便于你可以看到整个过程是怎样的
→ 目的:先见森林,再见树木。

5 00:00:10,100 –> 00:00:12,220
在示例中 我们首先要选择用于试验的一项指标
→ 指标先行,避免“先改后想”。

6 00:00:12,220 –> 00:00:15,020
查看必要的统计结果 随后我们将设计我们自己的试验
→ 顺序:指标→统计需求(样本量)→设计。

7 00:00:15,020 –> 00:00:18,490
最终 我们将分析结果
→ 闭环到“分析”才算结束,避免“跑实验不看数”。

8 00:00:18,490 –> 00:00:23,900
在之后的课程中 我们将深入了解整个过程中某个部分的具体细节
→ 预告:第 2-5 课把闭环拆成 4 段深度。

9 00:00:23,900 –> 00:00:25,920
在第二课中 你将学到如何保护试验中的参与者
→ 伦理课:知情同意、最小风险、数据隐私(GDPR/CCPA)。

10 00:00:25,920 –> 00:00:28,560
以及你应该不断问自己哪些关于实验伦理性方面的问题
→ 给出 checklist:是否对用户造成伤害?是否泄露 PII?能否提前终止?

11 00:00:28,560 –> 00:00:31,830
在第三课中 我们将更具体地探讨如何选择和定义用于实验评估的指标
→ 指标类型:invariant、goal、guardrail、secondary;会讲 OMEC 框架。

12 00:00:31,830 –> 00:00:34,630
在第四课中 我们将更多的讨论如何设计试验
→ 分流单元(user_id vs cookie vs device)、随机化块、分层实验、正交。

13 00:00:34,630 –> 00:00:37,090
包括选择哪些用户进入对照组 哪些用户进入到实验组
→ 涉及“触发逻辑”(trigger)与“意向治疗(ITT)vs 按治疗(PP)”区别。

14 00:00:37,090 –> 00:00:40,560
在第五课中 我们将查看大量示例 说明你的结果可能出现的形式
→ 会覆盖:置信区间、统计显著 vs 业务显著、第一类/第二类错误、样本比误导。

15 00:00:40,560 –> 00:00:43,450
如何分析上述结果 如何得出有效的结论
→ 给出“决策矩阵”:发布/不发布/需更大样本/需重做。

16 00:00:43,450 –> 00:00:46,230
现在 要参加这个课程 你不需要任何以前使用 A/B 测试的经验
→ 再次降低门槛,吸引零基础。

17 00:00:46,230 –> 00:00:49,149
因为我们将从最基础的部分开始
→ 基础 = 随机化概念、均值比较、中心极限定理。

18 00:00:49,149 –> 00:00:52,010
同时你也不需要任何编程经验
→ 课程作业用 Excel/计算器/在线样本量工具即可完成。

19 00:00:52,010 –> 00:00:55,260
因为本课程不会包含如何执行 A/B 测试的框架
→ 与文件 1 第 9 条呼应,避免学员抱怨“没代码”。

20 00:00:55,260 –> 00:00:58,817
本课程讲的是如何设计和分析实验
→ 核心卖点:Design & Analysis,Implementation 自己找工程团队。

21 00:00:58,817 –> 00:01:02,331
另一方面 我们需要的是统计学入门知识
→ 先修门槛再次明确:知道“正态分布、均值、标准差”即可。

22 00:01:02,331 –> 00:01:05,540
因此 如果你需要复习 就查看讲师注释中的链接
→ 讲师注释会放 Khan Academy 或 Coursera 统计学链接。

23 00:01:05,540 –> 00:01:08,480
在整个课程中 我将向大家展示大量示例
→ Caroline 负责“示例”,保证每 5 分钟一个案例。

24 00:01:08,480 –> 00:01:11,440
你也拥有运用所学内容的机会
→ 每课后有 quiz + 开放问答题(手写计算置信区间)。

25 00:01:11,440 –> 00:01:14,290
我还会与 Dianne 和 Carrie 一起讨论她们在 A/B 测试中的经验
→ 三人圆桌访谈形式,穿插在课后“Bonus”视频。

文件 3 A/B 测试简介

1 00:00:00,930 –> 00:00:04,462
Diane、Carrie 究竟什么是 A/B 测试?
→ 主持人抛问题,暗示后面是“官方定义”。

2 00:00:04,462 –> 00:00:07,920
A/B 测试是一个用于在线测试的常规方法
→ 关键词“在线”→ 线下业务(如门店促销)不直接适用。

3 00:00:07,920 –> 00:00:09,370
可用来测试新产品或新功能
→ 范围限定:产品或功能,不是品牌定位或战略。

4 00:00:09,370 –> 00:00:12,170
你需要做的是设置两组用户
→ 最小模型:仅两组(对照/实验),多臂 bandit 留到进阶课。

5 00:00:12,170 –> 00:00:16,030
将其中一组设置为对照组 采用已有的产品或功能
→ 对照组 = “基准”,必须可观测同期数据,避免历史对照陷阱。

6 00:00:16,030 –> 00:00:19,480
另一组是实验组 采用新版产品或功能
→ 实验组 = “单变量差异”,否则解释不了因果。

7 00:00:19,480 –> 00:00:20,170
你需要做的是找到上述用户做出的不同响应
→ 不同响应 = 指标差异,强调可量化。

8 00:00:20,170 –> 00:00:22,670
然后确认哪个版本的功能更好
→ 决策标准:统计显著 + 业务显著,后面会拆。

9 00:00:22,670 –> 00:00:25,870
对所有考虑进行的变更使用 A/B 测试 还是说 A/B 测试是否更适用于一些特定类型的改变?
→ 主持人抛出“适用边界”问题,引出 mountain 比喻。

10 00:00:25,870 –> 00:00:29,380
我曾经和 John Lilly 讨论过 他现在是 Greylock 的 VC 但是 他曾任 Mozilla 的 CEO
→ 背书:John Lilly = Mozilla 前 CEO + 风投,增加比喻可信度。

11 00:00:29,380 –> 00:00:31,850
他打了一个十分恰当的比方
→ 预告 mountain 比喻即将上线。

12 00:00:31,850 –> 00:00:34,530
他说 A/B 测试能够帮你爬上你面前高山的顶峰
→ 意译:A/B 只能局部最优(hill climbing),不能全局最优。

13 00:00:34,530 –> 00:00:37,090
但是如果你想弄清楚自己是否想爬上这座山还是另一座山 那么 A/B 测试就没那么有用了
→ 换句话说:战略方向、赛道选择、0-1 创新,A/B 帮不上。

14 00:00:37,090 –> 00:00:41,350
也就是说 你可以通过 A/B 测试对很大范围的事情进行测试
→ 拉回正题:虽然战略不行,但战术范围仍然很大。

15 00:00:41,350 –> 00:00:45,960
比如一些新功能 用户界面中增加的内容 网站的不同外观
→ 列举“可见变化”,暗示“用户可感知”是前提。

16 00:00:45,960 –> 00:00:48,880
很多公司都在使用 A/B 测试
→ 过渡句,准备举大厂案例。

17 00:00:48,880 –> 00:00:52,010
例如 Amazon 首次开始做个性化推荐时
→ 案例 1:推荐系统,属于“算法排序”类。

18 00:00:52,010 –> 00:00:55,260
他们想看一下人们是否真的会购买更多商品
→ 指标 = 购买率/收入,后续会讲“如何选指标”。

19 00:00:55,260 –> 00:00:57,090
他们发现由于个性化推荐 他们的收益有了显著增加
→ 结果:显著 + 业务大,所以成为经典案例。

20 00:00:57,090 –> 00:01:00,440
所以 你可以将它用于十分复杂的改变
→ 强调“复杂”也行,只要变量单一。

21 00:01:00,440 –> 00:01:03,630
现在 Google 有时可能 A/B 测试做太多了
→ 自我吐槽,铺垫“过度实验”陷阱。

22 00:01:03,630 –> 00:01:07,670
有一次我们在用户界面中运行 41 个不同的蓝色阴影
→ 名场面:41 种蓝,外界黑 Google“数据僵化”。

23 00:01:07,670 –> 00:01:10,350
来查看用户有什么反响 如果他们做出反应
→ 指标 = 点击率/搜索量,确实能测出差异。

24 00:01:10,350 –> 00:01:12,220
它本身十分有趣并有用
→ 官方态度:微观优化有效,但别神话。

25 00:01:12,220 –> 00:01:15,150
但是实验做的太过了
→ 自我批评:边际收益递减 + 工程师时间浪费。

26 00:01:15,150 –> 00:01:18,780
但是我们能够测试少量的用户可见的变化
→ 拉回正轨:适度即可。

27 00:01:18,780 –> 00:01:23,697
例如 排名变动
→ 案例 2:搜索/推荐排序,属于“看不见但可感知”变化。

28 00:01:23,697 –> 00:01:24,847
LinkedIn 测试了一个改变
→ 案例 3:LinkedIn feed 排序。

29 00:01:24,847 –> 00:01:27,724
尝试确定他们是否应显示新文章还是鼓励大家增加新联系人
→ 业务问题:关系链增长 vs 内容消费,两者 KPI 冲突。

30 00:01:27,724 –> 00:01:31,250
这就是排名变动
→ 总结:任何 feed 流皆可 A/B。

31 00:01:31,250 –> 00:01:36,030
Google 做了很多检索列表和广告之间的排名
→ 案例 4:广告位高低,直接决定收入,敏感。

32 00:01:36,030 –> 00:01:37,720
我们也通过 A/B 测试对所有上述改变进行了测试
→ 再次强调“全覆盖”。

33 00:01:37,720 –> 00:01:41,090
你也可以针对你不确信用户是否会注意到的改变进行测试
→ 引出“不可见变化”案例:性能。

34 00:01:41,090 –> 00:01:45,400
例如 100 毫秒的页面加载时间不是太多
→ 量级:100 ms = 0.1 s,用户主观难察觉。

35 00:01:45,400 –> 00:01:46,840
但是 Amazon 和 Google 都运行了测试
→ 双厂背书,增加可信度。

36 00:01:46,840 –> 00:01:49,040
Amazon 在 2007 年证实
→ 时间点:2007,论文/博客可考证(Greg Linden 公开过)。

37 00:01:49,040 –> 00:01:52,520
每个页面增加 100 毫秒的延迟会导致收入降低 1%
→ 数字:100 ms ↓ 1%,常被引用做“性能 ROI”标杆。

38 00:01:52,520 –> 00:01:55,260
对于 Google 来说 我们得到了相似的结果
→ Google 内部 2009 年也跑过,结论一致。

39 00:01:55,260 –> 00:01:57,620
平均来看 虽然 100 毫秒看起来不多
→ 强调“小延迟也有大影响”,为后面“性能优化优先级”埋伏笔。

40 00:01:57,620 –> 00:02:01,650
人们查询的数量真地降低了
→ 指标 = 每用户查询数(queries/user),属于 engagement。

41 00:02:01,650 –> 00:02:04,420
这就是可以从 A/B 测试中学到的东西
→ 小结:性能也能 A/B,只要能量化。

42 00:02:04,420 –> 00:02:07,070
那你不能用 A/B 测试做的事情是哪些呢?
→ 主持人过渡,准备讲“边界”。

43 00:02:07,070 –> 00:02:10,380
在测试新的体验时 A/B 测试的用途就没那么大了
→ 新体验 = 用户从未见过,无基准可比。

44 00:02:10,380 –> 00:02:12,600
但是你可以用更明显的方式考虑这个问题 对吧?
→ 反问句,提示下面将给出“可感知”例子。

45 00:02:12,600 –> 00:02:14,730
你在测试新的体验时 你当前已有的那些用户可能会觉得
→ 点出“改变厌恶症”(change aversion)。

46 00:02:14,730 –> 00:02:18,200
“你改变了我的体验 发生了什么 我喜欢我原来的方式 我有点不高兴”
→ 用户情绪成本,需长期观测。

47 00:02:18,200 –> 00:02:21,310
这也被称为改变厌恶症
→ 给出术语:change aversion,可检索论文。

48 00:02:21,310 –> 00:02:23,830
另一方面 他们可能觉得 这是新的 然后他们尝试所有东西
→ 对立面:新奇效应(novelty effect)。

49 00:02:23,830 –> 00:02:26,960
这就被称为新奇效应 对吧?
→ 给出术语:novelty effect。

50 00:02:26,960 –> 00:02:29,443
那么 在新的体验中会发生什么
→ 总结:两种偏差同时存在,短期数据失真。

51 00:02:29,443 –> 00:02:32,860
一个问题是 你比较的基准是什么
→ 自问自答:基准缺失,无法判断。

52 00:02:32,860 –> 00:02:35,210
第二个问题 你需要多少时间为了在实际中让你的用户接受新的体验
→ 隐含:需长期观测,但业务等不起。

53 00:02:35,210 –> 00:02:37,090
实际上就是平稳的体验会是什么样
→ 只有“平稳后”数据才能用于决策。

54 00:02:37,090 –> 00:02:40,790
我能够据此做出稳健的决策
→ 关键词:稳健(robust),统计+业务双显著。

55 00:02:40,790 –> 00:02:44,990
由于其他一些原因 时间也可能成为难题所在
→ 引出“长周期业务”案例。

56 00:02:44,990 –> 00:02:48,920
例如 你有一个网站 推荐公寓租赁的
→ 案例:公寓租赁,低频高客单。

57 00:02:48,920 –> 00:02:52,010
人们寻找公寓不是那么频繁
→ 频率低 → 事件稀疏 → 实验周期长。

58 00:02:52,010 –> 00:02:55,260
那么 你真正想要的是回报的业务 或通过推荐给其他喜欢这项服务的人扩大业务
→ 目标:复购 + 口碑,但二者都难在短期实验观测。

59 00:02:55,260 –> 00:02:57,620
现实是 在试验的范围内十分难以测定
→ 直接结论:A/B 测不准。

60 00:02:57,620 –> 00:03:01,650
人们是否真的因为更多的推介回到你的网站
→ 指标: referral rate,追踪链路断裂。

61 00:03:01,650 –> 00:03:04,420
即便人们向他们的朋友推荐 老实说 是否需要等到下一周?
→ 反问句:实验窗口无法确定。

62 00:03:04,420 –> 00:03:07,070
是否需要等到六个月后?
→ 拉长窗口 → 流量/预算/工程成本高。

63 00:03:07,070 –> 00:03:10,380
所以你可能想知道关于你的网站的一些东西 但通过短期的 A/B 测试却十分难以实现
→ 小结:长周期目标 → A/B 失灵。

64 00:03:10,380 –> 00:03:12,600
我们将在第三课中讨论针对这些情况 有哪些好的指标可以选择
→ 预告:第三课会讲“代理指标”(proxy metric)。

65 00:03:12,600 –> 00:03:15,480
因此 最后我们提供的示例中 A/B 测试不是十分有效
→ 过渡到最后一个反例:遗漏检测。

66 00:03:15,480 –> 00:03:19,290
因为 A/B 测试无法真实地告诉你是否遗漏了什么东西
→ 核心:A/B 只能测“已存在差异”,不能测“不存在”。

67 00:03:19,290 –> 00:03:21,340
现在 假设你在做数码相机评论网站
→ 案例:内容覆盖率。

68 00:03:21,340 –> 00:03:25,530
A/B 测试可以告诉你是否需要在这相机评论上面发表相机评论
→ 白话:已上架的评测能不能放首页。

69 00:03:25,530 –> 00:03:28,390
但是 A/B 测试无法告诉你 你是否完全忽略了其他需要你来评价但是你根本没有评价的相机
→ 致命盲区:遗漏的 SKU 无法被实验观测,必须用搜索词、问卷、竞品爬虫补充。

70 00:03:28,390 –> 00:03:30,770
明白了
→ 口语结束,提示本节收尾。


文件 4 你可以做和不可以做的事(题目)

1 00:00:00,350 –> 00:00:03,890
在接下来的视频中 我们将看到更多示例
→ 预告:下面 4 道判断题是互动环节。

2 00:00:03,890 –> 00:00:06,280
说明什么时候可以或不可以使用 A/B 测试
→ 目标:让学员先猜,形成认知冲突。

3 00:00:06,280 –> 00:00:09,950
可以使用的替代 A/B 测试的技术
→ 提前埋点:后续会讲“日志回溯、问卷、焦点小组”。

4 00:00:09,950 –> 00:00:12,020
以及 A/B 测试的历史简介
→ 历史简介被砍,实际视频里没出现,可忽略。

5 00:00:12,020 –> 00:00:15,610
随后 我将介绍我们在本课接下来要使用的 A/B 测试的示例
→ 预告:会拿一个“完整闭环”案例贯穿。

6 00:00:15,610 –> 00:00:17,010
如果你要跳到这里
→ 给快捷键:讲师注释放时间戳。

7 00:00:17,010 –> 00:00:19,470
你可以利用讲师注释中的链接
→ Udacity 平台支持“互动视频”,可跳段。

8 00:00:19,470 –> 00:00:21,980
现在 我们来看一下你可能考虑使用 A/B 测试的变更列表
→ 过渡句,准备出题。

9 00:00:21,980 –> 00:00:25,420
首先 假设有一家在线购物公司例如 Amazon
→ 案例 1:电商缺货检测。

10 00:00:25,420 –> 00:00:27,170
想知道他们的网站是否全面
→ “全面”= 商品覆盖率,无法随机。

11 00:00:27,170 –> 00:00:30,760
或者是否存在用户想要购买但是他们无法提供的产品
→ 隐含:缺失的商品不在实验组里,无法比较。

12 00:00:30,760 –> 00:00:33,080
要求你确定什么情况下 A/B 测试是合适的
→ 题型:勾选框 → 让学员主动思考。

13 00:00:33,080 –> 00:00:37,070
第二 假设公司已经有了免费服务 他们可能拥有待办事项应用
→ 案例 2:Freemium → Premium 升级。

14 00:00:37,070 –> 00:00:40,530
他们想提供带有其他功能的高级服务
→ 关键:用户需主动升级 → 无法强制随机。

15 00:00:40,530 –> 00:00:43,450
如需使用高级服务 用户需要升级 创建登录帐户 并探寻新的功能
→ 三步摩擦:升级→注册→探索,每一步都可 dropout。

16 00:00:43,450 –> 00:00:46,230
第三 假设一个网站 为用户提供电影建议例如 Netflix
→ 案例 3:算法排序,经典可 A/B 场景。

17 00:00:46,230 –> 00:00:49,149
他们创建了一个新的算法 对可能的建议进行排序
→ 单一变量:算法差异,可随机。

18 00:00:49,149 –> 00:00:52,010
第四 假设你想要改变基础架构的后台
→ 案例 4:后端性能,用户无感知。

19 00:00:52,010 –> 00:00:55,260
这可能影响页面加载的速度、用户可以看到的显示结果等等
→ 指标:速度/收入/报错率,均可量化。

20 00:00:55,260 –> 00:00:57,670
使用 A/B 测试对这个改变进行测试是否合适?
→ 结束提问,等待文件 5 解析。


文件 5 你可以做和不可以做的事(解析)

1 00:00:00,420 –> 00:00:03,810
第一种情况 你通过 A/B 测试无法确认你是否提供了所有产品
→ 直接给答案:缺货检测 ❌。

2 00:00:03,810 –> 00:00:06,160
你可以尝试额外增加产品 但是如果用户不购买 你仍然无法知道是否缺少其他产品
→ 解释:实验只能观测“已上架”商品的表现。

3 00:00:06,160 –> 00:00:10,070
相反 你可能想要询问用户他们是否觉得缺少什么东西
→ 替代方案:站内问卷、搜索词挖掘、客服工单 NLP。

4 00:00:10,070 –> 00:00:13,710
第二 使用 A/B 测试无法全面测试高级服务是否是好的商业决策
→ Freemium → Premium ❌(无法强制随机)。

5 00:00:13,710 –> 00:00:16,860
用户需要选择进入高级服务 因此随机指定人员进入到一组 而另一组无法起作用
→ 核心:无对称对照组 → 因果推断失效。

6 00:00:16,860 –> 00:00:18,200
你仍然可以从 A/B 测试中获得有价值的信息
→ 让步:可做“升级漏斗”分析,但无法测“整体收入因果”。

7 00:00:18,200 –> 00:00:21,310
例如 你可以看到多少用户会访问增加的功能或如果提供选择 多少用户会选择升级
→ 可测指标:入口点击率、升级转化率、付费留存。

8 00:00:21,310 –> 00:00:24,590
但是你无法全面测试所做的改变
→ 再次强调:不能回答“如果全员强制升级会怎样”。

9 00:00:24,590 –> 00:00:26,930
第三 是使用 A/B 测试的主要情形
→ 算法排序 ✅,经典场景。

10 00:00:26,930 –> 00:00:29,660
有明确的对照组和实验组 旧算法和新算法
→ 单一变量 + 随机分流 → 因果清晰。

11 00:00:29,660 –> 00:00:32,170
也可以找到一些能够评估改变的明确的指标
→ 指标:CTR、观看完成率、人均播放数。

12 00:00:32,170 –> 00:00:35,540
第四 测试有点复杂 取决于你是否拥有同时运行两个后台版本的计算能力
→ 后端性能 ✅ 有条件:工程能双跑。

13 00:00:35,540 –> 00:00:38,930
如果同时运行两个版本 你当然可以对变化的结果进行 A/B 测试
→ 前提:工程资源 + 数据管道双倍成本。

14 00:00:38,930 –> 00:00:41,240
再者 你拥有明确的对照组和实验组
→ 因果成立,但需权衡成本。

15 00:00:41,240 –> 00:00:43,710
因此 只要你拥有计算能力 同时运行两个版本 你会十分容易完成测试
→ 结论:技术上可行,商业上看 ROI。


文件 6 再给你 3 个场景(第二轮练习)

1 00:00:00,360 –> 00:00:02,790
为了向你展示更丰富的多样性 我们将看另外三个可能的变化
→ 第二轮互动,加深记忆。

2 00:00:02,790 –> 00:00:05,420
对于每种情况 如果你觉得对改变运行 A/B 测试有用 请勾选方框
→ 题型依旧:先猜后讲。

3 00:00:05,420 –> 00:00:06,430
首先 假设你有一个销售汽车的网站
→ 案例 1:汽车复购 + 口碑,低频长周期。

4 00:00:06,430 –> 00:00:10,520
你考虑做出改变 你想要知道变更是否会让客户更可能再次访问网站或者向他们的朋友推荐
→ 指标:return rate + referral rate,都难短期观测。

5 00:00:10,520 –> 00:00:14,300
第二 假设一家公司想要更新他们的品牌 包括网站的主要 Logo
→ 案例 2:品牌 Logo,情绪/习惯干扰。

6 00:00:14,300 –> 00:00:16,820
你能对改变进行 A/B 测试吗?
→ 提问,等待文件 7 解析。

7 00:00:16,820 –> 00:00:19,470
第三 假设你想对移动应用首页的改变进行测试
→ 案例 3:首页信息架构,典型可 A/B。

8 00:00:19,470 –> 00:00:22,410
你想要变更包含的信息 使用的措辞、颜色等
→ 变量:文案 + 配色 + 信息顺序,可单因素切分。

9 00:00:22,410 –> 00:00:25,680
选择你认为最合适进行 A/B 测试的情况
→ 结束提问。


文件 7 第二轮解析

1 00:00:00,410 –> 00:00:04,350
第一种情况 不能使用 A/B 测试
→ 汽车复购 ❌。

2 00:00:04,350 –> 00:00:06,450
人们很少购买汽车
→ 频率低 → 事件稀疏 → 实验周期>>商业耐心。

3 00:00:06,450 –> 00:00:09,630
所以你需要很长时间才能看到是否有回头客
→ 统计功效不足,样本量需求爆炸。

4 00:00:09,630 –> 00:00:13,440
你甚至不需要获得用户是否向朋友建议此网站的数据
→ 口碑追踪链路断裂(无 referrer/分享 ID)。

5 00:00:13,440 –> 00:00:16,860
第二 看起来很容易进行 A/B 测试
→ Logo ❌(短期)。

6 00:00:16,860 –> 00:00:19,200
你肯定能够收集关于新、旧 Logo 的用户行为数据
→ 技术可行:CTR/停留时长/滚动深度都能采。

7 00:00:19,200 –> 00:00:22,410
但是改变你的公司的品牌肯定对用户来说是情感上的冲击
→ 情感冲击 → 短期数据失真(改变厌恶 + 新奇并存)。

8 00:00:22,410 –> 00:00:25,680
他们可能需要时间习惯新的 Logo 因此你不需要根据 A/B 测试中采集到的短期数据做出决定
→ 建议:拉长观测窗到季度或年,或改用问卷/焦点小组。

9 00:00:25,680 –> 00:00:28,390
第三 最适合使用 A/B 测试
→ 首页改版 ✅。

10 00:00:28,390 –> 00:00:30,970
存在明确的对照组和实验组
→ 随机分流易实现。

11 00:00:30,970 –> 00:00:33,460
并且比起前面两个案例 更容易选择适合的指标评估此类改变
→ 指标:首页→下一步 CTR、留存、单会话时长。

12 00:00:33,460 –> 00:00:36,230
你可以选择某些指标 例如用户通过初始页面的概率
→ 给出具体示例:初始页面转化率(即 bounce rate 的补数)。


文件 8 其他技巧

1 00:00:00,230 –> 00:00:03,719
我们刚刚看到了 A/B 测试不太有用的情况
→ 承接上文,准备给“替代工具箱”。

2 00:00:03,719 –> 00:00:05,260
在这种情况下 我们要怎么做呢?
→ 反问句,引出“混合方法”。

3 00:00:05,260 –> 00:00:07,390
是否有其他可用的技术?
→ 预告:下面列出“日志、问卷、焦点小组、UX 研究”。

4 00:00:07,390 –> 00:00:10,344
还有很多不同的收集关于用户数据的方法
→ 总起句:多源数据互补。

5 00:00:10,344 –> 00:00:13,137
同时 部分方法甚至还可以作为运行 A/B 测试的补充
→ 强调“互补”而非“替代”。

6 00:00:13,137 –> 00:00:14,607
例如 通常你会有记录用户在你的网站进行操作的日志
→ 日志 = 被动大数据,低成本。

7 00:00:14,607 –> 00:00:19,200
你可以通过检查或观察分析日志得出假设 是什么原因造成其行为改变
→ 流程:回溯日志 → 形成假设 → 前瞻性实验验证。

8 00:00:19,200 –> 00:00:24,250
可能你就要沿着这个方向努力 然后设计实验完成随机化和试验 进行前瞻性分析
→ 标准“数据 → 假设 → 实验”闭环,与科研方法一致。

9 00:00:24,250 –> 00:00:28,000
同时 你可以使用两个数据来源作为相互补充的类别
→ 再次强调“互补”策略。

10 00:00:28,000 –> 00:00:31,340
这种情况下 你可以通过查看日志建立一个假设 但是 实际上你想测试你能否在实验中让假设成真
→ 避免“数据 dredging”:先假设后实验,防止 p-hacking。

11 00:00:31,340 –> 00:00:35,460
因此 你还需要运行 A/B 测试比较结果 查看你的理论是否合理
→ 结论:日志不能代替实验,只能生成假设。

12 00:00:35,460 –> 00:00:38,930
也有一大堆其他技术 从用户体验研究到焦点小组、调查和人为评价
→ 清单:UX Research、Focus Group、Survey、Human Evaluation。

13 00:00:38,930 –> 00:00:42,830
现在 A/B 测试可以给你大量的宽泛的定量数据
→ 定量:大样本、低偏差、可统计推断。

14 00:00:42,830 –> 00:00:46,060
但是 上述其他技术会给到你非常深入的定性数据
→ 定性:动机、情绪、认知负荷,无法通过实验量化。

15 00:00:46,060 –> 00:00:50,600
作为 A/B 测试的补充 比如 上述其他技术可以告诉你应该翻越哪座山
→ 呼应 mountain 比喻:定性帮你选山,定量帮你爬山。

16 00:00:50,600 –> 00:00:52,740
因此 我们将在第三课中介绍上面所说的一些其他技术
→ 预告:第三课讲“指标 + 混合方法”。

17 00:00:52,740 → 00:00:55,500
当然有一些情况用 A/B 测试十分难以测试
→ 过渡:准备讲“完全无法随机”场景。

18 00:00:55,500 → 00:00:58,930
例如 如果你彻底重新建立你的网站或改变用户互动的方式
→ 案例:全站重构 → 无法保持“单一变量”。

19 00:00:58,930 → 00:01:01,290
这些情况中 你很难运行对照组的实验
→ 隐含:需用 quasi-experiment(断点、DID)或长期队列。

20 00:01:01,290 → 00:01:03,719
我们将在稍后的课程中讨论
→ 预告:第四课“设计”会展开 quasi-experiment。


以下把 9–17 号字幕(历史→商业案例→指标→二项分布)逐句拆成“知识点卡片”。
格式说明:

  • 左侧=原字幕时间轴+原文;右侧=翻译/拆解/考试或面试易考点。
  • 用 ‖ 分隔同一句话里的多个隐藏信息。
  • 加粗★为必须背下来的“结论性原话”。

文件 9 A/B 测试的历史

1 00:00:00,151 –> 00:00:02,911
人类最初从什么时候开始使用 A/B 测试?
→ 开场提问,暗示“早于互联网”。

2 00:00:02,911 –> 00:00:06,447
A/B 测试的历史很长 一开始应该是出现在农业领域
★ 最早形态:农田分区试验(随机区组设计)。‖ 农业= factorial design 源头,Fisher 20 世纪 20 年代确立。

3 00:00:06,447 –> 00:00:10,242
虽然那时候还不叫 A/B 测试
→ 术语是后来借用的,方法论同源:对照+随机。

4 00:00:10,242 –> 00:00:13,845
人们将土地分为各个部分
→ 早期“分流单元”= 地块;现代= user_id/cookie/device。

5 00:00:13,845 –> 00:00:17,610
然后测试哪个地方最适合某种作物或者作物如何生长
→ 指标= 产量/株高;在线= CTR/收入。

6 00:00:17,610 –> 00:00:20,654
其实有很多不同的领域在很长时间内都在实际使用 A/B 测试
→ 暗示“通用科学方法”,不只市场或产品。

7 00:00:20,654 –> 00:00:22,731
一般来说 在科学领域中假设检验是确定创新的关键方法
★ 官方定义:A/B = 在线场景下的“假设检验”。

8 00:00:22,731 –> 00:00:28,408
医学上的 A/B 测试称为临床试验
→ 医学= 黄金标准:双盲、随机、对照(RCT)。

9 00:00:28,408 –> 00:00:32,220
他们会藉此确定新药品是否有效
→ 医学指标= 生存率/副作用;在线= 转化率/留存。

10 00:00:32,220 –> 00:00:35,406
在 A/B 测试中你最想看到的是对照组和实验组返回一致的响应
→ 一致= 除实验变量外其他分布均衡,可排除混杂。

11 00:00:35,406 –> 00:00:41,902
让你能够真正地决定试验的结构 确定实验组以及对照组是否有很明显的行为改变
→ 结构= 随机化方案+样本量+指标;行为改变= 统计显著+业务显著。

12 00:00:41,902 –> 00:00:45,498
所以运行这些试验以及在线 A/B 测试之间有什么不同?
→ 过渡句,准备比较“线下 vs 线上”。

13 00:00:45,498 –> 00:00:49,094
网络上 我们有更多更多的数据 但是分辨率更低
★ 核心对比:大数据+低像素(unknown user)。

14 00:00:49,094 –> 00:00:57,425
传统医学/UX 试验:10–50 人,知道年龄/体重/驾照;在线:百万级访问,但不知“网咖里是一个人还是多个人”
→ 线上= 大样本+高功效,但混杂因子多(同一设备多人、爬虫、机器人)。

15 00:00:57,425 –> 00:01:00,840
网络世界中要谨记的一件事就是当你做 A/B 测试时目的是要确认用户是否会喜欢这个新产品或新功能
→ 目的= 产品/功能偏好,而非科学发论文。

16 00:01:00,840 –> 00:01:07,960
设计一个合理且能够给到你可复验的结果 让你能够很好地决定是否要发布一款产品或功能
★ 关键词:合理(randomized)、可复验(reproducible)、发布决策(ship or not)。

17 00:01:07,960 –> 00:01:10,538
我知道优达学城使用 A/B 测试 其他技术公司呢?
→ 过渡,准备列“行业清单”。

18 00:01:10,538 –> 00:01:16,484
Google、Microsoft、eBay、PayPal、Netflix 基本上所有主要的公司都在使用 A/B 测试
→ 面试可用:报出大厂名单,体现“行业标准”。

19 00:01:16,484 –> 00:01:20,359
甚至还有公司专门为小公司提供这些服务
→ 指 Optimizely、VWO、Google Optimize 等 SaaS,降低门槛。

20 00:01:20,359 –> 00:01:23,211
帮助他们优化网站等等
→ 结论:A/B 已成“水电煤”基础设施。


文件 10 商业案例概述

1 00:00:00,420 –> 00:00:02,270
好了 我们已经回顾了 A/B 测试的历史
→ 承上启下,进入“实战闭环”示例。

2 00:00:02,270 –> 00:00:05,470
现在让我们来看一些示例
→ 以下用“Audacity” fake 公司贯穿全课。

3 00:00:05,470 –> 00:00:06,440
在整个课程中我们会使用与优达学城相似的一个在线教育公司作为示例
→ 说明:业务模型= 线上教育+付费课程,指标通用性强。

4 00:00:06,440 –> 00:00:10,610
我们称它为 Audacity
→ 避免用真实 Udacity 数据,防止泄密。

5 00:00:10,610 –> 00:00:12,710
Audacity 专攻金融课程
→ 限定领域:金融类课程,单价高,漏斗长。

6 00:00:12,710 –> 00:00:15,900
他们在试着测试功能 增强学生互动
→ 业务目标:提升互动→最终提高完课率/收入。

7 00:00:15,900 –> 00:00:18,890
首先 让我们来谈谈 Audacity 网站典型的用户流程是怎样的
→ 准备画“漏斗”。

8 00:00:18,890 –> 00:00:23,700
你可以看到主页的最大用户访问数 → 少量用户查看不同页面 → 更少数创建账户 → 更少完成购买/上课/完课
→ 标准四层漏斗:Visit → Explore → Sign-up → Convert/Complete。

9 00:00:23,700 –> 00:00:27,460
这种流程类型通常被称为客户漏斗模型
★ 关键词:funnel(漏斗)+ swirl(涡旋,用户来回跳转)。

10 00:00:27,460 –> 00:00:30,420
对网站而言 这是个很常见的概念
→ 面试可随口画漏斗,体现“业务抽象能力”。

11 00:00:30,420 –> 00:00:34,310
但这个概念太过简单化了
→ 预告:真实用户路径非线性,会跳过/回流。

12 00:00:34,310 –> 00:00:37,930
客户会在不同的状态间来回涡旋 而回访者会跳过中间这些步骤
→ 涡旋= 多次访问,状态机比线性漏斗更准确。

13 00:00:37,930 –> 00:00:41,320
我们会在第三课中进一步讨论漏斗和涡旋及其与指标选择的关系
→ 预告:指标要“层控”——上层用概率,下层用比率/人均。

14 00:00:41,320 –> 00:00:45,436
而在后面的第一课内容中 我们会从头到尾讲解一个简单的实验
→ 承诺:马上跑一遍“小闭环”。

15 00:00:45,436 –> 00:00:48,480
具体来说 我们考虑改变一下“现在开始”这个按钮
→ 实验变量:按钮颜色(橙→粉),单因素。

16 00:00:48,480 –> 00:00:50,150
用户点击后会看到课程清单
→ 说明:按钮= 漏斗第 1→2 层关键跃迁。

17 00:00:50,150 –> 00:00:54,640
我们假设:颜色改变 → 提高点击 → 提高探索 → 最终提高完课
→ 逻辑链:颜色→点击概率→完课,需验证传递性。

18 00:00:54,640 –> 00:00:57,770
也就是 移动至漏斗的第二步
→ 指标定位:把“点击概率”当 proximal metric,完课当 distal metric。


文件 11 度量选择

1 00:00:00,400 –> 00:00:02,620
现在我们已经大概了解了想进行的变更 我们需要选择一个指标来测量这个变更
→ 标准流程:变→指→设→采→析。

2 00:00:02,620 –> 00:00:05,180
在当前的假设中 我们还没有谈及如何测量改变颜色是否真的是一种改进
→ 颜色本身≠改进,必须量化到“可观测指标”。

3 00:00:05,180 –> 00:00:08,320
Audacity 在意的归根究底还是有多少人完成了课程
→ ★ 终极指标(goal metric)= 完课数,但周期长。

4 00:00:08,320 –> 00:00:11,510
所以可以选择“完成课程的数量”作为指标 然而学生可能需要几周或几个月
→ 问题:反馈慢 → 无法快速迭代;引出“代理指标”需求。

5 00:00:11,510 –> 00:00:15,100
采用这个作为指标的话会耗费太多时间了 不太现实
→ 结论:goal metric 不适合做实验 primary metric。

6 00:00:15,100 –> 00:00:19,798
另外一个选择就是“有多少用户实际点击了现在开始按钮”
→ 候选 proximal metric:原始点击数。

7 00:00:19,798 –> 00:00:23,980
但如果总访客不同,点击数会失真 → 引出“率”与“概率”之争。
→ 给出例子:橙组 1000 访客 100 点击;粉组 800 访客 95 点击——谁赢?

8 00:00:23,980 –> 00:00:27,940
我们可以使用“访客点击页面的比例”即点击次数/主页访问次数 → 点击率(CTR)
→ CTR 含重复点击,易受“连点/慢加载”噪音放大。

9 00:00:27,940 –> 00:00:32,210
另一个指标:点击概率 = 至少点击一次的独立访客 / 独立访客
→ ★ 官方选定:click-through probability(CTP)= binomial metric,每人最多 1 次成功。

10 00:00:32,210 –> 00:00:36,620
举例:用户 A 点 5 次 → CTR=5,CTP=1;用户 B 0 次 → CTR=0,CTP=0;合计 CTR=2.5,CTP=0.5
→ 用数字演示“比率 vs 概率”差异,面试可现场画表。

11 00:00:36,620 –> 00:00:40,910
比率与概率有不同的特点 第三课会进一步讨论
→ 预告:CTR 适合 UI 可用性;CTP 适合“渗透/覆盖”型目标。

12 00:00:40,910 –> 00:00:45,530
本课中 我们将使用点击概率作为指标 而不是点击率
★ 结论:Primary metric = CTP(binomial),便于后续用二项分布算置信区间。

13 00:00:45,530 –> 00:00:49,850
我们还假设这会最终提高终极业务指标即完成课程的总数
→ 需要验证“proxy→goal”传递性,否则可能局部最优但全局无效(后续课会讲“指标链”)。


文件 12 估计点击概率

1 00:00:00,310 –> 00:00:04,129
在 Audacity 示例中 我们决定使用点击概率 而不是点击率
→ 复习:已拍板 CTP。

2 00:00:04,129 –> 00:00:08,080
一般来说 你想测量网站的可用性就使用比率;你想测量总影响就使用概率
★ 金句:Usability → ratio(CTR);Reach/Impact → probability(CTP)。

3 00:00:08,080 –> 00:00:11,570
举例:按钮易找性 → CTR;只想知道多少人进入二级页面 → CTP
→ 给出口诀:重复点击=噪音时用概率。

4 00:00:11,570 –> 00:00:16,850
我们想知道的是用户是否会进入漏斗的第二层 这就是我们选择概率的原因
→ 再次确认:目标=“覆盖更多人”,而非“让人点多几次”。

5 00:00:16,850 –> 00:00:20,980
要计算概率 你首先要和工程师合作修改你的网站 确保你能捕捉网页访问中的任何事件
→ 工程前提:事件日志必须“访问级”+“点击级”可关联。

6 00:00:20,980 –> 00:00:25,250
当用户点击时 你能捕捉到点击事件
→ 关键字段:user_id (或 cookie), page_id, event_type, timestamp。

7 00:00:25,250 –> 00:00:28,780
一旦你获得了数据 要计算“比率”你只需要页面访问总数 & 点击总数 然后相除
→ CTR 计算成本最低,SQL 一行:sum(clicks)/sum(impressions)。

8 00:00:28,780 –> 00:01:16,850
但对于概率 你必须将每个页面访问对应上所有的子点击 → 每人最多记 1 次成功
→ 需要“访客去重”逻辑:同一访客在实验期内多次访问只算 1 次成功/失败。
→ 工程实现:group by visitor_id → boolean max(is_click)。

9 00:01:16,850 –> 00:01:20,980
所以每个页面访问 你最多计算一个子点击
→ 强调“binomial”定义:n=独立访客,x=至少点击 1 次的访客。


文件 13 重复实验

1 00:00:00,380 –> 00:00:03,100
让我们来测量“现在开始”这个按钮的点击概率
→ 进入“统计推断”环节:点估计 → 区间估计。

2 00:00:03,100 –> 00:00:08,610
Audacity 主页的单独用户为 1000;其中 100 位至少点击了一次 → 点估计 p̂ = 10 %
→ 给出数字:n=1000, x=100, p̂=0.10。

3 00:00:08,610 –> 00:00:15,770
但你对这个预测有多确定?——如果再来 1000 访客,结果会多接近 100?
→ 引出“抽样波动”概念,为置信区间埋伏笔。

4 00:00:15,770 –> 00:00:21,320
勾选所有让你吃惊的答案:101?110?150?900?
→ 互动题:测学员直觉版“置信区间宽度”。

5 00:00:21,320 –> 00:00:27,560
我们之后会讨论如何对其进行量化(标准误差、置信区间)
→ 预告:下一步上“二项分布→正态近似→公式”。


文件 14 重复实验 Solution

1 00:00:00,420 –> 00:00:03,920
我认为新的测量结果会接近 100;900 或 150 会让我吃惊
→ 讲师暴露“主观区间”≈ ±50,对应后期 95% 置信约 ±1.96×SE。

2 00:00:03,920 –> 00:00:11,313
110 或 101 比较符合我的预期 → 标准误差会精确描述不同样本之间会有多大区别
→ 金句:SE 量化“样本–样本”波动。

3 00:00:11,313 –> 00:00:18,900
之后我们会讨论样本的标准误差 → 它告诉你同规模样本之间会有多大区别
→ 再次预告:SE = √(p̂(1−p̂)/n)。


文件 15 哪个分布?

1 00:00:00,460 –> 00:00:03,610
接下来讨论“150 次点击是否让人吃惊”背后的数据
→ 准备上“二项分布”。

2 00:00:03,610 –> 00:00:06,220
如果你已熟悉二项分布、置信区间和假设检验,可跳过
→ 给出快捷键:讲师注释放链接。

3 00:00:06,220 –> 00:00:09,040
Carrie 你怎么知道 150 次点击是否让人吃惊?
→ 核心问题:需要概率模型。

4 00:00:09,040 –> 00:00:12,190
数据中经常会有特定的一些分布帮助我们了解数据有可能有多大的变化
→ 分布= 抽样波动的“模板”。

5 00:00:12,190 –> 00:00:15,490
像分级的钟形曲线就是正态分布的好例子
→ 正态= 连续;点击= 离散→ 需二项。

6 00:00:15,490 –> 00:00:19,970
针对这里的数据我们会使用与二项分布稍微不同的一种分布
→ 口误:实际就是二项,不是“不同”。

7 00:00:19,970 –> 00:00:23,930
因为我们的数据不是连续数据 而是有成功有失败
→ 离散二元 → 二项分布 Bin(n, p)。

8 00:00:23,930 –> 00:00:27,480
我们可以将点击叫做成功 将没有页面点击称为失败
→ 定义:success=1(点击),failure=0(未点击)。

9 00:00:27,480 –> 00:00:32,049
重要的是我们有两种可能的结果 点击或没有点击 而我们要计算的指标是概率
→ 再次确认:Binomial 适用条件①二元②独立③同概率。


文件 16 二项分布

1 00:00:00,350 –> 00:00:02,250
假如我们有一个偏倚硬币 翻出正面的概率是 3/4
→ 用“硬币”当教具,降低数学恐惧。

2 00:00:02,250 –> 00:00:06,350
这个硬币可以代表“有 3/4 的概率点击按钮的网页访客”
→ 把 p=0.75 对应到按钮点击,建立直觉。

3 00:00:06,350 –> 00:00:09,660
我们将成功认作是正面 而失败是背面
→ 统一语言:success=点击/正面,failure=未点击/背面。

4 00:00:09,660 –> 00:00:18,610
翻 10 次硬币 → 正面次数 k=0~10;k=7,8 最可能;6–9 都算合理
→ 图形化:二项直方图,中心≈np,宽度≈√np(1−p)。

5 00:00:18,610 –> 00:00:24,900
像 Carrie 提及过的 这种分布称为二项分布
→ 正式给出名称:Binomial distribution。

6 00:00:24,900 –> 00:00:27,600
我们可以为翻任意次数的硬币绘制此图
→ 通用:Bin(n, p) 对任意 n 可画。

7 00:00:27,600 –> 00:00:29,480
当你增加 n 的时候 二项分布会越来越像正态分布
★ 中心极限定理(CLT)雏形:n→∞ 时 Bin≈N(np, np(1−p))。

8 00:00:29,480 –> 00:00:33,400
这里二项分布的 n 为 30 而正态分布用蓝色表示
→ 图示:n≥30 近似已很好(常用 rule of thumb)。

9 00:00:33,400 –> 00:00:35,970
均值相同 都等于 p
→ 均值 μ = np(次数)或 p(比例)。

10 00:00:35,970 –> 00:00:39,010
标准偏差为 √[p(1−p)/n] (这里已换成“比例”口径)
★ 必背公式:SE(p̂) = √(p̂(1−p̂)/n)。

11 00:00:39,010 –> 00:00:43,300
例子:n=20, x=16 → p̂ = 16/20 = 0.8
→ 给出数字练习,代入公式。

12 00:00:43,300 –> 00:00:47,830
要估计硬币偏倚 → p̂ = x/n = 最大似然估计(MLE)。
→ 无贝叶斯先验时,默认用 MLE。

13 00:00:47,830 –> 00:00:51,110
当然 这也可能就是一个公平硬币 刚好翻出正面多过背面
→ 强调:点估计≠真实参数,需区间/假设检验。

14 00:00:51,110 –> 00:00:54,750
但根据结果来看 硬币很可能是偏倚性的
→ 口语版“似然思想”。

15 00:00:54,750 –> 00:00:58,700
二项分布三个假设:①二元结果 ②事件独立 ③同概率
★ 必背 checklist:用 binomial 前先验证这三条。

16 00:00:58,700 –> 00:01:02,420
实践中要确认事件是否独立有时候比较棘手
→ 提前预警:真实场景常 violated(网络搜索、购物车)。

17 00:01:02,420 –> 00:01:05,920
例子 1:洗好的 52 张牌抽 20 次 → 不是独立(无放回)
→ 无放回→超几何分布;若牌堆无限大可近似二项。

18 00:01:05,920 –> 00:01:10,400
例子 2:掷骰子 50 次 → 独立,满足二项。
→ 经典正面教材。

19 00:01:10,400 –> 00:01:16,630
例子 3:搜索引擎连续两次搜索 → 不独立(用户改词再搜)
→ 同一用户 session 内事件常相关→ 需“用户级去重”或“session 合并”。

20 00:01:16,630 –> 00:01:21,850
例子 4:优达学城学生完课 → 近似独立(全球学生多,小概率重复账号)
→ 给出“可接受近似”场景。

21 00:01:21,850 –> 00:01:26,590
例子 5:亚马逊购物车→ 不独立(同一用户多商品一起结账)
→ 事件级=SKU,但用户行为聚合→ 需“订单级”或“用户级”才能二项。

22 00:01:26,590 –> 00:01:28,710
标准偏差为 √[p(1−p)/n] (比例形式)
→ 再次重复 SE 公式,强化记忆。

23 00:01:28,710 –> 00:01:33,400
当前情况下我们假设已知硬币翻出正面的概率;现在考虑:如果我们不知道这个概率
→ 过渡:从“已知 p”→“估计 p”,为置信区间铺垫。

24 00:01:33,400 –> 00:01:35,970
我们翻了 20 次硬币 其中十六次翻出正面 → p̂ = 16/20 = 0.8
→ 数字例子,后续算 CI 时用。

25 00:01:35,970 –> 00:01:39,010
要估计这个偏倚性 → p̂ = x/n = MLE
→ 再次强调 MLE 无偏且相合。

26 00:01:39,010 –> 00:01:43,300
我们得到结果五分之四 → 最佳估计是该硬币翻出正面的概率是 0.8
→ 口语化“最佳估计”= 点估计。

27 00:01:43,300 –> 00:01:47,830
如果你想更具体地了解不同参数的二项分布会是什么样的 讲师注释中的页面链接可能会有所帮助
→ 给出互动可视化链接(通常是被屏蔽的 Khan 或 Wolfram)。

28 00:01:47,830 –> 00:01:51,110
在使用二项分布时 必须使用一些假设
→ 进入“假设验证”清单。

29 00:01:51,110 –> 00:01:54,750
第一 必须有两个不同的结果 我们称之为成功与失败
→ 条件①二元:pass/fail, click/no-click。

30 00:01:54,750 –> 00:01:59,390
第二 事件必须是独立的 知道了某一次翻硬币的结果也不会知道下一次翻硬币结果是什么
→ 条件②独立:用户级随机化最易满足;事件级常 violated。

31 00:01:59,390 –> 00:02:02,870
第三 事件要遵循同一种分布 也就是说每一次翻硬币的成功概率必须是一致的
→ 条件③同概率:实验期间 p 恒定→ 排除“星期效应”“投放时段差异”等。

32 00:02:02,870 –> 00:02:05,040
在实践中要确认事件是否是独立的 有时候可能比较棘手
→ 再次预警:真实世界≠理想硬币。

33 00:02:05,040 –> 00:02:07,700
所以让我们来看看一些例子
→ 准备用 5 个案例让学员勾选“是否独立”。

34 00:02:07,700 –> 00:02:10,400
这里二项分布的 n 为 30 而正态分布用蓝色表示
→ 图示:n≥30 可正态近似,方便后面用 z-test。

35 00:02:10,400 –> 00:02:13,770
二项分布以及与其类似的正态分布 均值相同 都等于 p
→ 均值 μ = np(次数)或 p(比例)。

36 00:02:13,770 –> 00:02:16,630
标准偏差为 √[p(1−p)/n]
→ 第三次重复 SE 公式,确保背下。


文件 17 二项分布 Solution

1 00:00:00,370 –> 00:00:02,400
洗好的纸牌不是独立的
→ 解析 ①:无放回 → 概率随抽牌变化 → 超几何。

2 00:00:02,400 –> 00:00:06,330
由于每一张牌在一副牌中只出现一次 你每抽取一张牌 它会提供一些关于下一张牌的信息
→ 条件概率:P(黑|已抽 5 黑) ≠ P(黑|初始)。

3 00:00:06,330 –> 00:00:08,570
如果第一张牌是黑色的 那第二张牌是黑色的可能性会更小
→ 直观解释负相关。

4 00:00:08,570 –> 00:00:10,400
如果你的一副牌无限大 这个就不是问题
→ 无限牌堆→放回抽样→二项成立;有限牌堆→超几何。

5 00:00:10,400 –> 00:00:13,410
掷骰子是独立的 → 成功的概率是 1/6 ≠ 0.5 但二项分布不要求 p=0.5
→ 澄清:p 可为任意值,只要恒定。

6 00:00:13,410 –> 00:00:16,300
每掷一次骰子都不会影响下一次掷骰子的结果
→ 经典独立案例。

7 00:00:16,300 –> 00:00:19,410
搜索引擎这个不是独立的 → 如果有的人第一次没找到想要的内容 他们会立刻用稍微有点不同的词再搜索一次
→ 同一用户连续搜索→事件相关→ 违反②。

8 00:00:19,410 –> 00:00:22,570
教育公司这个例子“近似独立”→ 每个学生对应一个事件 而不是多个 且学生遍布全球
→ 给出“可接受偏差”思路:现实中只要偏差<<效应量即可。

9 00:00:22,570 –> 00:01:25,060
购物车的案例不是独立的 → 一个人可能往购物车加入多个物品然后一起购买 → 不同事件的结果之间高度关联
→ 提示:需把“事件粒度”提升到“订单”或“用户”才能近似二项。

10 00:01:25,060 –> 00:01:28,020
小结:判断是否二项前 先问“事件是否独立/同概率”→ 不满足就换模型或提升粒度
→ 通用解题思路:模型 violated → 升/降粒度 or 换分布。

文件 18 置信区间

1 00:00:00,300 –> 00:00:04,290
好了 我们预计点击概率会遵循二项分布
→ 承上启下:已确定用 Binomial 模型。

2 00:00:04,290 –> 00:00:07,860
那如何利用这个来确定哪些值是让我们吃惊的值?
→ 引出“区间 + 显著性”需求。

3 00:00:07,860 –> 00:00:11,220
当你知道它遵循二项分布之后 一个好处就是我们可以使用样本二项分布的标准误差的公式
★ 关键:模型已知 → 可用 SE 公式量化波动。

4 00:00:11,220 –> 00:00:15,770
来估计点击的整体概率会有多大变化
→ SE 描述“样本–样本”波动,即抽样误差。

5 00:00:15,770 –> 00:00:20,730
意思是 如果置信区间为 95%
→ 首次给出 95% 水平,后续所有实验沿用。

6 00:00:20,730 –> 00:00:23,970
置信区间也是会经常听到的词 理论上如果我们不断地重复实验 我们在样本均值附近建立的区间会有 95% 的几率涵盖真正的值
★ 正式定义:95% CI = 重复抽样下 95% 区间包含真实参数。

7 00:00:23,970 –> 00:00:38,060
→ 面试可背:CI 不是“参数落进区间的概率”,而是“区间捕捉参数的概率”。

文件 19 计算置信区间

1 00:00:00,380 –> 00:00:03,680
现在让我们来看看如何计算样本的置信区间
→ 进入“手撕公式”环节。

2 00:00:03,680 –> 00:00:05,810
我们已经找到了区间的中心:点击的概率 p̂ = X / N
→ 中心 = 点估计 MLE。

3 00:00:05,810 –> 00:00:11,901
这里 X 是指点击的用户数量;N 是访问页面的用户总数量
→ 给出符号:X=success,N=sample size。

4 00:00:11,901 –> 00:00:17,425
在这里 p̂ 是 100 / 1000 = 0.1
→ 数字例子:n=1000, x=100, p̂=0.10。

5 00:00:17,425 –> 00:00:22,778
所以置信区间的中心应为 0.1
→ 中心固定,下一步算“宽度”。

6 00:00:22,778 –> 00:00:26,500
然后我需要计算置信区间的宽度 也称为误差幅度 margin = m
★ 术语:margin of error (m) = 半宽。

7 00:00:26,500 –> 00:00:29,870
为此我需要使用二项分布的标准误差
→ SE 是构造 m 的核心。

8 00:00:29,870 –> 00:00:33,900
如果样本规模够大 可以不使用二项分布 我假设分布是正态的
→ 正态近似条件:np̂≥5 且 n(1−p̂)≥5(后续课放宽到≥10)。

9 00:00:33,900 –> 00:00:37,720
这里 N × p̂ = 100 ≥ 5 → 合理
→ 现场验证条件满足。

10 00:00:37,720 –> 00:00:40,240
置信区间的宽度 = z × SE
→ 公式:m = z_(1−α/2) × SE。

11 00:00:40,240 –> 00:00:45,750
SE = √[p̂(1−p̂)/N]
★ 必背:Binomial SE(比例形式)。

12 00:00:45,750 –> 00:00:49,050
成功概率离 0.5 越远 标准误差会越小 → 分布更紧凑 → 置信区间更小
→ 重要洞察:p̂ 接近 0 或 1 时,同样 n 下区间变窄。

13 00:00:49,050 –> 00:00:53,570
样本数量越大 标准误差与置信区间则越小
→ 另一洞察:m ∝ 1/√n,想减半区间需 4×样本。

14 00:00:53,570 –> 00:00:57,150
现在我需要寻求 95% 置信区间 边界的 z 值
→ z=1.96(双尾 2.5%→97.5% 分位)。

15 00:00:57,150 –> 00:02:02,116
1.96 这个值称为 z 分数 我们可以在表格中查询
→ 现场查表→得 1.96。

16 00:02:02,116 –> 00:02:09,479
代入:m = 1.96 × √[0.1×0.9/1000] ≈ 0.019
→ 手算:SE≈0.00949,m≈0.0186→取 0.019。

17 00:02:09,479 –> 00:02:14,310
上限 = 0.1 + 0.019 = 0.119;下限 = 0.1 − 0.019 = 0.081
→ 95% CI:[8.1%, 11.9%]。

18 00:02:14,310 –> 00:02:18,578
也就是说你继续对几千次页面访问进行实验 你可以预估每一千次访问中点击在 80 至 120 次之间
→ 把比例转回“每千次点击”便于业务理解。

19 00:02:18,578 –> 00:02:24,120
超过或低于这个值都是让人吃惊的数字
→ 定义“吃惊”= 落在 CI 外 → 后续直接对应 p-value<0.05。

20 00:02:24,120 → 00:02:30,613
留作业:n=2000, x=300, 求 99% CI → 让学员手算一遍固化公式。
→ 99% z=2.58;p̂=0.15;SE=√(0.15×0.85/2000)=0.0079;m=0.0204 → CI[0.129, 0.171]。

文件 20 计算置信区间 Solution

1 00:00:00,340 –> 00:00:03,260
要计算置信区间 首先我要预估成功的概率 即点估计
→ 步骤①:p̂ = 300 / 2000 = 0.150。

2 00:00:03,260 –> 00:00:07,590
→ 步骤②:99% 双尾 z=2.58(查表)。

3 00:00:07,590 –> 00:00:11,967
SE = √[0.15×0.85/2000] ≈ 0.0079
→ 步骤③:代公式。

4 00:00:11,967 –> 00:00:18,390
m = 2.58 × 0.0079 ≈ 0.021
→ 步骤④:得误差幅度。

5 00:00:18,390 –> 00:00:25,230
上限 = 0.15 + 0.021 = 0.171;下限 = 0.15 − 0.021 = 0.129
→ 步骤⑤:写区间 [12.9%, 17.1%]。

6 00:00:25,230 –> 00:00:30,613
★ 结论:99% 置信下,真实点击概率落在 12.9%–17.1%;若对照组区间与此无重叠→可认为差异显著。

文件 21 建立统计显著性

1 00:00:00,340 –> 00:00:02,930
现在我们已经预估了“现在开始”按钮的点击概率 但是我们还没有真正地变更按钮
→ 过渡:从“估计”到“比较”。

2 00:00:02,930 –> 00:00:06,420
在变更之后我们会运行实验 我们要如何分析结果呢?
→ 引出“假设检验”流程。

3 00:00:06,420 –> 00:00:10,420
在统计学中有个概念叫假设检验或推断 它能以量化的方式确定你的结果发生的概率
★ 定义:假设检验 = 量化“结果是否偶然”。

4 00:00:10,420 –> 00:00:14,430
首先我们需要一个零假设 或者说基准
→ 标准流程:H₀ 先立。

5 00:00:14,430 –> 00:00:20,310
在这里也就是对照组和实验组之间的点击概率没有区别
→ H₀:Pexp = Pcont(或差值=0)。

6 00:00:20,310 –> 00:00:24,140
然后我们需要考虑备择假设 我们感兴趣的是点击概率是否不同?更高?更低?任何区别?
→ 选双尾 or 单尾 → 影响后续 z 临界值。

7 00:00:24,140 → 00:02:24,120
留互动:付款流程实验,让学员写 H₀ 与 HA → 强化“写假设”是第一步。

文件 22 零假设和对立假设

1 00:00:00,320 –> 00:00:03,250
要使用假设检验 确保结果具有统计显著性 你需要计算结果是偶然出现的可能性
→ 显著性核心:P(数据│H₀) 足够小 → 拒绝 H₀。

2 00:00:03,250 –> 00:00:08,320
要计算这个概率 你需要先假设“如果实验没有效果 结果会是怎样”
→ 再次强调:先设“无效世界”基准。

3 00:00:08,320 –> 00:00:12,200
在 Audacity 的例子中 我们采集了两个样本 对照组使用橙色按钮 实验组使用粉色按钮
→ 两组独立样本,比例之差检验。

4 00:00:12,200 –> 00:00:17,650
我们假设每组都遵循二项分布 但是两组的概率可能会不同
→ 模型:XcontBin(ncont, Pcont);XexpBin(nexp, Pexp)。

5 00:00:17,650 –> 00:00:22,570
如果变更按钮颜色没有效果 这样两组的分布相同 → Pexp = Pcont → 差值=0
★ H₀:Pexp − Pcont = 0。

6 00:00:22,570 –> 00:00:26,510
如果实验有效 → 备择假设 HA:Pexp − Pcont ≠ 0(双尾)
→ 课程默认双尾,α=0.05,z=±1.96。

7 00:00:26,510 –> 00:00:31,730
流程:采集数据 → 计算 p̂exp, p̂cont → 差值 → 计算在 H₀ 下出现该差值或更极端的概率(p-value)→ 若 <0.05 排除 H₀
→ 与置信区间等价:95% CI 不包含 0 ↔ p<0.05。

文件 23 零假设和对立假设 Solution

1 00:00:00,480 –> 00:00:04,260
我选择的零假设是两组人完成付款的概率相同
→ 示范:H₀:Ppay,exp = Ppay,cont。

2 00:00:04,260 –> 00:00:07,930
备择假设是两组人完成付款的概率不同 → HA:Ppay,exp ≠ Ppay,cont
→ 双尾写法,差值≠0。

3 00:00:07,930 –> 00:00:11,480
即 Pexp − Pcont = 0 vs ≠ 0
→ 一句话模板,任何比例差检验都能照抄。

4 00:00:11,480 –> 00:00:18,630
强调:写假设时只谈参数(总体概率),不谈样本统计量
→ 避免新手错把“样本差=0”当 H₀。

24 - 比较两个样本

1 00:00:00,410 –> 00:00:02,200
现在我们已经设立了假设检验

2 00:00:02,200 –> 00:00:04,620
我们如何决定是否要拒绝零假设?

3 00:00:04,620 –> 00:00:07,440
我们需要从一个稍微不同的角度

4 00:00:07,440 –> 00:00:08,500
来看看置信区间

5 00:00:08,500 –> 00:00:11,610
要记得 在这个案例中 我们有两组样本

6 00:00:11,610 –> 00:00:12,910
一组是对照组

7 00:00:12,910 –> 00:00:16,100
一组是实验组 两者的用户数量可能会不同

8 00:00:16,100 –> 00:00:21,030
我们需要做的就是将预计的对照组点击比率

9 00:00:21,030 –> 00:00:24,130
与实验组的比率进行对比

10 00:00:24,130 –> 00:00:27,730
量化任务会告诉我们 我们得到的结果

11 00:00:27,730 –> 00:00:31,440
即观察到的区别 是否是偶然出现的

12 00:00:31,440 –> 00:00:34,920
或者如果两组结果完全一致 是否非常不可能出现这种区别

25 - 合并标准误差

1
00:00:00,380 –> 00:00:02,120
因为我们有两组样本

2
00:00:02,120 –> 00:00:05,840
我们需要选择一个标准误差 方面我们进行对比

3
00:00:05,840 –> 00:00:08,510
最简单的方法就是计算

4
00:00:08,510 –> 00:00:09,790
合并标准误差

5
00:00:09,790 –> 00:00:12,440
我们会测量每一组中进行了点击的用户数

6
00:00:12,440 –> 00:00:16,379
我们称之为 Xcont 和 Xexp

7
00:00:16,379 –> 00:00:20,510
以及每一组的总用户数 称为 Ncont 与 Nexp

8
00:00:20,510 –> 00:00:23,430
现在 我们要做的第一件事是计算

9
00:00:23,430 –> 00:00:25,040
合并点击概率

10
00:00:25,040 –> 00:00:28,010
这里我用 p? 因为这是预计的概率

11
00:00:28,010 –> 00:00:31,760
合并概率是整个组的

12
00:00:31,760 –> 00:00:33,270
点击概率 即

13
00:00:33,270 –> 00:00:37,247
进行过点击的用户总数除以用户总数

14
00:00:37,247 –> 00:00:41,250
然后我们计算合并标准误差 通过这个公式计算

15
00:00:41,250 –> 00:00:45,160
现在 我们要预计 P?exp 与 P?cont

16
00:00:45,160 –> 00:00:48,950
之间的差额 这个差额我称为 D?

17
00:00:48,950 –> 00:00:53,840
在零假设中 真正的差额 d 等于零

18
00:00:53,840 –> 00:00:59,390
所以我们可以预计 d? 应该为正态分布

19
00:00:59,390 –> 00:01:03,990
而均值为 0 标准偏差为合并标准误差

20
00:01:03,990 –> 00:01:08,250
如果预计中 d? 大于 1.96 我们的 z 分数

21
00:01:08,250 –> 00:01:12,220
乘以合并标准误差 或小于这个临界值的负值

22
00:01:12,220 –> 00:01:15,220
我们可以拒绝零假设

23
00:01:15,220 –> 00:01:18,390
认为我们的差别具有统计显著性

26 - 实用或实质性显著性

1
00:00:00,145 –> 00:00:02,319
好了 我们现在能够使用假设检验确定

2
00:00:02,319 –> 00:00:06,235
确定实验中观察到的差异是否具有统计显著性

3
00:00:06,235 –> 00:00:07,315
那接下来呢?

4
00:00:07,315 –> 00:00:11,233
我们接下来需要从商业角度来决定

5
00:00:11,233 –> 00:00:15,108
怎样的点击概率变化具有实际显著性

6
00:00:15,108 –> 00:00:17,208
也就是说 变更对我们来说有多重要

7
00:00:17,208 –> 00:00:19,027
作为统计学家来讲

8
00:00:19,027 –> 00:00:22,618
这是统计显著性以外的实质性

9
00:00:22,618 –> 00:00:24,904
这就是工程师与统计学家

10
00:00:24,904 –> 00:00:26,001
的不同说法了

11
00:00:26,001 –> 00:00:29,820
实质性与实际显著性其实是指一样的东西

12
00:00:29,820 –> 00:00:30,609
好的

13
00:00:30,609 –> 00:00:34,018
为什么我们不认为在商业上所有变更都比较重要?

14
00:00:34,018 –> 00:00:36,968
我们不能进行任何能够造成差别的实验么?

15
00:00:36,968 –> 00:00:40,538
你可以 但是你可能不想这么做 这有多个原因

16
00:00:40,538 –> 00:00:43,746
首先 变更本身可能是需要投资的

17
00:00:43,746 –> 00:00:47,067
可能你觉得并不值得 或者说你想要等下一次变更

18
00:00:47,067 –> 00:00:50,885
觉得这里变更会不错 但是那样做会更好

19
00:00:50,885 –> 00:00:52,386
比如在医学方面

20
00:00:52,386 –> 00:00:54,835
你必须清楚知道变更是否值得

21
00:00:54,835 –> 00:00:58,940
如果你在测试一种新药 可能病人的反应会稍微好一点

22
00:00:58,940 –> 00:01:01,738
但你必须要投资用来培训护士

23
00:01:01,738 –> 00:01:03,372
才能实际推出这种药

24
00:01:03,372 –> 00:01:04,370
诸如此类的

25
00:01:04,370 –> 00:01:07,971
所以你可能需要更高的实际显著性

26
00:01:07,971 –> 00:01:09,751
才变更治疗方案

27
00:01:09,751 –> 00:01:12,715
这个也是网络世界和传统科学

28
00:01:12,715 –> 00:01:14,873
之间的重大差异之一 对吧?

29
00:01:14,873 –> 00:01:18,251
在医学中 5%、10%

30
00:01:18,251 –> 00:01:21,093
15% 的变更才是实质性的

31
00:01:21,093 –> 00:01:22,966
对吧? 但是比如说 在 Google

32
00:01:22,966 –> 00:01:27,520
点击概率里的1%或者2%的改变就已经很大了

33
00:01:27,520 –> 00:01:29,786
所以被认为具有实际显著性的差异

34
00:01:29,786 –> 00:01:33,002
也是非常不同的

35
00:01:33,002 –> 00:01:36,500
是的 所以你真正关注的应该是可重复性

36
00:01:36,500 –> 00:01:39,110
统计显著性讨论的就是可重复性

37
00:01:39,110 –> 00:01:42,180
所以在你设置实验时 你想要确保

38
00:01:42,180 –> 00:01:44,483
对的 这些结果是可重复的

39
00:01:44,483 –> 00:01:46,085
那它就具有统计显著性

40
00:01:46,085 –> 00:01:49,586
但你还需要确认从商业角度来说

41
00:01:49,586 –> 00:01:52,145
你在实验中也看到了你感兴趣的改变

42
00:01:52,145 –> 00:01:55,728
它就具有实际显著性 也具有统计显著性

43
00:01:55,728 –> 00:01:59,613
所以你要恰当地设计实验的规模

44
00:01:59,613 –> 00:02:03,393
确保统计显著性条柱低于实际显著性条柱

45
00:02:03,393 –> 00:02:04,205
有道理

46
00:02:04,205 –> 00:02:05,781
那在 Audacity 的例子中

47
00:02:05,781 –> 00:02:08,365
我们仍需要选一个实际显著性的边界

48
00:02:08,365 –> 00:02:09,073
对的

49
00:02:09,073 –> 00:02:12,164
比如说 从商业角度来说

50
00:02:12,164 –> 00:02:16,950
2%的点击概率改变就具有实际显著性

27 - 权衡样本容量及功效

1
00:00:00,370 –> 00:00:04,350
好了 现在我们已经了解了如何计算合并标准误差以及置信区间

2
00:00:04,350 –> 00:00:06,120
是不是可以开始进行实验了?

3
00:00:06,120 –> 00:00:07,500
其实还没有

4
00:00:07,500 –> 00:00:10,250
我们首先要设计实验

5
00:00:10,250 –> 00:00:12,840
现在我们需要决定的一个主要问题是

6
00:00:12,840 –> 00:00:16,059
鉴于我们可以控制对照组和实验组的网页浏览量

7
00:00:16,059 –> 00:00:19,940
我们必须要确定 为获取统计显著性的结果

8
00:00:19,940 –> 00:00:23,020
最能获取统计显著性的结果

9
00:00:23,020 –> 00:00:25,180
这称为统计功效

10
00:00:25,180 –> 00:00:28,240
关键在于如果我们发现任何有意思的东西

11
00:00:28,240 –> 00:00:32,509
我们需要确保足够的功效

12
00:00:32,509 –> 00:00:35,640
从而得到高概率的结果 也就是具有统计显著性

13
00:00:36,920 –> 00:00:41,106
请谨记 功效与规模

14
00:00:41,106 –> 00:00:41,810
呈负面关系

15
00:00:41,810 –> 00:00:45,320
你想要探测的改变越小

16
00:00:45,320 –> 00:00:47,880
或者是你想要的结果置信度越高

17
00:00:47,880 –> 00:00:51,060
你需要运行的实验规模就越大 也就是对照组和实验组需要更多的网页浏览量

28-页面浏览数如何影响敏感性

1
00:00:00,390 –> 00:00:03,660
像 Diane 所说的 在进行实验之前

2
00:00:03,660 –> 00:00:07,060
你需要决定采集多少页面浏览量 以得出结论

3
00:00:07,060 –> 00:00:09,900
首先来看看你增加样本量时

4
00:00:09,900 –> 00:00:11,190
分布会有什么变化

5
00:00:11,190 –> 00:00:14,040
如果你采集 1000 个样本 结果就会是这样的

6
00:00:14,040 –> 00:00:18,200
两组之间没有真正的差异

7
00:00:18,200 –> 00:00:19,950
这是为什么均值等于零的原因

8
00:00:19,950 –> 00:00:23,398
如果你测量发现值比这个低 或者比这个高

9
00:00:23,398 –> 00:00:27,260
你会拒绝零假设 然后得出结论两者间有差异

10
00:00:27,260 –> 00:00:30,560
所以你错误地得出两者间有差异的概率

11
00:00:30,560 –> 00:00:34,076
称为 α 为 0.05

12
00:00:34,076 –> 00:00:38,810
如果你增加样本量 比如 5000 标准误差会减小

13
00:00:38,810 –> 00:00:42,700
结果的分布看上去更窄

14
00:00:42,700 –> 00:00:45,270
要保持同样的 α 值

15
00:00:45,270 –> 00:00:47,310
就意味着拒绝零假设的临界值接近零

16
00:00:47,310 –> 00:00:50,890
如果你决定只采集 1000 的页面浏览量

17
00:00:50,890 –> 00:00:53,330
这样你可以更快地得出结论

18
00:00:53,330 –> 00:00:56,910
如果没有真正的差异 结果的分布是这样的

19
00:00:56,910 –> 00:00:59,332
我们可以看到 α 等于 0.05

20
00:00:59,332 –> 00:01:02,700
现在让我们来考虑下如果两者间有差异

21
00:01:02,700 –> 00:01:05,900
明确来说 这个差异等于实际显著性

22
00:01:05,900 –> 00:01:06,960
为 0.02

23
00:01:06,960 –> 00:01:09,590
你不能拒绝零假设

24
00:01:09,590 –> 00:01:13,180
然后得出结论 认为没有显著的差异

25
00:01:13,180 –> 00:01:16,100
零假设实际上是错误的 然而却没有拒绝零假设的概率

26
00:01:16,100 –> 00:01:21,480
称为 β 这个值很高

27
00:01:21,480 –> 00:01:23,050
就算是真的有差异

28
00:01:23,050 –> 00:01:25,830
很可能也落在这个范围里

29
00:01:25,830 –> 00:01:29,210
所以收集少量样本的话 α 比较低

30
00:01:29,210 –> 00:01:32,410
也就是说你不太可能进行一个较差的实验

31
00:01:32,410 –> 00:01:37,030
但是 β 比较高 也就是说很大几率上

32
00:01:37,030 –> 00:01:39,520
你会无法在实验中得到你想要的差异结果

33
00:01:39,520 –> 00:01:42,850
β 或者说得到错误结论的概率

34
00:01:42,850 –> 00:01:46,010
取决于你的效应有多大

35
00:01:46,010 –> 00:01:49,360
对良态的分布例如正态分布来说

36
00:01:49,360 –> 00:01:53,950
当变化越来越大 β 会变小

37
00:01:53,950 –> 00:01:57,870
所以一般 β 是在实际显著性边界内

38
00:01:57,870 –> 00:02:00,600
因为你不在意更小的变化

39
00:02:00,600 –> 00:02:04,720
而变化越大 β 值越小 即误差的几率越小

40
00:02:04,720 –> 00:02:09,080
大家通常将 1 减去 β 视为实验的敏感性

41
00:02:09,080 –> 00:02:12,600
一般说来 在实际显著性界线内

42
00:02:12,600 –> 00:02:14,660
你希望实验具有较高的敏感性

43
00:02:14,660 –> 00:02:16,310
大家一般选择 80%

44
00:02:16,310 –> 00:02:20,490
好了 现在来看看如果采集 5000 个样本 会是什么结果

45
00:02:20,490 –> 00:02:22,830
两个分布都更加紧密了

46
00:02:22,830 –> 00:02:25,250
α 与之前一样 没有变化

47
00:02:25,250 –> 00:02:27,800
但是 这里出现了真正的差异

48
00:02:27,800 –> 00:02:32,240
你无法拒接零假设的几率大大减小了

49
00:02:32,240 –> 00:02:34,760
也就是说 你更有可能拒绝零假设

50
00:02:34,760 –> 00:02:36,730
并得出两者间有差异的结论

51
00:02:36,730 –> 00:02:39,990
β 减小了 而效应增强了

29-计算所需的页面浏览数量

1
00:00:00,350 –> 00:00:02,870
敏感性比较难以计算

2
00:00:02,870 –> 00:00:05,960
所以人们会使用不同的技术

3
00:00:05,960 –> 00:00:07,320
以确认他们需要多少网页浏览量

4
00:00:07,320 –> 00:00:10,510
首先 一些编程语言有自己的内置库

5
00:00:10,510 –> 00:00:11,760
可以计算这个

6
00:00:11,760 –> 00:00:15,410
你还可以找一些可供查阅的表格

7
00:00:15,410 –> 00:00:17,450
也能使用在线计算器

8
00:00:18,670 –> 00:00:21,410
在 Audacity 的实验中 我们希望你使用

9
00:00:21,410 –> 00:00:23,910
在线计算器 链接见讲师注释

10
00:00:23,910 –> 00:00:24,800
现在 在这个计算器中

11
00:00:24,800 –> 00:00:28,010
你需要输入一些不同的信息

12
00:00:28,010 –> 00:00:31,500
基准转化率 在我们例子中 是指更改之前的预计点击概率

13
00:00:31,500 –> 00:00:35,580
而最低的可探测效果

14
00:00:35,580 –> 00:00:38,240
就是我们之前一直所说的实际显著性

15
00:00:38,240 –> 00:00:41,100
你还需要说明你的实际显著性是

16
00:00:41,100 –> 00:00:43,730
绝对或相对的数值变更

17
00:00:43,730 –> 00:00:47,560
我们一直使用的是绝对数值变更 所以确保选择这个选项

18
00:00:47,560 –> 00:00:49,520
我们会在第三课中进一步讲授两者间的区别

19
00:00:49,520 –> 00:00:52,432
最后你还需要输入 1 - β 和 α 值

20
00:00:52,432 –> 00:00:56,441
请注意 这个计算器将 1 - β 称为统计功效

21
00:00:56,441 –> 00:00:58,550
而不是敏感性

22
00:00:58,550 –> 00:01:01,720
在方框中填入

23
00:01:01,720 –> 00:01:03,050
实验中每一组需要的页面浏览量

24
00:01:03,050 –> 00:01:04,709
还记得在进行变更之前

25
00:01:04,709 –> 00:01:10,240
我们收集到了 1000 个独立页面浏览 其中有 100 个进行了点击

26
00:01:10,240 –> 00:01:14,850
我们将实际显著性确定为 2% 或 0.02

27
00:01:14,850 –> 00:01:19,710
我称之为 dmin 意思是我们在意的最小差异

28
00:01:19,710 –> 00:01:22,710
然后 α 为 0.05

29
00:01:22,710 –> 00:01:26,040
β 为 0.2 非常标准

30-计算所需的页面浏览数量

1
00:00:00,380 –> 00:00:02,340
我们的基准转化率是 10%

2
00:00:02,340 –> 00:00:03,940
100 除以 1000

3
00:00:03,940 –> 00:00:08,620
而最小可探测效果 或者说实际显著性的界线

4
00:00:08,620 –> 00:00:11,540
我们确定为 2% 这是绝对数值变更

5
00:00:11,540 –> 00:00:15,840
最后 我将1 - β 确定为 80% α 为5%

6
00:00:15,840 –> 00:00:21,850
答案是实验中每一组

7
00:00:21,850 –> 00:00:23,380
至少需要 3623 的页面浏览量

8
00:00:23,380 –> 00:00:27,210
正确答案是 3623

31-页面浏览数是如何变化的?

1
00:00:00,400 –> 00:00:02,950
现在你已经了解了如何计算实验中所需的

2
00:00:02,950 –> 00:00:03,940
页面浏览量

3
00:00:03,940 –> 00:00:07,280
请你想一想实验中可能发生的以下变更

4
00:00:07,280 –> 00:00:09,150
并决定是否要增加或减少

5
00:00:09,150 –> 00:00:11,860
你需要的页面浏览量

6
00:00:11,860 –> 00:00:14,602
首先 假设对照组的点击概率变高了

7
00:00:14,602 –> 00:00:17,299
但依然低于 50%

8
00:00:17,299 –> 00:00:21,805
你是否需要更多或更少的页面浏览量以得到相同的敏感性?

9
00:00:21,805 –> 00:00:25,435
第二 假设你决定增加实际显著性

10
00:00:25,435 –> 00:00:27,255
我们称为 dmin

11
00:00:27,255 –> 00:00:31,815
你不再关心 2% 的变更

12
00:00:31,815 –> 00:00:35,300
而是 比如说 通过实验确认 3% 的变更

13
00:00:35,300 –> 00:00:38,340
第三 假设我们决定提高置信度

14
00:00:38,340 –> 00:00:40,610
也称为 1 - α

15
00:00:40,610 –> 00:00:43,050
比如说 我们选择99%的置信度

16
00:00:43,050 –> 00:00:46,020
而不是 95%

17
00:00:46,020 –> 00:00:48,870
最后 假设你想要更高的敏感性

18
00:00:48,870 –> 00:00:53,590
即实际显著性界线内的 1 - β

19
00:00:53,590 –> 00:00:56,720
针对这些情况 标出你认为需要增加或减少网页浏览量

20
00:00:56,720 –> 00:00:59,430
从而保证一切和之前一致的情况

21
00:00:59,430 –> 00:01:03,010
我建议你自己先预计下会发生什么

22
00:01:03,010 –> 00:01:06,640
然后试着在在线计算器上改变数字 看看是什么情况

23
00:01:06,640 –> 00:01:09,240
如果你不明白为什么这个变更会有这样的影响

24
00:01:09,240 –> 00:01:11,250
请观看视频查看解释

32-页面浏览数是如何变化的?

1
00:00:00,390 –> 00:00:03,080
要弄明白点击概率

2
00:00:03,080 –> 00:00:04,010
对所需页面浏览量数量的影响

3
00:00:04,010 –> 00:00:07,530
就要回想之前提到过的 标准误差取决于点击概率

4
00:00:07,530 –> 00:00:10,570
标准误差与 p 乘以 1 减 p

5
00:00:10,570 –> 00:00:12,150
除以 N 的平方根成正比

6
00:00:12,150 –> 00:00:15,830
比如说 如果概率是 0.5 标准误差应该与

7
00:00:15,830 –> 00:00:21,470
0.5 乘以 0.5的平方根 即 0.5 成正比

8
00:00:21,470 –> 00:00:24,922
而如果概率是 0.1 或 0.9

9
00:00:24,922 –> 00:00:29,060
标准误差就与 0.3 成正比

10
00:00:29,060 –> 00:00:33,120
结果显示 概率约接近 0.5

11
00:00:33,120 –> 00:00:38,480
与极限值比如 0.1 或 0.9 越远 标准误差就会增加

12
00:00:38,480 –> 00:00:40,670
所以点击概率增加但不超过 0.5

13
00:00:40,670 –> 00:00:44,180
会增加标准误差

14
00:00:44,180 –> 00:00:47,410
也就是说我需要增加网页浏览量

15
00:00:47,410 –> 00:00:50,960
从而将标准误差降至原水平

16
00:00:50,960 –> 00:00:54,620
现在在在线计算器中 我试着增加基准转换率

17
00:00:54,620 –> 00:00:59,360
至 20% 样本量上升为约 6000

18
00:00:59,360 –> 00:01:02,040
如果你增加实际显著性

19
00:01:02,040 –> 00:01:05,780
比如说你不再想探测2%的变更

20
00:01:05,780 –> 00:01:08,730
你要探测的是

21
00:01:08,730 –> 00:01:09,850
超过 2% 的变更

22
00:01:09,850 –> 00:01:14,390
越大的变更越容易探测得到 所以你不需要这么多的页面浏览量

23
00:01:14,390 –> 00:01:17,290
我试着将实际显著性增加至 5%

24
00:01:17,290 –> 00:01:22,620
所需的样本量减少至每组 1000 的网页浏览量

25
00:01:22,620 –> 00:01:25,860
如果你增加置信度 也就是说在拒绝零假设之前

26
00:01:25,860 –> 00:01:28,940
你要先进一步确认变更是否有发生

27
00:01:28,940 –> 00:01:31,230
也就是说 你变得更为保守

28
00:01:31,230 –> 00:01:34,350
你可以通过拒绝零假设达到这个目的

29
00:01:34,350 –> 00:01:36,150
但这样会引起敏感性下降

30
00:01:36,150 –> 00:01:38,420
如果你想保持相同的敏感性

31
00:01:38,420 –> 00:01:41,250
你需要增加采集的页面浏览量

32
00:01:41,250 –> 00:01:45,300
我试着通过减小 α 值 增加置信度

33
00:01:45,300 –> 00:01:47,400
所需的页面浏览量上升了

34
00:01:47,400 –> 00:01:49,680
现在是 1,500 了 而不是 1,000

35
00:01:49,680 –> 00:01:53,420
最后 如你之前所见 如果你想增加实验的敏感性

36
00:01:53,420 –> 00:01:57,600
你需要采集更多的页面浏览量以收窄分布

37
00:01:57,600 –> 00:02:00,090
我试着增加这里的敏感性

38
00:02:00,090 –> 00:02:01,920
所需页面浏览量增加了

39
00:02:01,920 –> 00:02:03,729
现在是每组 2,000

33 - 计算结果

1
00:00:00,420 –> 00:00:03,300
好了 我们已经设计好了实验 并确定了规模

2
00:00:03,300 –> 00:00:07,100
现在 我们假设已经完成了实验 然后分析实验的结果

3
00:00:07,100 –> 00:00:11,398
假设对照组的总页面浏览量为 10,072

4
00:00:11,398 –> 00:00:14,092
实验组为 9,886

5
00:00:14,092 –> 00:00:17,594
数字不尽相同

6
00:00:17,594 –> 00:00:18,601
因为是随机将用户分配给各小组的

7
00:00:18,601 –> 00:00:23,337
在对照组中 用户中有 974 位点击了现在开始按钮

8
00:00:23,337 –> 00:00:26,080
而实验组中有 1,242 位

9
00:00:27,420 –> 00:00:31,860
所以看上去明显实验组中有更多的人进行了点击

10
00:00:31,860 –> 00:00:34,220
但这是否是因为随机变化呢?

11
00:00:34,220 –> 00:00:36,920
要回答这个问题 我们需要计算

12
00:00:36,920 –> 00:00:38,200
这个差异的置信区间

13
00:00:38,200 –> 00:00:40,820
一开始 我要计算合并概率

14
00:00:40,820 –> 00:00:43,370
也就是两组的总点击数

15
00:00:43,370 –> 00:00:48,450
除以总用户数 结果是约 0.111

16
00:00:48,450 –> 00:00:51,630
现在我会使用你之前见过的公式来计算合并标准误差

17
00:00:51,630 –> 00:00:56,459
结果是 0.00445

18
00:00:56,459 –> 00:00:58,620
现在 请计算预计差异 d? 以及误差幅度 m

19
00:00:58,620 –> 00:01:03,730
以完成此次计算

20
00:01:03,730 –> 00:01:07,320
在这些方框中写入你的答案 精确至小数点后四位

21
00:01:07,320 –> 00:01:10,880
然后将置信区间的上限和下限放入这些方框中

22
00:01:10,880 –> 00:01:12,820
同样精确至小数点后四位

23
00:01:12,820 –> 00:01:15,980
最后 根据这些结果

24
00:01:15,980 –> 00:01:16,820
你是否会发布新版本的现在开始按钮

25
00:01:16,820 –> 00:01:18,300
选择是或否

26
00:01:18,300 –> 00:01:22,238
别忘记考虑这个变更是否大于实际显著性 2%

27
00:01:22,238 –> 00:01:25,810
置信度采用 95%

34 - 计算结果 Solution

1
00:00:00,360 –> 00:00:04,570
我们将预计差异定义为

2
00:00:04,570 –> 00:00:06,460
实验概率减去对照概率

3
00:00:06,460 –> 00:00:09,110
答案为 0.0289

4
00:00:09,110 –> 00:00:13,222
误差幅度等于合并标准误差乘以 1.96

5
00:00:13,222 –> 00:00:16,357
1.96 是置信度 95% 的 Z 分数

6
00:00:16,357 –> 00:00:19,202
结果是 0.0087

7
00:00:19,202 –> 00:00:23,823
置信区间的下限为 d? 减 m

8
00:00:23,823 –> 00:00:26,057
结果是 0.0202

9
00:00:26,057 –> 00:00:30,683
上限为 d? 加 m 结果是 0.0376

10
00:00:30,683 –> 00:00:33,714
从这些结果中我们能得出什么结论?

11
00:00:33,714 –> 00:00:38,272
我们可以说 点击概率变更超过2%的几率

12
00:00:38,272 –> 00:00:39,797
非常大

13
00:00:39,797 –> 00:00:43,623
请记得 我们同时要满足统计显著性与实际显著性

14
00:00:43,623 –> 00:00:45,170
这里我们满足了这两个条件

15
00:00:45,170 –> 00:00:48,400
2% 是我们的实际显著性水平

16
00:00:48,400 –> 00:00:52,040
至少在 95% 的置信度上 我们可以看到很大的改变

17
00:00:53,140 –> 00:00:55,640
基于这个结论 我肯定会发布这个新版本

35-置信区间案例分解

1
00:00:00,420 –> 00:00:04,280
现在让我们来看看其他可能出现的结果

2
00:00:04,280 –> 00:00:06,970
这里我用这两条蓝色线画出了

3
00:00:06,970 –> 00:00:10,000
实际显著性界线 而零就是中间这条黑线

4
00:00:10,000 –> 00:00:14,130
我们的点估计 也就是我们之前所说的 d?

5
00:00:14,130 –> 00:00:16,680
比实际显著性的界线更大

6
00:00:16,680 –> 00:00:19,250
事实上 置信区间的两端

7
00:00:19,250 –> 00:00:21,120
都比实际显著性边界更大

8
00:00:21,120 –> 00:00:24,660
因此 点击概率的变更

9
00:00:24,660 –> 00:00:28,090
实际上很可能超过实际显著性

10
00:00:28,090 –> 00:00:31,400
现在让我们看看其它情况下 我们的结果会是怎样

11
00:00:31,400 –> 00:00:34,670
并试着对每种情况给出决定建议

12
00:00:34,670 –> 00:00:38,630
选择你是否要发布这个变更

13
00:00:38,630 –> 00:00:40,040
或者对这些情况

14
00:00:40,040 –> 00:00:44,100
运行额外的测试 收集更多的数据

15
00:00:44,100 –> 00:00:47,010
第一个情况就是我刚刚说到的

16
00:00:47,010 –> 00:00:48,800
我会发布这个变更

17
00:00:48,800 –> 00:00:51,700
你应该假设想得到的是点击概率的正面变更

18
00:00:51,700 –> 00:00:55,330
不想得到的是负面变更

19
00:00:55,330 –> 00:00:58,440
要记得 我们进行 A/B 测试的目的是收集数据

20
00:00:58,440 –> 00:00:59,930
做出决定

21
00:00:59,930 –> 00:01:02,850
我们在置信区间内计算效能

22
00:01:02,850 –> 00:01:05,760
是为了了解我们的结果有多大可能具有

23
00:01:05,760 –> 00:01:07,530
可重复性与合理性

24
00:01:07,530 –> 00:01:08,990
做出正确的决定

25
00:01:08,990 –> 00:01:11,650
因此 针对每个情况选择你认为最好的决定

36 - 置信区间案例分解 Solution

1
00:00:00,360 –> 00:00:02,969
第二个结果一般称为中性结果

2
00:00:02,969 –> 00:00:05,900
因为置信区间包括 0

3
00:00:05,900 –> 00:00:08,590
所以没有变更具有统计显著性

4
00:00:08,590 –> 00:00:12,560
你也可以确认没有实际显著性的变更

5
00:00:12,560 –> 00:00:15,620
所以这个变更不值得发布

6
00:00:15,620 –> 00:00:19,350
在第三个案例中 你的结果具有统计显著性

7
00:00:19,350 –> 00:00:22,370
你确定存在正面变更

8
00:00:22,370 –> 00:00:23,890
但不具有实际显著性

9
00:00:23,890 –> 00:00:27,630
事实上 你确信没有实际显著性的变更

10
00:00:27,630 –> 00:00:29,960
换句话说 你确认这里有变更

11
00:00:29,960 –> 00:00:32,420
但你不在意变化的幅度

12
00:00:32,420 –> 00:00:35,170
如果你的团队得到了这样的结果 别急着庆祝

13
00:00:35,170 –> 00:00:38,510
同样的 不值得发布这样的变更

14
00:00:38,510 –> 00:00:42,290
但如果你的实际显著性界线设置得更低 就可以发布

15
00:00:42,290 –> 00:00:45,320
第四个案例是作为分析家

16
00:00:45,320 –> 00:00:47,220
最难处理的案例之一

17
00:00:47,220 –> 00:00:50,820
一些人称它为中性变更 像第二个案例一样

18
00:00:50,820 –> 00:00:54,130
但是这里 置信区间超出了

19
00:00:54,130 –> 00:00:55,440
实际显著性的范围

20
00:00:55,440 –> 00:00:59,380
如果你进行实验 发现它可能会导致你的用户数量增加 10%

21
00:00:59,380 –> 00:01:03,780
或减少 10%

22
00:01:03,780 –> 00:01:06,320
你会认为这个变更是中性的么?

23
00:01:06,320 –> 00:01:09,140
最好的说法是 你没有足够的功效

24
00:01:09,140 –> 00:01:10,890
得出结论

25
00:01:10,890 –> 00:01:13,920
如果可能 我们这里建议你

26
00:01:13,920 –> 00:01:15,810
采用更大的功效再进行一次测试

27
00:01:15,810 –> 00:01:17,460
这又是一个棘手的案例

28
00:01:17,460 –> 00:01:20,670
点估计超过了实际显著性

29
00:01:20,670 –> 00:01:24,180
也就是说 你可以猜测 这个变更是你关注的变更

30
00:01:24,180 –> 00:01:26,590
但是置信区间覆盖了0

31
00:01:26,590 –> 00:01:28,770
所以也可能根本没有任何变更

32
00:01:28,770 –> 00:01:31,230
你可以假设它是正面结果 然后发布变更

33
00:01:31,230 –> 00:01:33,860
即便有可能没有效果

34
00:01:33,860 –> 00:01:36,420
使用更大的功效重复测试

35
00:01:36,420 –> 00:01:38,070
会让结果更有信服力

36
00:01:38,070 –> 00:01:41,000
最后还是一种比较难处理的示例

37
00:01:41,000 –> 00:01:43,880
一般情况下 你可以猜测存在一个

38
00:01:43,880 –> 00:01:45,180
具有实际显著性的正面变更

39
00:01:45,180 –> 00:01:49,230
然而 也有可能你的变更根本不具有实际显著性

40
00:01:49,230 –> 00:01:50,460
你该如何决定呢?

41
00:01:50,460 –> 00:01:51,730
所以对后面三个案例

42
00:01:51,730 –> 00:01:55,580
如果你有时间的话 应该采用更大的功效进行额外的测试

43
00:01:55,580 –> 00:01:58,540
但有时候 即便你不确定结果有多真实 或者结果的方向是否正确

44
00:01:58,540 –> 00:02:02,870
你也必须要作出决定

45
00:02:02,870 –> 00:02:05,610
现在我们会听听 Diane 对这些棘手案例的观点

37-对不确定数据做出决策

1 00:00:00,370 –> 00:00:03,780
Diane 如果出现最后三种情况

2 00:00:03,780 –> 00:00:06,420
但是你没有时间进行新的实验时 你会怎么做?

3 00:00:06,420 –> 00:00:10,300
如果只有前面三种情况的话 生活该有多轻松啊

4 00:00:10,300 –> 00:00:13,010
问题就在于即便我们尽力地

5 00:00:13,010 –> 00:00:15,540
增强了我们的实验

6 00:00:15,540 –> 00:00:18,150
我们也会遇到数据有不确定性的情况

7 00:00:19,280 –> 00:00:23,550
你要做的就是当决策人必须要做出决定时

8 00:00:23,550 –> 00:00:27,850
和他们进行沟通 冒一下险 因为数据是不确定的

9 00:00:27,850 –> 00:00:31,270
他们就必须依赖其他的一些因素 比如战略业务问题

10 00:00:31,270 –> 00:00:33,460
或者数据背后的其他因素

38 - 结论

1 00:00:00,470 –> 00:00:03,150
恭喜大家完成了本课的学习

2 00:00:03,150 –> 00:00:07,070
你已经学习了在技术领域之前 A/B 测试的历史

3 00:00:07,070 –> 00:00:10,330
以及什么时候 A/B 测试适用

4 00:00:10,330 –> 00:00:14,090
然后我们介绍了本课程中会一直使用的商业示例

5 00:00:14,090 –> 00:00:17,530
并通过简单的过程 从头到尾地完成了 A/B 测试的设置

6 00:00:17,530 –> 00:00:20,440
在示范实验中 你学习了如何提出

7 00:00:20,440 –> 00:00:22,920
并评估可进行测试的假设

8 00:00:22,920 –> 00:00:26,190
包括为评估变更选取指标

9 00:00:26,190 –> 00:00:30,740
并确定指标发生怎样的变化才具有实际显著性

1000:00:30,740 –> 00:00:32,910
我们讨论了实际显著性与统计显著性

11 00:00:32,910 –> 00:00:37,230
之间的差异 以及如何计算二项置信区间

12 00:00:37,230 –> 00:00:40,960
把所有这些结合起来 你能够计算实验的统计功效

13 00:00:40,960 –> 00:00:45,360
并了解功效与规模之间的拉锯关系

14 00:00:45,360 –> 00:00:48,080
最后 你使用这些概念分析实验结果

15 00:00:48,080 –> 00:00:50,970
并学习可以得出什么结论 以及不能得出什么结论

16 00:00:52,200 –> 00:00:55,290
在下一课中 我们会学习在实验中你应该注意哪些点

17 00:00:55,290 –> 00:00:58,080
以保护参与者

18 00:00:58,080 –> 00:00:58,590
到时候见

🎯批量修改文件名py

将所有.srt文件后缀改成.txt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python3
import os
from pathlib import Path

ROOT_DIR = r'C:\Code\pyProject\pydf\UdacityABtest' # 要处理的根目录
OLD_EXT = '.srt' # 原后缀(必须带点)
NEW_EXT = '.txt' # 新后缀(必须带点)
RECURSIVE = True # True=连子目录一起改,False=只改当前目录

old_ext_lower = OLD_EXT.lower()
for dirpath, _, filenames in os.walk(ROOT_DIR) if RECURSIVE else [(ROOT_DIR, [], os.listdir(ROOT_DIR))]:
for name in filenames:
if name.lower().endswith(old_ext_lower):
p = Path(dirpath) / name
new_name = p.stem + NEW_EXT
p.rename(p.with_name(new_name))
print(f'renamed: {p} -> {new_name}')
print('done!')

将所有.txt文件的文字合并到一个pdf里:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import os
from pathlib import Path
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.pagesizes import A4
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet

ROOT_DIR = r'.' # 含 txt 的根目录
RECURSIVE = True
FONT_NAME = 'SimSun'
FONT_FILE = r'C:\Windows\Fonts\simsun.ttc' # Linux/Mac 按需改
OUTPUT_PDF = 'merged_all.pdf' # 合并后的文件名

# 注册字体
pdfmetrics.registerFont(TTFont(FONT_NAME, FONT_FILE))
styles = getSampleStyleSheet()

title_style = styles['Heading1']
title_style.fontName = FONT_NAME
title_style.fontSize = 16
title_style.leading = 20

normal_style = styles['Normal']
normal_style.fontName = FONT_NAME
normal_style.fontSize = 10
normal_style.leading = 14

story = []

# 按文件名排序,保证顺序一致
txt_files = []
for dirpath, _, files in (os.walk(ROOT_DIR) if RECURSIVE else [(ROOT_DIR, [], os.listdir(ROOT_DIR))]):
for f in files:
if f.lower().endswith('.txt'):
txt_files.append(Path(dirpath) / f)
txt_files.sort()

for txt_path in txt_files:
# 一级标题:文件名(去掉后缀)
story.append(Paragraph(txt_path.stem, title_style))
story.append(Spacer(1, 6))

# 正文
with txt_path.open(encoding='utf-8') as f:
for line in f:
line = line.rstrip()
if line:
story.append(Paragraph(line, normal_style))
else:
story.append(Spacer(1, normal_style.leading))

# 每个文件结束后空一行
story.append(Spacer(1, 20))

# 一次性写 PDF
doc = SimpleDocTemplate(OUTPUT_PDF, pagesize=A4,
topMargin=72, bottomMargin=36,
leftMargin=36, rightMargin=36)
doc.build(story)
print(f'所有 txt 已合并到 {OUTPUT_PDF}')