我想要一系列贝叶斯模型,我有一个独特的先验。每个模型基本上都有自己的观测向量。例如,假设我想查找网站中每种产品的转换率。我可以将网站的转化率用作所有项目的常用优先级,然后根据每个项目的观察数据更新我的可能性。因此,举例来说,为了得出项目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个样本数。