Всем привет! Меня зовут Вячеслав Назаров, я лид аналитики промо в СберМаркете. В этой статье я расскажу, как оценивать маркетинговые кампании, если провести A/B-тесты нельзя. Еще обсудим логику в Propensity Score Matching (PSM), и то, какую пользу инструмент может принести вашему бизнесу. А в конце статьи покажу, как достаточно просто можно развернуть такую штуку у себя.
Промо в Сбермаркете
Для нас существует линейная зависимость: чем больше промо — тем больше ответственность за привлечение новых клиентов и сохранение доверия уже выбравших нас. Поэтому нам крайне важно оценивать эффективность акций и коммуникаций.
Казалось бы — что сложного? Есть «золотой стандарт» индустрии аналитики — A/B-тестирование, бери его, да и применяй к своим данным. Но в какой-то момент мы уперлись в потолок: бизнес рос, а с ним команда и маркетинговые бюджеты. Маркетинговые механики становились всё сложнее, а бизнес стал взаимодействовать с пользователями сразу по нескольким направлениям. В общем, A/B-тестирования нам стало мало.
Почему нам не хватило A/B тестирования
Невероятно, но и такое бывает :) Было четыре основных причины:
Затратно с позиции ресурсов команды. При дизайне А/B тестов часто задействованы сразу несколько команд: разработчики, продакты, аналитики и др. Много ресурсов уходит на синхронизацию, обсуждение гипотез и выбор метрик.
Дорого с точки зрения недополученной прибыли. Каждое A/B тестирование нам необходимо определить контрольную группу, на которую мы потенциально не будем воздействовать. А значит, эти пользователи не будут задействованы в маркетинговых коммуникациях, и, конверсии для этой группы будут ниже.
Сложно разделить эффекты при параллельных акциях. У нас достаточно большой отдел маркетинга, а значит, и много разных кампаний, которые могут быть хитро переплетены между собой. Отделить оценку эффекта параллельных акций друг от друга — тоже достаточно нетривиальная задача для A/B тестирования.
Не получаем «дивиденды» с уже накопленного опыта. A/B тесты — это всегда как бы взгляд в будущее, а у нас есть большой пласт уже накопленных данных, которыми можно воспользоваться.
При этом хочу отметить важный нюанс — я не предлагаю отказаться от A/B тестирования, эта статья скорее про то, как расширить функционал проверки гипотез, а не о том, чтобы полностью заменить A/B тесты.
Propensity Score Matching
Начнём со сложного определения: Propensity Score Matching (PSM) — это статистический метод, который используют, чтобы уменьшить искажения в оценках причинного воздействия. Он позволяет сравнить группы на основе вероятности, что они будут подвергнуты определённому воздействию.
Теперь немного проще. Основная идея PSM: для пользователя, получившего тритмент (например, пуш с купоном на скидку), необходимо подобрать максимально похожего «пользователя-близнеца» на основе истории взаимодействия с нашим продуктом, то есть с похожей историей поведения у нас в сервисе. При этом «близнец» не должен быть подвергнут тритменту. После этого можно сравнить метрики между «близнецами», и оценить полученный от рассылки эффект.
Теперь подробнее:
Собираем матрицу признаков по нашим пользователям. Добавляем флаг принадлежности пользователя к тестовой или контрольной группе. Если пользователь получил взаимодействие (пуш) — он в тестовой группе. Из оставшихся пользователей будет сформирована потенциальная контрольная группа. Отдельно отмечу, что мы собираем матрицу признаков за продолжительный исторический период до даты тритмента, например, 100 дней до начала акции.
На втором этапе нам необходимо определить вероятность отношения пользователя к тестовой группе. Для этого необходимо использовать базовые алгоритмы машинного обучения. Можно использовать, как простые модели типа логистической регрессии, так и более сложные типа градиентного бустинга. После работы модели к матрице признаков добавляем полученное значение вероятностей.
Оставляем наиболее близких друг к другу по вероятности пользователей из тестовой и контрольной групп. Для решения этой задачи можно использовать «метод k ближайших соседей». По итогу на каждого пользователя из тестовой группы, которые получили пуш, останется один самый похожий на него пользователь из контрольной группы.
Итак, у нас получилось две группы, тестовая и контрольная, и далее мы сравниваем метрики между ними и оцениваем статистическую значимость изменения этих метрик.
Чтобы масштабировать PSM, можно внедрить инструменты для always-on оценки эффектов от запускаемых кампаний. Но их надо часто тестировать, чтобы убедиться, что вы получаете не ложноположительный результат.
В моем случае времени и ресурса на это не было, поэтому я создал self-service на базе jupyter notebook, где любой сотрудник может запустить код в работу с помощью простого набора виджетов. Этот сервис мы отдали коллегам в отдел маркетинга, они самостоятельно запускали его и получали оценки эффективности маркетинговых коммуникаций.
Плюсы self-сервиса
Благодаря self-сервису мы смогли кратно увеличить количество оцениваемых акций, быстро дорабатывать PSM, и повышать синхронизацию между командой аналитиков и отделом маркетинга.
И самый главный плюс — мы улучшили показатели data-driven'ности компании, потому что начали охватывать большой объем маркетинговых бюджетов, и точнее понимать, какие механики дают больший прирост GMV и увеличивают лояльность пользователей.
Теперь в цифрах:
4 основных отдела в маркетинге используют PSM регулярно;
70% запускаемых акций и механик имеют always-on оценку;
>2 млн юзеров нашли свои пары;
100+ сотрудников учитывают оценки PSM для планирования своих OKR.
Особенности, на которые мы обратили внимание при реализации PSM
Отбор фичей в модель — ответственный процесс. Чтобы оценить разные механики потребуется собирать, соответственно, разные признаки для обучения модели.
Чем больше данных об истории взаимодействия пользователя с вашим сервисом, тем лучше. Например, мы собираем историю за 100+ дней для каждой оцениваемой акции.
Первые действия пользователя могут быть импульсивными, и искажать статистику. Поэтому мы не используем PSM для новых пользователей.
Дисбаланс классов — не баг. Тестовая группа всегда сильно меньше всей базы, и получается, что на одного пользователя из тестовой группы приходится 10-15 человек из контрольной. Это дает возможность подбирать наиболее схожего «близнеца» для сравнения.
Важно следить, чтобы модель определения вероятности на первом этапе не подстроилась под один признак и не переобучилась.
Нужно удостовериться, что тестовая и контрольная группа получились похожими, для этого на пре-периоде оцениваем доверительные интервалы этих групп по основным метрикам.
Бонус: Pymatch
Если хочется попробовать PSM, можно перейти по ссылке в библиотеку Pymatch — пакетное решение на Python.
Буду рад ответить на вопросы в комментариях!
Product&data команда СберМаркета ведет соцсети с новостями и анонсами. Если хочешь узнать, что под капотом высоконагруженного e-commerce, следи за нами в Telegram и на YouTube. А также слушай подкаст «Для tech и этих» от наших it-менеджеров.