Оптимизация ставок в RTB: от ценности показа до bid shading
Стоимость закупки в RTB снижают несколько алгоритмов, и каждый отвечает на свой вопрос. ML-модели (pCTR и pCVR) оценивают, сколько стоит показ для рекламодателя. Ставка выводится из этой ценности с коэффициентом и ограничениями. Автобид удерживает нужную долю выигрышей, а bid shading в аукционе первой цены срезает переплату сверх уровня конкурентов. Защита бюджета отсекает накрутку, чтобы модели не учились на ней.
Карта алгоритмов: кто за что отвечает
Удобно разделить оптимизацию на четыре слоя. Они решают разные задачи и ошибаются по-разному.
| Слой | Вопрос | Входные данные | Что меняет |
|---|---|---|---|
| Ценность показа | Сколько этот показ стоит для рекламодателя? | pCTR, pCVR, ценность действия | Верхнюю границу ставки, выбор креатива |
| Автобид | Сколько поставить, чтобы выигрывать нужную долю аукционов? | Фактический win rate, минимальная выигрышная цена | Ставку в пределах потолка |
| Ценообразование | Сколько заплатить, чтобы все равно выиграть? | Распределение минимальной выигрышной цены, флор | Итоговую цену, только вниз |
| Защита бюджета | На каких показах и кликах нельзя учиться и тратить? | Валидность кликов, частота, качество площадок | Отбор трафика и обучающих данных |
Ниже — каждый слой по отдельности, затем порядок, в котором они собираются в одну ставку.
Ценообразование: bid shading и флоры
В аукционе первой цены победитель платит свою ставку. Если вы готовы отдать 100 ₽ за тысячу показов, а ближайший конкурент поставил 70 ₽, разница в 30 ₽ — чистая переплата. Bid shading оценивает по истории, сколько обычно хватает для выигрыша на этом месте размещения, и ставит чуть выше этого уровня. Сигнал — минимальная выигрышная цена из уведомлений биржи (макрос ${AUCTION_MIN_TO_WIN} в OpenRTB 2.6); снизу ставку держит бидфлор, ниже которого аукцион проигран заранее. Выбор квантиля, маржи и минимальной выборки разобран в статье «Bid shading на практике».
В аукционе второй цены shading не нужен: цену и так задает конкурент, а заниженная ставка только чаще проигрывает.
Автобид: целевой win rate и потолок цены
Фиксированная ставка почти всегда промахивается: на одних слотах она избыточна, на других не проходит. Автобид работает как регулятор. Раз в период он сравнивает фактическую долю выигрышей с целевой и сдвигает ставку: ниже цели — вверх, выше цели — вниз. Учитываются только проигрыши по цене, потому что отказ по формату или таймауту ничего не говорит о ставке.
Регулятору нужен жесткий потолок. Обычно это максимальная цена, которую задал рекламодатель, с поправкой на расписание по часам. Без потолка цель «выигрывать 90%» на конкурентном слоте превращается в неограниченный рост цены. Автобид отвечает на вопрос «сколько трафика», но не на вопрос «сколько этот трафик стоит».
Ценность показа: pCTR, pCVR и ставка от ценности
Чтобы платить за показы по-разному, DSP нужно оценить каждый из них. Для этого служат две модели.
- pCTR — вероятность клика по показу. Учится на истории показов с меткой «был валидный клик». Признаки, архитектуры и калибровка описаны в статье про предсказание CTR.
- pCVR — вероятность целевого действия (установки, регистрации, покупки) при условии, что клик был. Метка приходит из постбэка трекера, который связал действие с кликом. Сам показатель разобран в статье про CVR.
Ожидаемая ценность показа складывается из трех множителей:
ценность показа = pCTR × pCVR × ценность целевого действия
ставка CPM = clamp( ценность показа × 1000 × k, нижняя граница, потолок )
Здесь k — коэффициент, который оставляет запас под маржу и неточность модели, а clamp не дает ставке выйти за пределы. Ограничение сверху защищает от выброса прогноза: одна завышенная оценка не должна купить показ по любой цене. Ограничение снизу не дает модели «выключить» трафик, на котором у нее мало данных.
Пример (иллюстративный). Установка стоит для рекламодателя 300 ₽. Для показа модель дает pCTR 1% и pCVR 4%. Ценность показа: 0,01 × 0,04 × 300 = 0,12 ₽, то есть 120 ₽ за тысячу. С коэффициентом 0,8 ставка — 96 ₽ CPM. Для соседнего показа pCTR 0,3% и та же pCVR дают 0,036 ₽, или 36 ₽ CPM до коэффициента: такой показ стоит покупать намного дешевле.
Этот подход называют value-based bidding: ставка следует за ожидаемой ценностью, а не за средней ценой по кампании. По той же логике работают стратегии вроде целевой рентабельности в Google Ads: система прогнозирует вероятность и ценность конверсии для каждого аукциона и поднимает ставку там, где она выше.
Пока модели нет полного доверия, вместо прямой формулы применяют мягкий вариант — множитель к ставке кампании в узком коридоре, а тот же прогноз используют для выбора креатива. Оба приема и их риски описаны в статье про предсказание CTR; для этой статьи важно одно: множитель меняет ставку до проверки флора и до shading, а не после них.
Защита бюджета: валидные клики, частота, площадки
Любая модель, оптимизирующая клики, найдет самый дешевый источник кликов. Часто это боты, случайные нажатия и площадки, которые накручивают переходы. Поэтому в защиту бюджета входят три вещи.
- Метка — валидный клик. Клики без показа, слишком быстрые, по устаревшей ссылке не считаются положительным примером. Критерии разобраны в статье про валидные клики.
- Частотные ограничения. Десятый показ одному человеку редко стоит столько же, сколько первый. Частотный лимит режет хвост дорогих повторов.
- Клики с фродовых площадок — не положительный пример. Если площадка накручивает переходы, ее клики не должны учить модель. Иначе модель выучит, что эта площадка «кликабельная», и начнет за нее переплачивать.
Порядок шагов в одном биде
Внутри одного ответа на запрос шаги идут в определенной последовательности. Упрощенно она выглядит так:
- Отбор. Таргетинг, лимиты, частота и фильтры качества оставляют список допустимых объявлений.
- Потолок. Максимальная цена объявления с коэффициентом расписания на текущий час.
- Автобид. Ставка под целевой win rate, но не выше потолка.
- Ценность. ML-коэффициент или ставка от ценности показа в пределах коридора. Если коэффициент умножает и ставку, и потолок, слабый показ честно уходит ниже флора, а сильный может стоить дороже обычной цены — в пределах коридора.
- Проверка флора. Ставка ниже бидфлора не отправляется.
- Bid shading. Только для первой цены и только вниз: до квантиля минимальной выигрышной цены с запасом, но не ниже флора.
Порядок важен по двум причинам. Первая: shading — инструмент цены, а не ценности. Он знает, сколько хватает для выигрыша, но не знает, нужен ли этот показ. Если сначала снизить цену, а потом умножить ее на коэффициент модели, коэффициент 1,4× поднимет уже «ужатую» ставку выше уровня рынка, и экономия исчезнет. Вторая: shading не должен влиять на выбор объявления. Если сильнее сжатое объявление получает меньший вес в ротации, кампании с хорошей экономией начинают крутиться реже. Поэтому выбор опирается на ставку до shading, а сниженная цена используется только как цена для биржи.
Пример (иллюстративный, продолжение). Ставка от ценности — 96 ₽ CPM, флор — 50 ₽. По истории слота квантиль минимальной выигрышной цены — 70 ₽, запас 5%: 70 × 1,05 = 73,5 ₽. В аукционе уходит 73,5 ₽, экономия против 96 ₽ — 22,5 ₽ на тысячу показов, около 23%. Если бы квантиль оказался 110 ₽, shading ничего бы не менял: он не поднимает ставку выше оценки ценности.
Как измерить эффект
Сравнение «до и после» включения алгоритма почти ничего не доказывает: за это время меняются сезон, конкуренты и креативы. Нужен эксперимент с контрольной группой, которая в тот же период торгуется по-старому.
- Делить по пользователю. Ставка и выбор креатива влияют на то, что человек видит дальше, поэтому деление по запросу смешивает эффекты групп.
- Смотреть на цель, а не на промежуточную метрику. Для оптимизации по ценности главный вопрос: снизилась ли стоимость целевого действия (CPA) при сопоставимом объеме. Рост CTR при том же CPA — не победа.
- Ждать нужную выборку. Конверсии редки, и для заметного сдвига CVR нужно гораздо больше трафика, чем для CTR.
Методика — деление по хешу, проверка долей групп, always-valid p — описана в статье «A/B-тесты в рекламе».
Типичные ошибки оптимизации ставок
Оптимизация по CTR без проверки качества клика
Модель, обученная на всех кликах, быстро находит площадки с накруткой: там CTR высокий, а установок нет. Рост CTR в отчете при этом выглядит как успех. Учите на валидных кликах и проверяйте результат по конверсиям, а не по кликам.
Слишком короткое окно атрибуции
Конверсия приходит с задержкой: установка — через минуты или часы, покупка — через дни. Если учить pCVR на свежих кликах, многие будущие конверсии попадут в выборку как «не было конверсии», и модель систематически занизит CVR. Эту проблему задержанной обратной связи разбирал О. Шапель (Criteo) в работе 2014 года: он моделировал время до конверсии отдельно от ее вероятности. Простое практическое правило — не брать в обучение клики моложе окна атрибуции или учитывать задержку явно.
Утечка обучающих данных
Признак, который становится известен только после показа (например, число событий за день, куда вошел и сам этот показ), делает модель блестящей в отчете и бесполезной в бою. Сюда же относится случайное разбиение на обучение и тест: в обучение попадают показы «из будущего». Делите данные по времени, а признаки для обучения и для ставки считайте одним и тем же кодом.
Мало конверсий: холодный старт
При CTR 1% и CVR 3% на миллион показов приходится около 300 конверсий, и после деления по площадкам у большинства из них не будет ни одной. Модель по разреженным данным выдает шум. Помогают три приема:
- иерархическое сглаживание — оценка площадки подтягивается к среднему по кампании, а та к общему среднему, пока собственных данных мало;
- промежуточное событие — регистрация или первое открытие вместо покупки, пока покупок мало;
- обучение на всех показах — pCVR учат только на кликах, а применяют ко всем показам; модели вроде ESMM (Alibaba, 2018) снимают это смещение, обучая CTR и CTR × CVR совместно.
Какие алгоритмы оптимизации работают в Ibiza
В Ibiza работают bid shading и автобид. Shading применяется только в кампаниях с аукционом первой цены, только снижает ставку и не опускает ее ниже флора площадки. Настройки — в документации «Bid shading в кампании». Автобид (Авто-CPM) ведет ставку пары «объявление — слот» к целевой доле выигрышей, а «Цена» объявления с коэффициентом расписания служит ему потолком; подробнее — в документации автобида. Выбор объявления опирается на ставку до shading, как описано выше.
ML-модель вероятности клика обучается на валидных кликах: клик на месте размещения, признанном мусорным, положительным примером не считается, а места без достаточной статистики качества кликов в обучение не берутся. Ставка по pCTR и выбор креатива по pCTR работают в тестовых группах A/B-экспериментов. Коэффициент к ставке ограничен коридором, по умолчанию от 0,5× до 1,5×. Вне экспериментов модель работает в теневом режиме и на закупку не влияет. Конверсии приходят постбэками из MMP-трекеров и видны в отчетах (CVR, CPA) и в отчете эксперимента по каждой группе, поэтому эффект ML-стратегий проверяется по стоимости действия, а не только по CTR. Оптимизация по конверсиям — модель pCVR на постбэках — подключается по запросу через менеджера: для нее нужен устойчивый поток постбэков по кампании. Что включить под свою задачу, описано в документации «Оптимизация закупки в Ibiza».
Частые вопросы
Чем pCTR отличается от pCVR?
pCTR — прогноз вероятности клика по показу. pCVR — прогноз вероятности целевого действия при условии, что клик уже был. Их произведение дает вероятность того, что показ закончится конверсией.
Что применять первым — ML-коэффициент или bid shading?
Сначала ценность: модель решает, сколько показ стоит для рекламодателя. Shading идет последним и лишь снижает цену до уровня, которого хватает для выигрыша. В обратном порядке скидка и коэффициент начинают спорить друг с другом.
Сколько конверсий нужно для оптимизации по конверсиям?
Единого порога нет: он зависит от разброса CVR между площадками и от того, насколько мелко делится трафик. Пока конверсий мало, оценки по отдельным площадкам подтягивают к среднему по кампании, а оптимизируют по более частому промежуточному событию.
Можно ли оценить эффект оптимизации сравнением «до и после»?
Ненадежно: за это время меняются сезонность, конкуренты и креативы. Честный способ — A/B-тест, где контрольная группа торгуется без новой логики в тот же период.