我是一名从事 A/B 测试系统的软件开发人员。我没有扎实的统计背景,但在过去几个月里一直在学习知识。
典型的测试场景涉及比较网站上的两个 URL。访客访问LANDING_URL
,然后随机转发到URL_CONTROL
或URL_EXPERIMENTAL
。一个访问者构成一个样本,当访问者在该站点上执行一些期望的操作时,就达到了胜利条件。这构成了一次转化率,转化率就是转化率(通常以百分比表示)。给定 URL 的典型转化率在 0.01% 到 0.08% 的范围内。我们运行测试以确定新 URL 与旧 URL 的比较。如果URL_EXPERIMENTAL
显示跑赢大盘URL_CONTROL
,我们替换URL_CONTROL
为URL_EXPERIMENTAL
。
我们使用简单的假设检验技术开发了一个系统。我在这里使用了另一个 CrossValidated 问题的答案来开发这个系统。
测试设置如下:
- 的转换率估计值
CRE_CONTROL
是URL_CONTROL
使用历史数据计算的。 - 设定所需的目标转化
CRE_EXPERIMENTAL
率URL_EXPERIMENTAL
。 - 通常使用 0.95 的显着性水平。
- 通常使用 0.8 的幂。
所有这些值一起用于计算所需的样本量。我正在使用 R 函数power.prop.test
来获得这个样本量。
将运行测试,直到收集到所有样本。此时, 计算CR_CONTROL
和的置信区间CR_EXPERIMENTAL
。如果它们不重叠,则可以以 0.95 的显着性水平和 0.8 的功效宣布获胜者。
但是,我们测试的用户有两个主要问题:
1. 如果在测试过程中的某个时间点,收集到足够多的样本来显示明显的获胜者,是否可以停止测试?
2. 如果在测试结束时没有宣布获胜者,我们可以运行更长的测试,看看我们是否可以收集足够的样本来找到获胜者?
应该注意的是,存在许多商业工具,允许他们的用户完全按照我们自己的用户的意愿去做。我读到上面有很多谬误,但我也遇到了停止规则的想法,并想探索在我们自己的系统中使用这种规则的可能性。
以下是我们想要考虑的两种方法:
1. 使用power.prop.test
,将当前测量的转化率与当前样本数进行比较,看看是否已收集到足够的样本来宣布获胜者。
示例:已设置测试以查看我们的系统中是否存在以下行为:
CRE_CONTROL
: 0.1CRE_EXPERIMENTAL
: 0.1 * 1.3- 使用这些参数,样本量
N
为 1774。
然而,随着测试的进行并达到 325 个样本,CRM_CONTROL
(对照的测量转换率)为 0.08 和CRM_EXPERIMENTAL
0.15。power.prop.test
以这些转换率运行,N
发现为 325。正是宣布CRM_EXPERIMENTAL
成为获胜者所需的样本数量!在这一点上,我们希望测试可以结束。类似地,如果测试达到 1774 个样本但没有找到获胜者,那么它达到 2122 个样本足以表明CRM_CONTROL
0.1 和CRM_EXPERIMENTAL
0.128 是可以宣布获胜者的结果。
在一个相关问题中,用户建议这样的测试不太可信,因为它鼓励早期停止样本较少,并且容易受到估计偏差和 I 类和 II 类错误数量增加的影响。有什么方法可以使这个停止规则起作用吗?这是我们的首选方法,因为这意味着我们的编程时间更少。也许这个停止规则可以通过提供某种数字分数或分数来衡量测试的可信度是否应该提前停止?
这些测试方法正是针对我们所处的情况而设计的:我们的用户如何开始和结束测试,以免在测试中浪费过多的时间?运行测试的时间过长,或者必须使用不同的参数重新开始测试。
在上述两种方法中,我偏爱 SPRT,因为数学对我来说更容易掌握,而且看起来它可能更容易编程。但是,我不明白如何在这种情况下使用似然函数。如果有人可以构建一个如何计算似然比(似然比的累积和)的示例,并继续通过一个示例来说明当一个人将继续监测、当一个人接受原假设和备择假设时的情况,这将帮助我们确定 SPRT 是否是正确的方法。