Алгоритмы подсчета очков: как конвертировать количество &% "лайков" и "антипатий" в один счет? - PullRequest
9 голосов
/ 02 декабря 2010

У меня есть веб-сайт, на котором пользователи могут элементы "Нравится" и "Не нравится".

Таким образом, для каждого элемента у меня есть такие данные, как общее число "Нравится" и% от общего числа голосов, которые являются "лайками".

Я хотел бы рассчитать только один балл, чтобы показать пользователям.Использование только% не сработает, потому что, хотя item_A может иметь 90% «лайков», в то время как item_B может иметь 80% «лайков», item_B должен по-прежнему занимать место перед item_A, если item_B имеет 10000 голосов, а item_A имеет толькоВсего 1000 голосов.

Аналогичным образом, использование только общего количества "Лайков" не сработает, поскольку, хотя элемент может иметь большое количество "Лайков", его не следует оценивать очень высоко, если% "Лайков" равенlow.

Какой будет хороший алгоритм для создания единой оценки из приведенных выше данных?

В идеале оценка должна быть "значимой" или "нормализованной" в некотором смысле.Например, если я пойду в IMDB и увижу, что фильм имеет оценку 8/10, я сразу узнаю, что это хороший фильм.С другой стороны, если я увижу 1370 баллов, я не обязательно буду знать, хорошо это или плохо.

Ответы [ 3 ]

9 голосов
/ 02 декабря 2010

Есть пара очень хороших статей о том, как Reddit делает такой рейтинг здесь и здесь .В двух словах, оцените сообщения по нижнему пределу 90-процентного доверительного интервала их оценок.Записи с меньшим количеством голосов имеют более высокие доверительные интервалы и, следовательно, имеют тенденцию иметь более низкий рейтинг, чем записи с большим количеством голосов, но с таким же средним.

9 голосов
/ 02 декабря 2010

Байесовский рейтинг идеально подходит для того, что вы хотите сделать.Он учитывает меньшее количество голосов, но более высокий рейтинг.

Байесовский рейтинг использует Байесовское среднее.Это математический термин, который вычисляет оценку элемента на основе «правдоподобности» голосов.Чем больше определенность, основанная на количестве голосов, тем больше байесовский рейтинг приближается к обычному, невзвешенному рейтингу.Когда голосов очень мало, байесовский рейтинг элемента будет ближе к среднему рейтингу всех элементов.

Используйте это уравнение:

br = ((avg_num_votes * avg_rating) + (this_num_votes * this_rating)) / (avg_num_votes + this_num_votes)

Легенда:

avg_num_votes: среднее количество голосов всех элементов, имеющих num_votes> 0
avg_rating: средний рейтинг каждогоэлемент (опять же, из тех, у которых num_votes> 0)
this_num_votes: количество голосов за этот элемент
this_rating: рейтинг этого элемента

Примечание: avg_num_votes используется в качестве «волшебный вес в этой формуле.Чем выше это значение, тем больше голосов требуется, чтобы повлиять на значение байесовского рейтинга.

Вы можете прочитать больше здесь

1 голос
/ 02 декабря 2010

Возможно, вы можете использовать процентную статистику, но затем раскрасить ее в соответствии с объемом? например красный / оранжевый / желтый для наибольших интересов, синий / зеленый / фиолетовый для наименьших процентов, а затем позволяют пользователю сортировать по процентам или цвету.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...