2017-01-07 3 views
1

Ich versuche, PyMC zu verwenden, um die Verteilung von Anzeigenklickraten (CTRs) zu bestimmen. Nehmen wir an, wir haben 1000 Anzeigen und ich habe Messungen für Klicks und Aufrufe für alle Anzeigen. Ich gehe davon aus, dass die zugrunde liegende Verteilung der Anzeigen-CTRs eine Beta-Verteilung ist, und ich möchte PyMC verwenden, um die Parameter dieser Verteilung zu schätzen. Ich werde diese Parameter in den folgenden Snippets unknown_alpha und unknown_beta aufrufen.pymc unerwartete Modellausgabe

meinen Beispiel-Code zu zeigen, hier ist, wie man ein Beispiel Test-Set erzeugen konnte:

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 

Und hier ist der Code, wie ich versuchte PyMC zu verwenden:

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) 

Ausgang: array([ 0.])

ich weiß, dass das Modell nicht abgeschlossen ist, noch, zu folgern, über unknown_alpha und unknown_beta, aber ich don Ich weiß nicht warum ich array([ 0.]) bekomme. Ich erwartete eine Spur mit 5k Elementen zu bekommen.

Kann mir jemand erklären, wo ich falsch gelaufen bin?

Prost!

Antwort

0

Meine Vermutung wäre die mc.sample (iter = 5000, burn = 5000) Linie. Sie Probe für 5000, und werfen Sie die ersten 5000 weg. Um 5000 zu halten, wollen Sie mc.sample (iter = 10000, brennen = 5000)

+0

oh -, - danke für die Hilfe! –

Verwandte Themen