使用相同的pri拟合多个模型

2024-06-28 18:47:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想拟合一系列贝叶斯模型,其中我有一个独特的先验知识。每个模型基本上都有自己的观测向量。例如,假设我想找到一个网站中每个产品的转化率。我可以使用网站的转换率作为所有项目的通用优先级,然后根据每个项目的观察数据更新我的可能性。举个例子,为了得到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是样本数。你知道吗


Tags: 数据项目模型datamodel网站randomstart