Вопросы об алгоритме «Новый пользователь месяца»

Здравствуйте,
Я был новым пользователем на форуме Discourse и к концу первого месяца набрал более 930 лайков. Победителями в номинации «Новичок месяца» стали два человека: у одного было около 40 лайков, у другого — 60. Я изучил код, опубликованный в одном из предыдущих постов на этом сайте, и ситуация не должна была сложиться именно так. Если посмотреть только на мои самые высокооценённые посты и посчитать, используя значения лайков для каждого уровня доверия, сумма составит примерно 360 только за эти посты. Теперь посчитаем для пользователя с 60 лайками: даже если бы его лайкнул администратор все 60 раз, он всё равно бы не приблизился к 360. Что здесь произошло? Мы оба присоединились в середине ноября с разницей в несколько дней… Что я упускаю? Я не хочу звучать обидчиво, но это было довольно разочаровывающе и запутанно. Пока никто не смог дать мне ответ, кроме фразы «Новичок месяца — это обман». Любая информация будет полезна, но учтите, что я уже изучил код. Спасибо!

Я посмотрел код. Оказывается, лайки взвешиваются в зависимости от стажа, а также итоговая сумма делится с учётом того, сколько различных аккаунтов лайкнули ваши посты. Полагаю, это мера широкой популярности.

Редактирование: ой, возможно, деление идёт по номеру поста, а не по аккаунтам — см. ниже в ветке.

Я тоже это учёл.
Это действительно странно, кажется.

Так что разные аккаунты? Хм. Это имеет смысл… Я не могу получить данные по этому, но всё равно считаю это странным.

Спасибо за помощь, впрочем!

Вы смотрели Dataexplorer? Он встроен в ядро, и, возможно, для запроса уже есть скрипт.

Что касается изменения «Нового пользователя месяца», я не уверен, какие есть варианты. Однако, как я понимаю, в настройках сайта можно изменить веса для каждого уровня доверия (TL).

Нет, не пробовал. Возможно, попробую.
Спасибо!

Это может помочь найти пользовательские варианты, которыми поделились пользователи.

Использовать Date Explorer могут только администраторы форума, поэтому вы не можете получить данные как обычный пользователь.

Вы много писали о общем количестве лайков, но не упомянули количество публикаций. Очки, рассчитанные на основе лайков с учётом уровня доверия пользователя, делятся на общее количество ваших публикаций:

Возможно, вы получили больше лайков, но также публиковались чаще, чем пользователи, получившие значок.

Это многое объясняет. Спасибо!
(Но это не очень логично. На мой взгляд, более активная публикация должна считаться вкладом в сообщество и не должна снижать рейтинг.

Что вносит наибольший вклад в развитие сообщества? Множество постов с небольшим количеством лайков из-за их низкой привлекательности или несколько постов, которые привлекают внимание пользователей и получают много лайков?

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

Я согласен, в целом я понимаю вашу точку зрения, но считаю, что на моём форуме ситуация иная. Большинство постов редко получают больше одного-двух лайков, а звание «Новый пользователь месяца» не учитывает решения, что, на мой взгляд, было бы здорово (хотя я не уверен, является ли это плагином). Возможно, стоит сделать значок не автоматическим, чтобы модераторы или администраторы выбирали его вручную. Это позволило бы адаптировать значок под специфику каждого форума.

Скажите, как вы считаете: что считается более полезным на форуме — 1,1 тысячи лайков при 700 постах и около 60 решениях за две недели, или 60 лайков при 40 постах (за примерно тот же срок) больше подходит для звания «Новый пользователь месяца»?

Кстати, с праздниками!

Это очень верное замечание, и я согласен с вами, что текущий алгоритм может быть слишком упрощённым. Я думаю, хорошим первым шагом было бы сделать фактор поста нелинейным, например:

SUM(...) / SQRT(5 + COUNT(DISTINCT p.id))::float AS score

или, возможно, даже

LN(1 + SUM(CASE ... END)) / (5 + COUNT(DISTINCT p.id))::float AS score

Один из подходов к выделению более популярных постов — возвести количество лайков в квадрат, просуммировать их, а затем разделить на число постов.

Мне интересно, может ли ошибочная идея иметь ценность: учитывать количество уникальных аккаунтов, поставивших лайк. Это, например, могло бы помочь против группировок или накруток голосов.

Кстати, отмечу, что на моём форуме за последние 12 месяцев было избрано только 13 победителей из возможных 24 значков «Новый пользователь месяца».

Да, согласен. Это может быть хорошей идеей.

Объясните это на русском? Я с трудом понял код «Пользователь месяца» :grinning_face_with_smiling_eyes:.

Не мог бы кто-то с более высоким уровнем доверия отредактировать заголовок на «Вопросы об алгоритме Пользователя месяца» или что-то подобное? Очевидно, это не баг. Просто немного необычно.
Спасибо @Moin!

«Проблема» заключается в том, что рейтинг (по сути) вычисляется так:

\text{Рейтинг} = \frac{\text{# Лайков}}{\text{# Публикаций}}

Как вы уже отметили, это, вероятно, нежелательная ситуация. Если среднее количество лайков одинаково, то большое количество публикаций должно оцениваться выше, чем малое.

Чтобы «исправить» эту проблему, нужно изменить функцию: знаменатель дроби должен расти медленнее, когда количество публикаций увеличивается. Это можно сделать, применив к нему специальную функцию. Обычные кандидаты — SQRT (квадратный корень) и LN (натуральный логарифм), так как они возрастают, но медленнее линейной функции:

Таким образом, заменив делитель на величину, которая растёт медленнее при увеличении количества публикаций, мы получим более высокий рейтинг (ведь деление на меньшее число даёт больший результат). Изменение формулы так, чтобы к делителю применялись SQRT или LN, даёт желаемый эффект («Большое количество публикаций должно оцениваться выше, чем малое, если среднее количество лайков одинаково»).

Вторая формула пытается избежать противоположного нежелательного эффекта: небольшое количество публикаций с большим количеством лайков не должно доминировать в рейтинге.

Если вы администратор, вы можете перейти в настройки сайта и изменить весовые коэффициенты, чтобы выровнять их.

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

Я не администратор, но спасибо в любом случае.
Кажется, каждый день узнаешь что-то новое :grinning:

Спасибо за объяснение! Это отличное решение. Жаль, что на моём форуме такой функции пока нет…

В большинстве случаев это не совсем так. По этой логике именно количество лайков будет сигнализировать о том, действительно ли ваши посты полезны. Если вы публикуете много, но не можете поддерживать высокое соотношение лайков к постам, это говорит о том, что вы просто болтаете и, возможно, задаёте вопросы, ответы на которые можно было бы найти самостоятельно.

Например, ваши вопросы уже обсуждаются здесь:

Хорошо. Извините, что задаю этот вопрос, но я не согласен. На разных форумах лайки используются по-разному, и, на мой взгляд, решение, которое предложил @RGJ, будет полезно и на моём. Не все форумы склонны лайкать каждый пост, поскольку мы часто ставим лайк только тогда, когда что-то нас вдохновляет или соглашается с нашим мнением. Быть правым часто недостаточно, чтобы большинство пользователей поставило лайк. Я изучу вашу ссылку, но раньше я её не видел. Не думаю, что было необходимо повторять мнение, которое уже было высказано ранее в обсуждении, на которое я уже ответил. Можем ли мы согласиться не соглашаться?

Подумайте об этом: если вы действительно полезны, то чем больше вы публикуете, тем лучше. Именно об этом, на мой взгляд, должна быть эта значок.
В посте, на который вы ссылаетесь, вы, возможно, были правы в отношении данных, но активность в сообществе — это не только цифры. Ранее я говорил, что если бы я опубликовал что-то правильное лишь один раз на нужную тему, а затем полностью прекратил активность, я всё равно мог бы получить значок. Это лазейка, которая недопустима.

Точно.

Таким образом, при текущей формуле пользователь, создавший один пост «Я сдаюсь, этот форум — отстой», получивший 20 лайков, будет иметь более высокий рейтинг, чем пользователь, создавший 60 полезных постов, получивших в общей сложности 200 лайков.

Мне это кажется неправильным.