Правильные AB-тесты

Когда в команде возникают те или иные разногласия, с точки зрения продукта и взаимоотношений проще и правильнее проводить AB-тесты. К сожалению, далеко не все это могут делать грамотно с математической точки зрения, ведь для этого должна быть соответствующая аудитория. Но стоит заметить, что иногда бывают и такие моменты, когда пользователей достаточно, но тест проводится все равно не верно. Что нужно знать для того, чтобы принимать решения верно и на основе статистически подтвержденных данных?

Немного о сущности AB-тестов

Допустим, вы тестируете какой-нибудь функционал или визуальную составляющую: вводить ли обучающие экраны во FTUE или какого цвета сделать кнопку заказа товара. У нас есть несколько вариантов, для упрощения возьмем 2: зеленая и красная кнопки. Что приходит первым на ум? Давайте части аудитории показывать первую, а другой — вторую. Отлично, в этом и заключается AB-тестирование.

AB-тестирование — метод исследования, при котором части аудитории показывается один (тестовый) вариант против другого (контрольного). Групп может быть различное количество, но они не пересекаются (в рамках конкретного AB-теста).

Этап 1. Определить ожидания от теста

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

Например
Допустим, мы тестируем два Starter Pack (первоначальный оффер в продукте) — дешевле и дороже (5$ vs 20$). Менеджер может определить гипотезу как:

Гипотеза 0: Starter Pack за 5$ конвертирует также как и за 20$.
Гипотеза 1: Starter Pack за 5$ конвертирует лучше чем за 20$. 

Таким образом, при анализе теста должна рассматриваться исключительно конверсия, так как изначально тест был направлен именно на это.

Что может произойти? Вспомнив результаты исследований, что первоначальный платеж определяет дальнейшую ценность продукта для пользователя, мы осознаем риск снизить LTV пользователей. При  постановке эксперимента, в котором учитывается только конверсия, мы не должны на это обращать внимания.

Таким образом, следовало бы изменить гипотезы на: 

Гипотеза 0: Starter Pack за 5$ конвертирует также как и за 20$, при этом LTV пользователей одинаковое.
Гипотеза 1: Starter Pack за 5$ конвертирует лучше чем за 20$, при этом LTV пользователей одинаковое.

Что изменится от этого? Аналитик должен не только проверить LTV пользователей при анализе результатов тестирования, но и учесть это при расчете продолжительности теста. Кроме этого, в случае, если это не сделать, может возникнуть когнитивное искажение, когда аналитик или менеджер будет искать сегмент пользователей, где данный тест принес результаты (например, в группе с дорогим Starter Pack, скорее всего, будет больше китов — вывод может быть таким: «мы лучше конвертируем китов, с которых получаем больше всего денег, оставляем дорогой вариант»).

Этап 2. Определяем длительность теста

Еще один этап, который часто пропускают. Прежде чем запустить AB-тест, необходимо понять, сколько он продлится (возможно, его продолжительность займет год, из-за чего он потеряет смысл — среда и/или продукт изменяются быстрее).

Чтобы рассчитать размер выборки для конверсионного теста, необходимо знать: текущую конверсию \(p\) (до проведения теста), ожидаемый эффект \(\Delta\) (например, улучшение конверсии на 10% по отношению к текущему уровню), p-value (вероятность ошибки при отклонении нулевой гипотезы. Например, если отличий в Starter Pack нет, но мы сказали, что оно есть), мощность (вероятность ошибки при отклонении ненулевой гипотезы — по умолчанию, в научных работах используется 80%: это означает, что в 1 из 5 случаев мы не найдем разницы, если она, на самом деле, существует).

Далее необходимо воспользоваться формулой: 

\(n = \frac {2 \cdot (Z_a + Z_{1-\beta})^2 \cdot p \cdot (1-p)}{\Delta^2}\)

Значения \(Z_a\)  и \(Z _{1-\beta}\) являются фиксированными. 

\(Z_a\):

p-value5%1%0.1%
2-sided1.962.583.29
1-sided1.652.33

\(Z_{1-\beta}\):

Мощность80%85%90%95%
\(Z_{1-\beta}\) 0.841.041.281.64

Чаще всего в отрасли используется 5% p-value и 80% мощность, поэтому формулу можно переписать, используя константы:

\(n = \frac {16 \cdot p \cdot (1-p)}{\Delta^2}\)

Аналогично, для расчета размера выборки для сравнения средних можно воспользоваться формулой (\(\sigma\) — стандартное отклонение по выборке): 

\(n = \frac {2 \cdot (Z_a + Z_{1-\beta})^2 \cdot \sigma^2}{\Delta^2}\)

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

Этап 3. Запускаем тест и ждем его окончание

После расчета объема выборки можно запускать AB-тест. С технической точки зрения вариантов реализации тестирования много. Один из них — использование остатка деления hash-функции от идентификатора пользователя и ident-теста на количество необходимых групп. При данном подходе все тесты будут независимы между собой, но при этом доступно однозначное определение группы для пользователя, не связанное с какими-либо внешними факторами. Перед запуском теста необходимо убедиться, что группы действительно равнозначны (может быть такое, что в одной группе больше китов, а в другой — меньше. Таким образом, одна группа будет однозначно выше другой, и может быть принято неверное решение о результате тестирования). Для этого помогут стандартные статистические тесты.

Пример несбалансированных выборок. В итоге, на конец теста могло было быть принято неверное решение

При проведении AB-тестирования некоторые менеджеры и аналитики забывают про проблему подглядывания (Peeking problem), которая чаще всего появляется при пропуске второго этапа.

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

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

Однако, следует учесть, что следить за метриками во время AB-тестирования все равно необходимо. Так, например, при сильном ухудшении целевой метрики (например, продажи упали на 30%), мы все же рекомендуем выключать тест, так как редко компании готовы пойти на подобные риски при неоднозначном результате. Кроме этого, можно следить за изменением доверительного интервала во времени. Если он сходится на достаточно продолжительном периоде в сторону одной из групп, то, с точки зрения продуктовой аналитики, можно принять решение. Ну и самый простой вариант — следить за трендом. Если одна группа выигрывает другую долгое время, скорее всего, рано или поздно будет достигнут значимый результат.

Заметен расходящийся тренд на протяжении длительного времени. Можно оставить оранжевую группу.

Этап 4. Анализируем результаты

Узнав размер выборки, вы можете написать скрипт, который не даст забыть о необходимости закрытия теста. И вот — он сообщил, что пришло время подводить итоги. Здесь на помощь приходят статистические тесты, которые позволяют найти значимую разницу между группами: 

  • Хи-квадрат — для биноминального теста;
  • Манн-Уитни — для поиска различия в медианах ненормального распределения;
  • t-критерий — для поиска различий в средних нормального распределения;

Чаще всего хи-квадрат используется для конверсии, остальные два критерия — для LTV (или cumulative ARPU на момент закрытия теста). 

Стоит заметить, что при анализе стоит учитывать людей, которые имели возможность совершить целевое действие: например, продакт внедряет улучшение в сервисе нацеленное на покупку из корзины. Таким образом, не следует анализировать % людей, которые купили в корзине от всех людей. А стоит смотреть на % людей, которые купили в корзине от тех, кто был в корзине (если, конечно, цель была именно такая). Это позволит быстрее найти разницу между группами, если она действительно есть.

Например:
300000 посетителей в каждой группе
1000 человек перешли в корзину в каждой группе
500 против 550 — купили из корзины

В случае, если искать разницу по отношению ко всем посетителям, ее нет (p-value 0.13), однако, если смотреть на количество людей, которые были в корзине, то разница является значимой (p-value 0.026).

Таким образом, при AB-тестировании необходимо:

  1. Заранее сформировать список гипотез, которые проверяются.
  2. Рассчитать размер выборки и длительность теста
  3. Разбить аудиторию на одинаковые группы.
  4. Дождаться завершения теста.
  5. Проанализировать результаты и принять решение.

При проведении AB-тестов нередко используются калькуляторы. Один из отличных калькуляторов разработал Evan Miller. Он доступен бесплатно по ссылке.

Работаю аналитиком в игровой сфере. Участвую в различных хакатонах. Область интересов - монетизация проектов и применение ML в продуктах и бизнесе.

Leave a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *