首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中对Revenue运行AB测试

在Python中对Revenue运行AB测试
EN

Stack Overflow用户
提问于 2014-03-10 22:53:28
回答 1查看 1.4K关注 0票数 0

我正在尝试运行一个AB测试--比较网站上不同变种的收入。

我们的标准方法(使用t-test)似乎行不通,因为收入不能用二项式建模。但是,我阅读了有关引导的内容,并编写了以下代码:

代码语言:javascript
复制
import numpy as np
import scipy.stats as stats
import random

def resampler(original_array, number_of_samples):
    sample_array = np.zeros(number_of_samples)
    choice = random.choice
    for i in range(number_of_samples):
        sample_array[i] = sum([choice(original_array) for _ in range(len(original_array))])

    y = stats.normaltest(sample_array)
    if y[1] > 0.001:
        print y
        new_y = resampler(original_array, number_of_samples * 2)
        y = new_y
    return sample_array

基本上,从“收入向量”(稀疏填充的向量-对于所有未转换的访问者为零)中随机抽样,并对结果向量求和,直到得到正态分布。

我可以对两个测试组执行这一点,在这一点上,我得到了两个正态分布的量用于t-检验。使用scipy.stats.ttest_ind,我能够得到一些看起来合理的结果。

然而,我想知道运行这个过程对cookie split的影响会是什么(预计每个组看到50%的cookie)。在这里,我看到了一些相当意想不到的事情--给出了以下代码:

代码语言:javascript
复制
x = [272898,389076,61091,65251,10060,1468815,216014,25863,42421,476379,73761]
y = [274253,387941,61333,65020,10056,1466908,214679,25682,42873,474692,73837]
print stats.ttest_ind(x,y)

我得到了输出:(0.0021911476165975929,0.99827342714956546)

一点也不重要(我想我的解释是正确的?)

然而,当我运行这段代码时:

代码语言:javascript
复制
for i in range(1000, 100000, 5000):
    one_array = resampler(x,i)
    two_array = resampler(y,i)
    t_value, p_value = stats.ttest_ind(one_array, two_array)
    t_value_array.append(t_value)
    p_value_array.append(p_value)

print np.mean(t_value_array)
print np.mean(p_value_array)

我得到: 0.642213492773 0.490587258892

我真的不确定如何解释这些数字-据我所知,我已经反复从实际的cookie拆分中生成正态分布(数组中的每个数字代表一个不同的站点)。在每种情况下,我都对这两个分布使用了t检验,并获得了t统计量和p值。

这是合法的行为吗?我只运行了这些测试多次,因为在不这样做的时候,我看到p值和t统计量有太多的变化。

我是不是错过了一种运行这种测试的明显方式?

干杯,

哑光

p.s

我们拥有的数据:网站1:测试组1:唯一cookies:收入网站1:测试组2:唯一cookies:收入网站2:测试组1:唯一cookies:收入网站2:测试组2:唯一cookies:收入e.t.c.

我们想要的:

测试组x正在以z%的确定性击败测试组y

(测试组1的零假设=测试组2)

奖励:

与上面相同,但在每个站点以及整体基础上

EN

回答 1

Stack Overflow用户

发布于 2014-03-11 21:38:34

首先,使用t-test来测试二项式响应变量是不正确的。您需要使用逻辑回归模型。

继续回答你的问题。阅读这些代码并理解你认为你在测试什么是非常困难的-你的H_0是什么(零假设)?如果我是诚实的(我希望你不会生气),它看起来很混乱。

我将不得不猜测数据是什么样子的-你有一堆这样的样本:

代码语言:javascript
复制
Website   Method     Revenue
-------   ------     -------
w1        A          12
w2        B          0
w3        A          6
w4        B          0

等等。这看起来正确吗?你是否有重复的衡量标准(例如,你是否对每种方法的每个网站都有收入衡量标准?或者你是否随机将网站分配给方法?)?我猜您传递给您的方法的是一个数组,其中一个方法的所有收入依次为一个,但是它们是否以某种方式在方法之间配对?

我可以想象用这些数据测试各种假设。例如,方法A是否比方法B更有可能产生非零收入(使用逻辑回归,响应是二进制的)?在一种方法产生收入的情况下,方法A产生的收入是否比方法B产生的多(非零收入的t检验)?在所有情况下,方法A是否比方法B产生更多的收入(可能是符号测试,因为当您包括零时,正态性假设存在问题)。我假设这个令人不安的假设就是为什么您运行重复的子采样过程,直到您的数据看起来正常,但您不能这样做并测试任何有意义的东西:仅仅因为您的数据的某个子集是正态分布的,并不意味着您只能查看它的这一部分!事实上,我不会感到惊讶,这实际上是排除了大多数零条目或大多数非零条目。

如果您详细说明了一些实际数据是什么样子,以及您想要回答哪些问题,我很乐意提出更具体的建议。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22303555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档