Эффективное определение вероятности того, что пользователь нажмет гиперссылку - PullRequest
0 голосов
/ 15 июля 2009

Итак, у меня есть куча гиперссылок на веб-странице. Из прошлых наблюдений я знаю вероятности того, что пользователь нажмет на каждую из этих гиперссылок. Поэтому я могу рассчитать среднее и стандартное отклонение этих вероятностей.

Теперь я добавляю новую гиперссылку на эту страницу. После непродолжительного тестирования я обнаружил, что из 20 пользователей, которые видят эту гиперссылку, 5 щелкают по ней.

Принимая во внимание известное среднее значение и стандартное отклонение вероятностей кликов по другим гиперссылкам (это формирует «предыдущее ожидание»), как я могу эффективно оценить вероятность нажатия пользователем новой гиперссылки?

Наивным решением было бы игнорировать другие вероятности, и в этом случае моя оценка составляет всего 5/20 или 0,25 - однако это означает, что мы отбрасываем соответствующую информацию, а именно наше предыдущее ожидание того, какова вероятность кликов.

Итак, я ищу функцию, которая выглядит примерно так:

double estimate(double priorMean, 
                double priorStandardDeviation, 
                int clicks, int views);

Я бы спросил, так как я больше знаком с кодом, чем с математической нотацией, что в любых ответах код или псевдокод предпочтительнее математики.

Ответы [ 4 ]

3 голосов
/ 25 июля 2009

Я сделал это новым ответом, поскольку он принципиально отличается.

Это основано на Крисе Бишопе, «Машинное обучение и распознавание образов», глава 2 «Распределение вероятностей» p71 ++ и http://en.wikipedia.org/wiki/Beta_distribution.

Сначала мы подгоняем бета-распределение к данному среднему значению и дисперсии, чтобы построить распределение по параметрам. Затем мы возвращаем режим распределения, который является ожидаемым параметром для переменной Бернулли.

def estimate(prior_mean, prior_variance, clicks, views):
  c = ((prior_mean * (1 - prior_mean)) / prior_variance - 1)
  a = prior_mean * c
  b = (1 - prior_mean) * c
  return ((a + clicks) - 1) / (a + b + views - 2)

Однако я вполне уверен, что предыдущее среднее значение / дисперсия не сработает для вас, так как вы отбрасываете информацию о том, сколько у вас образцов и насколько хороши ваши предыдущие.

Вместо этого: учитывая набор пар (webpage, link_clicked), вы можете рассчитать количество страниц, по которым была нажата конкретная ссылка. Пусть это будет м. Пусть количество раз, когда эта ссылка не была нажата, будет l.

Теперь пусть a будет числом кликов по вашей новой ссылке a, а количество посещений сайта - b. Тогда ваша вероятность новой ссылки

def estimate(m, l, a, b):
  (m + a) / (m + l + a + b)

Что выглядит довольно тривиально, но на самом деле имеет веские вероятностные основания. С точки зрения реализации, вы можете хранить m и l глобально.

2 голосов
/ 15 июля 2009

P / N на самом деле является правильным с точки зрения частоты.

Вы также можете использовать байесовский подход для включения предыдущих знаний, но, поскольку у вас, кажется, нет этих знаний, я думаю, что P / N - это путь.

Если вы хотите, вы также можете использовать правило Лапласа, которое сводится к униформе. Просто дайте каждой ссылке на странице начало 1 вместо 0. (Таким образом, если вы посчитаете число, по которому была нажата ссылка, дайте каждому бонус +1 и напоминайте его в своем N).

[ОБНОВЛЕНИЕ] Вот байесовский подход:

Пусть p (W) - вероятность того, что человек входит в определенную группу W. Пусть p (L) - вероятность того, что по конкретной ссылке щелкнули. тогда вероятность, которую вы ищете, равна p (L | W). По теореме Байеса вы можете вычислить это как

p (L | W) = p (W | L) * p (L) / p (W)

Вы можете оценить p (L) по количеству нажатий L, p (W) по размеру этой группы по отношению к остальным пользователям и p (W | L) = p (W и L) / p (L) - количество людей в конкретной группе W, щелкнувших по L, деленное на вероятность того, что нажали L.

0 голосов
/ 16 июля 2009

Вам необходимо знать, насколько сильно X соотносится с W.

Скорее всего, вы также хотите иметь более сложную математическую модель, если хотите разработать большой веб-сайт. Если вы работаете на таком веб-сайте, как digg, у вас есть много предварительных знаний, которые вы должны учитывать при расчете. Это приводит к многомерной статистике.

0 голосов
/ 15 июля 2009

Доказательство теоремы Байеса:

P(A,B) = P( A | B ) * P( B )    (1) 

так

P(A,B) = P(B,A)                 (2)

И с заменой (2) на (1),

P(A | B) * P( B ) = P (B | A) * P(A)

таким образом (теорема Байеса),

           P( B | A ) * P(A)
P(A | B) = -----------------
                 P(B)

P(A)   -- prior/marginal probability of A, may or may not take into account B
P(A|B) -- conditional/posterior probability of A, given B.
P(B|A) -- conditional probability of B given A.
P(B)   -- prior/marginal probability of B

Последствия

P( A | B ) = P( A ), then a and b are independent
P( B | A ) = P( B ), and then

и определение независимости:

P(A,B) = P(A | B) * P( B ) = P( A )* P( B )

Следует отметить, что легко манипулировать вероятностью по своему вкусу, изменяя приоры и способ решения проблемы, взгляните на это обсуждение Антропного принципа и теоремы Байеса .

...