Часть 1. Разделение пользователей на группы



Почему-то все думают, что это самый простой этап: "Делим случайно и все дела"! Но на самом деле, это одно из самых сложных и спорных мест во всех А/В платформах



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



Пусть у вас есть самое классическое мобильное приложение: скажем, онлайн-магазин одежды. Даже в таком случае начнутся проблемы при разделении "Просто случайным образом"



Пусть вы проводите одновременно 2 теста на изменение в дизайне на главной странице. Очевидно, они влияют друг на друга - хорошо бы сделать так, чтобы эти тесты проводились на разных пользователях. Такой подход довольно популярен и называется двойным солированием. Упрощенно, вы сначала делите пользователей случайно с random_seed=Х (солью) условно на 100 групп. Группы 1-50 попадают в первый тест, а группы 51-100 - во второй. А потом внутри каждого теста делите пользователей второй раз с random_seed=Y (солью) на тест и контроль. При этом не стоит забывать, что у каждого теста должна быть своя вторая соль



Неплохо, мы смогли развести 2 влияющих друг на друга теста! Но тут нас подстерегает вторая проблема: если разводить все тесты, то у нас будет очень мало экспериментального пространства. Если 1 тест занимает в среднем 10 из 100 групп, то одновременно мы можем запускать всего 10 тестов - грустно😥



Тут нам может помочь подход со слоями от Гугла. Идея весьма проста: давайте разделим наше приложение на "слои". Внутри одного слоя эксперименты считаем зависимыми и разводим их = пользователи не пересекаются. А вот между слоями считаем эксперименты независимыми - пользователь может попасть сразу в N экспериментов в разных слоях. Слой - обычно логически отдельный кусок приложения (главная страница, поиск, экран оплаты заказа и т.д). Вуаля, мы только что смогли проводить не 10 параллельных экспериментов, а 10 * N, где N - число слоев



Я описал лишь пару сложностей и варианты их решения. Когда мы строили свою А/В платформу v1.0 в Delivery Club, таких неочевидных моментов было гораздо больше! Со времени написания статьи произошло множество улучшений в платформе. Но на мой взгляд, до сих пор одной из крупнейших побед остается именно корректное разделение пользователей на группы. Помните, что это, пожалуй, ключевой шаг, и начинайте делать А/В тесты в своей компании именно с него 😉



#ab