A/B-тесты и продуктовые метрики
Оффлайн-метрики выросли — но выиграет ли от этого продукт? Единственный честный способ узнать — контролируемый эксперимент на живых пользователях. Здесь — как его спроектировать и не обмануть самого себя статистикой.
Интуиция
Новая модель рекомендаций подняла NDCG на 3% на исторических данных. Радоваться рано: оффлайн ≠ онлайн. Исторические данные собраны под старой моделью; новая изменит поведение пользователей — а значит и сами данные. Прокси-метрика (NDCG, accuracy) — не бизнес-метрика (выручка, удержание): связь между ними бывает слабой и даже обратной. Поэтому запускаем A/B-тест: случайно делим пользователей на контроль (A, старая версия) и тест (B, новая) и сравниваем метрики. Случайность рандомизации гарантирует, что группы отличаются только версией продукта — любое различие в метриках можно приписать изменению, а не «в группе B случайно оказались активные».
Дизайн эксперимента
- Гипотеза заранее: «новая модель поднимет конверсию в покупку минимум на 1%» — а не «запустим и посмотрим, что вырастет».
- Единица рандомизации (randomization unit): обычно пользователь, а не сессия или запрос — иначе один человек увидит обе версии, и эффекты смешаются.
- Одна метрика решения (decision metric) плюс guardrail-метрики — «предохранители», которые не должны просесть: латентность, жалобы, отток. Рост конверсии за счёт удвоившейся задержки — не победа.
- Длительность и размер выборки — заранее, из расчёта мощности. Правило большого пальца для нужного числа пользователей на группу:
где Δ — минимальный эффект, который хотим поймать, а σ² — дисперсия метрики. Ключевое следствие: выборка растёт как 1/Δ² — эффект вдвое меньше требует вчетверо больше пользователей.
Минимум статистики без зауми
Нулевая гипотеза (null hypothesis, H0): «разницы между A и B нет». P-value — вероятность увидеть такую или ещё более экстремальную разницу, если H0 верна. Это НЕ «вероятность, что H0 верна» и не «вероятность ошибки» — частая ловушка на собеседовании. При пороге α = 0.05 мы согласны в 5% случаев кричать «эффект есть!», когда его нет (ложное срабатывание, ошибка I рода).
Мощность (power) — вероятность обнаружить эффект, когда он действительно есть (обычно целятся в 80%). Маленькая выборка + маленький эффект = низкая мощность: реальное улучшение утонет в шуме. Доверительный интервал (confidence interval) полезнее точечной оценки: «+1.2% [−0.3%; +2.7%]» честно показывает, что результат совместим и с нулём, и с большим ростом — точка «+1.2%» создаёт ложную уверенность.
Смертные грехи экспериментатора
- Подглядывание (peeking). Проверять p-value каждый день и останавливать тест при первом p < 0.05 — значит многократно бросать монетку до удобного результата: реальная доля ложных срабатываний вырастает с 5% до десятков процентов. Длительность фиксируется до запуска (или используются честные последовательные методы).
- Множественные сравнения. Смотришь 20 метрик — одна окажется «значимой» чисто случайно. Поэтому метрика решения одна, остальные — с поправками или как сигналы для новых гипотез.
- Пропущенная SRM-проверка (sample ratio mismatch). Ждали деление 50/50, получили 52/48 — рандомизация сломана (баг трекинга, фильтрация ботов в одной группе), и результатам верить нельзя, каким бы красивым ни было p-value.
A/B для ML-систем
Сравнение двух моделей — тот же эксперимент: модель A против модели B, метрика решения продуктовая, guardrail — латентность и стоимость инференса. Перед A/B новую модель полезно прогнать в shadow-режиме (см. мониторинг). Для ранжирования есть более чувствительный инструмент — интерливинг (interleaving): результаты двух ранкеров перемешиваются в одну выдачу, и по кликам видно, чьи документы предпочитают. Каждый пользователь сравнивает обе модели сразу, поэтому эффект ловится на порядки меньшем трафике.
- «Что такое p-value?» — вероятность получить такой или более экстремальный результат при верной H0. Не вероятность, что H0 верна — за эту формулировку снимают баллы.
- «Оффлайн-метрика выросла, онлайн — нет. Почему?» — оффлайн-данные собраны под старой моделью, прокси-метрика ≠ бизнес-метрика, сдвиг поведения пользователей.
- «Почему нельзя останавливать тест при первом p < 0.05?» — peeking раздувает ошибку I рода; длительность фиксируется заранее.
- «Тест не показал значимости — эффекта нет?» — не обязательно: возможно, не хватило мощности. Смотрим доверительный интервал и расчёт размера выборки.