все форумы все темы добавить тему
Обсуждение рейтинга
Пришло время немного поговорить о том, что позволяет двум благородным донам измерить, кто же из них благороднее. Речь, конечно же, о рейтинге.
Прежде всего, следует заметить, что не существует универсальной, а тем более - идеальной, системы рейтинга. Для каждого проекта и аудитории нужен свой рейтинг. Более того, даже для одного проекта в разные периоды его существования рейтинг нужен разный.
 
Тем не менее, необходимо некоторое решение, которое бы позволило корректно работать в большом количестве, а лучше - в подавляющем большинстве случаев.
 
Сегодня многие (если не все) пытаются копировать систему рейтинга действующую на Хабрахабре. Система состоит из двух показателей. Один показывает (точнее, должен показывать) отношение к пользователю сообщества, другой - оценку сообществом контента, произведенного пользователем. Система замечательная, но мне она не нравится. И в первую очередь не нравится наличием двух несвязных показателей. Я понимаю для чего они введены, понимаю какие они дают рычаги для управления и, тем не менее, считаю систему неочевидной и неудобной. Больше всего мне не нравится необходимость голосования за пользователя. В результате чего должно происходить это голосование? В результате вдумчивого анализа поведения пользователя на сайте? Или просто можно проголосовать за пользователя с симпатичной аватаркой? Я все же придерживаюсь мнения, что рейтинг пользователя должен состоять из того, что пользователь сделал. То есть рейтинг пользователя должен состоять из суммы рейтинга произведенного им контента.
 
Вторым важным моментом я бы назвал защиту рейтинга. Причем, не только от злоупотреблений (хотя, они наиболее ярко отражают проблему), но и просто от перекосов связанных с особенностями сообщества. Например, рейтинг должен быть устроен таким образом, чтобы его невозможно было бесконечно поднимать внутри закрытой группы.
 
На основании вышеизложенного, я сформулировал несколько требований:
1. Рейтинг должен состоять из суммы рейтингов контента, произведенного пользователем. Понятно, что комментарий нельзя приравнивать к статье или посту в форуме. Каждый тип контента должен иметь свои коэффициенты.
2. Больший рейтинг должен давать больший вес голоса его обладателю.
3. Вес голоса не должен расти линейно. Пользователь с рейтингом 1000 не должен иметь возможности одним ударом увести рейтинг новичка в бездонный минус. Зависимость должна быть логарифмическая или приближенная к ней.
4. Для исключения роста рейтинга в замкнутой группе должно быть введено ограничение на количество передаваемого рейтинга, либо на количество голосов.
То есть один пользователь не может проголосовать за другого больше N раз или передать другому больше K рейтинга (еще не знаю какой из вариантов лучше). Точнее, проголосовать-то он может, но после достижения указанных порогов, его голос не должен прибавлять рейтинг.
5. Развитие мысли высказанной в п.4: вероятно, ограничение на передаваемый рейтинг должно быть таково, чтобы один пользователь не мог дать другому достаточное количество рейтинга для участия в голосовании. То есть чтобы нельзя было в одиночку создавать и "прокачивать" армии витруалов.
 
При этом остаются вопросы:
1. не слишком ли при такой системе получается высокий порог входа в сообщество на сайте?
2. не возникнет ли трудностей с набором рейтинга для сообществ малого размера?
3. надо ли ограничивать возможность пользователя голосовать (например, не больше M голосований за X часов)?
 
Собственно, на этом количество сформулированных мыслей заканчивается. Есть еще немного несформулированных, но ухватить их пока никак не получается
Может быть вы мне поможете в их поимке
1. не слишком ли при такой системе получается высокий порог входа в сообщество на сайте?

На мой взгляд именно первое требование должно регулировать порог входа. За что же ещё, в первую очередь, как не за контент, награждать пользователя? И отсюда выплывает ответ на второй вопрос - для сообществ малого размера рейтинги (коэффициенты) должны быть тоже маленькими и должна быть для таких случаем предусмотрена система регулирования рейтинга руками.
 
Затрудняюсь ответить по третьему пункту.
Как раз первый вопрос мне не представляется сложным. Для малых сообществ перекосы вполне допустимы: если для голосования нужен рейтинг 5, а один пользователь может передать другому 50, то не вижу тут ничего страшного - на сообществе в 1000 человек не так просто незаметно накрутить рейтинг. Вот когда участников 100 тысяч, то логичнее поменять коэффициенты таким образом, чтобы порог входа был 5, а один пользователь другому мог передать только 4... В общем, этот вопрос мне кажется сравнительно очевидным.
Порог входа можно высчитывать непосредственно исходя от количества пользователей на сайте, и делать это автоматически по ранее указанным параметрам. Например, если пользователей < 1000 = нужен рейтинг 2, и т.д.
Defari
и делать это автоматически

Мне бы не хотелось делать что-либо автоматически. Рейтинг - это прежде всего элемент управления (если рассматривать его с позиции администрации), и текущие задачи вполне могут не совпадать с заложенным алгоритмом. Скажем, на каком-нибудь условном "вконтакте" уже сам факт регистрации должен давать пользователям право голоса - иначе им неинтересно, а на каком-то узкоспециальном или обучающем ресурсе, вполне может быть высокий порог входа при 100 участниках.
То есть, нужно сделать возможность админу самому задавать нужный порог входа?
Конечно. Порог входа, веса для разного контента, объем передаваемого рейтинга и т.п.
Голоса закрепляются к каким-то материалам (сообщения в блоге, форуме, комментарии и т.п.). Голоса за каждый из типов должны иметь собственный вес при вычислении рейтинга. Самое правильное, конечно, чтобы каждый тип сообщений учитывался отдельно, но при этом возникает трудность: при добавлении нового модуля надо вносить изменения в конфигурацию движка (добавлять новый тип). Более удобным решением мне кажется добавление предопределенных типов контента (материал, сообщение, комментарий,...) и чтобы модули использовали именно их. Вопрос, собственно, в том, какое количество таких типов надо заложить, чтобы не возвращаться к этом в будущем?
А что Вы подразумеваете под сообщением? Сообщение на форуме?
Фотографии, посты в блоге (новостях), товары каталога, и другие возможные варианты предполагаемых модулей - материал?
Я думаю что всё вышеперечисленное, включая комментарии можно свести к этим трём группам, возможно двум даже. Но тут уж я не знаю как лучше.
Я больше интересуюсь возможностями регулирования и настройки рейтинговой системы. Гибкость и масштабируемость ведь тоже крайне важна, не так ли? А если материалы будут идти в разных весовых категориях? Например новости и фотографии в альбоме, и то, и другое - материал. Но мб по задумке авторов, должны иметь разное влияние на рейтинг при их оценке. Возможно ли заложить в систему рейтинга возможность вносить эти типы с указанием параметров или только намертво в код?
Вносить типы, на мой взгляд, лишнее. Достаточно заложить необходимое количество типов и использовать их в дальнейшем.
А в каком режиме настроен рейтинг сейчас на форуме?
В профиле я не увидел никаких новых полей или записей о рейтинге.
Сейчас на сайте это просто как оценка материала без влияния на рейтинг пользователя в целом?
 
Не получилось плюсануть, ничего не происходит. Хром 17.
Посмотрю версию из транка. Отпишусь.
 
Спасибо, Loki!
На сайте рейтинг работает сейчас на полную мощность. Просто пока не решил где и в каком виде выводить данные о нем.
 
Голосование действительно не работало - в спешке забыл обновить сайт. Сейчас все должно быть в порядке.
Сейчас на сайте установлены какие-либо ограничения для групп?
Почему-то сейчас тоже не хочет голосовать.
Или может быть причина в другом...
 
UPD:
Кстате, посмотреть профиль другого пользователя (не себя) в фронтэнде нельзя.
по ссылке /login-profile.id/ показывает только имя пользователя с этим id.
mushtat
Сейчас на сайте установлены какие-либо ограничения для групп?
Почему-то сейчас тоже не хочет голосовать.
Или может быть причина в другом...
 
UPD:
Кстате, посмотреть профиль другого пользователя (не себя) в фронтэнде нельзя.
по ссылке /login-profile.id/ показывает только имя пользователя с этим id.

 
Да нет, причина как раз в этом. Изначально хотел сделать разграничение возможности голосовать по группам, а потом подумал что минимальный рейтинг - уже сам по себе ограничение. В итоге остались проверки и те и другие. Пока что убрал - вроде бы все работает. Надо будет к этому вопросу еще вернуться.
 
А просмотр профиля поправил. Спасибо.