June 19, 2025

Что такое «сильная команда» и «сложный вопрос» в ЧГК? По следам ЧР-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ᵢⱼ — кол-во правильных по вопросу.

1. Классический счёт

Sᵢ = Nᵢ, Dⱼ ≡ 1

Интерпретация: сколько раз команда ответила верно.

Плюсы: Ясен, привычен.

Минусы: Не различает «простые» и «сложные» ответы.

2. Итеративная сила

Инициализация Sᵢ⁰ = Nᵢ
Шаг t:
Dⱼᵗ = (∑ᵢ Aᵢⱼ · Sᵢᵗ)/(Nⱼ)
Sᵢᵗ⁺¹ = ∑ⱼ Aᵢⱼ · Dⱼᵗ, нормируем S после каждого шага

Интерпретация: «Сколько сложных вопросов взяла команда».

Плюсы: Автоматически взвешивает вопросы.

Минусы: Без нормализации быстро «взрывается»; нужен десяток итераций.

3. Гибридная сила

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 (идея, дальше не показываю)

Вершины = команды ∪ вопросы, рёбра = правильные ответы.

Интерпретация: Вес «перетекает» от сильных к вопросам и обратно.

Плюсы: Красиво для сетей.

Минусы: В ЧГК нет прямых взаимодействий между командами → эффект слабый, поэтому не включён в итоговый расчёт.