Нужна помощь в системе голосования как / не нравится

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

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

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

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

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

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

Как вы думаете?

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

3 ответа

Решение

Это может быть актуально: как не сортировать по среднему рейтингу.

Чтобы убрать деление на ноль, вы можете добавить 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. То есть термин "журнал (лайки)" оценивает связи с большим количеством лайков более высоко, чем связи с меньшим количеством лайков.

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

rank = likes * 100 / (likes + dislikes)

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

likes, dislikes => rank
0, 0 => 0            //avoid /0 error
3, 3 => 50
3, 0 => 100
Другие вопросы по тегам