我试图使用PyMC来确定广告点击率(CTR)的分布。假设我们有1000个广告,我有所有广告的点击量和浏览量。我假设广告CTR的基本分布是Beta分布,我想使用PyMC来估计这个分布的参数。我将在下面的代码段unknown_alpha和unknown_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_alpha和unknown_beta的模型还没有完成,但是我不知道为什么我只得到array([ 0.])。我希望能找到5k元素的痕迹。
有人能解释我哪里出了问题吗?
干杯!
发布于 2017-03-07 21:17:03
我猜是mc.sample(iter=5000,burn=5000)线。你以5000为样本,然后扔掉第一个5000。为了保存5000,您需要mc.sample(iter=10000,burn=5000)
https://stackoverflow.com/questions/41527225
复制相似问题