我已经密切关注这本书(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测试的数据。我已经获得了数据的伽马先验视图,但可以说服我已经获得了正常的先前视图,如果这更容易的话。我想以合理的方式用我收集的数据更新相同的先验,并绘制分布和它们之间的差异。
干杯,
马特