pymc意外模型输出

时间:2017-01-07 22:20:01

标签: python pymc mcmc

我尝试使用PyMC来确定广告点击率(CTR)的分布情况。我们假设我们有1000个广告,并且我测量了所有广告的点击次数和观看次数。我假设广告点击率的基础分布是Beta分布,我想使用PyMC来估计此分布的参数。我将在以下代码段unknown_alphaunknown_beta中调用这些参数。

要显示我的示例代码,以下是如何生成示例测试集:

from scipy.stats import beta
from scipy.stats import geom
from scipy.stats import binom

def generate_example_data(data_size=1000, unknown_alpha=30, unknown_beta=100):
    ctrs = beta.rvs(a=unknown_alpha, b=unknown_beta, size=data_size)

    data_views = geom.rvs(0.001, size=data_size)
    data_clicks = []
    for ctr, views in zip(ctrs, data_views):
        data_clicks.append(binom.rvs(p=ctr, n=views))

    return data_views, data_clicks

以下是代码,我是如何尝试使用PyMC的:

import pymc 

def model(data_views, data_clicks):
    ctr_prior = pymc.Beta('ctr_prior', alpha=1.0, beta=1.0)
    views = pymc.Geometric('views', 0.01, observed=True, value=data_views)
    clicks = pymc.Binomial('clicks', n=views, p=ctr_prior, observed=True, value=data_clicks)

    model = pymc.Model([ctr_prior, views, clicks]) 

    mc = pymc.MCMC(model)  
    mc.sample(iter=5000, burn=5000) 

    return mc.trace('ctr_prior')[:]

views, clicks = generate_example_data()
model(views, clicks)

输出: array([ 0.])

我知道该模型尚未完成,但推断unknown_alphaunknown_beta,但我不知道为什么我会得到array([ 0.])。我期望获得5k元素的痕迹。

有人可以解释我哪里出错了吗?

干杯!

1 个答案:

答案 0 :(得分:0)

我的猜测是mc.sample(iter = 5000,burn = 5000)行。你抽样5000,扔掉前5000.要保持5000,你想要mc.sample(iter = 10000,burn = 5000)