Алгоритм для рейтинговых объектов, основанный на количестве голосов и 5-ти звездных рейтингах

Я создаю сайт, на котором люди могут оценивать объект по своему выбору, выделяя звездный рейтинг (скажем, рейтинг 5 звезд). Например, объекты размещаются в нескольких тегах и категориях. электроникa > видеокарты > pci express > ... или техническое обслуживание > подрядчик > сантехник.

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

И наоборот, он надежно доверяет объекту с 500 пользовательскими рейтингами с оценкой 4.8, чем доверять объекту с 1000 пользовательскими рейтингами 4.5, например.

Какой алгоритм может достичь этого взвешивания?

Ответ 3

У меня возникнет соблазн отключиться (скажем, пятьдесят голосов, хотя это, очевидно, зависит от трафика), перед которым вы считаете этот элемент незанятым. Это значительно уменьшит мотивацию для ранжирования спама и идиот (особенно если каждый голос привязан к учетной записи пользователя), а также позволит вам просто, быстро реализовать и достаточно надежную систему.

Ответ 4

simboid_function(value) = 1/(1+e^(-value));

rating = simboid_function(number_of_voters) + simboid_function(average_rating);