问题描述
经过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 (将#修改为@)