По статистике около 80% процентов компаний постоянно проводят A/B-тесты: сравнивают между собой варианты UX-дизайна, тестируют разные рекламные креативы и тексты рассылок.
Проведение одного тестирования в среднем занимает четыре недели. При маленьком количестве целевых действий — ещё больше.
К сожалению, только каждый восьмой тест показывает значимый результат, подтверждающий гипотезу. То есть семь экспериментов из восьми не приводят к увеличению дохода.
Можно ли ускорить A/B-тестирование, чтобы успевать проверить большее количество гипотез за единицу времени?
Можно. В статье мы расскажем о нескольких продуктовых и математических методах решения этой задачи.
Прежде чем приступить к советам по ускорению АБ-тестирования, необходимо убедиться, что вы правильно рассчитали его реальную длительность. Потому что если длительность теста рассчитана неверно, то, даже после применения методов по ускорению, результат вы можете просто не заметить.
Вспомним формулу расчета размера выборки, достаточного для получения статистически значимого результата:
где:
μc — среднее значение метрики контрольной выборки,
μt— среднее значение метрики тестовой выборки,
nc — число наблюдений в контрольной выборке,
nt — число наблюдений в тестовой выборке,
σc — среднеквадратичное отклонение метрики контрольной выборки,
σt — среднеквадратичное отклонение метрики тестовой выборки,
k — отношения размера тестовой выборки к размеру контрольной nt/nc (обычно 1),
t1-α/2, t1-β — значения нормальной функции с перцентилем в нижнем индексе (при стандартных значениях уровней значимости и ошибки второго рода α=0.05 β=0.2 — соответственно, 0.95 и в 0.8).
При равенстве тестовой и контрольной группы формула выглядит так:
— её мы в дальнейшем и будем использовать.
Выброс - это экстремальные значение в данных, которые находятся далеко за пределами других наблюдений. Например, в приложении пользователи тратят в среднем от 8 до 12 долларов, и внезапно появляется пользователь, который заплатил 100 долларов. Выбросы в данных А/Б-тестов увеличивают дисперсию метрики и длительность теста, а также смещают оценку среднего. Это может привести, в итоге, к неверному решению о принятии проверяемой гипотезы.
Наличие выбросов — частая проблема любых статистических экспериментов.
Как можно бороться с выбросами? Рассмотрим пример:
Пользователь | Метрика (сумма покупок) | Группа |
user1 | 100$ | control |
user2 | 10$ | control |
user3 | 8$ | control |
user4 | 12$ | test |
user5 | 11$ | test |
user6 | 13$ | test |
Сумма покупок первого пользователя резко отличается от остальных значений — это и есть выброс.
Посмотрим на среднее и среднеквадратичное отклонение:
μcontrol = 39.33 и σcontrol = 42.905
μtest = 12 и σtest = 0.816
Один из вариантов решения проблемы выбросов — отсечение пользователей с «выбивающимися» метриками. Установить пороговое значение можно двумя способами:
При достаточном объеме данных первый вариант предпочтительнее — иначе можно потерять важную информацию о метрике. Когда мы проводим отсечение по контролю, то, зачастую, лишаемся части данных тестовой группы, которые не являются выбросами.
Усеченные данные могут выглядеть так:
Пользователь | Метрика (сумма покупок) | Группа |
user2 | 10$ | control |
user3 | 8$ | control |
user4 | 12$ | test |
user5 | 11$ | test |
user6 | 13$ | test |
μcontrol = 9 и σcontrol = 1
μtest = 12 и σtest = 0.816
Видно, что дисперсии существенно снизились.
Этот метод работает для любых метрик отношения: например, CR или конверсии. Идея состоит том, чтобы перейти в новое признаковое пространство: к пропорциональной, но более чувствительной метрике.
Пусть у нас есть значения конверсии пользователя:
А ещё — общее значение конверсии:
Посчитаем CR на контроле, тогда преобразование для всех пользователей примет вид:
Сами по себе метрики отношения обычно лежат в границах от 0 до 1. Линеаризация позволяет расширить этот диапазон и перейти к большему размеру эффекта.
Обратите внимание, что дисперсия при таком подходе возрастает — но чувствительность всё равно увеличивается.
Предположим, у нас есть метрика конверсии CR (отношение покупок к показам) и следующие данные:
Пользователь | Группа | Показы | Покупки | CR(u) | L(u) |
user1 | control | 1000 | 100 | 0.1 | 49 |
user2 | control | 4000 | 200 | 0.05 | -4 |
user3 | control | 2000 | 60 | 0.03 | -42 |
user4 | test | 1000 | 110 | 0.11 | 59 |
user5 | test | 2000 | 120 | 0.06 | 18 |
user6 | test | 4000 | 280 | 0.07 | 76 |
Общая конверсия определяется как отношение суммы покупок по пользователям к сумме показов по пользователям:
В нашем случае она будет равна:
Мы можем перейти к эквивалентной метрике, определив для каждого пользователя новую линеаризованную функцию:
Теперь вместо CR(u) мы будем рассматривать метрику L(u).
То есть до линеаризации:
После линеаризации:
Поскольку увеличились и дисперсия, и эффект, нужно смотреть на их отношение:
В итоге, мы получили существенный выигрыш в 87.5 / 0.017 = 5147.05 раз.
В основе этого метода лежит разбиение всех наблюдений на независимые страты (группы) и использование выборочного стратифицированного среднего вместо обычного выборочного среднего:
где k — число страт,
pk — доля наблюдений страты,
Yk — среднее значение в страте k,
n — общее число наблюдений,
nk — число наблюдений в страте k.
Выборочное среднее равно стратифицированному среднему. При этом оценка среднеквадратичного отклонения случайной величины будет равна:
где σk — среднеквадратичное отклонение в страте k.
Поскольку нас интересуют отклонения метрики, а не среднего метрики, в дальнейшем нам потребуется только числитель.
При наличии связных групп на фоне сильного разброса объединения возможно значительное снижение времени тестирования.
Рассмотрим пример:
Пользователь | Страта | Группа | Метрика (сумма покупок) |
user1 | high_payment | control | 10$ |
user2 | low_payment | control | 2$ |
user3 | high_payment | control | 9$ |
user4 | low_payment | control | 2$ |
user5 | high_payment | test | 10$ |
user6 | low_payment | test | 3$ |
user7 | high_payment | test | 12$ |
user8 | low_payment | test | 2$ |
Формула применяется индивидуально к каждой группе. Желательно подумать о ней заранее, чтобы сразу получить сбалансированные страты как на тесте, так и на контроле. Однако, если при формировании выборок баланс не был соблюден, то существует возможность пост-стратификации.
До стратификации:
После стратификации:
В результате, дисперсия снизилась. Это приведёт к уменьшению MDE, а значит — к повышению чувствительности метрики.
Формально мы получили ускорение в 5.732 / 0.864 = 6.6 раз, однако нужно понимать, что в реальности различия между стратами могут быть существенно меньше.
Метод CUPED (Controlled-experiment Using Pre-Experiment Data) строится на использовании некоторых предварительных данных о метрике.
Представим, что до проведения эксперимента о некоторых пользователях были известны данные X. При проведении эксперимента эти же пользователи показали данные Y. Теперь мы можем рассматривать метрику:
где θ — коэффициент,
Y — текущее значение метрики для пользователя,
X — значение метрики для пользователя до проведения эксперимента.
Для достижения минимальной дисперсии этой метрики необходимо использовать следующий коэффициент (общий для контрольной и тестовой группы):
Тогда дисперсия метрики будет ниже, если есть зависимость между X и Y.
Важный нюанс: метод предполагает, что мы должны заранее располагать информацией о пользователях. Очевидно, это не всегда возможно. Но если такой информации нет, то метрика ничем не будет отличаться от обычного выборочного среднего.
Иногда X в данном подходе называют ковариатой. Важно, чтобы ковариата на тесте и на контроле имела одинаковое среднее, иначе эксперимент пройдёт некорректно.
Например:
θ = 1.3125 (рассчитано по формуле выше на совместных данных)
Пользователь | Группа | Новая метрика (Y) | Старая метрика (X) | CUPED |
user1 | control | 3$ | 2$ | 0.375 |
user2 | control | 2$ | 1$ | 0.6875 |
user3 | control | 1$ | 0$ | 1 |
user4 | test | 1.5$ | 0$ | 1.5 |
user5 | test | 3$ | 2$ | 0.375 |
user6 | test | 2.5$ | 1$ | 1.1875 |
До CUPED:
После CUPED:
Дисперсия снизилась. Мы получили ускорение в 1.027 / 0.538 = 1.9 раза.
Если вы задались целью ускорить A/B-тестирование, то старайтесь следовать этим трём принципам:
Важно понимать, что все подходы, описанные в этой статье, работают для средних оценок метрик. Если вы планируете проводить сплит-тестирование с другими показателями, то вам потребуются более специализированные критерии и методы.
Проведение A/B-тестов всегда требует постоянного контроля и доработок. Хотите в короткие сроки получить полезные для бизнеса результаты и не тратить время на ручную настройку эксперимента? Система персональных рекомендаций MyTracker Personalize автоматизирует А/Б-тестирование, предлагая вашим пользователям наиболее релевантные для них предложения: персонализированные офферы, ранжированный списки товаров и подписку.
Узнайте, как игра Hustle Castle смогла увеличить ARPU сегмента игроков на 23% c помощью MyTracker Personalize: подробности трехмесячного эксперимента по внедрению моделей персонализации Personalize в игровой симулятор Hustle Castle - формирование гипотезы, разделение на группы и результаты A/B-тестирования - в нашем кейсе.