Pull to refresh

Средневзвешенная система голосования

Reading time3 min
Views3.4K
Вступление. Эту статью написал мой друг — Семён Шторкин, владелец нижегородского сайта-коммьюнити для фотографов (фотогорький). Пока его, к сожалению, нет на Хабре, но попробую этим топиком заработать для него инвайт :)

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


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

Например, автор, работающий в жанре пейзажной фотографии, имеет максимальный вес голоса именно в этом разделе, но минимальный, скажем, в разделе «Обнаженная натура». Пришлось попотеть, прежде чем нашлись формулы, более или менее объективно описывающие вес голоса. Смысл веса голоса заключается в следующем (здесь и далее примеры будут касаться рейтингов работ и авторов на фотографическом сайте): автор должен подтвердить свою компетентность в том или ином разделе, набрав за свои работы в нем как можно больший балл (по пятибалльной шкале). Наиболее оптимальным оказалось решение, в котором вес голоса изменяется от 0 до 1, точнее от 0.1 (для новичков). Формула для расчета веса голоса выглядит примерно так:

Weight = tanh(N/C)*(SUM(m_value*m_weight)/ SUM(m_weight))/5.0;

где N – это число оценок, поставленных автору к публикациям в данном разделе, C – нормирующая константа, зависящая от активности пользователей, чем больше пользователи ставят оценок, тем больше должна быть константа, m_value и m_weight – значение и вес каждой конкретной оценки, принимающей участие в расчете веса голоса.

Гиперболический тангенс отношения поставленных автору оценок к нормирующей константе учитывает активность самого автора и интерес к нему – чем больше автор публикует работ, тем больше оценок ему ставят, чем интереснее работы, тем больше оценок ему ставят. Чем больше константа C, тем медленнее tanh() стремится к единице, это значит, что при высокой активности пользователей, для достижения максимального веса голоса (или близкого к максимальному), пользователю потребуется больше усилий. При значении отношения N/C больших 2, tanh(N/C) приближается к единице и перестает влиять на средневзвешенное значение от всех оценок.

Кстати, если переходить на MySQL, то можно использовать арктангенс (ATAN), но, поскольку он стремится не 1 а к PI/2, следует внести соответствующую коррекцию. Следует также помнить, что арктангенс медленнее стремится к PI/2, нежели гиперболический тангенс к 1, поэтому придется вносить поправку и в константу.

Что касается рейтинга конкретной публикации, тут все просто — формула без учета количества оценок будет выглядеть так:

Rate = SUM(m_value*m_weight)/ SUM(m_weight);

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

Желаю удачи и объективности на ваших ресурсах.
Искренне ваш, Семен Шторкин.
Tags:
Hubs:
Total votes 111: ↑107 and ↓4+103
Comments61

Articles