Условие
Запустили функцию «брошенной корзины»: клиентам, которые зашли в приложение, посмотрели карточки авто, но не забронировали — приходил дополнительный push со скидкой 15% на бронирование в течение 15 мин. Тест шёл 1 неделю. Дано 3 датасета:
ab_cart— кому и в какие интервалы действовала скидка.rents_test— аренды (неделя до теста, неделя теста).sessions_test— заходы и итоговые бронирования.
Оцените, был ли эксперимент успешным и стоит ли оставлять функционал.
Решение
Подход
- Pre-AA на неделе до теста: проверить, что группы test/control ведут себя одинаково по основным метрикам.
- Целевая метрика — CR в бронирование среди сессий, попавших под условия push (заход, просмотр, без брони). Вторичная — выручка / аренды на пользователя.
- Учёт ограничения 15 мин: если бронь сделана позже — скидка не применилась. Метрика CR должна быть «бронь в окне 15 минут».
- Дисконтирование выручки: скидка 15% уменьшает revenue per ride; нужно посчитать incremental revenue (новые брони vs то же при той же базе).
Выбор стат-теста
Для CR (Bernoulli) — z-тест пропорций. Для среднего числа броней на user — t-тест или mann-whitney.
from statsmodels.stats.proportion import proportions_ztest
nobs = [n_test, n_control]
suc = [c_test, c_control]
z, p = proportions_ztest(suc, nobs)Что считать
CR_15min_testvsCR_15min_control.aov_testvsaov_control(с учётом скидки).- Долгосрочный retention: пришли ли «новые» клиенты после bonus-бронирования снова на 7-й, 14-й, 30-й день.
Финансовый расчёт
incremental_revenue = (CR_test − CR_control) × N_sessions × AOV_test
discount_cost = N_brons_with_discount × AOV_full × 0.15
ROI = (incremental_revenue − discount_cost) / discount_cost
Если ROI > 0 и стат. значимо — оставлять.
Длительность теста
Неделя — мало. Эффект novelty (новый функционал → много кликают), сезонность дней недели. Минимум 2–4 недели.
Подводные камни
- Self-selection: клиент, который добавил в корзину = более тёплый — даже без скидки бронировал бы. CR контроля надо смотреть на той же когорте «бросивших корзину».
- Каннибализация: клиент бронировал бы по полной цене → выручка проседает. Нужен holdout в пределах теста.
- 15 минут — атрибуция «брони, относящейся к скидке». Бронь через 30 мин — это, возможно, не из-за push.
- Bonferroni: если смотрите 10 метрик — поправка значимости.
- Push-rate-limit (нельзя слишком часто) — учесть в дизайне.
Эталонный ответ
Z-тест на CR в бронирование (15 мин) среди тёплой когорты + расчёт incremental revenue минус скидка. Неделя — мало; продлить до 2–4 нед, проверить отсутствие эффекта новизны и сегментные различия. Решение по ROI.