Методология

обновлено: апрель 2026

Методология kartracers.ru

Единое навигационное дерево методологических документов. Данные обновляются ежедневно в 01:00 MSK через scripts/data/build_metrics.py.


Что такое KRP

KRP v2 — композитный рейтинг 5 осей радара (скорость, стабильность, результативность, опыт, дисциплина) с байесовским сглаживанием для малоопытных пилотов (C=15).

Подробнее: krp.md


Что такое Дисциплина

Дисциплина — ось скаутинг-радара, показывающая частоту штрафных инцидентов пилота. 100 = ноль нарушений. Пересиды и компенсации не влияют на рейтинг дисциплины.

Полная формула, таблица весов и политика покрытия картодромов: discipline.md


Как часто пересчитывается

Все метрики пересчитываются ежедневно в 01:00 MSK через scripts/data/build_metrics.py.

Источники данных:

  • Racemann (АМКС, МИКС, и другие серии)
  • KartChrono (31 картодром)

Прокаты, тренировки и арендные заезды исключаются из всех расчётов.


Разделы

  • krp.md — KRP v2 (bayesian, C=15) и KRP v2d (diversity bonus)
  • krp-v3-per-race.md — Per-race вклад в KRP: 5 осей в раскрывающей панели на карточке пилота (якорь #krp-v3-per-race)
  • discipline.md — Ось дисциплины: canonical definition, веса, покрытие картодромов
  • scouting-axes.md — 5 осей peer-pool (карточка стинта / venue)

    Note: peer-pool axes используют другой scaling (×10, не ×1000). Канонические веса дисциплины — в discipline.md.

  • analytics-blocks.md — Блоки аналитики профиля пилота
  • manager-rating.md — Рейтинг менеджера (0–5 звёзд, bayesian K=5)

Архитектура источников данных

Racemann / KartChrono
    ↓
etl.events (penalty_kind classifier)
etl.race_penalty_summary (per-race aggregates)
    ↓
build_metrics.py (ежедневно 01:00 MSK)
    ↓
etl.pilot_krp_detail  (krp_v2, krp_v2d, discipline, ...)
etl.pilot_metrics     (scouting axes)
etl.manager_scouting  (manager rating)
    ↓
Next.js App Router (SELECT only, no runtime computation)

Ось Дисциплина — Канонический источник

Версия: v6 (2026-04-24). Этот файл — единственный источник правды для оси «Дисциплина» в KRP-радаре. Не дублировать формулу в app/methodology/page.tsx или в других markdown-файлах.


Формула

effective_penalty_sec = Σ_k W_k × penalty_seconds_k
discipline_raw = 100 − (effective_penalty_sec / total_laps) × 1000
discipline = clamp(discipline_raw, 0, 100)
  • k — вид инцидента (penalty_kind в БД)
  • W_k — вес вида (из таблицы ниже)
  • total_laps — суммарное количество кругов пилота на картодромах с has_penalty_feed = TRUE
  • clamp(x, 0, 100) — значение ограничено диапазоном [0, 100]

Min-laps guard: если total_laps < 100, дисциплина = NULL (недостаточно данных).


Таблица весов

event_type (Racemann) penalty_kind (DB) weight rationale
ШТРАФ (без ПЕРЕСИД в detail) violation 1.0 Judge-awarded rule violation (пример: "Грубая езда", "Выезд на красный").
ПРЕДУПР warn (синтезируется из warn_count × warn_sec_per_event) 0.3 Предупреждение — считается, но меньше настоящего нарушения.
КОМПЕНСАЦИЯ compensation 0.0 Виртуальный круг вернулся пилоту — не нарушение.
ШТРАФ с detail ILIKE '%ПЕРЕСИД%' strategy 0.0 Пересид = командная тактика, не дисциплина пилота.

Веса хранятся в private.config_discipline_weights и могут быть изменены через SQL UPDATE без деплоя кода.


Почему 0.3 для предупреждений?

  1. Правило Racemann "три warns = 10 s ШТРАФ" уже конвертирует хронических нарушителей — вес 0.3 добавляет сигнал без двойного счёта.
  2. Более пологое затухание дисциплины по сравнению с полным нарушением.
  3. Значение в конфиге — меняется через SQL UPDATE без deploy.

Покрытие картодромов

Дисциплина считается только по гонкам на картодромах с has_penalty_feed = TRUE.

Покрытие Картодромы Политика
> 80 % miks, v-karting, v-karting-sev TRUE
30–80 % lonato, raceplace, academy, mosrace TRUE
5–30 % extreme39, mayak, karthall, dozari TRUE (v6: частичный сигнал информативен)
< 5 % firsanovka, lemans, pitstop_drive и др. FALSE

Если после фильтрации у пилота остаётся total_laps < 100, дисциплина = NULL с UI-меткой «нет данных о штрафах».


Отличие от других осей: нет rescale по перцентилю

Оси скорость, стабильность, результат, опыт рескейлируются по перцентилю платформы (0–100 = процентиль). Дисциплина отображается как абсолютный raw score (0–100), без перцентильного пересчёта.

Обоснование: при per-kind весах raw score сам по себе дифференцирует пилотов. Перцентиль поверх raw сжимает 85 % пилотов в одну точку (57.4 на 2026-04-24), убирая сигнал.


Реализация

  • Вычисляется в scripts/data/metrics/aggregates.py функция compute_discipline_for_pilot()
  • Источник данных: etl.race_penalty_summary (агрегаты per race_id + pilot_id)
  • Результат записывается в etl.pilot_krp_detail.discipline
  • Ребилд: scripts/data/build_metrics.py ежедневно в 01:00 MSK

Связанные документы

  • scouting-axes.md — peer-pool axes (карточка стинта), используют другой scaling (× 10, не × 1000)
  • krp.md — формула KRP v2/v2d
  • index.md — обзор методологии

KRP — Karting Rating Points

Версия: v3 axes + v2 composite + v2d (2026-04-25). Этот файл — единственный источник правды для формулы KRP v2, KRP v2d и подсигналов осей KRP v3 (Speed kart_pace_delta, Experience breadth_premium

  • decay τ + learning_rate, Discipline per-category taxonomy).

Что такое KRP

KRP — итоговый рейтинг пилота от 0 до 100. Композитный: агрегирует все 5 осей радара (скорость, стабильность, результативность, опыт, дисциплина) с байесовским сглаживанием для малоопытных пилотов.


Компоненты (5 осей радара)

Ось Диапазон Окно Что показывает
Скорость 0–100 12 мес. Перцентиль лучшего/среднего круга vs соперники + handicap по весу + kart-удача ±5 pt (v3)
Стабильность 0–100 24 мес. σ круга как % от best lap
Результативность 0–100 12 мес. Нормализованная позиция (n−pos)/(n−1) · 100
Опыт 0–100 всё время + decay τ=24 мес. (v3) races × 0.37 + karts × 0.21 + class × 0.20 + breadth × 0.12 + learning_rate × 0.10
Дисциплина 0–100 всё время 100 − (per-category штрафы / круги) · 1000 (v3 taxonomy: contact / start_v / technical / other)

Детали осей — в scouting-axes.md и discipline.md.


KRP v3 — подсигналы осей (раскатано 2026-04-25)

Скорость · kart_pace_delta (±5 pt)

Дополнительный коррекционный нудж к перцентилю Скорости после phys-handicap. Считается по etl.pilot_car_analysis:

  • drov_avg — насколько пилот выгрызал результат на медленных картах (slow karts); +0.8 с → +4 pt к Скорости.
  • rocket_avg — выжимал ли пилот преимущество из быстрых картов (rockets); плохой rocket (0.4 с) → −2 pt.
  • Шкала: clamp(±5 pt). NULL по обоим сигналам → 0 (нет данных).

Применяется только когда rental-share ≥ 0.5 (большинство стинтов на rental-классах). Для sport-only пилотов (Sport, SuperSport, Rotax, CIK — registry в scripts/data/metrics/rules.py:ROTATING_CHASSIS_TECH_CLASSES) шасси выдаётся случайно — peer-pool car-luck семантика ломается, нудж = 0.0.

Хранится в etl.pilot_krp_detail.kart_pace_delta_pts.

Опыт · breadth_premium (12% веса)

Линейная "широта": сколько уникальных картодромов посетил пилот за всё время / всего активных картодромов на платформе (≈ 36 на 2026-04-25).

breadth = min(100, (visited / total) × 100)

НЕ применяется decay — "когда-то побывал" сохраняется навсегда. Хранится в etl.pilot_krp_detail.breadth_premium_pts.

Опыт · learning_rate (10% веса)

Медианный наклон OLS по первой сессии на каждом новом картодроме (мс/круг). Отрицательный наклон = пилот быстро адаптируется. NULL (нет данных, < 5 первых сессий ≥ 10 кругов; порог поднят с 3 до 5 в Fix C5 §3.E для подавления шумных коротких выборок) → 50 pt нейтрально (не штрафуется за отсутствие данных).

Маппинг в pts: −400 мс/круг (экстремальный фаст-лернер) → 100 pt; 0 мс/круг → 50 pt; +100 мс/круг → 25 pt. Хранится в etl.pilot_krp_detail.learning_rate_ms_per_lap (raw мс/круг, маппинг в pts происходит при чтении).

Текущий статус: SQL-helper для first-session laps пока deferred — learning_rate_ms_per_lap = NULL для всех пилотов; маппинг возвращает 50 pt нейтрально. Обещано в follow-up отдельным PR.

Опыт · decay τ=24 мес. (заменяет 24m hard cutoff)

В v2 каждый стинт старше 24 месяцев игнорировался полностью. В v3 — непрерывное затухание вес_гонки = exp(−мес_назад / τ), τ=24 мес. Это значит:

  • Сегодняшняя гонка: вес 1.0
  • Гонка год назад: вес ≈ 0.61
  • Гонка 24 мес. назад: вес ≈ 0.37 (1/e)
  • Гонка 4 года назад: вес ≈ 0.14

Применяется к race_count, kart_count, class_count. Не применяется к breadth_premium (см. выше). Cap min(1.0, w) per-картодром предотвращает взрывной рост от пилотов, гонявших 5+ раз на одном картодроме за неделю.

τ tunable per-build через env KRP_V3_EXPERIENCE_DECAY_TAU без deploy кода. Используемое значение хранится в etl.pilot_krp_detail.experience_decay_tau_months для аудита.

Калибровочный гейт (§3.6 спеки)

Перед swap новой etl.pilot_krp_detail build_metrics проверяет 13 диагностических анкеров (Сугробов 98.0, Зейликман 26.3, Титкова 89.2 и т.д. — см. scripts/data/metrics/aggregates.py:KRP_V3_CALIBRATION_ANCHORS). Если у любого анкера фактический Experience отклоняется > 20% от предсказанного (по симуляции §4 спеки) — swap блокируется, build выходит с кодом 75 (retryable), Telegram алерт на KARTRACERS_TG_ALERT_CHAT_ID. Override: KRP_V3_FORCE_CALIBRATION=1 (LOG + alert + продолжаем swap; используется только владельцем после ручной проверки).

Дисциплина · per-category taxonomy (v3)

Классификатор scripts/data/metrics/discipline_weights.py:classify_penalty() раскладывает событие etl.events.detail на категории:

Категория Регекс / Override Вес Примеры
contact груб[ао]|опасн|втиск|ударов 1.0 "ГРУБАЯ ЕЗДА", "ОПАСНЫЙ ВЫЕЗД"
start_violation флаг|линия|трек лимит 1.5 "НЕПОДЧИНЕНИЕ ФЛАГУ", "10с КРАСНЫЙ"
technical сбой|поломк|компенс 0.3 "+1кр СБОЙ ОБОРУДОВАНИЯ"
strategy penalty_kind=strategy ИЛИ regex пересид 0.0 (skipped) "10с ПЕРЕСИД", "Пересид 10с"
other кноп|две педали|маркер 0.7 "10с КНОПКА", "5с Маркер"
unclassified fallback (нет регекс-матча) 0.7 новые / неизвестные тексты

Strategy override (2026-04-30 fix #discipline-peresid-weight-fix): пересиды (driver swaps в марафонах) — это стратегия, не нарушение. Override в classify_penalty срабатывает ПЕРЕД основным regex и возвращает категорию strategy, которая полностью пропускается в PASS 2 compute_krp_detail (не аккумулируется в pilot_penalty_taxonomy, не учитывается в eff_pen). Следовательно: пересиды НЕ влияют на discipline и НЕ входят в pilot_metrics.penalty_count / penalty_rate. См. memory feedback_penalties_пересиды.md.

Хранится в etl.pilot_penalty_taxonomy.{contact_sec, start_v_sec, technical_sec, other_sec, unclassified_sec} (категория strategy НЕ имеет своих колонок — полностью skip). Веса в private.config_discipline_weights.w_* (per-environment override). Полный регекс — в исходниках, последняя версия покрывает 97.96% событий на проде (3.04% уходит в unclassified, ниже 3%-гейта).


KRP v2 — композитная формула

mean_axes = среднее 5 осей (NULL-оси пропускаются)
μ         = медиана mean_axes по всем пилотам (≈ 51 на 2026-04-25)
C         = 15 (порог уверенности)
n         = количество засчитанных гонок

KRP_v2 = clamp( (n · mean_axes + C · μ) / (n + C), 0, 100 )
  • n = 0: KRP_v2 = μ (полностью тянется к платформенной медиане)
  • n = 15 (= C): KRP_v2 = (mean_axes + μ) / 2
  • n ≥ 50: влияние μ минимально (<5%)
  • Если все 5 осей NULL (экзотический случай): KRP_v2 = NULL → хранится как 0

Почему композит. До 2026-04-25 krp_v2 считался только по времени кругов (перцентили best/avg lap в peer-pool). Это создавало расхождение с радаром: пилот с сильными осями (результативность, стабильность, опыт) мог получить низкий krp_v2, если его абсолютное время круга объективно среднее (тяжёлый класс, женский зачёт, non-sport техника). Новая формула — прямое среднее всех 5 осей с тем же байесовским сглаживанием (C=15, динамический μ).


KRP v2d — бонус за разнообразие

KRP_v2d = clamp( KRP_v2 · (1 + 0.05 · min(tracks − 1, 4)), 0, 100 )

Максимум +20% за 5+ разных картодромов. Применяется только в контекстных таблицах чемпионатов; не используется для глобального # ранга (см. ниже).


Роли полей v2 vs v2d в UI

Место Поле
Карточка пилота (бар, хед) krp_v2
# колонка поиска / списка krp_v2
Сортировка /pilots по умолчанию krp_v2
Live tablo, builder krp_v2
Контекстные таблицы чемпионатов krp_v2d

Почему: использовать krp_v2d для глобального # давало ping-pong (#190 → #5081 → #4393 в одном результате поиска) — бар показывал v2, ранг считался по v2d, v2d поднимал пилотов с 5+ картами над пилотами с одним картом на той же v2. Разрешено в разборе prod-blockers v3.


Реализация

  • Функция: scripts/data/metrics/aggregates.py:compute_krp_composite()
  • Вызов: после compute_krp_detail() в scripts/data/build_metrics.py
  • Запись: etl.pilot_metrics.krp_v2, etl.pilot_metrics.krp_v2d
  • Ребилд: scripts/data/build_metrics.py ежедневно в 01:00 MSK
  • Снимок перед деплоем: etl.pilot_metrics_krp_backup_20260425

Что осталось лап-тайм-базовым

Эти поля всё ещё считаются только по времени кругов (legacy v1):

  • etl.pilot_metrics.krp (старый v1, для диагностики)
  • etl.pilot_metrics.krp_amateur, krp_sport (per-category)
  • etl.pilot_kartodrom_krp.krp (per-kartodrom)
  • etl.pilot_metrics.season_krp (JSON per-season)

Эти поля будут унифицированы в отдельной фазе (tech-debt, backlog anchor #krp-per-category-per-kartodrom-composite).


Связанные документы

Per-race вклад в KRP v3

Версия: PR-B5, май 2026 (docs/superpowers/specs/2026-05-04-per-race-krp-contribution.md). Этот раздел описывает раскрывающую панель на карточке пилота, которая показывает, как каждая отдельная гонка влияет на 5 осей рейтинга KRP v3 (скорость, стабильность, результативность, опыт, дисциплина).


Раскрывающая панель под каждой строкой результатов показывает, на сколько пунктов эта конкретная гонка сдвинула пилота относительно его собственного среднего за последние 24 месяца. Все числа предвычислены в Python (scripts/data/build_metrics.py) и попадают в браузер уже готовыми — фронтенд только форматирует и красит.

Каждая ось показывает четыре поля:

  • Per-race value — измерение в этой гонке (например, gap_pct = 1.84).
  • Pilot mean / std — среднее и стандартное отклонение пилота по 24-месячному окну.
  • Contribution в баллах — сдвиг от среднего, нормированный на оси.
  • Indicatorup / down / neutral / no-data. Цвет: зелёный / красный / серый / серый. Считается в Python по z-score с порогом ±1σ (см. Пороги «выше/ниже/нейтрально»).

Базовые таблицы данных: etl.pilot_race_gap_pct, etl.pilot_form, etl.pilot_discipline_per_race.


Скорость per-race

Композитная оценка скорости пилота в гонке относительно соперников из этой же гонки.

speed_per_race = 0.20 · best_score
               + 0.20 · best_norm
               + 0.30 · avg_score
               + 0.30 · avg_norm
  • best_score, avg_score — перцентили лучшего и среднего круга в peer-pool гонки.
  • best_norm, avg_norm — нормализованные (value − min) / (max − min) × 100 в той же peer-pool.
  • Источник: scripts/data/metrics/aggregates.py:compute_krp_detail, колонка etl.pilot_form.speed_per_race.
  • Гонки с менее чем 3 участниками исключаются (peer-pool слишком мал — перцентиль теряет смысл).
  • Indicator считаем относительно pilot_mean/pilot_std пилота за 24-месячное окно (см. Пороги).

Подробнее про ось «Скорость» в целом — раздел «KRP — Karting Rating Points».


Стабильность per-race

Насколько ровно пилот ехал в этой конкретной гонке. Меньше = стабильнее.

gap_pct = (avg_lap / best_lap − 1) × 100
  • best_lap — лучший круг пилота в гонке (включая стинты, исключая outliers).
  • avg_lap — средний круг пилота в гонке (по всем кругам стинтов).
  • Источник: etl.pilot_race_gap_pct.gap_pct.
  • Eligibility: best_lap_ms > 0 AND avg_lap_ms > 0 AND laps >= 10 — иначе строка не пишется.
  • Indicator: up если gap_pct < pilot_mean − pilot_std (стабильнее обычного), down если gap_pct > pilot_mean + pilot_std (нестабильнее).

Подробнее про ось «Стабильность» в целом — раздел scouting-axes.md.


Результативность per-race

Нормированная финишная позиция, чтобы 1-е из 30 ценилось выше, чем 1-е из 5.

result_per_race = (total_teams − position) / (total_teams − 1) × 100
  • total_teams — количество команд (или пилотов в личных гонках) в финишном протоколе.
  • position — финишная позиция пилота.
  • Источник: etl.pilot_form.result_per_race.
  • Гонки с одним участником (total_teams = 1) → NULL (деление на ноль), indicator no-data.
  • Indicator считаем относительно pilot_mean/pilot_std за 24-месячное окно.

Это та же формула, что использует основная ось «Результативность», но применённая к одной гонке вместо агрегата за окно.


Опыт-decay per-race

В отличие от других осей, для «Опыта» мы не сравниваем гонку со средним пилота (это функция времени, а не события). Вместо этого мы показываем вес гонки в композите Опыта — насколько эта гонка ещё «считается» при пересчёте оси.

weight = exp(−months_ago / τ)            где τ = 24 месяца
  • months_ago — снимок на момент metrics_built_at (timestamp ETL-rebuild, одинаковый для всех строк одного пересчёта).
  • τ — характерное время затухания, по умолчанию 24 месяца. Tunable через env KRP_V3_EXPERIENCE_DECAY_TAU без deploy кода.
  • Источник: etl.pilot_form.experience_decay_weight, experience_months_ago.
Когда была гонка months_ago weight
Сегодня 0 1.00
6 месяцев назад 6 0.78
12 месяцев назад 12 0.61
24 месяца назад 24 0.37
36 месяцев назад 36 0.22
4 года назад 48 0.14

Свежая гонка имеет вес ≈ 1.0 и полностью учитывается. Гонка двухлетней давности учитывается на ~37%. Эта строка показывается без стрелки-индикатора — здесь нет понятия «выше/ниже среднего».

Подробнее про ось «Опыт» в целом — раздел «KRP — Karting Rating Points».


Дисциплина per-race

Количество секунд штрафа на круг, наложенных именно на этого пилота в этой гонке.

violation_per_lap = violation_sec / laps
  • violation_sec — сумма «настоящих» штрафов из etl.pilot_discipline_per_race (только penalties с явно указанным pilot_id, см. ниже).
  • laps — количество кругов пилота в этой гонке.
  • Источник: etl.pilot_discipline_per_race.violation_per_lap.
  • Indicator инвертирован: up (зелёный) = меньше штрафов, чем обычно; down (красный) = больше.

Категории штрафов и веса (taxonomy contact / start_violation / technical / other / unclassified) — см. discipline.md. Пересиды в марафонах — это стратегия, а не штраф; они не входят в violation_sec (см. memory feedback_penalties_пересиды.md).


Пороги «выше/ниже/нейтрально»

Все индикаторы считаем по z-score относительно собственного среднего пилота за 24-месячное окно (KRP_V3_DECAY_TAU_MONTHS_BASELINE — то же окно, что используется для decay τ оси «Опыт»).

z = (value − pilot_mean) / pilot_std
Условие Indicator Пример (Стабильность)
z < −1 up gap_pct < mean − 1σ
−1 ≤ z ≤ +1 neutral в пределах ±1σ от mean
z > +1 down gap_pct > mean + 1σ
pilot_std = 0 или N < 3 no-data недостаточно данных или нулевая дисперсия

Знак для дисциплины и стабильности инвертирован: для них меньше = лучше, поэтому value < mean − 1σ означает «лучше обычного» (зелёный up).

Все эти числа precomputed в Python (compute_pilot_mean_std_py) и записаны в etl.pilot_form.*_pilot_mean / *_pilot_std / *_indicator. Браузер не считает.

Важно: UI-фильтры (чемпионат, возраст, картодром) не пересчитывают среднее — оно зашито в БД на момент ETL и относится ко всему 24-месячному окну гонок пилота. Это сознательный trade-off за zero runtime metrics.


Команда оштрафована за технику — не влияет на пилота

В Racemann штраф можно наложить либо на пилота (pilot_id IS NOT NULL), либо на команду (pilot_id IS NULL). Технические штрафы (компенсации, нарушения регламента карта) обычно идут «на команду» — конкретного виновника нет.

etl.pilot_discipline_per_race агрегирует только штрафы с заполненным pilot_id. Команда могла получить штраф (он попадёт в командную статистику), но per-race discipline для пилотов этой команды останется чистой: violation_sec = 0, violation_count = 0.

Это значит, что командные штрафы не отражаются в персональной discipline-row пилота — они видны только в карточке команды.


Связанные документы

  • krp.md — KRP v3 axes + composite формулы (агрегаты, не per-race).
  • discipline.md — taxonomy штрафов (contact / start_violation / technical / other / unclassified) и веса.
  • scouting-axes.md — peer-pool скейлинг скорости и стабильности.
  • index.md — обзор методологии и полный список разделов.

// EFA — EFFICIENCY FACTOR AMKC

EFA — рейтинг пилота внутри серии АМКС. Показывает, какой процент участников серии пилот опережает по KRP.

Формула
EFA = (количество пилотов с KRP ниже / общее количество пилотов серии) × 100
Интерпретация
EFA = 85 означает, что пилот быстрее 85% участников серии АМКС. Чем выше EFA — тем сильнее пилот относительно конкурентов.

// BREAKTHROUGH — ПРОРЫВ

Прорыв (Breakthrough) — среднее количество позиций, которое пилот отыгрывает (или теряет) от стартовой до финишной позиции.

Среднее улучшение позиции
Среднее улучшение позиции за гонку. +3.5 = отыгрывает в среднем 3.5 места.
Процент прорывов
Процент гонок, в которых пилот улучшил стартовую позицию.
Процент без потерь
Процент гонок, в которых пилот не потерял позиции (финиш ≥ старт).

// TREND — ТРЕНД ФОРМЫ

Тренд (Trend) показывает, как меняется KRP пилота за последние гонки. Сравнивается средний KRP за последние 5 гонок с предыдущими 5.

На подъёме
Последние результаты лучше предыдущих
Стабильно
Результаты держатся на одном уровне
Спад
Последние результаты хуже предыдущих

// TEAM EFFICIENCY — ЭФФЕКТИВНОСТЬ КОМАНДЫ

Командная эффективность (Team Efficiency) — метрика, показывающая насколько хорошо команда реализует свой потенциал по результатам гонок.

Формула
Team Efficiency = (fact / max) × 100
fact — сумма фактических очков команды (по позициям пилотов).
max — максимально возможные очки, если бы все пилоты команды финишировали первыми.
100% = идеальная реализация, все пилоты на подиуме. 50% = средний результат.

// КЛАССЫ ТЕХНИКИ

На одном картодроме используется разная техника. Сравнение времён между классами некорректно.

Sport 9 л.с.
MIKS LIGHT, Shonx, CorpChamp, MKA, SMP Racing, СМП РСКГ, F1-Cup, ROK Race, SPORA GT CUP
Super Sport 15 л.с.
AIMOL MIKS 20, MIKS Marathon
Club 13 л.с.
LSK Sprint, LSK Winter, LSK Лето, LSK Junior, LSK Garda, VMRC, НРСК, PitStop Cup, ShimChamp, Dark Stock, REKS, Dozari, RacePlace, VK Series
Sodi RT8 15 л.с. (Маяк) и RC 12 л.с. (X-Ti Пилот) выделены в отдельные классы. Если чемпионат не определён по названию гонки, используется класс картодрома по умолчанию.

Рейтинг Менеджера

Версия: v2 (2026-04-24). Менеджер — стратег пит-стены: выбор машин, тайминг смен, управление пилотами. Рейтинг оценивает результаты команды под управлением менеджера по шкале от 0 до 5 звёзд.


Компоненты рейтинга

Компонент Вес Описание
Перцентиль позиции Основа Финишная позиция команды нормализуется: (pos − 1) / (N − 1). 0 = победа, 1 = последнее место.
Вес длительности √кругов Длинные гонки весят больше. Вес = √(кругов команды). 200-круговой марафон важнее 30-круговой серии.
Bayesian-сглаживание K = 5 При малом числе гонок рейтинг тянется к глобальному среднему. Защита от случайного успеха.
Уровень доверия 0–100 % < 3 гонок = 0 % (нет рейтинга). 3–10 гонок = 70–100 %. 10+ = полное доверие.

Формула расчёта

Шаг 1. Взвешенное среднее перцентиля

avg = Σ(percentile_i × √laps_i) / Σ√laps_i

Каждая гонка взвешивается корнем из количества кругов команды.

Шаг 2. Байесовское сглаживание

bayesian = (n × avg + K × μ) / (n + K)
  • n = число гонок
  • K = 5
  • μ = глобальный средний перцентиль всех менеджеров

Шаг 3. Маппинг в звёзды

rating = (1 − bayesian) × 5 × confidence

Меньше перцентиль = лучше результат = больше звёзд.


Уровень доверия (Confidence)

Гонок Статус Confidence
< 3 Нет рейтинга 0 %
3–9 Предварительный 70–97 %
10+ Полный рейтинг 100 %

Тренд (динамика)

Сравниваются последние 5 гонок с предыдущими 5.

  • Если средний перцентиль улучшился на > 10 % — тренд ↑ (вверх)
  • Ухудшился на > 10 % — ↓ (вниз)
  • Иначе — стабильно

При менее 10 гонках тренд = «новый» (недостаточно данных).


Что учитывается

  • Командные гонки — менеджер учитывается только в гонках с ≥ 2 командами.
  • Размер сетки — перцентиль нормализует позицию по количеству участников. 3-е из 12 команд лучше, чем 3-е из 4.
  • Количество кругов — длинные марафоны (100+ кругов) весят значительно больше коротких серий.
  • Количество гонок — через Bayesian-сглаживание: больше гонок = рейтинг ближе к реальному результату менеджера.
  • Количество команд в карьере — отображается в профиле для контекста, но не влияет на рейтинг напрямую.
  • Фильтрация — прокаты, тренировки и арендные заезды исключены.

Менеджер-пилот = человек, который и управляет командой, и ездит в ней. Отмечается бейджем «пилот».


Декомпозиция метрик менеджера

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

Выбор техники

Для каждой гонки все карты ранжируются по лучшему кругу. Топ-25 % = ракеты, 25–50 % = быстрые, 50–75 % = средние, 75–100 % = медленные. Метрика показывает % стинтов менеджера на ракетах. Дополнительно считается дельта в секундах: (лучший круг выбранного карта − лучший круг медианного карта) × количество кругов на этом карте.

Штраф за кнопку

Штраф (10с, 15с, 20с) за пропуск кнопки на пит-лейне. Прямая ответственность менеджера — он должен напомнить пилоту нажать кнопку по рации. Считается: сумма секунд штрафов за кнопку / количество гонок.

Штраф за пересид

Штраф (10с, 20с, 30с, 40с) за превышение времени стинта. Менеджер засекает время и командует замену. Пересид = менеджер зазевался. Считается: сумма секунд штрафов за пересид / количество гонок.


Итого (влияние менеджера)

итого = карт_секунды + штраф_кнопка + штраф_пересид (сек/гонку)

Положительное значение = менеджер теряет команде секунды. Отрицательное = экономит. При сравнении менеджеров: чем ниже итого, тем лучше.


Стабильность

stability = σ(percentile) = стандартное отклонение перцентиля позиции
Значение Интерпретация
< 0.20 Стабильный — результаты предсказуемы
0.20–0.35 Средний
> 0.35 Нестабильный — разброс: то победа, то последнее место

Реализация

  • Вычисляется в scripts/data/build_manager_scouting.py
  • Результат: etl.manager_scouting.*
  • Ребилд: scripts/data/build_metrics.py ежедневно в 01:00 MSK

Связанные документы

  • krp.md — рейтинг пилота KRP v2/v2d
  • index.md — обзор методологии

// ВСЕ ДОСТИЖЕНИЯ

38 бейджей в 6 категориях. Каждый бейдж можно заработать — выполнив условие.

// ДОСТИЖЕНИЯ

38/38100%
Бессмертный
Легенда
Бессмертный
Легенда
Платина
Легенда
Доминатор
Платина
Доминатор
Династия
Платина
Династия
Метроном
Платина
Метроном
Хладнокровный
Платина
Хладнокровный
Идеальная гонка
Платина
Идеальная гонка
Ветеран
Золото
Ветеран
Железный пилот
Золото
Железный пилот
Серийный победитель
Золото
Серийный победитель
Непобедимый
Золото
Непобедимый
Снайпер
Золото
Снайпер
Прорыв
Золото
Прорыв
Укротитель дров
Золото
Укротитель дров
Ракетчик
Золото
Ракетчик
Мультиформат
Золото
Мультиформат
Железный экипаж
Золото
Железный экипаж
Без пропусков
Золото
Без пропусков
Боец
Серебро
Боец
Марафонец
Серебро
Марафонец
Хэт-трик
Серебро
Хэт-трик
Подиумщик
Серебро
Подиумщик
Стабильно в деле
Серебро
Стабильно в деле
Быстрый старт
Серебро
Быстрый старт
В потоке
Серебро
В потоке
Кочевник
Серебро
Кочевник
Мультикласс
Серебро
Мультикласс
Ультра
Серебро
Ультра
Сезон роста
Серебро
Сезон роста
Регулярный
Бронза
Регулярный
Опытный
Бронза
Опытный
Тысячник
Бронза
Тысячник
Первая победа
Бронза
Первая победа
Путешественник
Бронза
Путешественник
Стайер
Бронза
Стайер
Личный рекорд
Бронза
Личный рекорд
Дебютант
Стартовый
Дебютант
Первый подиум
Стартовый
Первый подиум

// ГЛОССАРИЙ МЕТРИК

Полный глоссарий терминов картинга — 60 терминов

Консистентность (σ)
Стандартное отклонение времён кругов в стинте. Чем ниже — тем стабильнее пилот.
Грейд 'машина'
Пилот с σ < 0.8% от среднего. Едет как робот — минимальный разброс.
Укротитель дров
Пилот, который показывает хорошее время на медленных картах (карт медленнее среднего по гонке).
Ракетчик
Пилот, который выжимает максимум из быстрых картов.
Прорыв
Разница между стартовой и финишной позицией. +8 = отыграл 8 мест за гонку.
Нормализованная позиция
Формула: (N - pos) / (N - 1) × 100. 3-е из 30 = 93 балла, 3-е из 5 = 50 баллов.
Деградация
Насколько теряется темп к концу стинта. Хороший пилот держит ровно или ускоряется.