2012-10-25 14 views
8

Kiedy trenować CTR (click through rate) modelu, czasami musimy Calcute prawdziwą CTR na podstawie danych historycznych, jak toJak uniknąć stronniczości wyświetleń podczas obliczania ctr?

 

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

Wiemy, że jeśli liczba wyświetleń jest zbyt mała, calculted ctr nie jest prawdziwe. Dlatego zawsze ustalamy próg, aby odfiltrować wystarczająco dużą liczbę wyświetleń.

Ale wiemy, że wyższe wrażenia, wyższa pewność dla ctr. Następnie moje pytanie brzmi: czy istnieje znormalizowana wrażeń metoda statystyczna do obliczenia ctr?

Dzięki!

Odpowiedz

11

Prawdopodobnie potrzebujesz reprezentacji przedziału ufności dla szacowanego ctr. Wilson score interval jest dobrym rozwiązaniem.

Wilson score interval

trzeba poniżej statystyki obliczyć wynik ufności:

  • \hat p jest obserwowana CTR (frakcja #clicked vs #impressions)
  • n jest całkowitą liczbą wrażeń
  • z α/2 jest kwantylem standardowym nr (1-α/2) Rozkład mal

prosta implementacja, w pytona przedstawionym poniżej użyć z (1-α/2) = 1,96, co odpowiada 95% przedziału ufności. Dołączyłem 3 wyniki testu na końcu kodu.

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

Teraz można ustawić próg, aby użyć obliczonego przedziału ufności.

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

Dzięki za odpowiedź. Ale chcę wiedzieć, czy istnieje statystyczna metoda znormalizowana pod względem wyświetleń, a nie pewność dla szacowanego ctr. Na przykład ta metoda może wyglądać następująco: # (kliknij) * 2/(# (wyświetlenia) + średnia (#impressions)) – Tim

+1

Właściwie nie jestem pewien, czy rozumiem, czego chcesz i dlaczego chcesz tego dokonać. A co z estymatorem Bayesa? Lub coś w rodzaju wyniku IMDB? http://en.wikipedia.org/wiki/Bayes_estimator – greeness

+0

Czy z = 1,6 nie odpowiada 90% pewności? Google helper: https://www.google.ru/search?q=z+values+confidence, artykuł dla manekinów :-): http://www.dummies.com/how-to/content/finding-appropriate- zvalues-for-given-confidence-l.html – skaurus

4

Jeśli traktujesz to jako parametr dwumianowy, możesz wykonać estymację Bayesian. Jeśli twój poprzedni ctr jest jednolity (rozkład Beta z parametrami (1,1)) to twój posterior jest Beta (1 + kliknięcie, 1 + # wyświetleń- # kliknięcie). Twój tylny środek to # kliknięcie + 1/# wyświetleń + 2, jeśli chcesz otrzymać jedną podsumowującą statystykę tego tylnego, ale prawdopodobnie nie, i oto dlaczego:

Nie wiem, jaka jest twoja metoda określania, czy ctr jest wystarczająco wysokie, ale załóżmy, że interesuje cię wszystko za pomocą ctr> 0.9. Następnie można użyć funkcji gęstości skumulowanej rozkładu beta, aby sprawdzić, jaka część masy prawdopodobieństwa przekracza próg 0,9 (będzie to po prostu 1 - cdf przy 0,9). W ten sposób próg będzie naturalnie zawierać niepewność co do oszacowania z powodu ograniczonej wielkości próby.

0

Istnieje wiele sposobów na obliczenie tego przedziału ufności. Alternatywą dla Wilson Score jest przedział Clopper-Perrson, który okazał się przydatny w arkuszach kalkulacyjnych.

Upper Bound Equation

Lower Bound Equation

Gdzie

  • B() jest dystrybucja odwrotności Beta
  • alpha jest błąd poziom ufności (na przykład 95% ufności na poziomie alfa wynosi 5%)
  • n to liczba sampów les (np. wyświetlenia)
  • x oznacza liczbę sukcesy (np kliknięcia)

W Excel implementacje B() jest wzorem BETA.INV.

Nie ma odpowiednika formuła B() w Arkusze Google, ale funkcja niestandardowej Google Apps Script mogą być zaadaptowane z JavaScript Biblioteki Statystycznej (np wyszukiwania github dla jstat)

Powiązane problemy