Я пытаюсь использовать PyMC для определения распределения ставок по кликам (CTR). Предположим, у нас есть 1000 объявлений, и у меня есть измерения для кликов и просмотров для всех объявлений. Я предполагаю, что базовое распределение рекламных CTR является бета-распределением, и я хотел бы использовать PyMC для оценки параметров этого распределения. Я буду называть эти параметры следующими фрагментами unknown_alpha
и unknown_beta
.pymc неожиданный вывод модели
Чтобы показать мой пример кода, вот как можно сгенерировать пример тестового набора:
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 элементами.
Может кто-нибудь объяснить мне, где я ошибся?
Cheers!
Ох -, - спасибо за помощь! –