Рейтинг: байесовское сглаживание по опыту; новички — до 10 партий

Проблема: средний балл не учитывал число игр — новичок с 10 удачными
партиями обходил ветерана с сотнями стабильных.

Теперь score = (C·m + сумма очков) / (C + игр) × 100 при C=10, m=0.5:
к реальным партиям «дописываются» 10 виртуальных со средним 0.5, рейтинг
стартует около 50 и с опытом сходится к чистому среднему (формула IMDB).
Применено в топах и профиле; разбивка по фракциям осталась на чистом
среднем (служебная метрика «лучшая/худшая», сглаживание давило бы её к 50).
MIN_GAMES 5 -> 10 («Новички» во всех топах — до 10 партий; подписи берут
порог из API). Справка обновлена, добавлен тест (62 passed).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 03:04:48 +03:00
co-authored by Claude Fable 5
parent ddbcd74058
commit ebb368686d
4 changed files with 72 additions and 8 deletions
+11 -3
View File
@@ -34,8 +34,16 @@ export function HelpPage() {
<li>Выбывшие из партии считаются как последнее место.</li>
</ul>
<p className="small">
Итоговый <b>рейтинг</b> игрока = среднее «очков за место» по всем его партиям × 100
(шкала от 0 до 100).
Итоговый <b>рейтинг</b> игрока — сглаженное среднее: к реальным партиям
«дописываются» 10 виртуальных со средним результатом 0.5 (шкала от 0 до 100):
</p>
<div className="formula">
рейтинг = (10 × 0.5 + сумма очков) / (10 + число партий) × 100
</div>
<p className="small" style={{ marginTop: 10 }}>
Пока партий мало, рейтинг держится около 50 и с опытом сходится к реальному
среднему — стабильные результаты на длинной дистанции ценятся выше короткой
удачной серии.
</p>
</div>
@@ -55,7 +63,7 @@ export function HelpPage() {
<div className="card">
<h3>Попадание в топ</h3>
<p className="small">
Чтобы попасть в ранжированный топ, нужно сыграть минимум <b>5 партий</b>. До этого
Чтобы попасть в ранжированный топ, нужно сыграть минимум <b>10 партий</b>. До этого
игрок показывается в блоке «Новички» — предварительно, без места в рейтинге.
</p>
</div>