А/Б-тестирования

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

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

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

В предыдущих сериях

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

В 14-м уроке мы выдвинули гипотезу, что новый алгоритм улучшает конверсию. Чтобы её проверить, сделали небольшую рассылку по списку, составленному алгоритмом. Сравнили её эффективность с предыдущими рассылками — новая показала 20% прирост по конверсиям.

У того теста был серьёзный недостаток. Помимо алгоритма, на эффективность рассылки влияли другие факторы: дизайн письма, цена носков, экономическая ситуация в стране, известность бренда, время отправки письма. Конверсия могла измениться из-за любого фактора.

Чтобы выяснить, насколько алгоритм увеличил конверсию в покупателей, нужно исключить влияние остальных факторов. Для этого и проводят А/Б-тестирования. Расскажу, что это такое.

Что такое А/Б-тест

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

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

Внутренняя валидность

Внутренняя валидность показывает «чистоту» взаимосвязи между явлениями. Вспомните рассылку из 14-го урока, там конверсия выросла на 20%, но мы не знаем, почему именно.

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

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

Представьте, что в день рассылки конкурент запустил мощную рекламную кампанию. Это, несомненно, повлияет на продажи с ваших писем. Но подписчики получили письмо конкурента одновременно с вашим — значит, этот фактор будет одинаково влиять на обе группы подписчиков. А раз одинаково, то его можно проигнорировать.

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

Внешняя валидность

Внешняя валидность показывает «переносимость» результатов теста на новые ситуации.

Представьте, что мы исключили все случайные факторы и послали новую рассылку всем подписчикам одновременно. Тест показал прирост конверсии на 20% при использовании алгоритма. Если тест обладает внешней валидностью, то в будущих рассылках алгоритм тоже будет улучшать конверсию.

Другими словами, А/Б-тест обладает внешней валидностью, если его результат получился неслучайно.

Вооружившись этими понятиями, давайте спланируем и проанализируем новый А/Б-тест, который, наконец, покажет, эффективен ли новый способ собирать списки подписчиков.

Планируем А/Б-тест

Прежде чем проводить тестирование, нужно прописать, что и зачем мы делаем. Обозначим цели, входные и выходные параметры эксперимента.

Цель: определить, как использование алгоритма сбора списка подписчиков влияет на конверсию рассылок.

Входные факторы

Фиксированные: дизайн письма, цена носков, время отправки.

Случайные: погода, экономика, политика.

Переменный: способ сбора списка рассылки.

Выходные параметры

Доля подписчиков, совершивших покупку после получения письма.

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

Мы должны провести тест на небольшой выборке, найти лучший вариант и уже его использовать для всей базы. Размер выборки зависит от трёх параметров: статистической значимости, статистической мощности и чувствительности теста.

Статистическая значимость

Со статистической значимостью мы уже встречались, когда говорили о проверке гипотез и доверительных интервалах в 14 и 15 уроках.

Статистическая значимость — вероятность, что результат эксперимента получился случайно. Другими словами, это риск, что тест покажет взаимосвязь, которой на самом деле нет.

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

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

Статистическая мощность

Статистическая мощность — это вероятность, что тест правильно засечёт эффект там, где он и правда есть.

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

Аналогично со значимостью: чем выше больше людей в выборках, тем правильнее истолкуем результаты теста.

Чувствительность

Чувствительность теста — минимальный размер изменения, которое тест способен засечь.

Какой прирост конверсии рассылки был бы достаточно хорошим, чтобы признать, что алгоритм работает, а тестирование сработало? 20% прирост — хорошо. 10% — тоже неплохо. А вдруг алгоритм приносит только 0.5% увеличение продаж, стоит ли тогда игра свеч?

Чем больше людей участвует в тесте, тем менее заметные изменения тест засечет. Представим, что разослали рассылку миллиону людей — прирост конверсии составил 2.3654%. Круто, но мы могли бы обойтись и без десятитысячных долей, да и вообще, разве прирост в 2% — это много?

Задав уровень чувствительности, мы говорим тесту: «Если конверсия будет меньше X, нам всё равно, какая она». Это позволяет получить значимый результат на меньшей выборке.

Чтобы рассчитать нужный объем аудитории, я рекомендую пользоваться онлайн-калькуляторами. Например, хороший калькулятор сделал Эван Миллер. Вводите в калькулятор нужные уровни значимости, мощности и чувствительности и в ответ получаете необходимый размер выборки.

Воспользуемся им и посчитаем размер выборки для нашего теста. Мы хотим полностью доверять результатам теста, поэтому зададим уровень статистической значимости 5%, статистической мощности — 95%.

Старые рассылки показывали 10% конверсию. Будем считать, что алгоритм работает, если конверсия вырастет на 2 процентных пункта. То есть чувствительность равна 2 ÷ 10 × 100% = 20%.

Вводим данные в калькулятор:

Получается, чтобы получить статистически значимый результат, вариант рассылки с алгоритмом и без должны получить 6 076 человек. Варианта два, поэтому нам нужно 6 076 × 2 = 12 152 подписчика.

Попробуйте поменять параметры в калькуляторе, посмотрите, как меняется размер выборки.

Итак, мы сформулировали цель, определили параметры теста, подготовили промо-письмо и собрали списки рассылок — начинаем тест.

Тестируем

Разослали промописьмо по списку, составленному случайным образом, как делали раньше, и сделали рассылку по списку, который составил алгоритм. Назовём получателей первой рассылки контрольной группой, а получателей второй — тестовой группой.

В контрольной группе — 6 076 получателя, 621 из них купили носки, конверсия составила: 621 ÷ 6 076 = 0.1022 × 100% = 10.22%. В тестовой — 6 076 человека, из них 745 стали покупателями, конверсия: 6 076 ÷ 745 = 0.1226 × 100% = 12.26%.

Конверсия тестовой группы чуть лучше. Можно ли сказать, что алгоритм и дальше будет показывать лучшую конверсию? Давайте разберёмся.

Анализируем результаты теста

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

Чтобы проверить, работает ли алгоритм, нужно посчитать разницу p2 − p1. Если она равна нулю, значит алгоритм не увеличивает конверсию. Если больше нуля — увеличивает. Меньше нуля — снижает. Да, такое тоже возможно.

Если p2 − p1 = 0, значит алгоритм не влияет на конверсии.

Обозначим полученные в ходе теста значения конверсий буквами 1 и 2 (читается «пи-хэт» от английского "p-hat" — пи со шляпой).

1 = 0.1022
2 = 0.1226

Эксперимент показал разницу в конверсиях 2 − p̂1 = 0.0204.

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

Задача: составить 95% доверительный интервал и проверить гипотезу, что p2 − p1 = 0, то есть, что на самом деле конверсии одинаковые, а алгоритм бесполезен.

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

Значит 95% всех значений обоих распределений находятся на расстоянии двух стандартных отклонений от их матожидания.

Математические ожидания распределений равны, 1 и 2.

Дисперсии равны 1 × (1 − p̂1) ÷ n1 и p̂2 × (1 − p̂2) ÷ n2, где n1 и n2 — количество элементов в каждой группе.

Стандартные отклонения — квадратные корни от дисперсий.

Промежуточные формулы:

Раз 1 и 2 случайны, то их разница 2 − p̂1 тоже случайна.

Поскольку 1 и 2 распределены нормально, то и 2 − p̂1 тоже подчиняется нормальному закону распределения. Матожидание 2 — p̂1 равно разнице матожиданий выборок, а дисперсия — сумме их дисперсий. Стандартное отклонение по-прежнему равно корню от дисперсии.

То же самое в виде формул:

M2 − p̂1 = p̂2 − p̂1,
D2 − p̂1 = p̂× (1 − p̂1) ÷ n1 + p̂× (1 − p̂2) ÷ n2,
S2 − p̂1 = √ p̂1× (1 − p̂1) ÷ n1 + p̂× (1 − p̂2) ÷ n2 
.

Для построения доверительного интервала разницы мы можем использовать формулу: M2 − p̂1 ± 2 × S2 − p̂1. Подставим промежуточные формулы и получим формулу 95% доверительного интервала для разницы конверсий.

Доверительный интервал для разницы конверсий:

2 − p̂1 ± 2 × √ p̂× (1 − p̂1) ÷ n1 + p̂× (1 − p̂2) ÷ n2 

1 и 2 — измеренные в результате A/Б-теста конверсии,

n1 и n2 — количество элементов в каждой группе.

Подставим значения и посчитаем:

M2 − p̂1 = 0.1226 − 0.1022 = 0.0204,
S2 − p̂1 = √0.1022 (1 − 0.1022) ÷ 6 076 +0.1226(1 − 0.1226) ÷ 6 076  = 0.0057.

95% доверительный интервал для p2 − p1 = 0.0204 ± 2 × 0.0057 = [0.008, 0.031]. Если перевести в проценты, получим интервал от 0.8% до 3.1%.

Обе границы интервала больше нуля, значит мы на 95% уверены, настоящая конверсия тестовой группы лучше, чем у контрольной.

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

Ура!

Повторим изученное

  1. А/Б-тест — это эксперимент, исследование в управляемых условиях. Цель теста — определить взаимосвязь между явлениями.
  2. То, насколько хорошо А/Б-тест определяет взаимосвязь, называется валидностью, она бывает внутренней и внешней.
  3. Внутренняя валидность показывает «чистоту» взаимосвязи. Внешняя — её «переносимость».
  4. Чтобы определить нужный объем выборки для А/Б-теста, используйте онлайн-калькуляторы.
  5. Оценивайте результаты теста с помощью доверительного интервала. Формула: 2 − p̂1 ± 2 × √ p̂× (1 − p̂1) ÷ n1 + p̂× (1 − p̂2) ÷ n2 

 

Успехов!
Автор курса: Алексей Куличевский
Редактор: Александр Марфицин
Иллюстратор: Алексей Хамкин