2012-10-25 14 views
8

Quando ci alleniamo un CTR (click through rate) del modello, a volte abbiamo bisogno Calcute il vero CTR dai dati storici, come questoCome evitare il pregiudizio dell'impressione quando si calcola il ctr?

 

       #(click) 
    ctr = ---------------- 
       #(impressions) 

Sappiamo che, se il numero di impressioni è troppo piccolo, il calcolato con ctr non è reale. Quindi impostiamo sempre una soglia per filtrare le impressioni abbastanza grandi.

Ma sappiamo che le impressioni più elevate, la maggiore confidenza per il ctr. Quindi la mia domanda è: esiste un metodo statistico normalizzato per le impressioni per calcolare il ctr?

Grazie!

risposta

11

Probabilmente hai bisogno di una rappresentazione dell'intervallo di confidenza per il tuo ctr stimato. Wilson score interval è una buona prova.

Wilson score interval

È necessario di seguito le statistiche per calcolare il punteggio di confidenza:

  • \hat p è il ctr constatato (frazione del #clicked vs #impressions)
  • n è il numero totale di impressioni
  • z α/2 è il quantile (1-α/2) dello standard né Distribuzione mal

Una semplice implementazione in pitone è mostrato sotto, uso z (1-α/2) = 1,96 corrispondente ad un intervallo di confidenza 95%. Ho allegato 3 risultati dei test alla fine del codice.

# clicks  # impressions  # conf interval 
2    10     (0.07, 0.45) 
20   100     (0.14, 0.27) 
200   1000    (0.18, 0.22) 

Ora è possibile impostare alcune soglie per utilizzare l'intervallo di confidenza calcolato.

from math import sqrt 

def confidence(clicks, impressions): 
    n = impressions 
    if n == 0: return 0 
    z = 1.96 #1.96 -> 95% confidence 
    phat = float(clicks)/n 
    denorm = 1. + (z*z/n) 
    enum1 = phat + z*z/(2*n) 
    enum2 = z * sqrt(phat*(1-phat)/n + z*z/(4*n*n)) 
    return (enum1-enum2)/denorm, (enum1+enum2)/denorm 

def wilson(clicks, impressions): 
    if impressions == 0: 
     return 0 
    else: 
     return confidence(clicks, impressions) 

if __name__ == '__main__': 
    print wilson(2,10) 
    print wilson(20,100) 
    print wilson(200,1000) 

"""  
-------------------- 
results: 
(0.07048879557839793, 0.4518041980521754) 
(0.14384999046998084, 0.27112660859398174) 
(0.1805388068716823, 0.22099327100894336) 
""" 
+0

Grazie per la risposta. Ma voglio sapere se esiste un metodo statistico normalizzato per le impressioni, non la confidenza per il ctr stimato. Ad esempio, questo metodo potrebbe essere simile al seguente: # (clic) * 2/(# (impressioni) + avg (#impressioni)) – Tim

+1

In realtà non sono sicuro di aver capito cosa vuoi e perché lo vuoi. Che ne dici di uno stimatore bayesiano? O qualcosa come il punteggio IMDB? http://en.wikipedia.org/wiki/Bayes_estimator – greeness

+0

Non z = 1,6 corrisponde al 90% di confidenza? Aiuto di Google: https://www.google.ru/search?q=z+values+confidence, article for dummies :-): http://www.dummies.com/how-to/content/finding-appropriate- zvalues-for-given-confidence-l.html – skaurus

4

Se si considera questo come parametro binomiale, è possibile eseguire la stima bayesiana. Se il tuo precedente su ctr è uniforme (una distribuzione Beta con parametri (1,1)), il tuo posteriore è Beta (1 + # clic, 1 + # impressioni- # clic). La tua media posteriore è # clic + 1/# impressioni + 2 se vuoi una singola statistica riassuntiva di questo posteriore, ma probabilmente non lo fai, ed ecco perché:

Non so quale sia il tuo metodo per determinare se ctr è abbastanza alto, ma diciamo che ti interessa tutto con ctr> 0.9. È quindi possibile utilizzare la funzione di densità cumulativa della distribuzione beta per esaminare quale proporzione della massa di probabilità supera la soglia di 0,9 (questo sarà solo 1 - il cdf a 0,9). In questo modo, la soglia includerà naturalmente l'incertezza sulla stima a causa delle dimensioni limitate del campione.

0

Ci sono molti modi per calcolare questo intervallo di confidenza. Un'alternativa al Wilson Score è l'intervallo di Clopper-Perrson, che ho trovato utile nei fogli di calcolo.

Upper Bound Equation

Lower Bound Equation

Dove

  • B() è la Beta Inversa Distribution
  • alpha è l'errore livello di confidenza (ad esempio, per il 95% di confidenza di livello, alfa è 5%
  • n numero di campionamento le (ad es. impressioni)
  • x è il numero di successi (ad esempio scatti)

In Excel un'implementazione per B() è fornito dalla formula BETA.INV.

Non esiste una formula equivalente per B() in Google Fogli, ma una funzione personalizzata di Google Apps Script può essere adattato dalla Biblioteca di statistica JavaScript (per esempio di ricerca GitHub per jstat)

Problemi correlati