0

我正在尝试进行 AB 测试 - 比较网站变体之间的收入。

我们的标准方法(使用 t 检验)似乎行不通,因为无法对收入进行二项式建模。但是,我阅读了有关引导的信息并提出了以下代码:

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 拆分的影响是什么(预计每个组会看到 50% 的 cookie)。在这里,我看到了一些相当出乎意料的东西——给出以下代码:

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)

一点都不重要(我想我的解释正确吗?)

但是,当我运行此代码时:

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 统计量的变化很大。

我错过了运行这种测试的明显方法吗?

干杯,

马特

ps

我们拥有的数据: 网站 1:测试组 1:唯一 cookie:收入 网站 1:测试组 2:唯一 cookie:收入 网站 2:测试组 1:唯一 cookie:收入 网站 2:测试组 2:唯一 cookie:收入等

我们想要什么:

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

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

奖金:

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

4

1 回答 1

1

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

关于你的问题。阅读该代码并理解您认为您正在测试的内容非常困难——您的 H_0(零假设)是什么?如果我说实话(我希望你不要生气)它看起来很困惑。

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

Website   Method     Revenue
-------   ------     -------
w1        A          12
w2        B          0
w3        A          6
w4        B          0

等等等等。这看起来正确吗?您是否有重复测量(即,您是否针对每种方法对每个网站进行了收入测量?或者您是否将网站随机分配给方法?)?我猜您传递给您的方法的内容是其中一种方法的所有收入的数组,但是它们是否以任何方式在方法之间配对?

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

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

于 2014-03-11T13:38:34.487 回答