Алгоритмы подсчета очков: как преобразовать количество и % "Нравится "и" не нравится " в один балл?

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

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

Я хотел бы рассчитать только один балл, чтобы показать пользователям. Использование только % не будет работать, потому что, хотя item_A может иметь 90% "нравится" , в то время как item_B может иметь 80% "нравится", item_B все равно должен ранжироваться перед item_A, если item_B имеет 10 000 общих голосов а item_A только 1000 всего голосов.

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

Что было бы хорошим алгоритмом для создания одного балла из приведенных выше данных?

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

3 ответов


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


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

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

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

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

вы можете подробнее здесь


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