来自Python后验似然性的贝叶斯因素?

问题描述

经过AB测试后,我希望使用贝叶斯方法来解释结果。

给出以下代码或类似的代码,我将如何产生贝叶斯因子-边际似然比?

# A 
a_total = 28593
a_success = 3891
a_failure = a_total - a_success

# B
b_total = 28137
b_success = 3775
b_failure = b_total - b_success

# generate arrays
obs_a = np.repeat([1,0],[a_success,a_failure]) 
obs_b = np.repeat([1,[b_success,b_failure])

# pymc3 model
with pm.Model() as model:
    
    p_A = pm.Beta("p_A",1,1) 
    p_B = pm.Beta("p_B",1)
    
    delta = pm.Deterministic("delta",p_A - p_B)

    obs_A = pm.Bernoulli("obs_A",p_A,observed = obs_a)
    obs_B = pm.Bernoulli("obs_B",p_B,observed = obs_b)
    
    step = pm.NUTS()
    trace = pm.sample(10000,step = step)

b_lift = (trace['p_B'].mean() - trace['p_A'].mean()) / trace['p_A'].mean() * 100
b_prob = np.mean(trace["delta"] > 0)

a_lift = (trace['p_A'].mean() - trace['p_B'].mean()) / trace['p_B'].mean() * 100
a_prob = np.mean(trace["delta"] < 0)

print(f'There is {b_prob} probability B outperforms A by a magnitude of {round(b_lift,2)}%') 
print(f'There is {a_prob} probability A outperforms B by a magnitude of {round(a_lift,2)}%') 
-- output:
There is 0.666 probability B outperforms A by a magnitude of 1.29%
There is 0.334 probability A outperforms B by a magnitude of -1.28%

如果我没记错的话,贝叶斯因子实质上就是上述证据的量度?

非常感谢您的帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)