我尝试使用PyMC来确定广告点击率(CTR)的分布情况。我们假设我们有1000个广告,并且我测量了所有广告的点击次数和观看次数。我假设广告点击率的基础分布是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元素的痕迹。
有人可以解释我哪里出错了吗?
干杯!
答案 0 :(得分:0)
我的猜测是mc.sample(iter = 5000,burn = 5000)行。你抽样5000,扔掉前5000.要保持5000,你想要mc.sample(iter = 10000,burn = 5000)