Йо-йо! За несколько лет моей работы появилось очень много А/Б-тестов. Такое изменение связано с моим переходом в более крупную компанию и в более серьезные проекты, ошибка в которых может привести к большим финансовым потерям.
Когда я только начал проводить А/Б-тесты, у меня было много вопросов. Эти вопросы я задавал более опытным коллегам, которые делились со мной всем что знали сами. Уже довольно долгое время я самостоятельно организую техническую сторону проведения А/Б-тестов.
В данной статье хочу поделиться опытом с теми техническим специалистами, которые ещё никогда не проводили А/Б. Думаю, что эта статья станет чем-то между “А/Б для чайников” и “getting started”. Надеюсь, что материал будет для вас полезным. В этой статье я буду говорить о А/Б в контексте web-приложения (или сайте если так понятнее). Также это в полной мере будет соответствовать и для мобильных приложений (с учетом их специфики), и для проведения А/Б в экзотических средах (например tg-боты), всё будет зависеть от способов сбора аналитики.
В процессе нашей деятельности мы непрерывно стремимся улучшить наши финансовые показатели. Например, хотим, чтобы пользователи совершили больше покупок на нашем сайте или оформили больше подписок.
Для достижения данной цели выдвигаем гипотезы и изменяем наш продукт (web-приложение в данной статье). Однако мы не можем на 100% быть уверенными, что то, что мы придумали будет приносить нам больше профита. Могут существовать нюансы, которые мы упустили или вовсе не знали о них.
В случае если наше изменение негативное, то мы можем получить значительное ухудшение финансовых результатов. Чтобы избежать больших финансовых потерь как раз используют А/Б-тесты.
А каким путём это происходит?! А/Б-тест делает так, чтобы изменение появилось лишь у части пользователей.
Итог: А/Б-тесты используют для минимизации возможных финансовых потерь, в связи с изменением продукта, путём предоставления изменённого продукта только части пользователей.
Для проведения А/Б-теста в web-приложении нужны следующие технологические элементы:
Для проведения А/Б необходимо разделить пользователей на две группы (А и Б, но названия могут быть иными). Для этого разделения и нужна сплит-система. По сути это некоторая программа (код, сервис), которая помещает пользователя в ту или иную группу (выборку) на основании некоторой конфигурации.
В конфигурацию сплит-системы как правило входят следующие параметры:
Как правило фильтры нужны в том случае, если проводятся несколько тестов одновременно и необходимо, чтобы они не пересекались. Некоторые фильтры, такие как регион, могут использоваться для того, чтобы включить тест только там, где финансовые потери в случае неудачи будут минимальными.
Сплит- системы бывают разными и имеют свои недостатки и преимущества.
Это системы, которые осуществляют идентификацию пользователя и присвоение группы теста в браузере пользователя. Они подключаются с помощью JavaScript на страницу.
Минусы таких систем:
Хочу остановиться на моргании контента и как это связано со сплит-системой. Как правило для нашего А/Б мы меняем содержание на странице для разных групп. Когда пользователь загружает страницу, он видит привычный ему контент. Позже загружаются данные из сплит-системы и если он попал в тест, то мы меняем ему содержание на то, которое нужно для теста. Именно из-за этого появляется фликер (моргание), оно довольно раздражающее. Фликера можно избежать, однако это потребует от вас технических ухищрений.
Примеры систем:
Сплит-системы могут определять группу пользователя на backend или web-сервере (nginx, apache). Если данные о группе пользователя были определены на web-сервере, то мы их можем передать с помощью cookie на backend, а backend может сразу передать группу для рендера во фронтенд (если у вас ssr) и пользователь сразу получит только тот контент, который соответствует его группе А/Б-теста
Минусы:
Примеры систем:
Когда пользователь попал в ту или иную группу, нам важно запомнить её на протяжении всего времени проведения теста. Это требуется, чтобы при оценке финансовых результатов мы были уверенны, что пользователь видел данные (функции, контент), соответствующие его группе теста. Таким образом мы сможем сделать вывод о качестве нашего изменения.
Для сохранения группы используются cookie. В cookie можно хранить данные о группе в открытом или зашифрованном виде. Это зависит от вашей сплит-системы и прочих ваших соображений.
Есть разница в том, каким образом вы устанавливаете куки. Куки могут быть установлены в браузере, а могут через сервер. Дело в том, что некоторые браузеры принудительно мешают трекингу поведения пользователя и ограничивают для этого срок жизни cookie, установленный на клиенте (в браузере). Например, Safari ограничивает срок жизни клиентских cookie одной неделей. Как правило А/Б-тесты длятся дольше и у вас не будет гарантии того, что один и тот же пользователь будет попадать в одну и ту же группу.
Лучше устанавливать cookie на сервере с помощью передачи заголовка Set-Cookie
При А/Б-тесте мы фиксируем состояние “ДО” и “ПОСЛЕ”. Поэтому вы должны знать какое “ДО”. Ваше web-приложение должно использовать системы web-аналитики и передавать в них события (особенно важно о покупках, конверсии, воронке).
Важно чтобы у вас уже была web-аналитика ещё за несколько месяцев до запуска А/Б, чтобы было с чем сравнить. А так же данные web-аналитики должны соответствовать финансовым данным.
При подсчете результатов с помощью web-аналитики вам потребуется некоторый фильтр, чтобы разделять пользователей, которые попали в нужную группу А/Б и теми, кто не попал. Таким фильтром может быть cookie или событие web-аналитики. Заранее продумайте этот нюанс и протестируйте ваше решение на жизнеспособность.
В случае если вы выбрали cookie, вам нужно будет сделать следующее:
Ваш backend или web-сервер должны прочитать cookie, воспользоваться сплит-системой и определить в какую группу попадает пользователь. Если ранее не были установлены cookie для теста, то установить их с помощью заголовка Set-Cookie с нужным значением, в котором будет указана группа и дата истечения её срока (дата окончания А/Б-теста). Далее backend должен передать данные на frontend.
Если сплит-система работает на frontend, то вышеперечисленные задачи будут выполняться на клиенте (в браузере)
В задачи frontend входят: