作者AgileSeptor (S.Duncan_JB)
看板DataScience
标题[心得] 影响 A/B Test 所需样本数的要素
时间Tue Jun 27 23:12:13 2023
[关键字]: A/B Testing
[重点摘要]:
- 干嘛管 A/B Test 的样本数?样本数太少会怎麽样吗?
- 实验检定力会不足、测不出有用的结果
- A/B Test 的样本数不是越多越好吗?太多又可能有什麽问题?
- 经常看见显着、但是效果小到没有帮助
- 多蒐集样本在商业上也是一种成本
- 是什麽因素影响 A/B Test 所需样本数?
- 样本标准差、Minimum Detectable Effect、还有型一、型二错误
A/B Test 是个看似简单,实际上充满统计学学问的领域
一个小动作做错、也可能铸成错误决策
「样本数怎麽算」就是做 A/B Test 的产品设计者、行销专家
还有资料科学家们永远都在问的万年问题
如果没有在实验前想清楚这个问题
很有可能让你的产品团队精心准备的实验成为浪费时间
以下我将和大家分享三个议题:
*为什麽要计较 A/B Test 的样本数?
*是哪些要素影响 A/B Test 所需样本数?
*所需样本数可以用什麽公式计算?
更完整的数学公式加上 Python 程式码图文介绍
欢迎参考我的网志文章:
https://haosquare.com/calculate-ab-testing-sample-size/
## 为什麽要计较 A/B Test 的样本数?
我们先稍微聊聊究竟资料分析为什麽要这麽在意 A/B Test 的样本数有多少。难道,不是
只要做好随机对照实验(RCT)、在假设检定看到显着就能马上下结论吗?没这麽简单!
当 A/B Test 样本数过少时,统计检定力往往会不足,也就是,即使你的产品新设计确实
对使用者有帮助,商业实验也看不出显着性。更麻烦的问题是,如果产品每天能蒐集的样
本很少,我们常会急切地天天盯着 A/B Test 结果看,如果看到资料反映出统计检定显着
,马上下结论、结束实验,这种在样本数不足下「偷看」的动作会造成持续监控问题,其
中的抽样偏误会使得实验的统计错误大大提高!此「偷看」问题我过去曾在本板分享过,
如果你有兴趣,欢迎参考之前的文来复习:
#1VGG3_Pu
而当 A/B Test 样本数过多也不全然是好事情,不是资料越多就一定越好。首先,对某些
使用者流量还不太高的产品而言,每个样本都超珍贵、多蒐集几个样本可能要花不少时间
。如果你蒐集了比你实际上需要还多很多的样本,就会多浪费好几天蒐集样本、还对实验
没什麽贡献。而且别忘了,A/B Test 会让你的使用者看到跟平常不一样的产品,这个不一
样或许是暂时的、未来或许会变回原状(因为你的实验有可能告诉你使用者其实不青睐新
设计),因此我们当然希望因为 A/B Test 而看到这个「不一样」的使用者样本越少越好
,我们不会想让太多人看到我们反反覆覆修改着产品设计的过程。
此外,当样本数超级大的时候,通常 P 值(P-value)都会很小,换言之,只要你的样本
数超多,几乎都能看到统计显着、拒绝虚无假设
但样本数过多的统计显着往往只伴随着很小很小的效果
会是「不实用」的统计显着。
(Statistically significant, but not practically significant)
举例而言,假设有药厂发明了一种药,可以让身高增加 0.2 公分,他们找了超大一群样本
、也真的在实验看出统计显着性,但你会为了想长高 0.2 公分冒险吃这种药吗?这就是统
计显着不太「实用」(Practical Significance)的意思。如果你还想知道样本数过大还
会造成哪些其他 P-value 问题,推荐你细细品嚐以下这篇 Too big to fail 论文:
https://reurl.cc/XERbqg
总之,想要为产品高效率执行 A/B Test,我们要找个刚刚好的样本数
不能太低、也不适合太高
## 决定所需样本数的四大要素
### 1. 样本标准差
> 样本标准差越大、A/B Test 需要的样本数越多
样本标准差(Standard Deviation)衡量样本内数值的离散程度,样本内的数值如果很发
散,我们会更难结论两组数据间的差异。直接举个例子来想像,假设已经知道A地区的平
均身高是 165 公分:
* 如果你在B地区抽样出 5 个人:158、163、170、172、177 公分
* 即使样本平均是 168 公分,但是数据很发散(样本标准差很大)
* 让你不敢断言「B地区平均身高高於A地区」,或许还要 30 个样本以上才能下结论
* 如果你在C地区抽样出 5 个人:166、166、167、168、169 公分
* 虽然平均数只比A地区高 2 公分,但是每笔数据都很接近 167 公分、资料相当集中
(样本标准差很小)
* 你可能会在心中想着:只要再抽样 3 个人、他们身高也同样接近 167 公分的话,你
或许已经愿意相信「B地区平均身高高於A地区」
样本标准差的影响亦可以用钟型曲线来视觉化。统计学常会对估计值画出钟型曲线来呈现
其分布,A/B Test 两组的样本平均数分布可以各自画出钟型曲线,很概略地说,(见下图
)两个钟型曲线只要重叠的部分很少、就会有统计显着。所以,样本标准差对决定样本数
的影响可以这样思考:
* 钟型曲线越「瘦高」,越不容易重叠(越容易统计显着)
* A/B Test 样本数越多,标准误会越小、钟型曲线会越瘦高
* 而当样本标准差越小,标准误也会越小
* 那就表示样本标准差很小的时候,样本数可以不用那麽多,钟型曲线也能保持同样瘦高
、同样容易呈现统计显着
* 「容易呈现统计显着」的程度就是统计学家口中的检定力(Statistical Power)
https://imgur.com/ezHFIOm
### 2. Minimum Detectable Effect (MDE)
> MDE 越大、A/B Test 需要的样本数越少
Minimum Detectable Effect(MDE)是期望最小的指标效果差异,它是主观设定的,它可
能取自於你的产品设计理念,例如帮 APP 某个按钮换造型预计提升 10% 点击率;也可能
来自於商业策略问题,例如这个 APP 按钮的点击率如果无法成长 10%,那将会不符成本、
不值得改变产品。
决定样本数的时候就把 MDE 考虑进去,将会解决刚刚提到的「不实用」统计显着问题,因
为你事先设定好你的数据至少要看到多大差异才算是实用,只要你使用刚刚好的样本数来
做商业实验,最後如果看到实验呈现出统计显着,其效果肯定不小於 MDE、必然是「实用
」的统计显着(Practical Significance)。
Practical Significance 参考说明:
https://online.stat.psu.edu/stat200/book/export/html/119
在此罗唆提醒,MDE 是在 A/B Test 开始之前就(主观)决定好的,MDE 不是指实际实验
数据的两组平均数差异(因为实验还没开始做、不知道实际差异)。
当你设定的 MDE 越小,实验需要的样本数越高;反之,MDE 越大,需要样本数越少。就用
上个小节的「长高药」来举例吧,假设已知控制组的平均身高是 165 公分:
* 如果实验者设定 MDE 为 1 公分
你陆续蒐集了几个样本分别是 166 公分、164 公分、172 公分
* 实验组平均虽然比控制组高了 2 公分,你可能还是会心想:「不能结论长高药有效!
或许有抽样偏误存在,是运气好抽到一位特别高的样本才有这种结果」
* 还要多蒐集很多样本才敢结论到底有没有长高效果
* 如果实验者设定 MDE 为 20 公分
而你目前蒐集到几个样本分别是 187 公分、174 公分、189 公分
* 实验组平均只比控制组高了 18 公分、不到 MDE 设定的 20 公分
* 但光是实验组蒐集这少少 3 个样本相对於控制组都有很大的效果
你是否也开始相信这个长高药好像真的有效了?
此外,MDE 对样本数的影响也同样可以用钟型曲线来想像。
* A/B Test 样本数越多,标准误会越小、钟型曲线会越瘦高
* 而 MDE 越大,对照组的钟型曲线会越往右边平移、与另个钟型曲线的重叠会越少
* 换言之,MDE 越大,样本数即使少一点、钟型曲线矮胖一点,也同样容易出现统计显着
https://imgur.com/D3lBpFE
### 3. 型一与型二错误
> 允许的型一与型二错误率越高、A/B Test 需要的样本数越少
统计方法不是完美的,不管你进行假设检定之後看到显着或不显着,都还是有机会让你造
成错误结论。有可能抽样时恰好运气不佳,使得你抽到的样本对於母体不具有代表性、无
法反映出母体的真实特徵,这种出现抽样偏误的随机性会使我们错误推论资料。统计学家
将这种 A/B Test 「预期会发生」的错误分成两种:
* 型一错误(α 或 Type-1 Error):
A/B 两组其实并没有差异,统计检定却因为随机性判定成有差异(伪阳性错误)
* 型二错误(β 或 Type-2 Error):
A/B 两组确实有差异,统计检定却没有侦测到显着(伪阴性错误)
如同人做的决策不可能完美无缺,统计检定的型一与型二错误也不可能完全消除、但可以
被控制,分析者可以自己决定容许统计方法有多少型一与型二错误存在。在资料越多时,
你对估计值的衡量就越精确,(通常)也表示会产生的决策错误越少;反过来说,如果你
允许发生的型一与型二错误越少,需要的样本数就会越多。
在此又要罗唆地注记,很多资料科学家会用检定力(Statistical Power)来描述型二错误
,检定力其实就只是 1-β、与原本的型二错误 β 一体两面,只需要注意样本数计算的统
计直觉会变成:如果分析者要求 A/B Test 的检定力(1-β)越高、需要的样本数也会越
多。
相对於刚刚讨论的另外两个因素(样本标准差由资料决定、MDE 由产品设计者决定),一
般来说,我们执行 A/B Test 会选择的型一与型二错误率几乎都是按照统计学的惯例、不
太会更动:
* 型一错误设定为 α = 0.05
* α 也被称为显着水准(Significance Level)
* 这也是为什麽我们常常看到 95% 信赖区间
* 型二错误设定为 β = 0.2
* 也就是检定力 = 1-β = 80%
## 究竟样本数计算公式是什麽?
进行 A/B Test 的正确做法是预先决定实验样本数、并且禁止在蒐集到这个样本数之前偷
看。那麽实验样本数究竟是怎麽算出来的呢?以下是计算方法的「经验法则」:
n = 16 * sigma^2 / delta^2
https://imgur.com/A9qOqMQ
经验法则的意思是,此公式已经经过不少简化, 并且计算内容已蕴含了上述的四大要素
更重要的是, 我们使用时要注意其包含了几项假设:
* 实验的 A 与 B 两组样本数大小相同
* n 是 A 与 B 其中一组的样本数至少要是多少(注意 n 不是 A 与 B 的样本数总和)
* 型一与型二错误依照惯例设定 α = 0.05 与 β = 0.2
* 假设实验的 A 与 B 两组样本变异数相同(样本标准差相同)
(如果你的实验要改变以上假设, 就不能再用此经验法则、要去找更完整的数学公式)
这个简化後的经验法则公式不限於资料型态,不管你的 A/B Test 目标是连续型资料还是
比例资料都能适用。我们可以用 Python 程式跑些模拟来验证我们算出来样本数的正确性
对模拟流程有兴趣的话,请参考我放在 GitHub 的 Python Notebook:
https://reurl.cc/y7vaaE
此外,这个简短的样本数计算公式还可以用效果量的观点来理解
统计学课本所说的 效果量(Effect Size)是衡量两个变数之间关系的强度,我自己则更
喜欢把效果量想成考虑资料离散程度(变异数)後的效果大小相对值,又或者,效果量可
以想成是为效果标准化、以统一尺度来衡量效果。
在 A/B Test 情境,效果量经常使用 Cohen’s d 来计算。而上面这个公式,可以用
Cohen's d 来改写(以下 Cohen's d 以 ES 表示):
n = 16 * sigma^2 / delta^2 = 16 / ES^2
where ES = delta / sigma
https://imgur.com/6bIGdPb
由此改写後的公式来看,A/B Test 样本数取决於标准化後的效果大小
换言之,样本数是 Cohen’s d 的函数。
依此能看出把样本数转换成 Cohen’s d 的函数来理解的好处:
帮我们一眼看出「样本数取决於效果大小」的统计直觉
## 小结
如果你在网路上用英文关键字搜寻过「Sample Size」
很可能看过 Evan Miller 设计的热门 A/B Test 样本数计算机
https://www.evanmiller.org/ab-testing/sample-size.html
网页提到他用的正是 n = 16 * sigma^2 / delta^2 这个经验法则公式
而网站中对公式说明不多、也无法一眼看出用到了哪些假设
希望这篇文章能帮助各位板友
更清楚理解网路上搜寻到的各种 A/B Test 样本数计算机究竟算了什麽
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.225.5.200 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DataScience/M.1687878735.A.FB3.html
1F:推 agogoman: 推06/28 07:32
※ 编辑: AgileSeptor (36.225.15.165 台湾), 06/28/2023 11:27:01
※ 编辑: AgileSeptor (36.225.15.165 台湾), 06/28/2023 11:29:09
2F:推 filialpiety: 推推!之前学姊在做大专生计画时,收案也有估算所需 06/29 10:51
3F:→ filialpiety: 样本数 06/29 10:51
4F:推 wow56397849: 推推 从文章学到很多 06/30 19:46
5F:推 cowbadma5566: 推 07/03 02:46
6F:推 lp1116lp1116: 推 07/05 12:08
7F:推 chih2loveu: 推 07/07 20:05
8F:→ diabolica: 推 07/14 23:11
9F:推 paxetin: 推 10/19 18:11
10F:→ magic123: 推 01/27 16:19