Pym中的Gamma分布 - 贝叶斯检验

时间:2014-06-21 16:54:34

标签: python bayesian ab-testing pymc gamma-distribution

我已经密切关注这本书(http://nbviewer.ipython.org/github/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/blob/master/Chapter2_MorePyMC/MorePyMC.ipynb),但在尝试将Pymc用于我自己的问题时,我发现自己遇到了问题。

我从已下订单的客户处获得了大量订单价值,他们看起来像Gamma发行版。我正在进行AB测试并希望了解订单值的分布如何变化 - 输入Pymc。我跟随书中的例子,但发现它并没有真正起作用 - 第一次尝试是这样的:

import pymc as pm
import numpy as np
from matplotlib import pyplot as plt
from pylab import savefig

## Replace these with the actual order values in the test set
## Have made slightly different to be able to see differing distributions
observations_A = pm.rgamma(3.5, 0.013, size=1000)
observations_B = pm.rgamma(3.45, 0.016, size=2000)

## Identical prior assumptions
prior_a = pm.Gamma('prior_a', 3.5, 0.015)
prior_b = pm.Gamma('prior_b', 3.5, 0.015)

## The difference in the test groups is the most important bit
@pm.deterministic
def delta(p_A = prior_a, p_B = prior_b):
    return p_A - p_B

## Add observations
observation_a = pm.Gamma('observation_a', prior_a, value=observations_A, observed=True)
observation_b = pm.Gamma('observation_b', prior_b, value=observations_A, observed=True)

mcmc = pm.MCMC([prior_a, prior_b, delta, observation_a, observation_b])
mcmc.sample(20000,1000)

查看previous_a和prior_b的跟踪平均值,我看到的值大约为3.97 / 3.98,当我查看这些先验的统计数据时,我看到了类似的故事。但是,在定义先验时,在先前调用rand()方法给出了我期望的值(在100到400之间)。基本上,其中一个更新阶段(我对观察阶段最不确定)正在做一些我不期望的事情。

稍微挣扎了一下我发现了这个页面(http://matpalm.com/blog/2012/12/27/dead_simple_pymc/)并决定采用不同的方法:

import pymc as pm
import numpy as np
from matplotlib import pyplot as plt
from pylab import savefig

## Replace these with the actual order values in the test set
observations_A = pm.rgamma(3.5, 0.013, size=1000)
observations_B = pm.rgamma(3.45, 0.016, size=2000)

## Initial assumptions
A_Rate = pm.Uniform('A_Rate', 2, 4)
B_Rate = pm.Uniform('B_Rate', 2, 4)
A_Shape = pm.Uniform('A_Shape', 0.005, 0.05)
B_Shape = pm.Uniform('B_Shape', 0.005, 0.05)

p_A = pm.Gamma('p_A', A_Rate, A_Shape, value=observations_A, observed=True)
p_B = pm.Gamma('p_B', A_Rate, B_Shape, value=observations_B, observed=True)

## Sample
mcmc = pm.MCMC([p_A, p_B, A_Rate, B_Rate, A_Shape, B_Shape])
mcmc.sample(20000, 1000)

## Plot the A_Rate, B_Rate, A_Shape, B_Shape
## Using those, determine the Gamma distribution
## Plot both - and draw 1000000... samples from each.
## Perform statistical tests on these.

因此,我们不是直接寻找Gamma发行版,而是寻找参数(我认为)。这似乎是一种享受,因为它给了我正确数量级的痕迹值。但是,现在我可以为两个测试组和测试组绘制alpha样本的直方图,但这并不是我之后的真实情况。我希望能够绘制每个测试组的类似伽马的'从先前和我提供的值计算的分布。我也希望能够策划一个三角洲'正如AB测试示例所示。我觉得第二个例子的确定性变量将是我最好的选择,但我真的不知道构建它的最佳方法。

长话短说 - 我从Gamma发行版中获取了我想要进行AB测试的数据。我已经获得了数据的伽马先验视图,但可以说服我已经获得了正常的先前视图,如果这更容易的话。我想以合理的方式用我收集的数据更新相同的先验,并绘制分布和它们之间的差异。

干杯,

马特

0 个答案:

没有答案