Формула для популярности? (на основе «как это», «комментарии», «взгляды») - PullRequest
4 голосов
/ 09 июня 2010

У меня есть несколько страниц на веб-сайте, и я должен создать заказ на основе "популярности" / "активности"

Параметры, которые я должен использовать:

  • просмотров на странице
  • комментариев, сделанных на странице (внизу есть форма, где пользователи могут комментировать)
  • кликов по значку "лайк"

Существуют ли какие-либо стандарты для определения формулы популярности? (если не мнения тоже хороши)

(изначально я думал о просмотрах + 10 * комментариев + 10 * лайков)

Ответы [ 5 ]

2 голосов
/ 22 января 2014

На самом деле существует лучший способ рассчитать это:
http://www.evanmiller.org/how-not-to-sort-by-average-rating.html

Вам может понадобиться объединить «лайки» и «комментарии» в один балл, назначив каждому свой весовой коэффициент каждомуперед включением его в формулу в качестве значения «положительного голоса».

по ссылке выше:

Оценка = нижняя граница доверительного интервала оценки Вильсона для параметра Бернулли

Нам необходимо сбалансировать пропорцию положительных оценок с неопределенностью небольшого числа наблюдений.К счастью, математика для этого была разработана в 1927 году Эдвином Б. Уилсоном.Мы хотим спросить: Учитывая мои рейтинги, есть 95% -ная вероятность, что «реальная» доля положительных рейтингов будет, по крайней мере, чем? Уилсон дает ответ.Учитывая только положительные и отрицательные оценки (то есть не 5-звездочную шкалу), нижняя граница доли положительных оценок определяется следующим образом: enter image description here

(используйте минус, где указаноплюс / минус для расчета нижней границы.) Здесь является наблюдаемой долей положительных оценок, zα/2 является (1-α/2) квантилем стандартного нормального распределения, а n является общимколичество оценок.Та же формула, реализованная в Ruby:

require 'statistics2'

def ci_lower_bound(pos, n, confidence)
    if n == 0
        return 0
    end
    z = Statistics2.pnormaldist(1-(1-confidence)/2)
    phat = 1.0*pos/n
    (phat + z*z/(2*n) - z * Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)
end

pos - количество положительных оценок, n - общее количество оценок, а доверие относится к статистическому доверительному уровню.: выберите 0,95, чтобы иметь 95% -ную вероятность того, что ваша нижняя граница верна, 0,975, чтобы иметь вероятность 97,5%, и т. д. Z-показатель в этой функции никогда не меняется, так что если у вас нет удобного пакета статистики или если производительностьэто проблема, вы всегда можете жестко указать здесь значение для z.(Используйте 1,96 для уровня достоверности 0,95.)

Та же формула, что и для запроса SQL:

SELECT widget_id, ((positive + 1.9208) / (positive + negative) - 
                   1.96 * SQRT((positive * negative) / (positive + negative) + 0.9604) / 
                          (positive + negative)) / (1 + 3.8416 / (positive + negative)) 
       AS ci_lower_bound FROM widgets WHERE positive + negative > 0 
       ORDER BY ci_lower_bound DESC;
2 голосов
/ 25 июля 2011

Я использую,

(C*comments + L*likeit)*100/views

, где вы должны использовать C и L в зависимости от того, насколько вы цените каждый атрибут.Я использую C = 1 и L = 1.

Это дает вам процент просмотров, которые произвели положительное действие, делая элементы с более высоким процентом наиболее «популярными».Мне это нравится, потому что вначале новые предметы становятся очень популярными, сначала появляются, получают больше просмотров и, следовательно, становятся менее популярными (или более) до стабилизации.PS: без "* 100" все равно будет работать, но мне нравятся проценты.

2 голосов
/ 09 июня 2010

Стандартной формулы для этого не существует (как это может быть?)

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

В зависимости от ваших требований вы также можете добавить фактор времени (то есть -X баллов в неделю), чтобы старые страницы стали менее популярными. В качестве альтернативы, вы можете изменить свои «просмотры страниц» на «просмотры страниц за последний месяц». Опять же, это зависит от ваших потребностей, это может быть неактуально.

2 голосов
/ 09 июня 2010

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

Вы могли бы даже попытаться использовать подход машинного обучения, чтобы «узнать», каков хороший вес для объединения каждого из этих чисел, как в вашей формуле примера. Делать это вручную тоже не составит труда.

0 голосов
/ 09 июня 2010

Я бы оценил комментарии больше, чем 'как если бы контент вызывал обсуждение. Если это просто констатация фактов, равное соотношение для комментариев и тому подобное, кажется, все в порядке (хотя 10 - это слишком много, я думаю ...)

Учитывает ли посещение время, проведенное пользователем? Вы также можете использовать это, поскольку 2-секундный просмотр означает менее 3-минутного.

...