Нужна помощь в системе голосования как / не нравится - PullRequest
6 голосов
/ 06 июля 2011

Я бы хотел получить помощь в построении алгоритма сортировки по типу «нравится / не нравится», чтобы найти лучшие записи.Я думал о том, как это сделать, но есть два основных недостатка этого метода, и я хотел бы знать, есть ли лучший способ.

Вот как я думал об этом:

Записи будут отсортированы по соотношению, указанному l/d, где l = number of likes и d = number of dislikes, так что те, у кого более высокий коэффициент, имеют большее количество лайков и заслуживают более высокого места, чем те, у которых низкий коэффициент.

У этого метода есть две проблемы:

1: , если количество дислайков равно 0, l/d будет невозможным.Таким образом, даже если запись имеет тысячу лайков и 0 антипатий, она все равно не попадет в табло.

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

Что вы думаете?

РЕДАКТИРОВАТЬ: Вот возможная альтернатива, которая исправляет первую проблему: (l + 1) / (d + 1).Есть ли какие-либо отзывы по этому поводу?

Ответы [ 3 ]

13 голосов
/ 06 июля 2011
2 голосов
/ 06 июля 2011

Чтобы удалить деление на ноль, вы можете добавить 1 к числителю и знаменателю, чтобы получить (l + 1) / (d + 1). Если вы хотите более высоко ранжировать записи с большим количеством лайков, вы можете умножить формулу рейтинга на лог (количество лайков + 1). Здесь добавляется один, чтобы удалить математическую ошибку, которая возникает, если запись имеет ноль лайков. В последующем обсуждении предположим, что у журнала есть основание 10. Таким образом, формула ранжирования, которая удовлетворяет требованиям, будет (нравится + 1) / (не нравится + 1) * log (нравится + 1).

Заметьте, что эта формула дает ранг 0, если нет ни одного лайка, потому что log (1) = 0. Предположим, что голоса связаны одним голосованием "за" и одним голосованием "за". Тогда ранг 2/2 * log (2) = 0,3, потому что log (2) = 0,3. Теперь рассмотрим еще один галстук с 9 симпатиями и 9 антипатиями. Тогда рейтинг будет 10/10 * log (10) = 1, потому что log (10) = 1. То есть термин log (лайки) оценивает связи с большим количеством лайков более высоко, чем связи с меньшим количеством лайков.

0 голосов
/ 06 апреля 2014

Это сработало лучше для меня.

rank = likes * 100 / (likes + dislikes)

Это заказы по более высоким лайкам, затем любая активность и / или неприязнь, тогда никакой активности. Примеры:

likes, dislikes => rank
0, 0 => 0            //avoid /0 error
3, 3 => 50
3, 0 => 100
...