Многорукий бандит или A/B-тест: что и когда использовать
Продвинутое4 минРедакция Innovialabs
Коротко
Многорукий бандит подходит, когда нужно заработать максимум за короткий тест (акции, заголовки, креативы); классический A/B-тест — когда нужен надёжный ответ, какой вариант лучше и насколько.
Коротко
A/B-тест и многорукий бандит решают разные задачи.
- A/B-тест делит трафик в фиксированных пропорциях до самого конца, а затем говорит, какой вариант лучше и насколько можно доверять результату. Его цель — узнать.
- Бандит постоянно сдвигает трафик к варианту, который сейчас работает лучше. Его цель — заработать прямо во время теста.
Если результат определяет долгосрочное решение, запускайте A/B-тест. Если окно короткое и каждая потерянная конверсия стоит денег, бандит обычно уместнее.
Компромисс «исследование — использование»
Название пришло из задачи об игроке перед несколькими игровыми автоматами («однорукими бандитами») с неизвестной отдачей. Каждый раз нужно выбирать:
- Explore (исследовать) — дёрнуть автомат, о котором мало известно, чтобы узнать его отдачу.
- Exploit (использовать) — дёрнуть тот, что пока выглядит лучшим, и забрать выигрыш.
Только исследование тратит деньги на плохие автоматы. Только использование рискует закрепить лидера, которому просто повезло в начале. Классический A/B-тест — это чистое исследование, а потом чистое использование: равный сплит до конца, затем 100% победителю. Бандит смешивает оба режима непрерывно.
Как бандит перераспределяет трафик
Три распространённых подхода — от простого к более адаптивному:
| Алгоритм | Как выбирает | Компромисс |
|---|---|---|
| Epsilon-greedy | Небольшую фиксированную долю трафика (epsilon) отдаёт случайным вариантам, остальное — текущему лидеру | Просто, но продолжает тратить ту же долю на явно плохие варианты |
| UCB (Upper Confidence Bound) | Выбирает вариант с самой высокой оптимистичной оценкой: наблюдаемая конверсия плюс бонус за неопределённость | Детерминирован, исследует меньше по мере накопления данных |
| Thompson sampling | Для каждого варианта берёт правдоподобную конверсию из апостериорного распределения и показывает вариант с максимальным значением | Исследует пропорционально неопределённости; часто используется на практике |
Минимальный шаг Thompson sampling для конверсий:
import random
def choose(arms):
# arms: {"A": {"conv": 30, "views": 1000}, "B": {...}}
draws = {
name: random.betavariate(1 + a["conv"], 1 + a["views"] - a["conv"])
for name, a in arms.items()
}
return max(draws, key=draws.get)
Чем больше данных говорит в пользу варианта, тем чаще он выигрывает розыгрыш и тем больше трафика получает — автоматически.
Где бандит лучше A/B-теста
- Короткие акции. У распродажи на выходные или праздничного баннера нет «после теста» — возможность заканчивается вместе с кампанией. Ждать статистической значимости — значит потерять большую часть окна.
- Заголовки и обложки. Медиа и контентные сайты тестируют много заголовков с коротким сроком жизни. Бандит быстро сосредоточит трафик на сильнейшем.
- Рекламные креативы. Рекламные платформы и так ротируют креативы адаптивно; та же логика работает, когда ротацией управляете вы.
- Много вариантов. При пяти-десяти вариантах равный сплит тратит много трафика на очевидных аутсайдеров. Бандит быстро их отсекает.
- Постоянная оптимизация. Блоки рекомендаций или темы писем, где «лучший» вариант со временем меняется.
Почему бандит хуже для оценки причинного эффекта
Бандит максимизирует результат, а не знание. У этого есть цена:
- Неравные выборки. Проигрывающие варианты получают мало трафика, их оценки остаются шумными. Вы знаете, что победитель вероятно лучше, но не знаете насколько.
- Смещённые оценки. Распределение зависит от прошлых результатов, поэтому «наивные» конверсии по вариантам смещены. Обычные t-тесты и доверительные интервалы напрямую не применимы.
- Подмешиваются эффекты времени. Если лидер получает основной трафик в выходные, а остальные — в будни, эффект дня недели может выглядеть как эффект варианта.
- Отложенные конверсии ломают логику. Если покупка происходит через несколько дней после клика, алгоритм перераспределяет трафик по неполным данным.
- Вторичные метрики трудно читать. Сравнивать удержание, возвраты или средний чек при перекошенных выборках ненадёжно.
Для продуктовых изменений, цен, редизайна оформления заказа и всего, что останется на месяцы, эти слабости важнее конверсий, сэкономленных во время теста.
Как выбрать
Ответьте на четыре вопроса:
- Решение будет жить долго после теста? Да — A/B-тест. Нет — рассмотрите бандит.
- Нужен размер эффекта для бизнес-обоснования или прогноза? Да — A/B-тест.
- Обратная связь быстрая (клики, регистрации в рамках сессии)? Бандиту нужны быстрые награды.
- Сколько вариантов? Много вариантов при ограниченном трафике — аргумент за бандит.
Частая гибридная схема: бандитом отсеять много креативов, а затем подтвердить двух лучших полноценным A/B-тестом перед долгосрочным внедрением.
Частые ошибки
- Запустить бандит, а потом отчитаться «вариант B поднял конверсию на X%», как будто это результат A/B-теста.
- Оптимизировать клики, когда настоящая цель — выручка: бандит охотно найдёт кликбейт.
- Использовать бандит для метрики с большой задержкой.
- Настроить epsilon или априорные значения так агрессивно, что алгоритм выбирает победителя после нескольких конверсий.
- Не следить за контрольными метриками — отказами, возвратами.