使用相同的先前

时间:2016-03-30 16:58:06

标签: python pymc3

我想要一系列贝叶斯模型,我有一个独特的先验。每个模型基本上都有自己的观测向量。例如,假设我想查找网站中每种产品的转换率。我可以将网站的转化率用作所有项目的常用优先级,然后根据每个项目的观察数据更新我的可能性。因此,举例来说,为了得出项目A的转换率的后验分布,我将使用我迄今为止收集的所有数据A和公共先验(网站转换率)。

这是我从Twiecki的Europy presentation借来的一些代码:

np.random.seed(9)
algo_a = sp.stats.bernoulli(.5).rvs(300) # 50% profitable days
algo_b = sp.stats.bernoulli(.6).rvs(300) # 60% profitable days

import pymc as pm
model = pm.Model()
with model: # model specifications in PyMC3 are wrapped in a with-statement
    # Define random variables
    theta_a = pm.Beta('theta_a', alpha=5, beta=5) # prior
    theta_b = pm.Beta('theta_b', alpha=5, beta=5) # prior

    # Define how data relates to unknown causes
    data_a = pm.Bernoulli('observed A',
                          p=theta_a, 
                          observed=algo_a)

    data_b = pm.Bernoulli('observed B', 
                          p=theta_b, 
                          observed=algo_b)

    # Inference!
    start = pm.find_MAP() # Find good starting point
    step = pm.Slice() # Instantiate MCMC sampling algorithm
    trace = pm.sample(10000, step, start=start, progressbar=False) # draw posterior samples using slice sampling 

他正在做的是推断哪个样本在A / B测试中表现更好。这与我的问题类似,唯一的区别是我没有比较基线和实验,而是网站中的项目。

如果我们只有两个样本,基线和实验,那么效果很好。但是,如果我们有100个同时运行的实验,我们还能做些什么呢?有没有办法传递可能性分布(在这种情况下伯努利)一系列观察?在这种情况下,它将是一个300x100阵列,其中300是每个样本的二进制观察值和100个样本数。

0 个答案:

没有答案