Firebase Revenue AB 测试算法
Firebase Revenue AB testing algorithm
我们在 firebase 进行了 运行 AB 测试,结果如下:
我也在构建自己的贝叶斯 AB 测试套件,想知道他们是如何得出这些结论的。
我正在做的是为控制组和变体 C 查询此测试的数据:
- 控制组:来自 80491 名用户的 900 名付款人的收入为 11943 美元。
- 变体 C:16487 美元的收入来自 80224 位用户的 894 位付款人。
我的算法基于这个工具:https://vidogreg.shinyapps.io/bayes-arpu-test/。当我输入这些输入时,我得到以下结果:
这个工具似乎更有信心变体 C 比对照组和 Firebase 更好。似乎每个用户的收入的 Firebase 分布是倾斜的,而贝叶斯 ARPU 工具具有非常对称的分布。
贝叶斯 ARPU 工具的代码可用。他们根据本文使用共轭先验得出这些结论:
https://cdn2.hubspot.net/hubfs/310840/VWO_SmartStats_technical_whitepaper.pdf
谁能帮我看看哪个结果最好?
我发现我的问题是什么了。
第一个问题就是要分成两步。由于它是免费增值应用程序,因此大多数用户不付费。这意味着这些用户不会为分发提供额外的信息。
所以,
我们首先需要找到付款人百分比的后验分布。这可以按照我提到的论文中的解释来完成。在 Python 中,后验分布的函数是这样的:
def binomial_rvar(successs, samples):
rvar = np.random.beta(1 + successes, 1 + (total - successes), samples)
return rvar
其次,在所有付款人中,我们希望获得收入。论文也描述了如何做收入,但是他们假设收入是指数分布的。我们的应用程序不是这种情况。我们有一些用户在这个应用程序上花费了大量的钱。如果这个用户属于其中一个组,这个方法会立即认为它是最好的。
我们可以做的是获取帕累托分布样本的对数,这会将帕累托分布转换为指数分布。我们首先获取用户收入的日志,然后将所有这些加在一起创建“logsum”并从它有多少用户来计算。然后我们可以使用与论文相同的方法。在 Python 中,这将是这样的:
def get_exponential_rvars(total_sum, users, samples):
r_var = 1. / np.random.gamma(users, 1 / (1 + total_sum), samples)
return r_var
我们现在可以将这两个 r_var 结果相乘,得出每个用户收入的最终分配。
我们在 firebase 进行了 运行 AB 测试,结果如下:
我也在构建自己的贝叶斯 AB 测试套件,想知道他们是如何得出这些结论的。
我正在做的是为控制组和变体 C 查询此测试的数据:
- 控制组:来自 80491 名用户的 900 名付款人的收入为 11943 美元。
- 变体 C:16487 美元的收入来自 80224 位用户的 894 位付款人。
我的算法基于这个工具:https://vidogreg.shinyapps.io/bayes-arpu-test/。当我输入这些输入时,我得到以下结果:
这个工具似乎更有信心变体 C 比对照组和 Firebase 更好。似乎每个用户的收入的 Firebase 分布是倾斜的,而贝叶斯 ARPU 工具具有非常对称的分布。
贝叶斯 ARPU 工具的代码可用。他们根据本文使用共轭先验得出这些结论:
https://cdn2.hubspot.net/hubfs/310840/VWO_SmartStats_technical_whitepaper.pdf
谁能帮我看看哪个结果最好?
我发现我的问题是什么了。
第一个问题就是要分成两步。由于它是免费增值应用程序,因此大多数用户不付费。这意味着这些用户不会为分发提供额外的信息。
所以, 我们首先需要找到付款人百分比的后验分布。这可以按照我提到的论文中的解释来完成。在 Python 中,后验分布的函数是这样的:
def binomial_rvar(successs, samples):
rvar = np.random.beta(1 + successes, 1 + (total - successes), samples)
return rvar
其次,在所有付款人中,我们希望获得收入。论文也描述了如何做收入,但是他们假设收入是指数分布的。我们的应用程序不是这种情况。我们有一些用户在这个应用程序上花费了大量的钱。如果这个用户属于其中一个组,这个方法会立即认为它是最好的。
我们可以做的是获取帕累托分布样本的对数,这会将帕累托分布转换为指数分布。我们首先获取用户收入的日志,然后将所有这些加在一起创建“logsum”并从它有多少用户来计算。然后我们可以使用与论文相同的方法。在 Python 中,这将是这样的:
def get_exponential_rvars(total_sum, users, samples):
r_var = 1. / np.random.gamma(users, 1 / (1 + total_sum), samples)
return r_var
我们现在可以将这两个 r_var 结果相乘,得出每个用户收入的最终分配。