Когда-то мы в Симулейтив делали буквально по несколько рассылок в неделю. Потом в какой-то момент мы решили, что надо увеличивать градус и с тех пор количество рассылок увеличилось примерно в 15 (!) раз по месяцу. А теперь мы дошли до точки, когда задумались — «хм, а может откат к старой механике сейчас повысит нам конверсию?».
Итак, имеем задачу:
— Есть телеграм-боты с аудиторией N десятков тысяч человек, которые получают условно 10 рассылок ежедневно и кликают на кнопки с конверсией X%
— Хотим проверить гипотезу — а станет ли конверсия лучше, если мы уменьшим количество контента до 1 рассылки в день
— При этом важно провести эксперимент так, чтобы не умереть с голоду по итогу месяца (ну типа перестали всем слать, эксперимент не сработал, а мы остались без продаж) 🤡
Получаем достаточно классический АБ-тест. Очевидно, нужно взять 2 группы — тест (шлем мало) и контроль (как слали, так и продолжаем). При этом:
— Выборка должна быть однородной. Ну то есть не должны в тест попасть, например, все неактивные, а в контроле остаться активный сегмент. Очень соблазнительно так сделать, чтобы не уронить выручку, но такой эксперимент ничего не покажет.
— Нужно сделать размер тестовой группы как можно меньше. Опять же, чтобы не уронить нечаянно выручку.
— Но при этом размер лидгена должен быть достаточным, чтобы тест показал статзначимые результаты.
Давайте проектировать и считать. У нас открыты вопросы:
— По какой метрике проводим эксперимент?
— Какой эффект ожидаем?
— Какой делать размер выборок?
— Как дробить на сегменты?
— Как определить длительность теста?
— Как оценить результат?
Погнали отвечать.
1. За метрику очень хочется взять продажи, но увы — слишком маленькие выборки и нужно долго будет тестить. Т.к. продажи сильно коррелируют с фактом оставления заявки, можно взять прокси-метрику — заявку (то есть клик по кнопке в боте). То есть сравнивать будем конверсию в каждой группе «сколько уникальных человек оставило заявку» / «сколько уникальных человек получило рассылку». И там, и там считаем уников — дубли убираем.
2. Какой эффект хотим задетектить? Пусть сейчас конверсия 3%, а хотим увидеть рост до 5%. Вроде и достаточно реалистично, но при этом на объемной выборке даст существенный буст.
3. Какой делать размер групп. Первое: т.к. нам нужно минимизировать размер тестовой группы, сразу предполагаем, что пропорция будет не 50/50, а типа 20/80.
Дальше можем посчитать размер тестовой группы по универсальной формуле:
n_test = ((1 + r) / r) × p × (1 - p) × (Zα/2 + Zβ)^2 / Δ^2
r = n_control / n_test
p = средняя конверсия между p1 и p2 (конверсии)
Δ = p2 - p1
Zα/2 = 1.96 для 95% значимости
Zβ = 0.84 для 80% мощности
(Zα/2 + Zβ)^2 = (1.96 + 0.84)^2 = 7.84
Подставляя наши p1 и p2, получаем размер тестовой группы примерно 940 человек, размер контроля — 3760. В целом адекватно, не должно сломать нам выручку))
4. Дальше идем — какой сегмент брать? Первое — очевидно, что активный. Нет смысла брать неактивный сегмент: контроль точно должен быть активным (чтобы было, с чем сравнивать), а тестовый сегмент должен быть однородным с контролем.
Нужно что-то формата «5к человек, которые зарегались за последние 2 месяца на вебинары по тематике Х из одного рекламного источника». Ну и разбить их рандомно (ну то есть чтобы не было что в тестовой группе все люди из каких-то бич-каналов, а в контроле — из золотых каналов).
Можно еще упороться и провести стратификацию, т.е. нарезать всю базу на сегменты (например, «регался 30 дней назад», «регался 30-60 дней назад» и так далее), чтобы оценить эффект этой штуки на разные сегменты базы (может где-то эффект будет обратный). Но мы не настолько хотим в это упороться — ведь чтобы оценивать по каждой страте отдельно, нужно кратно увеличивать выборку, а мы так не хотим))
5. Сколько проводить тест? Классный и неочевидный вопрос!
Обычно в АБ-тестах аудитория в группах набирается с течением времени и размер выборки определяет длительность (если надо 1000 человек, а в день приходит 100 — значит очевидно 10 дней). Но тут выборка сразу доступна вся. Из чего исходить?
Все очень просто — нужно оценить, сколько времени обычно «докатываются» заявки после рассылок. Если основная масса оставляет заявку в течение 1-2 дней после рассылки, значит эксперимент будет быстрым. Если мы еще дней 7 получаем заявки — значит подольше. По итогу — считаем это число Х и просто добавляем к нему 7 дней (чтобы захватить все дни недели и тест был более чистым).
Понятно, что чем дольше — тем лучше, потому что в этом деле много других факторов (например, в день получения зп активность выше, в праздники она может упасть и даже банально погода за окном влияет — люди склонны впадать в шашлычную кому). Но мы с вами работаем в полях, так что на сим успокоимся.
6. Ну и последнее — оценка результата. Здесь ничего нового — считаем uplift (uplift = CR_test / CR_control - 1), чтобы оценить размер эффекта + делаем односторонний z-test (если проверяем только гипотезу «конверсия выросла»), чтобы подтвердить стат значимость.
→ uplift положительный, p-value < 0.05 — эффект есть и он статзначим
→ uplift положительный, p-value > 0.05 — эффект есть, но он не статзначим
→ uplift отрицательный — мы все сломали (а чтобы понять, статзначимо ли это, нужно дополнительно посмотреть двусторонний тест)
Вот такой вот получился хендбук по наколеночным A/B-тестам)) Пойдем пробовать с командой, потом поделюсь результатами!)
Традиционная проверка связи:
— ❤️ — не кейс, а мед
— 💅 — очень интересно, но ничего не понятно
— 🤓 — пожелать удачи нашему CRM-маркетологу)))