Я сделал это новым ответом, поскольку он принципиально отличается.
Это основано на Крисе Бишопе, «Машинное обучение и распознавание образов», глава 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 глобально.