Персонализация для бедных или как с помощью Firebase увеличить рекламный доход на 8%

Рассказ пойдет про бесплатный и крутой инструмент для персонализации Firebase Remote Config Personalization, который обделен вниманием, а зря!

Морфеус намекает, что игнорировать персонализацию в продукте становится все сложнее.
Морфеус намекает, что игнорировать персонализацию в продукте становится все сложнее.

В прошлом году у Firebase Remote Config появилось расширение – Personalization, как можно догадаться из названия, решение служит для того чтобы помочь в задачах персонализации пользовательского опыта.

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

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

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

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

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

Как же выполнить такой сложный анализ анализ в приложении? Конечно же с помощью машинного обучения.

Нужно отметить, что Персонализация, это всего лишь один из модулей Remote Config (RC). Сам RC представляет собой хранилище значений с мощными условиями для создания нужного пользовательского опыта. Значения могут определяться на основании языка, страны, аудитории или других атрибутов, а с 2021 года добавилась еще и персонализация!

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

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

Круто, не правда ли?

Переходим к настройке персонализации в Remote Config

Наше приложение содержит баннер, который отображается в верхней части экрана. Сейчас это положение баннера установлено значением по умолчанию в параметрах RC.

Используем четыре альтернативных варианта расположения баннера. Настроим персонализацию их расположения для каждого пользователя, чтобы максимизировать таргет.

Дефолтное и альтернативные варианты расположения баннера.
Дефолтное и альтернативные варианты расположения баннера.

В панели Firebase RC создадим и настроим конфигурацию для размещения нашего баннера. Как видно, сейчас параметр ad_placement контролирует размещение баннера и установлен на значении top по умолчанию для всех пользователей.

Значение параметра по-умолчанию в настройках RC
Значение параметра по-умолчанию в настройках RC

Гипотеза заключается в том, что пользователи по-разному взаимодействуют с рекламой, отсюда идея – персонализировать размещение баннера, при том, что я не знаю где лучшее место для него.

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

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

Подключаем персонализацию
Подключаем персонализацию

Дальше определим несколько альтернативных значений, которые будут доступны вашим пользователям, добавим четыре варианта: top, bottom, inline, bottom-fixed.

Добавляем альтернативные варианты для персонализации
Добавляем альтернативные варианты для персонализации

Выбираем таргет

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

Предварительно было настроено пользовательское событие ad_revenue – рекламный доход. Вместе с событием передаем параметр value – доход с рекламного показа из Admob.

Структура события ad_revenue.
Структура события ad_revenue.

Для таргета выбираем событие ad_revenue. Будем оптимизировать сумму, а в качестве параметра выберем значение value.

Выбор таргета.
Выбор таргета.

Также полезно понимать влияние персонализации на вовлечение пользователей. При том, что я не хочу, чтобы это управляло алгоритмом оптимизации. Итак, давайте выберем User Engagement Time в качестве дополнительной метрики.

Выбираем целевой сегмент

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

Создание и выбор таргетинга
Создание и выбор таргетинга

Дадим название нашей персонализации и сохраним её.

Сохраняем новую персонализацию.
Сохраняем новую персонализацию.

Нажимаем “опубликовать”, чтобы стартовать эту персонализацию.

Публикация изменений и запуск персонализации.
Публикация изменений и запуск персонализации.

Теперь персонализация включена, ждём магию – пс, это может занять некоторое время ;)

Каким бы волшебным ни было машинное обучение, не ждите результат сразу. Требуется время, чтобы модель построилась и обучилась.

Tips and tricks для настройки персонализации

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

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

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

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

Оптимальный таргет. Модели машинного обучения процветают на множестве данных. Поэтому при выборе объекта оптимизации отдавайте приоритет более частотному событию.

Советы по отладке

Синхронизируйтесь с отчетам по событиям в Google Analytics. Убедитесь, что нужные события отправляются, в том числе с корректными параметрами. Также проверьте, что названия событий и их параметров такие же как и в настройках персонализации. Если вы запустили персонализацию и не получаете никаких данных, то, скорее всего есть проблема.

Если вы используете максимизацию значений параметров, убедитесь, что параметры имеют численный тип: int, float или double.

Personalization_assignment events. Cобытия, которые автоматически отправляются всякий раз, когда девайс пользователя получает персонализацию.

События персонализации, отправляемые Firebase по умолчанию.
События персонализации, отправляемые Firebase по умолчанию.

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

К результатам персонализации.

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

Дашборд Remote Config
Дашборд Remote Config

Персонализация показала лифт в 8% по сравнению с контролем – круто, не правда ли?

Сводный отчет по персонализации.
Сводный отчет по персонализации.

На графике группа контроля (серый столбик) – это случайные пользователи, которые получат дефолтное значение без персонализации.

Размер контрольной группы масштабируется автоматически, чтобы быть сопоставимым с группой эксперимента.

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

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

Оценим влияние на вторичную метрику. Кривые практически полностью совпадают – размещение рекламы незначительно влияет на время взаимодействия пользователя с приложением.

Это хороший результат, можно оставлять!

Время вовлечения пользователей.
Время вовлечения пользователей.

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

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

Заключение

Модуль Персонализация выглядит логичным дополнением инструмента Remote Config.

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

Прикрепляю ссылку на официальную документацию Firebase.

Надеюсь это короткий кейс окажется полезен вам.

Буду рад, если поделитесь вашим опытом использования персонализации.

22
Начать дискуссию