Фрея · риск-менеджер необанка «Монетка»
Данные чистые, это я поняла. Теперь главное: кешбэк вообще что-то изменил? И сколько он нам стоил?
В разведке мы выбрали главную метрику, почистили группы и убрали фрод. Сегодня фаза 2, бой: что кешбэк сделал с тратами в кафе, не случайность ли это, и что получилось с деньгами банка. Везде те же правила: 976 клиентов теста и 994 контроля, только approved, без ONLINE STORE 7781, период с 1 апреля 2026, клиент без операций остаётся в знаменателе с нулём.
Фаза 2. Бой
Что изменилось в кафе
Кешбэк давали за кафе и рестораны (MCC 5812 и 5814). Значит, первым делом смотрим туда: траты на клиента и число оплат на клиента.
test_group | clients | cafe_per_client | visits_per_client
------------+---------+-----------------+-------------------
test | 976 | 4443.66 | 4.064
control | 994 | 3746.08 | 3.435
Тест тратит в кафе на 18,6% больше и ходит туда чаще: 4,1 оплаты на клиента за квартал против 3,4. В уроке 54 доля клиентов, сходивших в кафе, почти не сдвинулась: туда и так ходят 9 из 10. Кешбэк не привёл новых людей, он заставил тех же ходить чаще. Поэтому теперь сравниваем средние, а не доли.
Тест для средних
Вопрос тот же, что для долей: не случайна ли разница? Если эффекта нет, средние двух случайных групп всё равно чуть разойдутся. Насколько, говорит стандартная ошибка разницы средних:
SE = sqrt(s_t² / n_t + s_c² / n_c)
z = (mean_t − mean_c) / SE
Здесь s это выборочное стандартное отклонение трат клиента в группе (stddev_samp, его квадрат var_samp; разброс мы впервые меряли в уроке про описательную статистику), n размер группы. Разброс отдельного клиента огромный: один ест в ресторанах каждую неделю, другой ни разу. Но средняя по тысяче клиентов колеблется гораздо меньше, поэтому дисперсия делится на n. Весь тест это один запрос по таблице «клиент, группа, траты в кафе»; его ты соберёшь в квесте ★★. Результат:
mean_test | mean_control | diff | se | z
-----------+--------------+--------+--------+-------
4443.66 | 3746.08 | 697.59 | 197.60 | 3.530
z = 3,53, далеко за порогом 1,96. Интервал «разница ± 1,96 × SE» (его называют 95-процентным доверительным) идёт от 310 до 1085 ₽ на клиента за квартал: даже нижняя граница заметно выше нуля. Кешбэк увеличил траты в кафе. Точный p-value и проверку бутстрэпом без допущения о нормальности мы сделаем в Python-блоке.
Помнишь, что до теста группа test тратила в кафе на 216 ₽ меньше? Если вычесть это стартовое отставание, эффект ещё больше: (4443,66 − 3435,56) − (3746,08 − 3651,12) = 913 ₽. Такой приём называют разностью разностей. Нам он подтверждает: эффект в кафе не артефакт неравных групп.
А общий оборот?
Тот же тест для всех трат на клиента: 27 148,49 против 27 339,82 ₽, разница −191 ₽, SE = 1116, z = −0,17. Никакого роста. Клиенты теста стали больше тратить в кафе, но меньше в других местах: кешбэк переложил покупки, а не добавил новые. Для банка это важно: комиссия идёт со всего оборота.
Деньги банка
Теперь главная метрика. Комиссия 1,5% с одобренных покупок по карте (без снятий наличных), минус весь выплаченный кешбэк за апрель-июнь. Ловушка в подсчёте: если соединить операции и выплаты в одном запросе, каждая операция клиента встретит каждую его выплату, и суммы размножатся, как в уроке 26. Поэтому покупки и выплаты агрегируем по клиенту отдельно и соединяем готовые итоги:
test_group | clients | interchange_per_client | payout_per_client | net_per_client
------------+---------+------------------------+-------------------+----------------
test | 976 | 359.38 | 464.95 | -105.57
control | 994 | 360.39 | 240.26 | 120.13
Комиссия у групп одинаковая, ведь оборот не вырос. А кешбэк у теста почти вдвое больше: 222 ₽ на клиента сверху за кафе. Контроль приносит банку 120 ₽ на клиента за квартал, тест теряет 106 ₽. Разница −225,70 ₽, SE = 7,23, z = −31: это не шум.
Сколько должен был вырасти оборот, чтобы кешбэк окупился? 222,18 ₽ кешбэка за кафе на клиента делим на 1,5% комиссии: нужно +14 812 ₽ покупок на клиента за квартал, то есть больше половины всех трат. А дополнительные 698 ₽ в кафе приносят банку 10,46 ₽ комиссии. Квартал теста стоил банку около 220 тысяч ₽ на 976 клиентах; на всех 1970 клиентах это было бы около 445 тысяч ₽ за квартал.
урок из курса
Урок из курса «Аналитика данных с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.