pymc 意外模型输出

pymc unexpected model output

我正在尝试使用 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 个元素的轨迹。

谁能解释我哪里出错了?

干杯!

我猜是 mc.sample(iter=5000, burn=5000) 行。您采样 5000,并丢弃前 5000。要保留 5000,您需要 mc.sample(iter=10000, burn=5000)