Рост конверсии на 20%: как посчитать дополнительных покупателей и маржу
«Новая версия увеличила конверсию на 20%» звучит убедительно, пока финансовый директор не спрашивает, сколько это денег. Ответ зависит от исходной конверсии, будущего трафика и маржи. Разберём расчёт на NumPy и подготовим сценарий, который можно проверить и использовать при обсуждении внедрения.
Проценты и процентные пункты
В контрольной группе из десяти тысяч пользователей купили 500, в новой версии — 600. Конверсии равны 5% и 6%. Абсолютное изменение составляет один процентный пункт: из ста посетителей покупает на одного больше. Относительный uplift равен 20%, потому что разница 1% делится на исходную конверсию 5%.
Если бы конверсия выросла на двадцать процентных пунктов, она стала бы 25%. Поэтому фраза «рост на 20%» без уточнения базы опасна в бизнес-плане. Для исходного уровня 1% такой относительный рост даёт 0,2 процентного пункта, для уровня 20% — уже четыре. Одинаковый относительный эффект приводит к разному числу дополнительных покупателей.
В рабочей записке сохраняют обе доли, размеры групп и абсолютную разницу. Относительную удобно использовать для краткого сравнения, абсолютную — для пересчёта на трафик. При нулевой контрольной конверсии относительный рост не определён. В этом случае нельзя заменять знаменатель маленьким числом ради красивого процента: показывайте исходные количества и абсолютную разницу.
Переводим результат в план
Для будущих 80 тысяч посетителей умножаем трафик на абсолютную разницу 0,01. Получаем 800 дополнительных покупателей. Если маржа первого заказа равна 700 рублям, точечный сценарий даёт 560 тысяч дополнительной маржи. Умножение трафика на относительный uplift 0,20 вместо 0,01 завысило бы результат в двадцать раз.
Здесь предполагается, что все посетители имеют ту же единицу учёта, что и пользователи теста, а конверсии измерены за одинаковое окно. Если эксперимент анализировался по уникальным аккаунтам, нельзя подставить в план число сессий. Один человек способен открыть несколько сессий, и масштаб эффекта будет неверным.
Маржа 700 также является предположением плана. Если новая версия увеличивает скидку или привлекает другой состав покупателей, маржа дополнительного заказа может отличаться. Для оценки окупаемости лучше использовать метрику маржи на назначенного пользователя. Она объединяет конверсию, размер покупки и переменные затраты в одном результате.
import numpy as np
visitors = np.array([10000,10000])
buyers = np.array([500,600])
rate = buyers/visitors
absolute = rate[1]-rate[0]
relative = absolute/rate[0]
future_visitors = 80000
margin_per_buyer = 700
extra_buyers = future_visitors*absolute
extra_margin = extra_buyers*margin_per_buyer
print({"conversion":rate.tolist(),"absolute_pp":absolute*100,"relative_pct":relative*100,"extra_buyers":extra_buyers,"extra_margin":extra_margin})
assert np.isclose(extra_buyers,800)
assert np.isclose(extra_margin,560000)
assert np.isclose(relative,0.2)Что показать рядом с точечной оценкой
Число 560 тысяч удобно для первого обсуждения, но оценка конверсии содержит выборочный разброс. Следующий шаг — построить интервал абсолютного эффекта в соответствии с дизайном теста и перевести обе его границы тем же умножением на будущий трафик и маржу. Тогда финансовая модель показывает диапазон, а не выдаёт точечный результат за точный будущий доход.
Если будущий трафик тоже неизвестен, рассмотрите несколько его сценариев. Например, при той же разнице 0,01 каждые дополнительные десять тысяч пользователей дают сто ожидаемых дополнительных покупателей. Эта линейная связь позволяет быстро увидеть, какой вход влияет на бюджет сильнее: трафик, конверсия или маржа.
Для рабочего шаблона полезно хранить входные числа отдельно от формул: даты теста, аудиторию, конверсии, ожидаемый трафик, маржу и стоимость запуска. Тогда финансовый директор сможет заменить только бюджетный сценарий, не переписывая экспериментальный результат. Исходную точечную оценку и границы интервала следует сохранить из одного и того же анализа.
Когда эффект переносится на будущий период
Проверьте, одинаковы ли аудитория и условия. Тест мог проходить в сезон распродаж, а внедрение планируется на обычный месяц. Новая версия могла ускорить покупку, которую пользователь всё равно совершил бы позже. Тогда ранняя разница за семь дней не равна долгосрочному приросту. Окно наблюдения выбирают под цикл покупки и проверяют результат после его закрытия.
В расчёт окупаемости добавляют стоимость разработки и эксплуатации, а также возможное изменение возвратов. Для решения о запуске полезно заранее определить минимальный эффект, который оправдает затраты. Тогда обсуждение не заканчивается словом «положительный»: команда понимает, какого результата достаточно для конкретного действия.
После внедрения сравните фактический объём и маржу с предположениями плана. Если трафик оказался другим, сначала пересчитайте ожидаемые дополнительные покупки на реальный объём. Так можно отделить ошибку масштабирования от расхождения самого эффекта и выбрать, какую часть модели нужно уточнить.
Размер эффекта полезно согласовать ещё до запуска: MDE и размер выборки A/B-теста: почему важна базовая конверсия.
Отдельно записываем затраты запуска
Разовые затраты внедрения и регулярные расходы влияют на срок окупаемости по-разному. Покажите их рядом с ожидаемой дополнительной маржой за выбранный период, сохраняя одинаковую валюту и правила учёта.
Продолжить практику
В «A/B тестах и анализе данных на Python» вы оцениваете uplift и доверительные интервалы, выбираете продуктовые метрики и планируете размер выборки. Курс связывает статистический расчёт с интерпретацией для команды. В финальном проекте вы проходите весь путь от гипотезы до анализа результата. Откройте программу курса.
Продолжить на практике
- A/B тесты и анализ данных на Python ↗
Практический курс по A/B-тестированию и продуктовым метрикам: формулируем гипотезы, считаем размер выборки, запускаем эксперименты и анализируем результаты. От первой идеи до внедрения изменений в продукт — без «воды» и лишней теории.
