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

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

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


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

    Например, автор, работающий в жанре пейзажной фотографии, имеет максимальный вес голоса именно в этом разделе, но минимальный, скажем, в разделе «Обнаженная натура». Пришлось попотеть, прежде чем нашлись формулы, более или менее объективно описывающие вес голоса. Смысл веса голоса заключается в следующем (здесь и далее примеры будут касаться рейтингов работ и авторов на фотографическом сайте): автор должен подтвердить свою компетентность в том или ином разделе, набрав за свои работы в нем как можно больший балл (по пятибалльной шкале). Наиболее оптимальным оказалось решение, в котором вес голоса изменяется от 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, исключены накрутки рейтингов клонами, ибо, чтобы достичь такого веса, клонам приходится работать на равных с основными пользователями, т.е. публиковать реальные работы (воровство работ и повторные публикации пресекаются) и набирать оценки от продвинутых пользователей ресурса. Эффективность системы веса автора в том или ином разделе сайта подтвердилась, когда ведущий фотосайт страны похвалил и перенял у моего проекта эту фишку. Но, поскольку они незадолго до этого перешли на накопительную систему рейтингов, им пришлось ограничиться лишь визуальным отображением состоятельности
    авторов в разных жанрах.

    Желаю удачи и объективности на ваших ресурсах.
    Искренне ваш, Семен Шторкин.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 61

    • НЛО прилетело и опубликовало эту надпись здесь
        +9
        К сожалению там это все медленно, как оказалось, работает. Этому можно будет посвятить отдельный пост. Предлагаю высказываться по теме топика.
        +2
        Мммм… мне кажется такая система попахивает тоталитаризмом. =))
        Как сказал глава (человек с самым большим весом оценки), так, скорее всего, и будет. И потом еще можно пиписьками пугать других, мол поставишь мне минус, я тебя тоже заминусую, у меня вес оценки больше, чем у тебя.
          +4
          Ну на этот случай почти везде кармоголосования делаются закрытыми, иначе месть зачастую неизбежна.
          • НЛО прилетело и опубликовало эту надпись здесь
              +7
              И будут комменты типа «Извини, друг. Так надо.»
                +3
                скорее, что-нибудь односимвольное или абракадабра какая.
                  +2
                  пф, зачем так утруждаца, все будет проще, вроде «жлазь8кжцдюпмхыалнрлщтидлржо9495» ;)
                    –1
                    «Ничего личного. Это бизнес»
                  0
                  на rsdn.ru видно кто поставил тебе минус или плюс, и что то я не слышал что бы там специально минусовали «минусователей»
                    0
                    Там минусы ни на что не влияют. В рейтинге учитываются только плюсы.
                  0
                  Там не видно голосующих, видно лишь вес голоса проголосовавшего, и кстати, можно сделать запрос на обоснование голова. Все очень продумано.
                • НЛО прилетело и опубликовало эту надпись здесь
                    +1
                    Я являюсь пользователем Фотогорького, сайт очень нравится, сразу бросилась в глаза система оценок, очень обьективная.
                      +7
                      Все же считаю, что универсальной системы оценок нет и то, что подходит Фотогорькому не обязательно подойдет Хабру, к примеру.
                      Да, и инвайт админу Фотогорького пожалуй можно было бы дать, чтобы он нам сам тут свое мнение высказал =))
                        0
                        я тоже когда-то похоже страдал, но не рейтинг автора, в зависимости от раздела, а вес фотографии в зависимости от её веса в своём разделе. Потому что например обнажёнки всегда будут выше животных, а так — их можно сравнивать между собой.
                          0
                          Оформите, пожалуйста, свои формулы красиво :)

                          Кстати, еще можно использовать нормальное распределение, к экстремуму которого стремятся все оценки пользователей, но если юзер постит действительно хорошие работы, то он будет где-то впереди
                            0
                            Попробовал воспользоваться вашим сайтом. Предпросмотр не отображает картинки. Рискну опубликовать коммент. Посмотрим что получится…

                            Вес:

                            Рейт публикации:
                              +2
                              У вас отрицательная карма и использовать теги вы не можете.


                              Weight = {\tanh \frac N C} \times {\frac {\sum_{i=1}^n {mValue_i \times mWeight_i}} {\sum_{i=1}^n mWeight_i}} \times {\frac 1 5}

                              Этот рендер, оказался лучше.
                                0
                                Можно заходить в Википедию, открывать редактирование любой страницы, набирать <math>...tex-код...</math> и нажимать предпросмотр. Получается очень красиво.
                              • НЛО прилетело и опубликовало эту надпись здесь
                                  0
                                  Понятно. Странно, комменты плюсуют, а карму минусуют.
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                0
                                Почему-то вставив формулу, крутящая штучка зависла в своем кручение и повторив этот процесс было тоже самое. Не смог воспользоваться сервисом…
                                  +1
                                  Формулы там нужно писать в формате TeX, выше я привел пример формулы отрендереной и записанной в нужном формате, со ссылкой на более качественный рендер
                                0
                                Имхо, конечно.
                                Но для фотосайта лучшая оценка фотографии — это количество уникальных просмотров за 1 день, неделю, месяц и т.д, короче за определённый период времени, при этом с течением времени просмотры надо снимать.
                                  +1
                                  Это бред, фото которое висит в топе автоматически будет набирать просмотры
                                    –1
                                    Ну это у вас мышление линейное и основанное на пережитом опыте.
                                    Всё зависит от того как выводить результаты. Вот вы кроме «топа» ничего не видели и не видите, а я вижу.
                                    Кроме этого, система, которая зависит от оценочных суждений зарегистрированных пользователей отражает только их субъективное мнение, ниже ChemAli хорошо об этом написал.
                                    Более того. Активная аудитория пишущих и ставящих оценки, которая пишет и голосует в редких случаях репрезентативна и отражает мнение большинства. Я о нормальных и публичных ресурсах говорю. Множество людей пишет на форумах, на ресурсах, а значительно большее множество (большинство) их только читает, просматривает, посещает. Им лень регистрироваться, лень ставить какие-то оценки, плюсы-минусы.
                                  0
                                  К сожалению, ни одна система рейтинга пока не учитывает человеческого фактора: человек может поставить плохую оценку не из-за плохой работы, а просто так, из злости или по старой обиде. Или наоборот — завышенную из чувства симпатии к автору, но не работе.
                                    0
                                    Ну так и статистику никто не собирает на 2-3 примерах, нужна репрезентативная выборка. Оценка человека с плохим настроением при большом количестве оценок не будет играть роли.
                                      0
                                      А если у большинства плохое отношение к автору, например, после какого-то конфликта или спорной работы?
                                    +1
                                    Мне идея в принципе понравилась.
                                    Относительно дедовщины, ну ведь на хабре в такойже принцип (в принципе).
                                      0
                                      Хабр от него отказался, щас у всех равный вес голоса.
                                        0
                                        А знаете почему, я думаю, отказался? На Хабр приходит много профи «из оффлайна». Здесь же их рейтинг нулевой (особенно поначалу, а многим просто некогда регулярно постить).
                                        То есть существует чёткий разрыв между виртуальным рейтингом и реальным (оффлайновым) уровнем профессионализма. На мой взгляд, это приводит к вопросу о существовании рейтингов как таковых.
                                          0
                                          Скорее всего, рейтинг Хабра и оффлайновый рейтинг (можно назвать это реальным профессиональным опытом, чтобы понятно было) — вещи, преследующие разные цели. То есть, рейтинг Хабра действует внутри Хабра.

                                          По-моему, очевидную вещь сейчас сказал; пардон, если действительно так…
                                      0
                                      «Гиперболический тангенс отношения к нормирующей константе» — это круто :D
                                      Как я понял, чтобы новичку вылететь в топ, надо получить много положительных оценок от пользователей с большим весом голоса?
                                        0
                                        Вы чертовски догадливы!
                                        +4
                                        А что мешает использовать в MySQL гиперболический тангенс?

                                        th(x) = ( exp(x) — exp(-x) ) / ( exp(x) + exp(-x) )

                                        // Ваш Math-nazi
                                          0
                                          Как эта система поможет в случае «кукушки и петуха»? Никак…
                                            0
                                            А какая система помогает? Я таких не видел.
                                              0
                                              Втом-то и дело — никто таких не видел. А это главная проблема в «творческих» коммьюнити, а вовсе не накрутка рейтинга клонами…
                                            +1
                                            Можно и так, можно и по другому. Например с логарифмической шкалой и более хитрым порогом отсечения «маргиналов» с учетом, например, максимального рейтинга опубликованных работ (гений тот, кто создал хотя бы одно гениальное произведение) или усредненного, или моды оценок его работ (было несколько проходных, но не снижать же за них).
                                            Статистические параметры для любого подхода найдутся :)

                                            Можно вводить карму и рейтинг, как на сайтах авторства «Футурико», разные типы голосов с разным или одинаковым весом, при этом на хабре «хабрасила» отображает и подстегивает текущую активность, на лепрозории со временем не меняется.

                                            В любом случае у любой кармадроческой системы есть очень схожие плюсы и минусы, проблема с новичками, когда с водой могут отсечь и ребенка, проблема дедов, которые просто временем пребывания надрочили себе «виртуальный» авторитет и т.д.
                                              0
                                              А может быть еще как в спорте отбрасывать минимальную и максимальную оценки?
                                                0
                                                а как быть с минусами?
                                                  0
                                                  Давно, года три назад, я предлагал сделать оценку по принципу двойной обратной связи. Но до реализации так руки и не дошли. Да и сообщество у меня получилось не настолько массовое…
                                                  Идея такая:
                                                  1)любое конструктивное действие должно поощряться (оплачиваться) — прибавлением кармы/веса/авторитета/виртуальной валютой/и т.п.
                                                  2)величина поощрения определяется оценкой
                                                  3)вес оценки нелинейно зависит от кармы/веса/авторитета голосующего (похоже на предложенную в статье кривую)
                                                  4)оценка — тоже конструктивное действие и тоже поощряется
                                                  5)оценка оценки зависит от ее близости к среднему значению (т.е те, кто незаслуженно занижают или завыщают оценку, не поощряются, а наказываются, а те, кто ближе к центру нормали, получают максимальный плюс )
                                                  6)можно еще поощрять скорость оценки — постепенным уменьшением веса и величины поощрения во времени, это близко к традициям и решает проблему «первонахов»
                                                  Система была серьезно продумана, вплоть до формул, и где-то даже записана…
                                                  Если кому интересно, поищу.
                                                    +1
                                                    Проблема в том, что скрипт не может отличить конструктивное действие от тыка/клика/пука, а перекладывать это на плечи модераторов дело неблагодарное, только если они мотивированы или же просто заинтересованы.
                                                      0
                                                      Почему же, если голосующий за статью будет совершать какие-то оценочные действия, это будет давать одно распределение, если тупо случайный тык — совершенно другое. Это вычисляется элементарно.
                                                      По этой системе отличить человека от бота можно очень легко и просто.
                                                        +1
                                                        Я говорил немного не про то. Со знанием ли дела пользователь оценил творение автора или же ему просто импонирует сам автор — тут автоматика бессильна. Хотя, с другой стороны, автору и тот и другой голос полезен :-) Но не каждому. Просто, бывает так, что известного автора всегда «плюсуют», в независимости от того, что он втюхивает пользователям, у нас такое тоже практикуется, к сожалению.
                                                          0
                                                          Идеальной система не может быть по определению. Но стимулировать активность пользователей и отсеять явно невменяемых она сможет.
                                                          На творческих авторских ресурсах активность достаточно высокая, а на обычных не превышает 1%
                                                            +1
                                                            Совершенно верно, применимость — узкоспециализированные и творческие ресурсы.
                                                    +2
                                                    Добрый вечер и спасибо за инвайт!

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

                                                    Абсолютно согласен с комментарием по поводу «оффлайновых профи», у нас тоже случается, что только что зарегистрировавшийся фото-мастер через пару дней обращается в редакцию с вопросом «какого черта он все еще претендент». Тут ничего не поделаешь многие смотрят работы лишь известных им авторов (благодаря подпискам на ленты работ), обходя стороной творения новичков (если только у них не громкое имя).

                                                    С другой стороны, развивающийся автор публикует работу в расчете на оценку (для кого-то не важно ее значение, но важен сам факт), и оценка от «мастера» на сайте, чьему мнению он доверяет, гораздо важнее мнения некого претендента, с минимальным весом и пустым портфолио.
                                                      0
                                                      автор, я правильно понял, что все оценки рассчитываются динамически? то есть сегодня зелёный фотошкольник зарегистрировался и обладая весом 0.1 накидал оценки фотографиям, затем он год набирает вес, к примеру до 0.9. так вот будут ли перерассчитываться его прежние оценки с учётом нового веса?
                                                        +1
                                                        Нет конечно, в базе хранятся оценки с тем весом, которым обладал их автор на момент оценивания.
                                                          0
                                                          для всеобщего запутывания и динамики можно было бы рассчитывать все (миллионы) оценки каждые сутки заново учитывая поправки веса голосов.
                                                            +1
                                                            Не буду скрывать — думал об этом. Но пришел к выводу, что мнение, высказанное человек на ранней стадии становления специалистом, сохраняет уровень компетентности, не зависимо от дальнейшего развития самого человека.
                                                        0
                                                        Не понял. Чтобы посчитать вес автора, надо знать веса всех кто ставил ему оценки. А их веса как рассчитать? Замкнутый круг выходит
                                                          +1
                                                          Не «веса всех кто ставил ему оценки», а вес оценок, который известен и хранится в табличке оценок в базе.
                                                            0
                                                            А как считается вес оценок?
                                                              +1
                                                              Вес оценки равен весу голоса автора в конкретной категории на момент оценивания, я чуть выше написал.
                                                                0
                                                                Интересно… Т.е. если два новичка поставили друг другу одинаковую оценку, то у того кто поставил вторым рейтинг будет выше?
                                                                  0
                                                                  Нет, если вы внимательно чиатли топик, то должны были заметить оговорку, что в весе голоса существует планка, если вес голоса новичка ниже нее, то его голоса не могут влиять на рейтинг и вес другого пользователя. В формулах этого в явном виде нет, но данное условие задается на уровне селекта в базу, который выбирает оценки.

                                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                        Самое читаемое