О вычислении рейтингов гонщиков

С декабря 2009г на нашем сайте используется новый алгоритм подсчета рейтингов сноукайтеров-гонщиков. Этот алгоритм является адаптацией рейтинга Эло для соревнований с несколькими участниками (базовый алгоритм предназначен для единоборств).

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

Содержание


Базовые принципы

  • Рейтинг измеряется в баллах (очках). Чем выше рейтинг — тем круче спортсмен (тем выше его позиция в таблице рейтинга). Положение спортсмена в таблице рейтингов назовем «рангом гонщика». Лучший гонщик имеет ранг 1, а его рейтинг, например, составляет 1600 баллов.
  • Рейтинг среднего гонщика равен 1000 баллов. Любой райдер, впервые появляющийся на соревнованиях текущего сезона считается имеющим именно этот рейтинг.
  • В начале каждого сезона рейтинги всех гонщиков сбрасываются в 1000 (выравниваются), так что каждый сезон начинается с чистого листа, и заслуги (как и неудачи) спортсменов в предыдущих сезонах на следующий сезон не влияют. Это замечание не касается сквозного рейтинга, который считается параллельно с сезонным, но никогда не сбрасывается (ведет непрерывную историю с ноября 2003г)
  • После соревнований рейтинг меняется только у тех спортсменов, которые вышли хотя бы на один старт. У нестартовавших спортсменов рейтинг не меняется (но может меняться ранг, ведь стартовавшие гонщики могут набрать рейтинг выше, чем нестартовавший, тем самым оказавшись выше его в таблице рейтингов (ранге), смещая нестартовавших вниз)
  • Рейтинги по разным зачетам считаются независимо (лыжи/борд, курс-рейс/марафон), если есть раздельные протоколы
  • В рейтинге учитываются только открытые соревнования, проходившие на территории России и анонсированные заранее на общепризнанных кайтовых веб-ресурсах, давая возможность иногородним участникам заявиться и поучаствовать. Мы готовы включать в рейтинг и нероссийские соревнования, при условии, что большая часть их участников является гражданами России
  • Если вы обошли в финишном протоколе гонщика, чей рейтинг был выше вашего — ваш рейтинг сильно растет. В такой ситуации он может вырасти на 7.5-15 баллов (чем больше разница рейтингов вашего и соперника — тем выше рост).
  • Опережение равного по силе (рейтингу) соперника даст вам 7.5 баллов в плюс.
  • Обгон более слабого соперника на рейтинг почти не влияет — чем больше разница в рейтингах вас и соперника, тем меньше баллов вы заработаете. Обгонами, на каждом слабом сопернике можно заработать от 0 до 7.5 баллов
  • Ситуация с изменением рейтинга — симметрична. Если вы заработали на обгоне кого-то N баллов, то он на вас проиграл ровно столько же баллов (сумма рейтингов любой пары соперников — постоянна. Гоняясь, вы делитесь долей рейтинга друг с другом)
  • Алгоритм подсчета рассматривает соревнования, как серию одновременно проходящих попарных единоборств, а изменения рейтинга от каждого из таких единоборств для спортсмена суммируются. Например, если кто-то занял первое место на соревнованиях из 10-ти участников, то он выиграл 9 единоборств (получив разные положительные приросты к рейтингу от каждой из 9-ти битв). Занявший второе место — обогнал 8-х и проиграл одному (его рейтинг изменится на 8 положительных и одну отрицательную долю) и т.д.


Следствия из схемы подсчета

  • Неудачное выступление (сбой оборудования, завал на старте и т.п.) могут существенно уменьшить рейтинг — ведь много более слабых гонщиков вас обгонят, тем самым забрав у вас несколько баллов рейтинга каждый. Это особенно заметно в марафонских зачетах, где обычно нет выбросов худших гонок из-за малого их количества.
  • Спортсменам с высоким рейтингом невыгодно гоняться со слабыми соперниками — в случае победы много баллов он на них не заработает, но зато в случае неудачи может очень много баллов потерять. Особенно опасны «темные лошадки» (гонщики, впервые вышедшие на старт) — обладая рейтингом новичка (1000) они могут неожиданно для всех выстрелить, обогнав многих именитых, тем самым существенно порушить их ранг (и сильно прирастив свой).
  • Чтобы рейтинг не падал, а рос, требуется гоняться не хуже, чем от вас ожидается — почти безболезненно проиграть можно только более сильным гонщикам, а всех более слабых надо обгонять. Для существенного прироста рейтинга, обгоните кого-нибудь, чей ранг повыше вашего.


Формула рейтинга для въедливых математиков

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

Общий прирост рейтинга после соревнований для любого спортсмена A определяется через сумму приростов рейтингов в каждом «спаринге», добавленных к его текущему рейтингу:

R1a = R0a + Σb=[1..N]ΔRab, где
b пробегает по всем участникам с первого до последнего (всего их N человек)
R1a — рейтинг гонщика A после соревнований,
R0a — рейтинг гонщика A до соревнований,
ΔRab — прирост рейтинга от единоборства спортсменов A и B

Каждый ΔRab вычисляется так:

ΔRab = Ka * (Sab — Eab), где
Ka — коэфициент = 15 для гонщика А с рейтингом до 2400 и 10 для гонщика А с рейтингом ≥2400
Sab — фактический результат спаринга A и B (А победил B = 1.0, А проиграл B = 0.0, ничья = 0.5)
Eab — ожидаемый результат спаринга A и B

Eab вычисляется так:

Eab = 1 / (1 + 10(R0b-R0a)/400)

Из этой формулы можно сделать несколько интересных наблюдений:

  • Eab + Eba = 1, что естественно, так как это сумма вероятностей всевозможных событий;
  • При равенстве входных рейтингов A и B ожидаемый результат спаринга Eab = Eba = 0.5 — победа каждого из участников равновероятна;
  • Если B сильнее A, то Eab < 0.5 и стремится к 0 при росте рейтинга B, что естественно - в схватке с более сильным гонщиком B, спортсмен A, скорее всего проиграет (заработает 0);
  • Если B слабее A, то Eab > 0.5 и стремится к 1 при росте рейтинга A, что естественно — в схватке с более слабым гонщиком B, A, скорее всего выиграет (заработает 1).

Теперь вернемся к формуле вычисления ΔRab. Какие можно сделать наблюдения о ней?

  • ΔRab положительна, если гонщик выступил лучше, чем от него ожидалось и отрицателен — если хуже;
  • Если рейтинги гонщиков A и B расположились по одну сторону от 2400, то приросты их рейтингов противоположны (ΔRab = -ΔRba);
  • Если один из гонщиков имеет рейтинг больше, чем 2400, а другой — меньше, то более опытный гонщик будет получать меньшие (по модулю) приросты в схватке с более слабым участником;
  • Коэффициент Ka определяет, насколько сильно каждый конкретный «спаринг» влияет на изменение рейтинга. Возможное изменение рейтинга находится в диапазоне (0..Ka)

Для того, чтобы оценить, к чему ведут разные исходы битвы, давайте рассмотрим спаринг двух спортсменов, рейтинги которых отличаются на 400:

  • При победе сильного над слабым, сильный получит 1.36 баллов, а слабый потеряет 1.36 баллов;
  • При победе слабого над сильным, сильный потеряет 13.6 баллов, в слабый приобретет 13.6 баллов;
  • Чем больше разница в начальном рейтинге, тем более близкое к Ka число мы будем получать вместо 13.6 и тем более похожее на 0 — вместо 1.36;
  • При равенстве начальных рейтингов, приросты рейтинга вырождаются в 7.5 (половина от Ka).

Напоследок небольшое, но важное замечание, которое сильно упрощает имплементацию и скорость обсчета алгоритма: если гонщики A и B — один и тот же человек, то он всегда заканчивает спаринг с результатом 0.5 (ничья), и ожидаемый результат такого спаринга = 0.5 (из-за равенства рейтингов), поэтому прирост от гонок с самим собой в рейтинге всегда равен нулю.


Как анализировать рейтинги на сайте

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

  • Сезонные рейтинги находятся здесь (или «Рейтинги» в главном меню сайта). На этой странице самый свежий сезонный рейтинг является текущим, поэтому рейтинги спортсменов в нем меняются по мере прохождения соревнований. Рейтинги прошлых сезонов уже не меняются, даже если археологические раскопки обнаружат результаты какого-нибудь ивента прошлых лет. Все спортсмены начинают очередной сезон с сезонным рейтингом = 1000, то есть с чистого листа (достижения в предыдущих сезонах в расчет не берутся).
  • Есть выделенный рейтинг, который называется «сквозной». Он считается параллельно с текущим сезонным рейтингом, но не сбрасывается в 1000 в начале сезона, позволяя наблюдать за результативностью спортсмена начиная с ноября 2003г. Во всем остальном алгоритмы работа сквозного и сезонного рейтинга одинаковы.
  • Чтобы узнать, как определенные соревнования отразились на сквозном рейтинге участников, нужно воспользоваться этой ссылкой (или «Статистика -> По соревнованиям» в главном меню сайта). Теперь выбирайте нужный вам ивент и смотрите на колонку «Рейтинг +/-«. Два числа в этой колонке, например «3 (20)«, означают, что данный спортсмен после ивента поднялся в рейтинговой таблице (сквозной, а не сезонной!) на 3 позиции вверх, заработав 20 баллов. Аналогично, «2 (-5)» означает, что спортсмен опустился на 2 позиции в сквозном рейтинге, потеряв 5 баллов.
  • Чтобы узнать спортивную историю определенного райдера, и как менялся его сквозной рейтинг от ивента к ивенту, пройдите по этой ссылке (или «Статистика -> По спортсменам» в главном меню сайта) и выберите интересующего вас гонщика. Для анализа смотрим значения в колонке «Рейтинг +/-«. Смысл чисел в ней точно такой же — «51 (210)» означает, что спортсмен заработал 210 баллов рейтинга, поднявшись на 51 позицию в ранге. Обратите внимание на самую первую строчку в истории гонщика — она показывает его начальную позицию, например 83 (-137) означает, что на первом в своей жизни ивенте райдер попал на 83-е место в сквозном рейтинге с 1000-137 = 863-мя баллами.
  • Не удивляйтесь значению «0 (0)«. Оно означает, что человек не получил вклад в рейтинг на текущем ивенте, так как или не вышел ни разу на старт, или ивент проходил вне России, или имел место какой-нибудь экзотический зачет (например, гранд-сеньоры на сноубордах)

Иван Борунов

Обсудить статью можно здесь.