Что такое multi-armed bandit и когда его использовать вместо A/B теста?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Ответ: Multi-Armed Bandit и его применение
Что такое Multi-Armed Bandit
Multi-Armed Bandit (MAB) — это математическая модель из теории вероятностей и статистики, которая решает проблему выбора между несколькими вариантами ("рукавами игровых автоматов") с целью максимизировать общее вознаграждение при неполной информации.
Название происходит из аналогии с игроком перед несколькими игровыми автоматами, каждый из которых имеет неизвестную вероятность выигрыша. Игрок должен решить, какой автомат использовать, чтобы максимизировать прибыль.
Как работает MAB
Основная дилемма: Exploration vs Exploitation
- Exploration — исследование, проверка новых вариантов, чтобы получить информацию об их эффективности
- Exploitation — использование известного лучшего варианта для максимизации текущего вознаграждения
МАВ автоматически находит оптимальный баланс между этими двумя стратегиями.
Популярные алгоритмы MAB
1. Epsilon-Greedy
С вероятностью ε выбирает случайный вариант (exploration), с вероятностью (1-ε) выбирает лучший (exploitation).
import numpy as np
class EpsilonGreedy:
def __init__(self, n_arms, epsilon=0.1):
self.n_arms = n_arms
self.epsilon = epsilon
self.counts = np.zeros(n_arms)
self.values = np.zeros(n_arms)
def select_arm(self):
if np.random.random() < self.epsilon:
return np.random.randint(self.n_arms) # Explore
else:
return np.argmax(self.values) # Exploit
def update(self, arm, reward):
self.counts[arm] += 1
self.values[arm] += (reward - self.values[arm]) / self.counts[arm]
2. Thompson Sampling (Байесовский подход)
Использует вероятностное распределение для каждого варианта, выбирая стохастически.
3. UCB (Upper Confidence Bound)
Выбирает вариант с максимальной верхней границей доверительного интервала.
import math
class UCB:
def select_arm(self, t):
ucb_values = self.values + math.sqrt(math.log(t) / (self.counts + 1e-10))
return np.argmax(ucb_values)
Когда использовать MAB вместо A/B теста
A/B тест — традиционный подход:
- Фиксированное распределение трафика (50/50 или другое)
- Проверяет гипотезу (победитель/проигравший) в конце эксперимента
- Может потерять много конверсий, отправляя трафик на плохой вариант
- Требует больше времени и трафика
- Например: 50% трафика на A, 50% на B — даже если B явно хуже
MAB — адаптивный подход:
- Динамическое распределение — больше трафика идёт на хороший вариант
- Быстрая конвергенция — минимизирует потери на плохих вариантах
- Непрерывное обучение — не требует ждать конца периода
- Требует меньше трафика и времени
- Например: если вариант B хуже, трафик распределяется как 20% B и 80% A
Практические примеры использования
Рекомендуется MAB:
- Оптимизация рекомендаций на главной (выбор между 3-5 вариантами макетов)
- Оптимизация push-уведомлений (выбор между разными текстами)
- Выбор цены для вновь добавленного товара
- A/B/n тесты с большим количеством вариантов (>2)
- Когда потери от плохого варианта критичны (потеря доходов, отток пользователей)
Рекомендуется A/B тест:
- Проверка принципиально новых гипотез (дизайн переделка)
- Когда нужна статистическая значимость и чистая результат
- Долгосрочные, стратегические решения
- Когда трафика достаточно, а скорость не критична
Сравнительная таблица
| Критерий | A/B тест | MAB |
|---|---|---|
| Распределение трафика | Фиксированное | Адаптивное |
| Скорость сходимости | Медленная | Быстрая |
| Потери на плохых вариантах | Высокие | Низкие |
| Количество вариантов | 2 | 2+ (лучше 3+) |
| Требуемый трафик | Большой | Меньше |
| Статистическая строгость | Высокая | Ниже |
Выводы
МАВ — это не замена A/B тестам, а дополнение. Используй MAB когда:
- Много вариантов для выбора
- Потери от плохого варианта критичны
- Нужна быстрая оптимизация
- Трафика или времени на тест недостаточно
Для стратегических решений и подтверждения гипотез всё равно нужны A/B тесты с правильной статистикой.