Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Новый алгоритм рейтинга. Разрабатываем. 
:(
    Опции темы
Wowa
Дата 8.10.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 79
Всего: 290



Цитата(Maksym @  8.10.2007,  14:33 Найти цитируемый пост)
Наличие большого числа рейтинговых/антирейтинговых постов (звездочки над постом) -- не будем учитывать? 

по идее надо бы.
PM WWW   Вверх
Alexeis
Дата 8.10.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 13
Всего: 459



  Да уж с этими звездами все сложнее. По идее там нужно чтобы было что-то вроде накопительной системы, т.е. звезды эта дробная часть от плюсов. Пока сумма этих дробей не превысит 1, "+" не начисляется. За много звезд, может набраться много плюсов. Однако если за этот пост был поставлен "+", то от этого участника звезда уже не дает дробной части к плюсу. Аналогично с минусами.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Wowa
Дата 8.10.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 79
Всего: 290



я думаю, что звезды должны функционировать отдельно от плюсов и просто раз в пару недель обходить посты. считать звезды. У кого-то звезд на сообщении больше N - добавить +1 к рейтингу. Аналогично с минусами. Дабы не было проблем при пересчете рейтинга, эти данные можно хранить в отдельном поле от основного рейтинга и прибавлять к нему при отображении.
PM WWW   Вверх
Maksym
Дата 8.10.2007, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 1
Всего: 62



Цитата(Wowa @  8.10.2007,  16:12 Найти цитируемый пост)
У кого-то звезд на сообщении больше N - добавить +1 к рейтингу.

Обычно даже самые сильные посты набирают 3-5 звезд максимум. В то же время есть участники, которые стабильно пишут разумные и полезные посты, набирающие по 2 звезды (просто потому, что в теме в этот момент два-три заинтересованных участника).
Поэтому, имхо, правильнее считать все звезды в постах участника и прибавлять к рейтингу + ближайшее целое(число_звезд_на_постах/коэффициент), где коэффициент==10 (к примеру, это надо эмпирически посчитать).
Если технически не сильно усложнит, то этот рейтинг тоже (как и обычный) нужно дифференцировать между репутацией в текущем разделе и общей (в зависимости от того, где найдены рейтинговые посты).
PM MAIL   Вверх
CyClon
Дата 9.10.2007, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



Вообще, при раздаче репутации нужно учитывать только рейтинг того, кто дает плюс. Так будет правильнее. А рейтинг нужно расчитывать исходя из:
* Даты регистрации на форуме
* Количества сообщений
* Званий (администратор, модератор, участник клуба и тому подобное, то есть в базе нужно для каждого звания создать поле, в которое будет вписываться значение модификатора. То есть, например 1.1 будет значит, что ко всей репутации прибавляется еще 10%).
* Количества глобальной репутации
* Количества репутации в данном разделе (Разделом считать PHP/JS/C++, а не PHP: Тексты/PHP: Сеть и т.д. То есть, если человек мега-тру-кодер PHP, но нуб в JS, то то соответственно будет задавать нубские вопросы в разделе JS, будет получать ответы. И когда он будет нажимать "+", наваливать тонны репутации за помощь в написании кода alert('Hello') будет неправильно. Думаю меня поняли.)
* Уровня предупреждений (0% предупреждений, 100% репы / 50% предупреждений, 50% репы. То есть это будет как бы штрафом на репу. Если юзер например на форуме 3 года, имеет 2000 сообщений, но последнее время начал буянить и получать предупреждения, то для него вводится штраф на репу. Чем больше предупреждений, тем меньше репы он дает за раз. Как косинус - угол растет, значение уменьшается, то есть обратная пропорциональность тут.)

Т.е. репу можно высчитывать примерно так:

Код
<?php

// Модификатор жизни (кол-во дней на форуме / 1000), каждый дополнительный день на форуме увеличивает количество даваемой репутации на 0.001%
$registration = mktime(0, 0, 0, 12, 3, 2005);
$modLife = (int) ((time() - $registration) / 86400) / 1000 + 1;

// Модификатор активности (кол-во сообщений / 10000), каждое сообщение увеличивает количество даваемой репутации на 0.0001%
$messages = 650;
$modActive = $messages / 10000 + 1;

// Модификатор звания (задается администратором форума для каждой группы/звания отдельно)
$modRank = 1.10;

// Модификатор количества глобальной репутации (кол-во глобальной репутации / 100), каждае очко глобальной репутации увеличивает количество даваемой репутации на 0.01%
$globalReputation = 5;
$modGlobalReputation = $globalReputation / 100 + 1;

// Модификатор количества локальной репутации (кол-во локальной репутации / 100), каждае очко локальной репутации увеличивает количество даваемой репутации на 0.01%
$localReputation = 1;
$modLocalReputation = $localReputation / 100 + 1;

// Модификатор предупреждений (Косинус угла X, где X - количество предупреждений в процентах) (первый алгоритм, который пришел в голову (нужно переделать))
$warning = 5;
$modWarning = cos(deg2rad($warning));

$addRep = (int) ($modLife * $modActive * $modRank * $modGlobalReputation * $modLocalReputation * $modWarning);

echo $addRep; // Результат - 2

?>


Делал на скорую руку, так что извиняйте smile

ЗЫ: Цифры можно переделать так, чтобы самый активный юзер на данный момент давал примерно 10 за раз репутации, остальные по убыванию и будет все ок smile


--------------------
user posted image
PM   Вверх
CyClon
Дата 9.10.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



Код
<?php

$registration = mktime(0, 0, 0, 10, 9, 2005);
$messages = 2000;
$globalReputation = 100;
$localReputation = 75;
$warning = 0;

// Модификатор жизни
$modLife = (int) ((time() - $registration) / 86400) / 1000 + 1;
// Модификатор активности
$modActive = $messages / 1000 + 1;
// Модификатор звания
$modRank = 1.5;
// Модификатор глобальной репутации
$modGlobalReputation = $globalReputation / 100 + 1;
// Модификатор локальной репутации
$modLocalReputation = $localReputation / 100 + 1;
// Модификатор предупреждений
$modWarning = cos(deg2rad($warning));

$addRep = (int) ($modLife * $modActive * $modRank * $modGlobalReputation * $modLocalReputation * $modWarning);

echo $addRep;

?>


Вот, неплохой вариант получается smile Человек ровно 2 года на форуме, за это время набил 2000 постов, 100 репутации в глобально, 75 репутации именно в этом разделе (допустим, PHP), предупреждений нет. Имеет звание, например, ко-модератора (на 50% больше репы). 27 репы за раз. Нормально smile

ЗЫ: Минус такой системы - текущая репа обесценится. Хотя, если вводить новую систему, где за один раз дается более 1 репы - все равно обесценнится smile


--------------------
user posted image
PM   Вверх
Alexeis
Дата 9.10.2007, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 13
Всего: 459



  Целочисленные значения безусловно лучше, они нам ближе. 0,27 репы смотриться как-то неконкретно, но тогда без обесценивания с целыми числами никак и не выйдет. Потому новички это минимум +1 бал, опытные +2, оч. опытные/эксперты +3, + бонусные, максимум до +5. Другое дело, что по предложению sTa1kEr, можно сделать, так что внутри группы и более опытному это всегда +1, а менее опытному на 1 больше, т.е. типа таблицы

Для участников без особого статуса так, по вертикали ставящий по горизонтали получающий
                     Новичек   Опытный   оч. Опытный      
Новичек            1                  1                1
Опытный           2                  1                1
оч. Опытный     3                  2                1

Для статуса можно сделать перенос с более высокую группу в своем разделе. 




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
CyClon
Дата 9.10.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



Оч. опытные новичкам репу не поднимают, как правило smile Ибо новички на то и новички, чтобы задавать вопросы, а не помогать оч. опытным smile Это так, мысли вслух smile


--------------------
user posted image
PM   Вверх
SelenIT
Дата 10.10.2007, 05:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: нет
Всего: 401



Цитата(CyClon @  9.10.2007,  18:15 Найти цитируемый пост)
Ибо новички на то и новички, чтобы задавать вопросы, а не помогать оч. опытным 

Новичок новичку рознь... smile

Но мне кажется, что фора в виде более легкой репы для новичков - это лишнее. Новичок, который активно помогает более опытным, и так наберет свои высокие очки достаточно быстро (равно как и новичок, который очень активно помогает другим новичкам, что тоже похвально;). Имхо, вполне достаточно учета "веса" проставляющего. Ну и можно сделать простую "усушку" репы со временем (например, по убывающей экспоненте с "периодом полураспада" в один год), чтобы свежие награды были актуальнее, чем "прошлые заслуги", и нельзя было просто "успокоиться на достигнутом"... smile


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Stampede
Дата 10.10.2007, 08:19 (ссылка) |    (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: нет
Всего: 144



Wowa, а ты уверен, что от такого алгоритма будет польза? Ты можешь объяснить, какого эффекта ты собираешься добиться?

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

Но это все ладно, при желании можно сделать. Вопрос - чего ради?

Неужели кто-то всерьез думает, что от этого у новичков репа будет расти быстрее? Наоборот, получим еще большее расслоение. Присмотритесь: "высокорепые" гораздо чаще награждают друг дружку, нежел каких-то новеньких. И это не кумовство, а вполне естественное положение вещей: очевидно, люди с репой обладают какими-то качествами (знаниями, умениями), которые встречаются не слишком часто.

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

Короче, минусов у такого нововведения вижу немеряно, плюсов - практически ни одного.

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

Впрочем, как говорится, хозяин - барин. Спасибо за внимание.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
tol05
Дата 10.10.2007, 10:22 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: нет
Всего: 170



Полностью согласен с Stampede и частично -  с CyClon

Цитата(CyClon @  9.10.2007,  12:39 Найти цитируемый пост)
Минус такой системы - текущая репа обесценится.
Думаю, нужно все обдумать хорошенько, чтобы не переделывать потом и не объяснять участникам, почему набранная ими репутация больше ничего не значит.

По поводу разрешения новичкам оценивать ответы. Есть такой момент: я логинюсь под новым аккаунтом (например "SuperPuperMistery") и просто ставлю самому себе (tol05) плюсы. Каждый день. Так сказать, "сделай себе настроение на день прямо с утра". А новички на форум приходят, и восторгаются: смотри, какой чел мне ответил!!! У него репутация - потолок!!!

По поводу динамических весов оценок (от кол-ва постов). 
Есть 3 участника. У каждого - 1000 постов. 
участник А имеет репутацию 150
участник В имеет репутацию 0
участник С имеет репутацию -8

Каждый из них поставил мне плюс. Эти плюсы равноценны (психологически, морально, как хотите)? А минусы?

Цитата(SelenIT @  10.10.2007,  05:15 Найти цитируемый пост)
Ну и можно сделать простую "усушку" репы со временем (например, по убывающей экспоненте с "периодом полураспада" в один год), чтобы свежие награды были актуальнее, чем "прошлые заслуги", и нельзя было просто "успокоиться на достигнутом"... 

Я против. Заслуги - это заслуги. И участник А получил +1 от участника B три года назад, то какое право имеет кто-нибудь (человек, алгоритм или электромагнитное излучение, в конце концов) этот плюс забрать? Только B имеет на это право (я говорю не о технической стороне вопроса, а о моральной). 
Тем более, что скоро (как я понимаю) участник с пятью постами, залогинившийся пару дней всего как, сможет поставить другому такому же участнику (к примеру, своему школьному однокласнику) +10 за пост типа "ржунимагу!!!" ...

Тут rsdn вспоминали. Так я очень недоволен их системой оценок. Когда на вопрос новичка, начинаюшийся как "Скажите пожалуйста, а молжно ли сделать...."(вопрос на страницу, с несколькими блоками кода) идут ответы "можно" (и за это отвечающий получает +27) или "ну так в чем проблема?" (... то же самое...). Этим новичком был я когда-то... 
Отдельная тема - это возможность ставить оценки анонимным пользователям! Когда участник просто выходит из аккаунта, ставит минусы (иногда - с нескольких машин) и входит на свой аккаунт снова... Мне про это говорили лично.

Вывод: каждый форум имеет свои правила, свою систему оценок, свои традиции, микроклимат, ауру, если хотите. И не стоит от "своего" так просто отказываться. Нужно традиции поддерживать и развивать, а не просто перенимать правила, интерфейс, и прочее... 
Цитата

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


Это сообщение отредактировал(а) tol05 - 10.10.2007, 10:27


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Alexeis
Дата 10.10.2007, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 13
Всего: 459



Цитата(tol05 @  10.10.2007,  10:22 Найти цитируемый пост)
Думаю, нужно все обдумать хорошенько, чтобы не переделывать потом и не объяснять участникам, почему набранная ими репутация больше ничего не значит.

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

Цитата(tol05 @  10.10.2007,  10:22 Найти цитируемый пост)
Есть такой момент: я логинюсь под новым аккаунтом (например "SuperPuperMistery") и просто ставлю самому себе (tol05) плюсы. Каждый день. Так сказать, "сделай себе настроение на день прямо с утра". А новички на форум приходят, и восторгаются: смотри, какой чел мне ответил!!! У него репутация - потолок!!!

  За такие штуки почти всегда следует наказание, либо предупреждение со снятием всех липовых плюсов, либо вообще запрет на установку плюсов/минусов. Этот вопрос не имеет отношения к вопросу, им занимаются (ко)модераторы/Админы.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
sTa1kEr
Дата 10.10.2007, 12:22 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 8
Всего: 146



Если говорить про предложенный мной алгоритм, то:
Цитата(Stampede @  10.10.2007,  08:19 Найти цитируемый пост)
Наоборот, получим еще большее расслоение. Присмотритесь: "высокорепые" гораздо чаще награждают друг дружку, нежел каких-то новеньких.

Как-раз и получится, что у "высокорепыех" изменение репутации всегда будет стремится к номинальному значению. А для новичка такое изменение будет намного ценнее.

Цитата(Stampede @  10.10.2007,  08:19 Найти цитируемый пост)
Если совсем на пальцах: если сейчас функция значения репы от числа плюсов растет линейно, то с введенем весовых коэффициентов, в среднем на круг, мы получим что-то близкое к квадратичной функции, а то и к экспоненте, с тенденцией к зашкаливанию в совсем уж заоблачные высоты.

Опять же где вы увидили квадратичную функцию? Скорее обратная гиперболическая функция. Сначала изменение репы будет достаточно большим, а затем резко уменьшатся, предотвращая зашкаливание.

По алгоритму CyClon:
Имхо слишком большая зависимость от сообщений, дней на форуме и пр. Если делать линейную зависимость "веса", то уж лучше воспользоваться простой схемой Alexeis, только меньшими значениями.

Цитата(tol05 @  10.10.2007,  10:22 Найти цитируемый пост)
Думаю, нужно все обдумать хорошенько, чтобы не переделывать потом и не объяснять участникам, почему набранная ими репутация больше ничего не значит.

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




PM MAIL   Вверх
CyClon
Дата 10.10.2007, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



Цитата
Каждый из них поставил мне плюс. Эти плюсы равноценны (психологически, морально, как хотите)? А минусы?


Я вообще против минусов. Чтобы можно ставить только плюс.

Цитата
Имхо слишком большая зависимость от сообщений, дней на форуме и пр. Если делать линейную зависимость "веса", то уж лучше воспользоваться простой схемой Alexeis, только меньшими значениями.


Увеличиваем делитель в 10/100 раз и зависимость уменьшается. Это уже админам решать, какие параметры должны быть наиболее значимыми, наверное.


--------------------
user posted image
PM   Вверх
Maksym
Дата 10.10.2007, 14:33 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 1
Всего: 62



Текущая система рейтингов -- вполне хороша и достаточно адекватна.

Единственное нововведение, которое напрашивается это автоматическое добавление к очкам рейтинга, проставленных участниками, очков рейтинга, вычисленных на основании кол-ва рейтинговых постов (да, я снова про те самые звезды над постами..). 
Такой рейтинг просто станет точнее, будет награждать за качественные посты, которые, возможно, не заслуживают отдельного "+", но понравились участникам, были разумны и полезны. 
Или наоборот, пустые посты, за которые "-" ставить черезчур -- все же будут адекватно влиять на репу.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Обсуждение форума | Следующая тема »


 




[ Время генерации скрипта: 0.1036 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.