Как в Авито увеличивают эффективность рекламы за счёт предсказаний

Привет! Меня зовут Ирина Гутман, сейчас я исполняю обязанности тимлида в аналитике маркетинга Авито. Оцениваю и помогаю улучшать маркетинговые активности, которые привлекают пользователей на площадку, помогаю искать узкие места воронки. А ещё — менторю студентов нашей Академии Аналитиков.

Обычно аналитики исследуют, как работают рекламные каналы бизнеса. Но в этой статье я расскажу не об оценке эффективности, а о том, как увеличить эту эффективность с помощью предсказательной аналитики.

А что это такое?

Предиктивная или предсказательная аналитика — это прогнозирование поведения клиента. Например, она позволяет на основе разных данных и моделей их обработки предсказать, купит ли человек определённый товар.

Предисловие: как работает оптимизация рекламных кампаний и что такое целевое событие

Рекламные кампании строятся вокруг целевых событий — действий, которые мы хотим, чтобы пользователь совершил. Каждый раз, когда это событие происходит, мы передаём информацию об этом в рекламный кабинет. Система накапливает информацию и оптимизирует настройки, чтобы мы получали больше целевых действий.

Допустим, нам надо, чтобы человек зашёл на определённую страницу сайта — это и есть наше целевое событие. Люди видят рекламу, кто-то из них кликает на неё и доходит до нужной страницы. Информация об этом передаётся в кабинет и помогает оптимизировать кампанию, увеличив вероятность приведения целевого трафика. Если важно, чтобы люди совершали покупки, событие «зайти на определённую страницу» уже не подойдёт. Оно будет приводить нецелевой трафик — зевак, которые просто заходят на сайт. Поэтому в рекламный кабинет важно передать более сложные события — например, нажатие на кнопку «совершить оплату».

Как правило, подобные события передают на рекламные площадки трекеры, которые встроены на фронт сайта. Трекеры работают в онлайн-режиме и передают обезличенные данные о конверсиях в рекламный кабинет.

Мы решили сделать предиктивную модель для целевых событий, чтобы реклама была ещё точнее

Передача данных при помощи трекера позволяет передавать простые события: переход на сайт или в приложение, нажатие на кнопку. Минус такого подхода — это невозможность отправить более сложное событие. Например, с фронта с помощью трекера трудно передать событие «совершение покупки новым пользователем Авито», поскольку классификация «новые», «старые» или «реактивированные» — это аналитическая задача.

Но определение типа пользователя нетрудно реализовать в базе данных, что мы и сделали. Мы научились передавать события через server-to-server протокол — прямо из нашей базы данных в базу данных рекламной системы. Это позволило строить более сложные аналитические модели вокруг событий и отправлять результаты работы моделей в рекламный кабинет для оптимизации.

Со временем нам захотелось передавать ещё более сложные события. Например, «на страницу зашёл пользователь, который в будущем совершит много событий». И если заход на страницу — это простое и понятное событие, то совершение других действий в будущем — это уже предиктивная модель.

Если добавить предиктивную модель перед оптимизацией в рекламном кабинете, то выходит, что мы получаем два чёрных ящика. Первый — модель с нашим событием, а второй ящик — это рекламный кабинет, который приводит похожих пользователей. Это сложная схема, но мы в неё верили — решили, что так реклама станет ещё эффективнее.

Решили передавать в чёрный ящик не одно простое событие, а результат работы другого чёрного ящика — предиктивной модели. Мы верили, что это увеличит эффективность рекламных кампаний
Решили передавать в чёрный ящик не одно простое событие, а результат работы другого чёрного ящика — предиктивной модели. Мы верили, что это увеличит эффективность рекламных кампаний

Вот основная идея всей системы:

Предсказываем будущую ценность пользователя на основе его действий за первые несколько дней после перехода с рекламы. Наш горизонт предсказания — 90 дней.

Делим пользователей на «ценных» и «не очень ценных», после чего передаём для тех, кого считаем «ценными», искусственное событие для оптимизации. То есть к нам пришли пользователи → мы разделили их на «ценных» и «не очень» → для «ценных» передали событие в рекламный кабинет → завтра ожидаем, что кампания начнёт таких приводить → пришедших снова делим → повторяем процесс.

Со временем привлекаем всё более ценных пользователей, потому что модель постоянно продолжает обучаться.

Выбрали, что будем предсказывать

В нашей истории было важно научиться эффективнее привлекать на Авито покупателей. Поэтому в качестве целевой переменной мы взяли метрику LTV, но не на бесконечном отрезке времени, а на горизонте предсказания — 90 дней.

А что это такое?

LTV (Life Time Value) — это метрика, которая показывает долгосрочную прибыль от клиента, которую он предположительно принесёт бизнесу, пока будет оставаться клиентом.

Хитрость в том, что покупатели не платят Авито напрямую, а их LTV выражается в том, насколько активно они будут общаться с продавцами. У нас есть методология, благодаря которой мы понимаем, сколько потенциально денег может принести покупатель за определённый промежуток времени — даже если сейчас он денег не приносит. Назовём эту метрику «ценность контакта». Тогда LTV за 90 дней можно выразить вот так:

ΣLTV = {кол-во контактов с продавцом} × {ценность контакта} за 90 дней с момента перехода по рекламной кампании

Чтобы выделить «ценных» пользователей, мы выбрали порог LTV — определённую сумму в рублях. Признак ценности был бинарным — если человек принесёт за 90 дней сумму больше порога, модель должна считать его «ценным», если меньше — нет. О пороге я ещё раз чуть подробнее расскажу ниже, когда объясню, как мы исследовали данные.

Выбрали фичи, по которым будем предсказывать

Мы выбрали фичи, на основе которых модель должна предсказывать ценность пользователей. Мы будем отслеживать их первые несколько дней, а затем отдадим значения модели, которая классифицирует пользователей по LTV. Мы взяли три группы фичей:

Действия покупателя:

— сколько поисков он совершил,

— сколько товаров добавил в избранное,

— сколько контактов совершал с продавцами.

Действия продавца:

— сколько объявлений разместил,

— сколько платежей совершил,

— сколько раз редактировал существующие объявления.

Активность пользователя:

— сколько времени он был онлайн,

— в скольких категориях был активен.

Изначально фичей было больше, но мы заметили, что часть из них сильно коррелируют друг с другом. Чтобы не ухудшать качество модели, часть признаков мы исключили. Например, количество просмотров карточек товаров сильно связано с количеством поисков: чем больше человек ищет, тем больше товаров откроет. Так что в модели мы оставили только количество поисков.

Количество контактов с продавцом есть и в целевой метрике, и в фичах?

Да. Мы даже проверяли, нужны ли ещё какие-то метрики для предсказания LTV пользователя или достаточно знать только количество контактов с продавцами за первые несколько дней. Исследования показали, что дополнительные метрики точно нужны — если их добавить, точность модели значимо вырастет. Ниже расскажу о ещё нескольких результатах исследований.

Исследовали данные и уточнили вводные для модели, чтобы добиться высокой точности

Мы смотрели на меру качества модели — в нашем случае взяли метрику F-score. Она описывает, насколько точно и полно мы можем предсказать, к какому классу «ценности» принадлежит наш пользователь.

Мы использовали модернизированный F-score для определения лучших параметров модели, потому что посчитали, что для целей оптимизации точность (Precision) слегка важнее полноты (Recall):

Слева — обычный подсчёт, справа — наш: немножко «штрафуем» полноту, чтобы завысить значение точности
Слева — обычный подсчёт, справа — наш: немножко «штрафуем» полноту, чтобы завысить значение точности

Мы сравнили несколько типов моделей и выбрали CatBoost. При прочих равных у неё был самый высокий F-score, и тут никаких дилемм не было:

Также пробовали модель Logistic Regression и Random Forest
Также пробовали модель Logistic Regression и Random Forest

Но дальше начались вопросы посложнее:

Дилемма 1: Порог LTV. Эта метрика распределена так, что есть большое количество пользователей с LTV = 0 — это люди, которые ничего не делают на Авито. А ещё есть длинный хвост из тех, кто делает хотя бы что-то, и поэтому их LTV ≥ 0.

Если мы выберем порогом «0», то модель будет самого хорошего качества. Ведь так предсказывать легче: достаточно отделить людей, которые сделают хоть что-то от тех, кто не сделает ничего.

Но для целей рекламной оптимизации мы бы хотели всё же отделять «лучших» от «хороших», а не «хороших» от «никаких». И поскольку на самом деле мы стараемся максимизировать в данной задаче вовсе не F-score, а эффективность привлечения, то делаем ряд допущений. Эти допущения направлены на снижение F-score ради возможного увеличения эффективности в итоге работы обоих чёрных ящиков.

Порог LTV = 0 даёт высокий F-score, и чем порог выше LTV, тем хуже F-score при прочих равных
Порог LTV = 0 даёт высокий F-score, и чем порог выше LTV, тем хуже F-score при прочих равных

Дилемма 2: Количество дней, за которое мы отслеживаем фичи. Оно напрямую влияет на качество модели: чем дольше мы следим, тем больше данных у модели для обучения и тем выше F-score при прочих равных.

Результаты F-score за разное количество дней: чем дольше смотрим фичи, тем точнее предсказание
Результаты F-score за разное количество дней: чем дольше смотрим фичи, тем точнее предсказание

С другой стороны, чем быстрее мы передадим данные, тем лучше будет работать оптимизация кампаний. Мы не можем ждать слишком долго, иначе наш второй чёрный ящик — рекламный кабинет — будет дольше получать информацию, что может сказаться на его работе.

Решение: компромисс между целями оптимизации кампаний и качеством модели. Мы посмотрели, что получается, если сочетать разные параметры. Пытались искать баланс между хорошим качеством модели и её соответствием всем целям оптимизации. В итоге выбрали вариант, где жертвуем качеством, но в разумных пределах:

Число дней поменьше, чтобы быстрее передавать конверсию, а порог повыше, чтобы чётче выделять более «ценных»
Число дней поменьше, чтобы быстрее передавать конверсию, а порог повыше, чтобы чётче выделять более «ценных»

Почему мы выбрали именно эти значения? Чтобы выбрать порог LTV, мы нашли такую точку, где размен качества модели на величину порога был бы оптимальным. То есть если построить график зависимости нашего F-score от порога LTV, то на нём нужно найти точку оптимального размена.

С числом дней было проще. По опыту наших прошлых тестов на этой рекламной площадке мы знали, что для Авито 7 дней — слишком долгий срок для задержки в передаче данных в рекламный кабинет. Приемлемый срок — это 1–3 дня.

При этом мы понимали, что можем передавать данные не чаще одного раза в сутки — это временное техническое ограничение с нашей стороны. Значит, мы можем собрать данные за N дней и отправить их в рекламный кабинет только на N+1 день. И если нужно передать данные не позднее третьего дня, то на сбор данных остаётся только два дня.

Провели АБ-тестирование

Чтобы проверить влияние предиктивной модели на оптимизацию, мы провели АБ-тест:

Выключили основную кампанию в регионах, где проводили тест. Нельзя запускать дубль основной кампании в той же географии, потому что они будут конкурировать за одинаковую аудиторию. Также по нашему опыту уже обученная кампания может получать приоритет в рекламных кабинетах, из-за чего тестовая показывает меньшую эффективность не по вине настроек, а потому что была второй. Поэтому мы отключили основную кампанию в нескольких регионах и провели тест только там — этого хватило, чтобы набрать нужное количество наблюдений.

В тестовой группе регионов завели две кампании через инструмент АБ-тестирования. Разделили пользователей на тестовую и контрольную группы. Они были равными с точки зрения аудиторий, но не конкурировали за одних и тех же людей.

Держали одинаковые уровни расходов. Важно поставить кампаниям одинаковые бюджеты, иначе мы можем неверно интерпретировать результаты. Чем больше траты на кампанию, тем ниже её эффективность. Если сравнивать кампании с разными тратами, невозможно отделить эффект от разницы в тратах от эффекта от настроек кампании.

Дали время на обучение, а затем — для теста. По нашим наблюдениям некоторое время после запуска рекламная кампания должна обучиться: найти нужную аудиторию, выйти на заданный уровень трат и на плато по эффективности. Когда увидели, что кампания вышла на плато → засекли время, необходимое для сбора нужного числа наблюдений → сравнили результаты за это время и набрали нужное количество значений и подвели итоги.

Получили положительные результаты: вырастили ROI, снизили CAC, увеличили долю новых пользователей

Вот наши результаты АБ-тестов:

ROI: +22% — увеличили эффективность рекламы. Это крутой результат для компании уровня Авито.

CAC: −12% — снизили стоимость привлечения.

Доля новых пользователей среди привлечённых тестовыми кампаниями: +60%

Почему одна из наших целей — научиться приводить новых пользователей

У Авито огромная аудитория, поэтому любая рекламная кампания привлекает и уже существующих пользователей, увеличивая их вовлечённость, и новых. Активного пользователя привлечь проще, но и ценность его дополнительного действия ниже. А вот ценность нового пользователя, который совершит впоследствии множество действий, выше, хотя привлечь его сложнее.

Вместо выводов: в каком бизнесе применять предиктивную аналитику для оптимизации рекламы

На мой взгляд, предсказательные модели наиболее полезны бизнесу, который соответствует хотя бы одному из трёх признаков:

Есть долгие циклы продаж. Тогда модель поможет вам предсказать на простых событиях, которые происходят сейчас, что в будущем совершится то-то важное.

В продукте присутствуют товары с циклом продажи разной длины. У Авито есть несколько категорий товаров с разной ценностью покупателя. Например, с точки зрения продуктовых метрик покупатель квартиры будет считаться более «ценным», чем покупатель потребительского товара. При этом время до совершения покупки товара ниже, чем квартиры.

По нашему опыту, если в рекламные системы данных передавать события и не присваивать им разную ценность в зависимости от категорий, то с большим весом система учтёт событие, которое пришло раньше. Тогда на выходе мы будем привлекать больше покупателей потребительских товаров и меньше покупателей квартир.

Предиктивная классификация учитывает будущие действия. То есть она одновременно передаёт и больше данных по «ценным» покупателям квартир и данные по покупателям потребительских товаров. Благодаря этому мы привлекаем более ценных для нас пользователей в большем объёме.

Продукт предназначен для длительного использования, а не разовой покупки. Рекламная кампания не различит двух пользователей, которые только сегодня что-то купили. Но если вы знаете про одного из пользователей, что в будущем он совершит ещё много важных действий, то рекламная кампания сможет выделить его и в будущем привлекать больше таких.

Мы ищем в команду классных синьор аналитиков

У нас в Авито ещё много крутых и интересных задач! Если вам интересно заниматься предсказаниями (и вы не гадалка), вы готовы напрямую влиять на бизнес и вести целый стрим аналитики перфоманс-маркетинга — тогда вам определённо к нам.

👉 Подробнее о вакансии, команде и задачах

1010