Что такое «сильная команда» и «сложный вопрос» в ЧГК? По следам ЧР-2025
Я давно думал про то, что можно сделать с системой оценивания силы команд и сложности (а еще и интересности в “чгкашном” смысле слова) на турнире. Наконец дошли руки написать.
Gist с какими-то скриптами, csv-файлами и прочим барахлом. Никаких гарантий работоспособности не дается, мог ошибиться везде и сразу, все не так посчитать, неправильно интерпретировать, и вообще, это все чатгпт нагенерировал, а я просто рядом стоял :-)
I. Введение и мотивация
Зачем нам альтернативный способ оценивания?
Просто считать «плюсики» за верные ответы мне кажется не совсем справедливым. Все знают ситуацию, когда команда неожиданно «роняет» лёгкий вопрос, который взяли почти все. А затем этот досадный «минус» приходится отыгрывать — беря настоящий «геройский» плюс на трудном вопросе, который больше никто не осилил. В протоколе эти +1 и –1 нейтрализуют друг друга, но по ощущениям-то они совсем разные. Представьте, что у Кипчоге на марафоне внезапно оторвалась подошва: он ищет новые кроссовки, догоняет пачку лидеров, в итоге финиширует вторым. Формально золото не его (можно и не давать), но ведь мы понимаем, кто здесь самый сильный бегун.
Но ведь есть рейтинг вопросов?
С ним тоже все не очень. Во-первых, он считается только при равенстве числа взятых. Во-вторых, он не учитывает “истинную” сложность вопросов. Например, возьмем гипотетический вопрос:
“Автор вопроса загадал случайное число от 1 до 10. Какое?”
У этого вопроса будет довольно высокий рейтинг (~90% от числа команд), но не хочется его учитывать так же как по-настоящему сложный чгкашный вопрос, который берется сложной командной раскруткой.
То же касается и вопросов на чистый свояк. Тут часто оказывается, что у сильных команд и свояка за столом побольше, но все же не хочется премировать их за это слишком сильно.
II. Идея и интуиция
Хочется сделать самосогласованную модель, в которой:
Получается итеративная модель наподобие PageRank. Мы пересчитываем силу команд и сложности вопросов на каждом шаге до тех пор, пока они не перестанут меняться. При этом сила команд зависит от сложностей вопросов, на которые они ответили, и наоборот. В подвале статьи в Appendix есть технические детали моделей
III. Сила команд
Взял вопросы прошедшего недавно ЧР-2025 и посчитал силу команд и сложности вопросов.
Интерпретация графика:
Если результат команды оказывается выше диагонали (такие выделены зеленым цветов), это значит, что ее “истинная” сила выше, чем по классической схеме. Сильно здесь выбивается команда “Эдельвейс” (это можно заметить и по рейтингу взятых вопросов) — они ответили на несколько более сложных вопросов, но упустили много относительно простых. Может быть дело в отсутствии регулярной практики, когда команда учится не ронять халяву.
Ее противоположность — команда “Кошка или сова”, которая судя по результату сыграла на свой оптимум, ответив на большинство вопросов, до которых могла дотянуться. Вычисленная сила у них меньше, чем у “Эдельвейса”, а место в таблице выше на 5–6 ответов.
Самое интересное, что произошли изменения в первой тройке. У “Борского Корабела” на один ответ больше, чем у “Первой сборной”, но вычисленная сила у последних выше (1.773 против 1.765). БК явно показали не лучшую свою игру, выиграв скорее на своячных вопросах (pun intended) с меньшей селективностью (про это дальше).
В борьбе за бронзу на чемпионате была перестрелка между “Рождённым с ПТСР” (выиграли), “Миром” и “Призраками Коши”. Модель же ранжирует их по силе сразу:
Мир — 1.573
Коши — 1.557
ПТСР — 1.556
IV. Селективность вопросов
Модель можно использовать для оценки “селективности” вопросов. Это метрика, показывающая корреляцию между силой команд и взятием вопросов. Если “селективность” околонулевая, это значит, что взятия распределены по таблице случайным образом (примерно как в случае с вопросом про рандомное число). Чем выше “селективность”, тем лучше вопрос разделяет сильные и более слабые команды между собой. Причем, эта метрика не коррелирует со сложностью вопросов.
Слева - простые вопросы, справа - сложные.
Сверху - селективные вопросы, снизу - "случайные".
Надо оговориться, что ЧР не самый показательный турнир для этой метрики, потому что различия в силе между первыми и последними командами не такие большие, как на каком-нибудь синхроне выходного дня, где могут играть одновременно и чемпионы мира и школьники. Но что-то эта метрика все же показывает.
Интерпретация
Вопросы справа — трудные для всех;
Верхний правый угол — трудные и селективные (берут только сильные);
Нижний правый — трудные, но случайные;
Левый верхний — лёгкие, но различающие (редкость, но бывают).
Выбросы: 12-й (Трудное детство) и 27-й (Странные лихорадочные имена) — это вопросы с единственным взятием у не топ-команд (АН-2 и Эдельвейс, соответственно). Модель рассматривает такие взятия как случайные. Интересно, что коммьюнити оценило эти вопросы очень по-разному: 46 "огонечков" и 36 "какашек". Думаю, что дело в природе сложности: вопрос про детство сложен широтой области поиска и необычностью технического хода, а про имена сложность в основном в свояке, а чгкашную часть выкупили многие.
Думаю, самые оптимальные чгкашные вопросы - это когда умеренно сложно и очень селективно (примерно там где Q79, Q81, Q88). Такие вопросы дают всем поиграть (а не только самым сильным), и при этом хорошо разделяют слабые и сильные команды.
Можно построить график по турам
Самые селективные вопросы
Эти вопросы брали в основном сильные команды, и почти не брали слабые.
5 (0.516) - Очень-очень серая одежда
31 (0.515) - Красивые деревни красиво горят
79 (0.509) - Моряки без должной подготовки
75 (0.505) - Странный словарь Ахиллеса Фана
70 (0.501) - Ошибки в санскрите
45 (0.498) - Густорастущий колючещети́нник ресни́тчатый
81 (0.493) - Хичкок и Strangers in the train
88 (0.476) - Ми́тио Ка́ку цитирует произведение 1910-х
78 (0.458) - Фильм и дейтинг-приложение
71 (0.452) - Равновесие камчадалов
Самые “рандомные” вопросы
Они не позволяли отличить сильную команду от слабой — “угадывались” случайно
84 (–0.001) - Героиня сериала во временной петле
54 (–0.005) - Тренер, изобретатель катеначчо
42 (–0.008) - Оператор рекламы пива
48 (0.041) - Портрет Сары Молтон
3 (0.055) - Эксцентричный Дэвид Сатч пытается попасть в парламент
50 (0.056) - Пациенты с зоопатическим бредом
72 (0.085) - Летучие мыши Южного полушария
55 (0.085) - Картографы школы Балхи
73 (0.097) - Две жизни во французском произведении
74 (0.106) - Штрафы в лаборатории
Распределение по турам
Саксонов: 🟨🟥🟥🟨🟩🟩🟨🟥🟨🟨🟨🟥🟥🟩🟨 Карпук: 🟨🟨🟨🟨🟨🟨🟨🟥🟨🟨🟨🟥🟨🟨🟨 Ермишкин: 🟩🟩🟥🟥🟨🟨🟩🟩🟨🟩🟥🟥🟨🟥🟩 Рождествин: 🟩🟥🟥🟨🟥🟩🟨🟨🟥🟥🟥🟨🟥🟨🟨 Фарукшин/Дидбаридзе: 🟨🟨🟥🟨🟨🟨🟥🟨🟨🟩🟩🟥🟥🟥🟩 Алиев: 🟨🟩🟩🟩🟨🟩🟨🟨🟥🟨🟨🟩🟩🟨🟨
Легенда: 🔴 Низкая 🟡 Средняя 🟢 Высокая
Интерпретация тут такая, что как будто селективность вопросов тура коррелирует с оценкой игроков после турнира (в чате). Но это все область субъективного, и тут все сложно.
V. Что можно еще посчитать?
- В канале вопросов ЧР можно посчитать число положительных и отрицательных лайков к вопросам и посмотреть корреляцию между ними и сложностью/селективностью.
- Можно считать селективность вопросов на синхронах и асинхронах. Если вдруг селективность какого-то вопроса на асинхроне внезапно понизилась (а в вопросе есть метка), то можно пробовать выявлять
гуглящиеальтернативно-сильные команды. - Пробовать выискивать игроков для хантинга. Если какая-то команда постоянно играет ощутимо выше или ниже диагонали, то значит у нее есть понятный вектор развития: или подтягивать чгкашную логику (если выше диагонали) или искать сильного своячника (когда ниже).
- Пытаться оценивать "интересность" вопросов как комбинацию селективности и сложности вопросов и силы команд. Можно было бы использовать для выбора синхронов для отыгрыша (после прошедшего очника, например. Или после того, как часть команд уже отыграли пакет, и накопилась какая-то статистика).
- Something else...
Appendix. Реализация разных вариантов
- A ᵢⱼ = 1, если команда i ответила верно на вопрос j, иначе 0.
- Sᵢ — сила команды i.
- Dⱼ — сложность вопроса j.
- Nᵢ = ∑ⱼ Aᵢⱼ — кол-во правильных у команды.
- Nⱼ = ∑ᵢ Aᵢⱼ — кол-во правильных по вопросу.
Интерпретация: сколько раз команда ответила верно.
Минусы: Не различает «простые» и «сложные» ответы.
Инициализация Sᵢ⁰ = Nᵢ
Шаг t:
Dⱼᵗ = (∑ᵢ Aᵢⱼ · Sᵢᵗ)/(Nⱼ)
Sᵢᵗ⁺¹ = ∑ⱼ Aᵢⱼ · Dⱼᵗ, нормируем S после каждого шага
Интерпретация: «Сколько сложных вопросов взяла команда».
Плюсы: Автоматически взвешивает вопросы.
Минусы: Без нормализации быстро «взрывается»; нужен десяток итераций.
Dⱼ = mean(Sᵢ·Aᵢⱼ=1) / ln (1 + k · Nⱼ)
Sᵢ = mean(Dⱼ·Aᵢⱼ=1) · log(1 + k · Nᵢ)
Считаем итеративно + нормировка mean S = 1
Интерпретация: Балансирует качество (сложность вопросов) и кол-во ответов. Сложность обратно логарифмически падает с числом ответивших команд. Сила команды логарифмически растет с числом взятых.
Практика — топ-команды по новой силе совпадают с интуитивно сильными, но порядок внутри топ-10 меняется: видно, кто брал действительно тяжёлые вопросы.
Минусы: чуть сложнее в реализации. Появляется дополнительный параметр (k≈1).
4 SVD / фактор-разложение (идею, неясные результаты, дальше не показываю)
A = U Σ Vᵀ → первый столбец U ≈ «общая сила»
Интерпретация: Показывает скрытые стили команд и групп вопросов.
Плюсы: Можно визуализировать (2-D).
Минусы: Не даёт абсолютный рейтинг; чувствителен к пропускам. Результаты сложно интерпретировать как-то однозначно.
5 Графовый PageRank (идея, дальше не показываю)
Вершины = команды ∪ вопросы, рёбра = правильные ответы.
Интерпретация: Вес «перетекает» от сильных к вопросам и обратно.
Минусы: В ЧГК нет прямых взаимодействий между командами → эффект слабый, поэтому не включён в итоговый расчёт.