Хорошие системы оценки/репутации?
Я работаю над сайтом, который очень похож на Yahoo! Ответы: пользователь может задать вопрос, подождать ответов от других людей и выбрать лучший. Чтобы определить лучших пользователей, существует система репутации, которая имеет следующие особенности:
- Можно повысить или понизить пользователя;
- Можно отменить или уменьшить ответ;
- Для каждой темы есть оценка "опыта", которая увеличивается для каждого ответа.
Теперь, если это возможно, я бы хотел найти алгоритм для объединения всех этих факторов и дать оценку "доверия" для каждого ответа.
До сих пор я старался делать это сам, используя вещи типа Coefficient * (UpVotes / TotalVotes)
, но был слишком линейным. Я также пробовал другие способы, но они не работали (байесовский алгоритм). На данный момент, в версии Alpha, я использую Trustability = sqrt(GoodAnswers)
.
Примечания: алгоритм должен быть индивидуальным (нет необходимости сканировать всю базу данных, чтобы получать данные, такие как средние, суммы и т.д.) и, если это возможно, быстро. Я собираюсь реализовать это в PHP-MySQL.
Ответы
Ответ 1
Существует огромное количество подходов к системе ранжирования. С использованием измерения времени, количества голосов вверх/вниз, рейтинга вверх-вниз и вниз, хитов и почти всего, что вы можете себе представить.
Существует хорошая статья о системе ранжирования в Reddit.
Самое простое решение, которое появилось у меня в голове, - рассчитать некоторый вес upvote для отдельного пользователя. Это означает, что более доверенный пользователь более влиятелен, чем другой. Например. пользователь с рейтингом 100 upvote определенно лучше, чем downvote от двух пользователей с рейтингом -100. Но мы не можем сказать, что это лучше, чем 100 downvotes от -100 пользователей. попробуйте экспериментировать с этим.
Ответ 2
Вы можете использовать ту же идею рейтинга страницы google: когда пользователь повысит или добавит ваш вопрос \answer как фаворит, увеличение вашей достоверности зависит от этой доверенности пользователя.
http://en.wikipedia.org/wiki/PageRank
Ответ 3
Используйте систему ELO/Glicko. Каждый пользователь начинает со стандартного значения, а затем рассматривает downvoting или upvoting, как результаты одного к одному.