如何解决来自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 举报,一经查实,本站将立刻删除。