总和差异的置信区间

机器算法验证 r 假设检验 置信区间
2022-04-04 12:43:39

我有来自电子商务网站的两个变体的数据,并想确定变体之间产生的利润差异的置信区间。我的数据包含每个访问者的订单价值和成本(产生支持问题)。75% 的访问者被分配到变体 A,其余的被分配到变体 B。

我将每个变化的价值计算为订单价值的总和减去成本。我想知道变化的期望值是否存在差异以及该差异的置信区间。当然,结果需要外推以具有可比性,因为一种变体的访问者较少。

变化的价值可能会受到平均订单价值的变化、买家数量的变化、导致成本的支持问题数量的变化或这些问题的平均成本的影响,因此需要考虑许多参数.

我的第一个意图是计算每个访问者的价值,测试每个访问者的平均价值差异,然后从那里推断,但我不确定这是一个有效的方法。此外,我不确定要使用什么测试,因为分布由大量 0 值(无成本和无订单)的访问者主导,成本通常比订单值小得多,这使得分布非常倾斜。也许我需要执行某种引导?

样本量很大,总共有大约 2000 名买家和 100 000 名参观者。我正在 R 中执行分析,但是对于在哪里寻找解决方案的任何帮助表示赞赏。

2个回答

是的,您可以简单地走 t 检验路线,因为这些与正态性的偏差与这样的样本量无关。显然,引导是一个完美的选择,我可以通过以下注释的 R 代码展示它是多么容易:

# examples raw wins in A and be
raw_win_A <- abs(rnorm(100000, mean=5, sd=15))
hist(raw_win_A, xlim=c(-10,100), breaks=20) #skewed
raw_win_B <- abs(rnorm(2000, mean=4.9, sd=20))
hist(raw_win_B, xlim=c(-10,100), breaks=20) #skewed


#compute means of n bootstrap samples of wins in A
n <- 10000
wins_A <- replicate(n, mean(sample(raw_win_A, replace=TRUE)))
#the same with B
wins_B <- replicate(n, mean(sample(raw_win_B, replace=TRUE)))

# show distribution of bootstrapped wins in A and B,
# these aber bound to be normally distributed with increasing n
hist(wins_A)
hist(wins_B)

# show distribution of wins_A minus wins_B
hist(wins_A - wins_B)

cat("Mean of wins_A minus wins-B: ")
cat(mean(wins_A - wins_B))
cat("1.96 times standard deviation of that:")
cat(1.96*sd(wins_A - wins_B))
cat("Confidence interval lower bound: ")
cat(mean(wins_A-wins_B)-1.96*sd(wins_A - wins_B))
cat("Confidence intercal upper bound:")
cat(mean(wins_A-wins_B)+1.96*sd(wins_A - wins_B))
cat("---\n Compare to t-test results:")
print(t.test(raw_win_A, raw_win_B))

这需要几秒钟(不到一分钟)才能运行。通过在前几行中模拟的示例数据,我得到了一个从 -3.973402 到 -2.906095 的自举置信区间,并且该t.test函数给出了从 -3.971132 到 -2.895014 的置信区间,即使数据高度偏斜(参见所有生成的直方图)通过我的代码)。所以是的,只要 n 足够高,t 检验就可以抵抗正态性违规。中心极限定理成立。

一个简单的引导方法是建立一个样本向量,(A -B)如果A并且B是您的网站不同版本的销售日志。给定这个向量,你执行这个向量的引导重采样。因此,您最终会得到一些可以近似差异真实分布的重采样。最后,要计算置信区间,您只需使用引导重采样平均值的基本高斯近似(甚至经验百分位数,例如 5%/95%)。