Войти

5 лайфхаков для ускорения А/B-тестирования от аналитиков MyTracker

По статистике около 80% процентов компаний постоянно проводят A/B-тесты: сравнивают между собой варианты UX-дизайна, тестируют разные рекламные креативы и тексты рассылок.

Проведение одного тестирования в среднем занимает четыре недели. При маленьком количестве целевых действий — ещё больше.

К сожалению, только каждый восьмой тест показывает значимый результат, подтверждающий гипотезу. То есть семь экспериментов из восьми не приводят к увеличению дохода.

Можно ли ускорить A/B-тестирование, чтобы успевать проверить большее количество гипотез за единицу времени?

Можно. В статье мы расскажем о нескольких продуктовых и математических методах решения этой задачи.

1. Убедитесь, что правильно расчитана длительность теста

Прежде чем приступить к советам по ускорению АБ-тестирования, необходимо убедиться, что вы правильно рассчитали его реальную длительность. Потому что если длительность теста рассчитана неверно, то, даже после применения методов по ускорению, результат вы можете просто не заметить.

Вспомним формулу расчета размера выборки, достаточного для получения статистически значимого результата:

где:

μc — среднее значение метрики контрольной выборки,
μt— среднее значение метрики тестовой выборки,
nc — число наблюдений в контрольной выборке,
nt — число наблюдений в тестовой выборке,
σc — среднеквадратичное отклонение метрики контрольной выборки,
σt — среднеквадратичное отклонение метрики тестовой выборки,
k — отношения размера тестовой выборки к размеру контрольной nt/nc (обычно 1),
t1-α/2, t1-β — значения нормальной функции с перцентилем в нижнем индексе (при стандартных значениях уровней значимости и ошибки второго рода α=0.05 β=0.2 — соответственно, 0.95 и в 0.8).

При равенстве тестовой и контрольной группы формула выглядит так:

— её мы в дальнейшем и будем использовать.

2. Правильно отсекайте выбросы в данных

Выброс - это экстремальные значение в данных, которые находятся далеко за пределами других наблюдений. Например, в приложении пользователи тратят в среднем от 8 до 12 долларов, и внезапно появляется пользователь, который заплатил 100 долларов. Выбросы в данных А/Б-тестов увеличивают дисперсию метрики и длительность теста, а также смещают оценку среднего. Это может привести, в итоге, к неверному решению о принятии проверяемой гипотезы.

Наличие выбросов — частая проблема любых статистических экспериментов.

Как можно бороться с выбросами? Рассмотрим пример:

ПользовательМетрика (сумма покупок)Группа
user1100$control
user210$control
user38$control
user412$test
user511$test
user613$test

Сумма покупок первого пользователя резко отличается от остальных значений — это и есть выброс.

Посмотрим на среднее и среднеквадратичное отклонение:

μcontrol = 39.33 и σcontrol = 42.905

μtest = 12 и σtest = 0.816

Один из вариантов решения проблемы выбросов — отсечение пользователей с «выбивающимися» метриками. Установить пороговое значение можно двумя способами:

  1. по отдельности для теста и контроля;
  2. сразу для обеих групп.

При достаточном объеме данных первый вариант предпочтительнее — иначе можно потерять важную информацию о метрике. Когда мы проводим отсечение по контролю, то, зачастую, лишаемся части данных тестовой группы, которые не являются выбросами.

Усеченные данные могут выглядеть так:

ПользовательМетрика (сумма покупок)Группа
user210$control
user38$control
user412$test
user511$test
user613$test

μcontrol = 9 и σcontrol = 1

μtest = 12 и σtest = 0.816

Видно, что дисперсии существенно снизились.

3. Используйте линеаризацию для метрик отношения

Этот метод работает для любых метрик отношения: например, CR или конверсии. Идея состоит том, чтобы перейти в новое признаковое пространство: к пропорциональной, но более чувствительной метрике.

Пусть у нас есть значения конверсии пользователя:

А ещё — общее значение конверсии:

Посчитаем CR на контроле, тогда преобразование для всех пользователей примет вид:

Сами по себе метрики отношения обычно лежат в границах от 0 до 1. Линеаризация позволяет расширить этот диапазон и перейти к большему размеру эффекта.

Обратите внимание, что дисперсия при таком подходе возрастает — но чувствительность всё равно увеличивается.

Предположим, у нас есть метрика конверсии CR (отношение покупок к показам) и следующие данные:

ПользовательГруппаПоказыПокупкиCR(u)L(u)
user1control10001000.149
user2control40002000.05-4
user3control2000600.03-42
user4test10001100.1159
user5test20001200.0618
user6test40002800.0776

Общая конверсия определяется как отношение суммы покупок по пользователям к сумме показов по пользователям:

В нашем случае она будет равна:

Мы можем перейти к эквивалентной метрике, определив для каждого пользователя новую линеаризованную функцию:

Теперь вместо CR(u) мы будем рассматривать метрику L(u). 

То есть до линеаризации:

После линеаризации:

Поскольку увеличились и дисперсия, и эффект, нужно смотреть на их отношение:

В итоге, мы получили существенный выигрыш в 87.5 / 0.017 = 5147.05 раз.

4. Используйте стратификацию

В основе этого метода лежит разбиение всех наблюдений на независимые страты (группы) и использование выборочного стратифицированного среднего вместо обычного выборочного среднего:

где k — число страт,
pk — доля наблюдений страты,
Yk — среднее значение в страте k,
n — общее число наблюдений,
nk — число наблюдений в страте k.

Выборочное среднее равно стратифицированному среднему. При этом оценка среднеквадратичного отклонения случайной величины будет равна:

где σk — среднеквадратичное отклонение в страте k.

Поскольку нас интересуют отклонения метрики, а не среднего метрики, в дальнейшем нам потребуется только числитель.

При наличии связных групп на фоне сильного разброса объединения возможно значительное снижение времени тестирования.

Рассмотрим пример:

ПользовательСтратаГруппаМетрика (сумма покупок)
user1high_paymentcontrol10$
user2low_paymentcontrol2$

user3

high_paymentcontrol9$
user4low_paymentcontrol2$
user5high_paymenttest10$
user6low_paymenttest3$
user7high_paymenttest12$
user8low_paymenttest2$

Формула применяется индивидуально к каждой группе. Желательно подумать о ней заранее, чтобы сразу получить сбалансированные страты как на тесте, так и на контроле. Однако, если при формировании выборок баланс не был соблюден, то существует возможность пост-стратификации.

До стратификации:

После стратификации:

В результате, дисперсия снизилась. Это приведёт к уменьшению MDE, а значит — к повышению чувствительности метрики.

Формально мы получили ускорение в 5.732 / 0.864 = 6.6 раз, однако нужно понимать, что в реальности различия между стратами могут быть существенно меньше.

5. Используйте CUPED

Метод CUPED (Controlled-experiment Using Pre-Experiment Data) строится на использовании некоторых предварительных данных о метрике.

Представим, что до проведения эксперимента о некоторых пользователях были известны данные X. При проведении эксперимента эти же пользователи показали данные Y. Теперь мы можем рассматривать метрику:

где θ — коэффициент,
Y — текущее значение метрики для пользователя,
X — значение метрики для пользователя до проведения эксперимента.

Для достижения минимальной дисперсии этой метрики необходимо использовать следующий коэффициент (общий для контрольной и тестовой группы):

Тогда дисперсия метрики будет ниже, если есть зависимость между X и Y.

Важный нюанс: метод предполагает, что мы должны заранее располагать информацией о пользователях. Очевидно, это не всегда возможно. Но если такой информации нет, то метрика ничем не будет отличаться от обычного выборочного среднего.

Иногда X в данном подходе называют ковариатой. Важно, чтобы ковариата на тесте и на контроле имела одинаковое среднее, иначе эксперимент пройдёт некорректно.

Например:

θ = 1.3125 (рассчитано по формуле выше на совместных данных)

ПользовательГруппаНовая метрика (Y)Старая метрика (X)CUPED
user1control3$2$0.375
user2control2$1$0.6875
user3control1$0$1
user4test1.5$0$1.5
user5test3$2$0.375
user6test2.5$1$1.1875

До CUPED:

После CUPED:

Дисперсия снизилась. Мы получили ускорение в 1.027 / 0.538 = 1.9 раза.

Подведём итоги

Если вы задались целью ускорить A/B-тестирование, то старайтесь следовать этим трём принципам:

  1. Выбирайте для тестирования изменения, которые, в теории, могут дать больший эффект, чтобы сократить потенциальное время ожидания.
  2. Переходите от целевых метрик к метрикам, которые также характеризуют группы, но обладают большей чувствительностью (бОльшим эффектом или меньшей дисперсией).
  3. На этапе планирования тестирования отдавайте предпочтение экспериментам с высокой скоростью получения наблюдений.

Важно понимать, что все подходы, описанные в этой статье, работают для средних оценок метрик. Если вы планируете проводить сплит-тестирование с другими показателями, то вам потребуются более специализированные критерии и методы.

Проведение A/B-тестов всегда требует постоянного контроля и доработок. Хотите в короткие сроки получить полезные для бизнеса результаты и не тратить время на ручную настройку эксперимента? Система персональных рекомендаций MyTracker Personalize  автоматизирует А/Б-тестирование, предлагая вашим пользователям наиболее релевантные для них предложения: персонализированные офферы, ранжированный списки товаров и подписку. 

Узнайте, как игра Hustle Castle смогла увеличить ARPU сегмента игроков на 23% c помощью MyTracker Personalize: подробности трехмесячного эксперимента по внедрению моделей персонализации Personalize в игровой симулятор Hustle Castle - формирование гипотезы, разделение на группы и результаты A/B-тестирования - в нашем кейсе.

Метки: игры сегменты персонализация A/B-тестирование