Алгоритмы оценки: как преобразовать число и % «лайков» и «не любит» в единый счет?

StackOverflow https://stackoverflow.com/questions/4331065

Вопрос

У меня есть веб -сайт, где пользователи могут «Как» и «неприязнь» предметы.

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

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

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

Что будет хорошим алгоритмом, чтобы создать единую оценку из приведенных выше данных?

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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 используется в качестве «волшебного» веса в этой формуле. Чем выше это значение, тем больше голосов требуется, чтобы повлиять на байесовское рейтинговое значение.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top