Рейтинговая система с Эло, лучшие альтернативы? - PullRequest
1 голос
/ 25 марта 2019

Я работаю над алгоритмом рейтинга.У меня есть комплекс упражнений.Все они классифицированы по уровням (1 = самый простой, 5 = самый сложный).

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

Что я сделал: Я экспериментировал с рейтингом Эло.

Мои вопросы: Есть ли лучшие алгоритмы для этого варианта использования?(пока ничего не нашел)

Заранее спасибо и ура.Toby

1 Ответ

0 голосов
/ 25 марта 2019

Я бы попытался решить проблему простым, но (надеюсь) эффективным способом.

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

Во-вторых, я бы придавал больший вес голосам, в которых два уровня имеют большую разницу.Неправильное ожидание для двух esercises с рейтингом 2 и 3 должно иметь меньшее влияние, чем неправильное ожидание для двух упражнений с рейтингом 1 и 5.

Тем не менее, мой алгоритм будет выглядеть следующим образом:

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

2- Для «неожиданного» голосования я бы рассчитал разницу между исходными уровнями (минимум 1).

diff = max(1, abs(ex1.level - ex2.level))

3- Я бы обновлял рейтинг каждого упражнения на процент, основываясь на умножении increment и diff.

if (ex1 level expected bigger)
    ex1.rating = ex1.rating + diff*increment;
else
    ex1.rating = ex1.rating - diff*increment;

Рейтинг был бы плавающим, иУровень будет округлять rating:

ex1.level = round(ex1.rating)

Пример :

Давайте установим increment = 0.1.exA, с рейтингом 2,0 и уровнем 2 сравнивается с exB, рейтингом 3,0 и уровнем 3.

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

Второй пользователь выбирает exA.Это не ожидаемый результат.Разница между этими двумя упражнениями равна 1, поэтому рейтинг изменяется с коэффициентом 1 * 0,1 = 0,1, в результате чего exA.rating = 2.1 для exB.rating = 2.9

...