2017-01-07 116 views
1

我試圖使用PyMC來確定廣告點擊率(點擊率)的分佈。假設我們有1000個廣告,而且我有針對所有廣告的點擊次數和觀看次數的衡量標準。我假設廣告點擊率的底層分佈是一個Beta分佈,我想用PyMC來估計這個分佈的參數。我將在以下片段中調用這些參數unknown_alphaunknown_betapymc意外模型輸出

爲了表示我的示例代碼,這裏是一個如何生成一個例子測試設置:

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_alphaunknown_beta,但我不不知道爲什麼我只是得到array([ 0.])。我預計會得到5k元素的痕跡。

有人可以解釋我哪裏出錯了嗎?

乾杯!

回答

0

我的猜測是mc.sample(iter = 5000,burn = 5000)這一行。你抽樣5000,並扔掉第5000.要保持5000,你想mc.sample(iter = 10000,刻錄= 5000)

+0

哦, - - 感謝您的幫助! –