Таргетинг по установленным приложениям: как работает и зачем
Список приложений, установленных на телефоне, часто приходит прямо в рекламном запросе (поле iApp), и по нему можно отбирать показы: «показывать тем, у кого есть хотя бы одно из приложений X, Y, Z» или «не показывать тем, у кого уже стоит наше». Это один из самых сильных сигналов интереса в мобильной рекламе, и он доступен без cookie и внешних данных.
Почему установленные приложения — сильный сигнал
Установка требует усилия: человек нашел приложение, скачал его и не удалил. Поэтому набор приложений на телефоне честнее описывает интересы, чем один просмотр страницы.
| Что установлено | Что это говорит | Как используют |
|---|---|---|
| Два-три приложения микрозаймов | Активный поиск кредита | Финансовые предложения, сравнение условий |
| Несколько хардкорных стратегий | Платящий игрок жанра | Продвижение похожей игры |
| Приложения маркетплейсов | Привычка покупать онлайн | E-commerce, кэшбэк-сервисы |
| Продвигаемое приложение уже есть | Пользователь уже клиент | Исключить из кампании на установку или вести на повторное вовлечение |
Последняя строка дает экономию сразу: кампания на установку, показанная тому, у кого приложение уже стоит, тратит деньги впустую. Это частный случай ретаргетинга наоборот.
Где список лежит в запросе
Ни в OpenRTB 2.5, ни в 2.6 стандартного поля для установленных приложений нет, поэтому SSP передают список по-разному:
| Форма | Пример |
|---|---|
| Расширение устройства | device.ext.iapp: ["ru.app.one", "com.game.two"] |
| Корневое расширение запроса | ext.iapp: [...] |
| Массив объектов | ext.iapp: [{"bundle": "ru.app.one"}] |
| Сегмент данных пользователя | user.data[].segment[] с id: "installed_app" и bundle в value |
{
"app": { "bundle": "ru.example.news" },
"device": {
"os": "android",
"ext": { "iapp": ["ru.bank.mobile", "com.game.puzzle", "ru.market.app"] }
}
}
Элементы списка — bundle ID приложений, такие же, как в app.bundle площадки. Все четыре формы — договоренности конкретных SSP: объекты ext и user.data в спецификации есть, а их наполнение для установленных приложений не стандартизовано. Поэтому формат стоит уточнять при подключении каждого источника.
Важно. Поле
bapp(blocked apps) в OpenRTB означает приложения, рекламу которых нельзя показывать на площадке. Это не установленные приложения. Некоторые SSP исторически клали вbappустановленные приложения, и если принять одно за другое, таргетинг отберет не тех людей.
Как устроены правила таргетинга
Правило — это множество bundle ID и оператор сравнения со списком из запроса:
| Оператор | Смысл | Пример задачи |
|---|---|---|
| include_or | Установлено хотя бы одно из списка | Показ любителям конкурирующих игр |
| include_and | Установлены все из списка | Узкая аудитория: банк и брокер одновременно |
| exclude_or | Не установлено ни одно из списка | Не показывать текущим клиентам |
| exclude_and | Не показывать, если установлены все из списка одновременно | Редкий случай, исключение пересечения |
Правила применимы только к in-app трафику. На web-запросах списка нет, и правило там не должно отсекать показ. Иначе include-правило молча обнулит весь web.
Отсутствие списка — не «пустой телефон»
Большинство запросов списка не несут: SSP его не передает, или пользователь ограничил трекинг. Включающее правило (include) такие запросы отсечет — и это правильно, ведь подтвердить интерес нечем. Исключающее правило (exclude) их пропустит: доказать, что приложение уже стоит, тоже нечем. Отсюда следствие для медиапланирования. Кампания с include-правилом по iApp физически не может закупать трафик источников без iApp, и ее охват ограничен долей таких запросов.
Как прикинуть охват заранее
Охват include-правила — произведение трех долей: запросов со списком, запросов из нужного гео и с нужной ОС, устройств, где есть хотя бы одно приложение из списка.
Пример (иллюстративный). Источник присылает 10 млн запросов в сутки. Список iApp есть в 40% из них — 4 млн. После гео и ОС остается 1,5 млн. Хотя бы одно из 12 приложений конкурентов установлено на 6% этих устройств — 90 тысяч запросов в сутки. При win rate 20% это около 18 тысяч показов, и именно столько кампания может купить, сколько бы ни стоил бюджет.
Если охвата не хватает, расширяют список приложений или переходят к сегменту с более мягкими временными условиями, а не поднимают ставку: ставка не создаст запросов, которых нет.
Шум: приложения, которые «установлены у всех»
Список формирует SDK или площадка, и иногда в нем оказываются приложения, которые на самом деле не установлены: системные, предустановленные производителем или вставленные самой площадкой. Признак шума — неправдоподобная концентрация. Реальное приложение не стоит почти на каждом устройстве сети, а «шаблонное» — стоит.
Пример (иллюстративный). В сети 100 000 устройств. Bundle
com.vendor.storeвстречается в списке у 97 000, а самое популярное из реальных приложений — у 31 000. Первое — шаблон источника, а не интерес, и для таргетинга его нужно убрать.
Чистить шум лучше по каждой сети отдельно: у разных SSP разные шаблоны. Для расчета частот при этом нужен сырой, неочищенный поток наблюдений, иначе детектор шума перестанет видеть собственный вход.
Аффинити и CTR по приложениям
Кроме прямого таргетинга, список полезен как аналитика: какие установленные приложения отличают тех, кто кликает и конвертирует.
Аффинити (lift) приложения A для кампании:
lift(A) = CTR среди показов, где A установлено / CTR кампании в целом
Пример (иллюстративный). Кампания: 2 000 000 показов, 10 000 кликов, CTR 0,50%. Среди показов, где установлено приложение A, — 40 000 показов и 400 кликов, CTR 1,00%. Lift = 2,0: у владельцев A кликабельность вдвое выше. Если у приложения B 600 показов и 6 кликов (тоже 1,00%), выводов делать нельзя: при таком объеме разница укладывается в случайность.
Малые выборки — главная ловушка. Корректный прием — сглаживание к среднему (эмпирический Байес): CTR приложения с малым числом показов «подтягивается» к CTR кампании тем сильнее, чем меньше данных:
CTR_сглаж = (клики + p0 · k) / (показы + k)
Здесь p0 — общий CTR кампании, k — сила априорного знания, выраженная в показах. Для приложения B при k = 1000 получаем (6 + 5) / (600 + 1000) ≈ 0,69% — вместо громких 1,00%.
Из аналитики получается практический цикл: найти приложения с устойчиво высоким lift, собрать из них include-правило или поведенческий сегмент, затем проверить эффект A/B-тестом, а не сравнением «до и после».
Типовые правила для разных задач
| Задача | Правило | Комментарий |
|---|---|---|
| Установки нового приложения | exclude_or: наше приложение | Не тратить бюджет на тех, у кого оно уже есть |
| Переманивание у конкурентов | include_or: 5–20 приложений конкурентов | Широкий список — шире охват, узкий — выше релевантность |
| Повторное вовлечение | include_or: наше приложение | Показ только текущим пользователям, с диплинком внутрь |
| Кросс-продажа | include_or: приложение A, exclude_or: приложение B | «Есть банк, нет брокера» |
| Отсечение нецелевых | exclude_or: детские или игровые приложения | Для финансовых и взрослых офферов |
Частые ошибки
- Список из одного-двух приложений. Охват падает до доли устройств с этими приложениями среди запросов, где список вообще есть, а это может быть совсем немного.
- Таргетинг по
bappвместо iApp. Отбирает площадки по их запретам, а не людей по интересам. - Забытое исключение собственного приложения в кампании на установку.
- Выводы по lift на сотнях показов. Без сглаживания самые «аффинные» приложения почти всегда оказываются самыми редкими.
Список приложений как признак ML-модели
Для модели кликабельности список превращается в вектор «интересов устройства», который сопоставляется с рекламируемым приложением. Отдельно полезен бинарный признак «продвигаемое приложение уже установлено». Как такой мультизначный признак кодируют, разобрано в статье о том, как машинное обучение предсказывает CTR.
Приватность: что учитывать
Набор приложений может раскрывать чувствительные сведения: финансовое положение, здоровье, знакомства. Разумные правила:
- Уважать ограничения трекинга. При LMT, DNT, COPPA или отсутствии согласия по GDPR идентификаторы из запроса удаляются. Список тогда нельзя привязать к человеку и накапливать в профиле.
- Хранить наблюдения, а не сырые запросы. Для сегментов достаточно пар «профиль — приложение» с датами первого и последнего наблюдения.
- Ограничивать срок хранения и доступ к выгрузкам списков устройств.
- Не строить таргетинги на чувствительных категориях, даже если технически это возможно.
Важно. Требования к обработке таких данных зависят от юрисдикции и договора с поставщиком трафика. Это не юридическая консультация.
Таргетинг по приложениям в Ibiza
DSP Ibiza считает установленными только списки iApp; поле bapp используется в стандартном смысле OpenRTB. Список ищется в device.ext.iapp/iapps, затем в вариантах написания и форматах в device.ext, корневом ext и app.ext (строки или объекты с полем bundle), затем в user.data с сегментом installed_app. Отдельный ежесуточный процесс по каждой сети находит «шаблонные» bundle, которые встречаются на неправдоподобно большой доле устройств, и они не участвуют в таргетинге.
Правило по установленным приложениям задается в настройках таргетинга операторами include/exclude и наследуется по цепочке рекламодатель → кампания → группа → объявление. На web-запросах правило пропускается. В конструкторе отчетов есть измерение «установленное приложение»: CTR и другие метрики можно разложить по iApp и ограничить приложениями, на которые кампания таргетируется. Наблюдения «профиль — приложение» пишутся только для запросов с устойчивым профилем и дальше питают поведенческие сегменты. CTR-модель Ibiza видит первые 20 приложений списка и признак «продвигаемое приложение уже установлено».
Частые вопросы
Чем iApp отличается от bapp в OpenRTB?
bapp — стандартное поле OpenRTB со списком приложений, рекламу которых площадка запрещает показывать (blocked apps). iApp — нестандартное расширение со списком приложений, установленных на устройстве. Путать их нельзя: таргетинг по bapp как по «установленным» отбирает совсем не тех людей.
Откуда SSP знает, какие приложения установлены у пользователя?
Список собирает SDK на устройстве или сам магазин приложений и передает его в запросе. Какие SSP его передают и в каком поле, зависит от конкретной интеграции. У многих источников этого поля нет вовсе.
Можно ли таргетироваться на тех, у кого мое приложение еще не установлено?
Да, это исключающее правило: кампания на установку не показывается тем, у кого продвигаемое приложение уже есть. Так бюджет не тратится на текущих пользователей.