Алгоритм рейтинга популярности на основе голосов от 1 до 5

0

Я разрабатываю новый веб-сайт, на котором есть некоторые "субъекты" для голосования.

Каждый голос может быть числом от 1 до 5, где 1 является самым худшим, а 5 - лучшим.

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

Теперь я не могу сделать просто среднее арифметическое, потому что "сущность" с одним голосом 5 может иметь такое же ранжирование, как "сущность" со 100 голосами 5.

Я думал о сохранении для каждой "сущности" не только среднего арифметического, но и количества голосов и выполнения SQL-запроса, где я заказываю по количеству голосов и среднему арифметическому, но кажется, что после этого сущность со многими голосами 1 может получить популярность (если это не популярно).

Какой алгоритм я могу использовать?

  • 0
    Я предложил свою идею о том, как добиться чего-то вроде того, что я хочу, «выполняя SQL-запрос, где я упорядочиваю по количеству голосов и среднему арифметическому». Просто, если я ищу здесь, потому что у меня нет идеи получше, поэтому я ищу какое-то противостояние здесь. Я предполагаю, что StackOverflow - это не только место для размещения кода с плохим синтаксисом, который необходимо исправить. Ты слишком педантичен.
  • 1
    Начните с Bayes_estimator . И, как уже упоминалось выше: это дизайнерское решение, которое нужно принять, учитывая как можно больше априорной информации.
Показать ещё 1 комментарий
Теги:
algorithm
ranking

1 ответ

1
Лучший ответ

Для базового решения попробуйте order by [average vote] desc, [vote count] desc этот путь из двух сущностей с таким же средним значением, один со 100 голосами будет превышать один с 1 голосом, но один со средним значением 4,5 будет никогда не переходите выше среднего со средним значением 5.

Редактировать 1

Если вы хотите, чтобы 100 голосов в среднем составляли 4,5, чтобы выиграть против 10 голосов в среднем 5, почему бы не подсчитать голоса, игнорируя 1, 2 и 3, или [подсчет голосов 4 и 5] - [подсчет голосов 1 и 2]? Таким образом, количество положительных голосов поднимет сущности в рейтинге.

Изменить 2

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

Редактировать 3

Как насчет того, чтобы вычислить столбец [popularScore] и просто заказать?

-- sum instead of average
-- square root of sum will reduce importance of vote count a bit
select
    entity,
    sqrt(sum(vote - 3)) as popularityScore
from Votes
group by entity
order by rank desc

-- 50 votes of 5 -> popularityScore = 12.25
-- 100 votes of 4 -> popularityScore = 10
-- 200 votes of 4 -> popularityScore = 14.14
-- 2000 votes of 4 -> popularityScore = 44.72
-- 2000 votes of 5 -> popularityScore = 63.25
-- 100000000 votes of 3 -> popularityScore = 0

Можно рассчитать ту же самую оценку за последний месяц и добавить ее к этому значению.

  • 0
    Разве это не позволяет организации с 1000 голосами 1 подняться выше, чем сервер с 500 голосами 5?
  • 0
    Редактирование вашего ответа не так уж и плохо, хороший подход может быть таким: рассмотреть группу {1, 2, 3} = ВНИЗ и {4, 5} = ВВЕРХ
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню