Нужна помощь в системе голосования как / не нравится
Я хотел бы получить некоторую помощь в построении алгоритма сортировки "нравится / не нравится", чтобы найти лучшие записи. Я думал о том, как это сделать, но у этого метода есть два основных недостатка, и я хотел бы знать, есть ли лучший способ.
Вот как я думал об этом:
Записи будут отсортированы по соотношению 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