Eficientemente determinar a probabilidade de um usuário clicar em um hiperlink

StackOverflow https://stackoverflow.com/questions/1133193

  •  16-09-2019
  •  | 
  •  

Pergunta

Então, eu tenho um monte de links em uma página web. A partir da observação passado eu sei que as probabilidades de que um usuário irá clicar em cada um desses hyperlinks. Eu, portanto, pode calcular a média e desvio padrão de estas probabilidades.

Agora eu adicionar um novo link para esta página. Depois de um curto período de testes Acho que dos 20 usuários que vêem este hyperlink, 5 clique sobre ele.

Tendo em conta a média e desvio padrão conhecido do clique-through probabilidades em outros hyperlinks (Isso forma uma "expectativa prévia"), como posso eficiente estimar a probabilidade de um usuário clicar sobre o novo hyperlink?

Uma solução ingênua seria ignorar as outras probabilidades, caso em que minha estimativa é apenas 5/20 ou 0,25 - no entanto Isso significa que estamos jogando fora informação relevante, nomeadamente a nossa expectativa antes do que o click-through probabilidade é.

Então, eu estou procurando uma função que é algo como isto:

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

Eu pediria que, desde que eu estou mais familiarizado com código de notação matemática, que quaisquer respostas usar código ou pseudocódigo em detrimento de matemática.

Foi útil?

Solução

Eu fiz este uma nova resposta, já que é fundamentalmente diferente.

Isto é baseado em Chris Bishop, Machine Learning e Reconhecimento de Padrões, capítulo 2 "Distribuições de Probabilidade" p71 ++ e http://en.wikipedia.org/wiki/Beta_distribution .

Em primeiro lugar, cabe uma distribuição beta com a dada variância média e, a fim de construir uma distribuição sobre os parametros. Então voltamos a moda da distribuição que é o parâmetro esperado para uma variável de Bernoulli.

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)

No entanto, estou bastante positivo que o / variância média anterior não vai funcionar para você desde que você joga fora informações sobre quantas amostras você tem e quão boa é sua prévia é assim.

Em vez disso: Dado um conjunto de (página web, link_clicked) pares, você pode calcular o número de páginas um link específico foi clicado. Deixe que ser M. Deixe a quantidade de vezes que essa ligação não foi clicado seja l.

Agora vamos a ser o número de cliques para o seu novo vínculo ser um e o número de visitas ao site be b. Em seguida, a sua probabilidade de seu novo link é

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

O que parece bastante trivial, mas na verdade tem uma base probabilística válido. Do ponto de vista de implementação, você pode manter M e L globalmente.

Outras dicas

P / N é, na verdade, correcto do ponto de vista frequencista.

Você também pode usar uma abordagem bayesiana para incorporar conhecimento prévio, mas desde que você não parecem ter esse conhecimento, eu acho P / N é o caminho a percorrer.

Se você quiser, você também pode usar a regra de Laplace que IIRC se resume a um uniforme prévio. Basta dar cada link na página de um começo de 1 em vez de 0. (Então, se você contar o número um link foi clicado, dar a cada um bônus +1 e lembram que, em seu N).

[UPDATE] Aqui está uma abordagem bayesiana:

Seja p (W) a probabilidade de que uma pessoa está em um grupo específico W. Seja p (L) a probabilidade, que um link específico é clicado. então a probabilidade de que você está procurando é p (L | W). Pelo teorema de Bayes, você pode calcular isso

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

Você pode estimar p (L) pela quantidade L foi clicado, p (W) pelo tamanho desse grupo em relação ao resto dos usuários e p (W | L) = p (W e L) / p (L) pelo número de pessoas do grupo específico que W G clicado dividido pela probabilidade de que G é clicado.

Bayes Teorema Prova:

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

uma vez que,

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

e substituindo (2) com (1),

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

Assim (Bayes Teorema),

           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

Consequences,

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

e a definição de independência é,

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

Note-se, que é fácil de manipular a probabilidade de seu gosto mudando os priores e a forma como o problema é pensado, dê uma olhada nesta discussão do Princípio Antrópico e Bayes Teorema .

Você precisa saber como fortemente X é correlacionada com W.

O mais provável é que você também quer ter um modelo matemático mais complexo se você quiser desenvolver um grande website. Se você executar um site como o digg você tem um monte de conhecimento prévio que você tem que fator em sua calcualtion. Isso leva a estatística multivariada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top