2017-01-07 16 views
1

Я пытаюсь использовать 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!

ответ

0

Моей догадкой была бы строка mc.sample (iter = 5000, burn = 5000). Вы отбираете 5000 и выбрасываете первые 5000. Чтобы сохранить 5000, вы хотите mc.sample (iter = 10000, burn = 5000)

+0

Ох -, - спасибо за помощь! –