A/B тестыпродуктовая аналитикаметрикиSQLстатистика

Guardrail-метрики в A/B тесте: что это и зачем

2026-07-07 10 мин

Guardrail-метрики (контрольные, защитные) в A/B тесте — это метрики, которые не должны ухудшиться, пока вы гонитесь за ростом основной. Их задача не расти, а держаться на месте: латентность страницы, доля отписок, churn, доля ошибок. Если основная метрика выросла, но guardrail пробил порог, эксперимент считается неуспешным даже при значимом плюсе.

Что такое guardrail-метрика простыми словами?

Когда вы оптимизируете одну метрику, легко случайно навредить другой. Типичный пример: агрессивные пуши поднимают открытия приложения (primary), но разгоняют отписки и удаления. Guardrail-метрика работает как ограничитель: она отслеживает потенциальный вред и говорит «стоп», если он превысил допустимый уровень.

В эксперименте обычно задают три типа метрик:

Guardrail бывают двух видов: продуктовые (churn, отписки, конверсия в оплату) и технические (латентность, доля 5xx-ошибок, крэши, время загрузки). Вторые часто важнее: медленный интерфейс убивает опыт незаметно для продуктовых дашбордов.

Зачем нужны контрольные метрики в эксперименте?

Основная причина — локальная оптимизация вредит системе в целом. Модель ранжирования может поднять клики за счёт кликбейта и одновременно уронить долгосрочное удержание. Без guardrail вы увидите зелёный primary и раскатите изменение, которое медленно съедает базу.

Что защищают guardrail:

Практическое правило: primary у теста один (максимум два), а guardrail — фиксированный набор из 3-7 метрик, одинаковый для всех экспериментов команды. Тогда их не подбирают задним числом под удобный результат.

Чем guardrail отличается от primary и counter-метрик?

Тип метрикиЧего хотимПримерЧто делаем, если сдвинулась
PrimaryЗначимого ростаКонверсия в покупкуРаскатываем, если значимо вырос
GuardrailНе ухудшить (в пределах порога)Латентность p95, churn, отпискиБлокируем раскатку, если пробит порог
Counter-metricПонять цену измененияСредний чек при росте частоты покупокСмотрим на баланс, не блокирует напрямую

Ключевое отличие — в логике решения. Для primary нуль-гипотеза «эффекта нет», и мы рады её отвергнуть. Для guardrail всё наоборот: мы хотим убедиться, что вреда нет, то есть проверяем на неухудшение. Часто по guardrail ставят одностороннюю проверку и более мягкий порог значимости, потому что цена ложной тревоги (заблокировать хороший тест) высока.

Как выбирать guardrail-метрики?

Хороший набор отвечает на вопрос «что здесь может сломаться, даже если основная цифра растёт». Ориентиры:

Не путайте guardrail с диагностическими метриками. Диагностика (например, распределение трафика по устройствам) помогает объяснить результат, но не блокирует раскатку.

SRM как guardrail: что проверять первым?

SRM (Sample Ratio Mismatch) — расхождение фактического распределения пользователей по группам с задуманным. Если планировали 50/50, а на большой выборке получили 51.8/48.2, это почти наверняка баг: кривой сплиттер, потерянные логи, редирект, который асимметрично отсекает часть пользователей. При SRM результатам теста доверять нельзя — искажённой может оказаться любая другая метрика.

SRM проверяют критерием хи-квадрат: сравнивают наблюдаемые и ожидаемые размеры групп. Статистика:

^2 = Σ_i ((O_i - E_i)^2) / (E_i)

где O_i — фактическое число пользователей в группе, E_i — ожидаемое. Порог тревоги ставят жёстким: p-value < 0.001. При таком уровне ложная тревога редка, а реальный SRM ловится уверенно.

Посчитать распределение можно прямо в SQL:

SELECT
    variant,
    COUNT(DISTINCT user_id) AS users
FROM ab_assignments
WHERE experiment_id = 'checkout_v2'
GROUP BY variant;
-- дальше сравниваем users с ожидаемым сплитом
-- и считаем хи-квадрат (числа условные)

Если группы должны быть равны, а получилось 50 000 против 48 000 при суммарных 98 000, это уже повод считать хи-квадрат и, скорее всего, останавливать анализ.

Как посчитать SRM руками?

Числа ниже иллюстративные. Запланирован сплит 50/50, всего 100 000 пользователей, ожидаем по 50 000 в группе. Факт:

Считаем статистику:

^2 = ((50900 - 50000)^2) / (50000) + ((49100 - 50000)^2) / (50000) ^2 = (810000) / (50000) + (810000) / (50000) = 16.2 + 16.2 = 32.4

При одной степени свободы критическое значение для p = 0.001 равно примерно 10.83. Наши 32.4 намного больше, p-value < 0.001 — SRM подтверждён. Разница в 1.8% на глаз кажется мелочью, но статистически это громкий сигнал: анализ надо остановить и искать причину рассинхрона до любых выводов по primary.

Тот же подход работает для продуктового guardrail. Допустим, primary (конверсия) в treatment вырос с 4.0% до 4.3%, но guardrail «доля отписок» поднялась с 1.0% до 1.6% при заранее заданном пороге «не более +0.3 п.п.». Порог пробит — раскатывать нельзя, несмотря на плюс по конверсии.

Частые ошибки

Что запомнить

Guardrail-метрики — это страховка эксперимента: они не дают выкатить изменение, которое улучшает одну цифру ценой вреда в другом месте. Минимальный набор — технический guardrail (латентность, ошибки), продуктовый (churn, отписки) и обязательная проверка SRM как метрики целостности данных.

Потренируйте расчёты долей, хи-квадрата и агрегаций на реальных сценариях в SQL-тренажёре и Python-песочнице, а логику разбора A/B-результатов — в блоке кейсов. Если готовитесь к интервью, соберите вопросы про эксперименты в разделе собеседований и посмотрите разбор расчёта результатов A/B-теста в SQL.

Практикуйся на реальных задачах
545 SQL + 538 Python задач с автопроверкой, 618 кейсов. Первые — без регистрации.
Потренировать расчёты в SQL-тренажёре →