pymc 意外模型输出
pymc unexpected model output
我正在尝试使用 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 个元素的轨迹。
谁能解释我哪里出错了?
干杯!
我猜是 mc.sample(iter=5000, burn=5000) 行。您采样 5000,并丢弃前 5000。要保留 5000,您需要 mc.sample(iter=10000, burn=5000)
我正在尝试使用 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 个元素的轨迹。
谁能解释我哪里出错了?
干杯!
我猜是 mc.sample(iter=5000, burn=5000) 行。您采样 5000,并丢弃前 5000。要保留 5000,您需要 mc.sample(iter=10000, burn=5000)