Evaluation · Evaluation · урок 2 · 13 мин
Статистика: pass@k, pass^k, разброс, правило трёх
Statistics: pass@k, pass^k, variance, the rule of three
Зачем
После урока ты сможешь посчитать pass@k и pass^k, оценить, насколько балл eval «гуляет» от случайности, и сказать, что на самом деле значит «ноль утечек в 1 500 попытках». Эти цифры отличают инженера от «запустили, вроде работает»; на собеседовании их спрашивают как follow-up к любому рассказу об evals.
Один прогон — не измерение
Агент случаен: одну и ту же задачу он может проходить 9 раз из 10 или 3 из 10. Один прогон говорит только «прошло» или «не прошло». Поэтому каждую задачу гоняют несколько раз — несколько trials (попыток). Попытки независимы: каждая начинается с чистого состояния и ничего не наследует от предыдущей.
pass@k и pass^k
Пусть задача проходит с вероятностью p = 0,8 в каждой попытке, независимо от других.
- pass@k — «хотя бы одна из k попыток успешна»: 1 − (1 − p)^k. Для k = 4: 1 − 0,2⁴ = 1 − 0,0016 ≈ 99,8%. Это потолок возможностей: агент умеет это делать.
- pass^k — «все k попыток успешны»: p^k. Для k = 4: 0,8⁴ ≈ 41%. Для k = 8: 0,8⁸ ≈ 17%. Это нижняя граница надёжности: агент делает это каждый раз.
С ростом k первое стремится к 100%, второе — к нулю. Какое важнее, решает продукт. Для генерации кода, где человек выберет лучший из четырёх вариантов, важен pass@k. Для агента поддержки банка, который говорит с тысячами клиентов, важен pass^k: клиенту всё равно, что агент «умеет», если ошибся он именно с ним. Метрику pass^k ввёл τ-bench (Yao и соавторы, 2024): у сильных агентов того времени pass^8 в домене retail был ниже 25%.
По набору задач обе метрики считают для каждой задачи отдельно и потом усредняют. Это не то же самое, что подставить средний p в формулу. Пусть половина задач проходит всегда (p = 1), а половина — с p = 0,6. Средний pass@1 = 80%, но pass^4 = (1 + 0,6⁴)/2 = (1 + 0,13)/2 ≈ 56%, а не 41%. Важно, как распределены провалы по задачам.
Что значит разрыв между ними
pass@1 = 92% и pass^4 = 61% — агент flaky (плавающий): одни и те же задачи то проходят, то нет. Причина не в том, что попытки влияют друг на друга, — они не влияют. Исправление начинается с поиска плавающих задач: кладёшь рядом проходящую и проваленную траекторию одной задачи и ищешь шаг, где они расходятся. У агента с supervisor (маршрутизатором между специализированными агентами) это часто шаг маршрутизации; его делают детерминированным или добавляют уточняющий вопрос.
Проверка здравого смысла: для любой задачи p^k ≥ 1 − k(1 − p) (неравенство Бернулли). Значит, при pass@1 = 92% ожидаемый pass^4 не ниже 1 − 4 × 0,08 = 68%. Если намерил заметно меньше, одной «плавучестью» это не объяснить: проверь, сбрасывает ли стенд состояние между попытками, посчитаны ли обе цифры на одних и тех же попытках и хватает ли задач.
Насколько гуляет балл
100 задач, по одной попытке, успех около 50%. Стандартная ошибка доли — √(p(1 − p)/n) = √(0,25/100) = 0,05, то есть 5 пунктов. 95% confidence interval (доверительный интервал — пределы, в которых результат гуляет от случайности) — примерно ±1,96 × 5 ≈ ±10 пунктов. Улучшение на 3 пункта — шум; даже 8 может оказаться шумом.
Сравнивать две версии надо на одних и тех же задачах, глядя, какие задачи изменились (paired comparison, парное сравнение). Пример: версия B на тех же 100 задачах исправила 7 задач и сломала 4, итог +3 пункта. Если бы изменения были чистой случайностью, каждая из 11 «перевернувшихся» задач с равной вероятностью ушла бы в любую сторону; перевес 7 к 4 или сильнее тогда случается примерно в 55% случаев (двусторонний sign test). Значит, улучшение не доказано. Зато ты видишь 4 сломанные задачи и можешь их прочитать. Anthropic называет парное сравнение «бесплатным» снижением разброса.
Когда каждая задача гоняется k раз, n в формуле — число задач, а не задач × k: сначала усредни попытки внутри задачи, потом считай ошибку по задачам. 100 задач по 8 попыток — не 800 независимых наблюдений. Если задачи сгруппированы (несколько вопросов к одному документу), нужны clustered standard errors (кластерные стандартные ошибки): по данным Anthropic, на популярных evals они бывают больше наивных в три с лишним раза.
Правило трёх
Как мерить редкие события — утечку или нарушение политики. Если событие случилось ноль раз в n независимых попытках, с 95% уверенностью его истинная частота ниже примерно 3/n.
Откуда: при частоте p шанс не увидеть ни одного события за n попыток — (1 − p)^n. Ищем p, при котором этот шанс равен 5%: n · ln(1 − p) = ln 0,05 ≈ −3, а при малом p ln(1 − p) ≈ −p. Отсюда p ≈ 3/n. Приближение хорошее при n больше примерно 30.
- 0 из 300 → ниже 1 на 100.
- 0 из 1 500 → ниже 1 на 500 (0,2%).
- 0 из 3 000 → ниже 1 на 1 000.
Три оговорки. Попытки должны быть разными атаками, а не одной, повторённой 1 500 раз. Правило оценивает частоту, а не доказывает, что дыры нет. И для банковского «никогда» цифры становятся невозможными: чтобы утверждать «реже 1 на миллион», нужно 3 миллиона чистых попыток. Поэтому «никогда» должно идти из дизайна (права из сессии, подтверждения), а тесты подтверждают дизайн и меряют остаточный риск.
Всё это в Python без пакетов
Когда попыток n больше k, используют несмещённые оценки из статьи τ-bench: из n попыток задачи успешны c.
from math import comb, sqrt
def pass_at_k(n, c, k): # хотя бы одна из k успешна
return 1 - comb(n - c, k) / comb(n, k)
def pass_hat_k(n, c, k): # все k успешны
return comb(c, k) / comb(n, k)
p = 0.8
print(1 - (1 - p)**4, p**4, p**8) # 0.9984 0.4096 0.1678
print(pass_at_k(10, 8, 4), pass_hat_k(10, 8, 4)) # 1.0 0.333
print(1.96 * sqrt(0.5 * 0.5 / 100)) # 0.098 → ±10 пунктов
n = 1500
print(3 / n, 1 - 0.05 ** (1 / n)) # 0.002 и точное 0.001995
Схема
Термины · Key terms
- trial
- одна независимая попытка выполнить задачу
- pass@k
- хотя бы одна из k попыток успешна, потолок возможностей
- pass^k
- все k попыток успешны, нижняя граница надёжности
- flaky
- плавающий: одна задача то проходит, то нет
- standard error
- типичный разброс оценки от случайности
- confidence interval
- пределы, в которых результат гуляет от случайности
- paired comparison
- сравнение двух версий на одних и тех же задачах
- sign test
- проверка, не случаен ли перевес исправленных задач над сломанными
- clustered standard errors
- ошибки с учётом связанных задач
- rule of three
- 0 событий в n попытках → частота ниже 3/n с 95% уверенностью
Сделай сам
Для p = 0,7 посчитай pass@4, pass^4 и pass^8 — на бумаге или в snippet выше. Потом правило трёх: ноль утечек в 600 разных попытках — какая верхняя граница частоты? Запиши четыре числа с вычислением.
Обсуди с тьютором: покажи числа и спроси, какую из двух метрик ты бы сделал условием выпуска агента поддержки и с каким порогом.
Проверь себя · ответ под вопросом
1pass@1 = 92%, pass^4 = 61%: что это говорит об агенте и с чего начать исправление?
2Почему разница в 3 пункта на 100 задачах — шум, и как сравнивать две версии правильно?
3Ноль утечек в 1 500 разных атаках: что можно утверждать и чего нельзя?
Interview questions · US / UK
1On your suite pass@1 is 92% but pass^4 is 61%. What does that gap tell you and where do you look first?
2Version B scores 74% versus 71% for version A on your 100-task suite. Do you ship B?
3We ran 1,500 different attacks and saw zero data leaks. Can we tell the risk team the agent never leaks?
Ключевые фразы · Say it aloud
- pass@k is a capability ceiling; pass^k is a reliability floorпотолок возможностей против нижней границы надёжности
- The runs are independent; the agent is flakyпопытки независимы, агент плавает
- A three-point gain on a hundred tasks is within noise3 пункта на 100 задачах — шум
- Compare paired, on the same tasksсравнивай парно, на тех же задачах
- Zero in n gives an upper bound of about three over nноль из n даёт верхнюю границу около 3/n
- "Never" comes from design, tests confirm it«никогда» даёт дизайн, тесты подтверждают
Материалы
- Anthropic, A statistical approach to model evaluations — пять советов: стандартные ошибки, кластеры, парное сравнение, мощность (8 минут)
- Miller, Adding Error Bars to Evals — та же статистика в виде статьи с формулами (abstract 2 минуты, статья 14 страниц)
- Rule of three (statistics), Wikipedia — вывод и пример с 1 500 испытуемыми (4 минуты)
- Yao et al., τ-bench — откуда pass^k и формулы оценки (abstract 2 минуты)