2017-01-07 14 views
1

私はPyMCを使用して広告クリック率(CTR)の分布を調べようとしています。 1000個の広告があり、すべての広告のクリック数と再生回数を測定しているとします。私は、広告CTRの基礎となるディストリビューションがベータ版であると想定しています.PyMCを使用してこのディストリビューションのパラメータを見積もりたいと思います。これらのパラメータは、次のスニペットunknown_alphaunknown_betaで呼び出します。ここに私のコード例を示すためにpymc unexpected model output

は、1つの例のテストセットを生成することができる方法である:

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) 

出力:

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を使用しようとしたかのコードです: array([ 0.])

私はモデルが終了していないことを知って、まだ約unknown_alphaunknown_betaを推測するが、私ドン私がちょうどarray([ 0.])を得る理由を知りません。私は5k要素でトレースを得ることを期待していました。

誰かが私がどこに間違っていたか説明できますか?

乾杯!

答えて

0

私の推測は、mc.sample(iter = 5000、burn = 5000)という行になります。あなたは5000のためにサンプリングし、最初の5000を捨ててください。5000を維持するために、mc.sample(iter = 10000、burn = 5000)が必要です

+0

オハイオ州、 –