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

Как оценивать плейсменты без решений по одному FTD: зрелые когорты, интервалы неопределённости, Bayesian shrinkage, денежные guardrails и воспроизводимый SQL.

Оглавление9 разделов

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

Два разных основания

Статистическое решение отвечает, хуже ли площадка ожидаемого уровня. Guardrail отвечает, сколько денег команда готова потерять, пока доказательств ещё нет. Их нельзя выдавать друг за друга.

Сначала получите правильную строку плейсмента

Платформенные отчёты различают явно выбранные и фактические места показа. В Google Ads managed placement view относится к таргетированным площадкам, group placement view показывает фактические площадки, а detail placement view — более детальные URL и идентификаторы. Низкоактивные площадки могут агрегироваться в Other, поэтому сумма видимых строк не всегда равна итогу кампании.

Созревшая когорта вместо отчёта «по сегодня»

Клик включается в оценку только после достаточного окна для целевого события и последующего решения. Watermark выводят из собственного распределения click_at → conversion_at → decided_at по GEO, устройству и модели. Последние дни могут участвовать в контроле расходов, но не в окончательном сравнении CVR.

SQL: зрелые клики и решения по площадкам
WITH mature_clicks AS (
  SELECT click_id, placement_id, cost_minor
  FROM clicks
  WHERE clicked_at >= :cohort_start
    AND clicked_at <  :maturity_watermark
), outcomes AS (
  SELECT conversion_id, click_id,
         max(CASE WHEN current_status='approved' THEN 1 ELSE 0 END) AS approved
  FROM conversion_current
  GROUP BY conversion_id, click_id
)
SELECT c.placement_id,
       count(DISTINCT c.click_id) AS mature_clicks,
       count(DISTINCT o.conversion_id) FILTER (WHERE o.approved=1) AS approved_events,
       sum(c.cost_minor) AS spend_minor
FROM mature_clicks AS c
LEFT JOIN outcomes AS o USING (click_id)
GROUP BY c.placement_id;

Почему ноль не равен нулевой вероятности

Если истинная вероятность события 1%, шанс увидеть ноль на 50 независимых попытках равен 0,99⁵⁰ — примерно 60,5%. Даже на ста попытках это около 36,6%. Эти числа не задают норму для кампании; они показывают, насколько естественен ноль при редкой конверсии.

Вероятность не увидеть ни одного события
P(X = 0 | n, p) = (1 - p)^n

n — число зрелых независимых возможностей;
p — предполагаемая вероятность события.

Формула неприменима буквально, если клики зависимы,
а вероятность заметно различается внутри площадки.

Интервал важнее турнирной таблицы CPA

Рядом с оценкой доли показывайте интервал неопределённости. На малом n он будет широким — это честный результат, а не недостаток отчёта. Для обычной биномиальной доли можно использовать интервал Уилсона; при кластеризации пользователей или дней понадобится кластерный bootstrap либо модель, отражающая зависимость.

Частичное стягивание для длинного хвоста

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

Posterior для вероятности события
Prior:      p_j ~ Beta(alpha, beta)
Observed:   y_j successes from n_j mature trials
Posterior:  p_j | data ~ Beta(alpha + y_j, beta + n_j - y_j)

Posterior mean = (alpha + y_j) / (alpha + beta + n_j)

alpha и beta оцениваются на сопоставимой исторической группе,
а не выбираются для получения нужного решения.

Сопоставимая группа означает один продуктовый маршрут, GEO, устройство, формат и период. Общий prior по всему аккаунту стянет нишевый инвентарь к чужой базовой вероятности и создаст уверенность там, где её нет.

Решение через ожидаемый убыток

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

Псевдокод правила
if policy_or_safety_violation:
    exclude immediately
elif spend_since_review > hard_loss_limit:
    pause as a risk guardrail
elif P(unit_margin < minimum_margin | mature_data) > decision_probability:
    exclude for performance
else:
    keep collecting data or pool into a placement group

Hard loss limit выражается в деньгах и документируется отдельно. Пауза по лимиту может быть пересмотрена после созревания данных; исключение за нарушение политики имеет другой процесс апелляции.

Не подглядывайте каждый час без поправки

Если сотни площадок проверяются многократно, часть пересечёт порог случайно. Используйте фиксированные окна ревью, последовательный метод с заранее заданными границами либо контроль false discovery rate. Не меняйте правило после того, как увидели кандидата на отключение.

Практический порядок ревью

  1. Сверить тип отчёта и объём Other.
  2. Зафиксировать maturity watermark.
  3. Удалить дубли кликов и событий, применить текущие статусы.
  4. Разделить policy/safety и performance основания.
  5. Показать n, расход, события и неопределённость.
  6. Применить pooling или posterior для малого n.
  7. Проверить денежный guardrail.
  8. Записать решение, версию правила и дату повторной оценки.
Один FTD не делает площадку победителем

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

Источники и границы применимости

Google Ads API: placement views · NIST: контроль биномиальной доли и границы

Вывод

Оптимизация плейсментов при малой выборке — это управление неопределённостью. Зрелая когорта защищает от задержек, интервалы и shrinkage — от случайных экстремумов, а денежный guardrail ограничивает цену ожидания. Так команда не сохраняет очевидный риск, но и не уничтожает перспективный инвентарь после случайного нуля.

Станьте партнёром и начните работать

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

СТАТЬ ПАРТНЁРОМ

Связанные материалы

Все статьи
Аналитика

Бюджет первого теста: как рассчитать сумму, которой хватит для решения

Как рассчитать бюджет теста рекламы через частоту события, MDE, power, стоимость трафика, зрелость, технический этап, лимит потерь и оборотный капитал.

Аналитика

Витрина данных для арбитражной команды: схема от клика до выплаты

Как построить аналитическую витрину арбитража: grain, факты, измерения, click ID, статусы, валюты, ревизии, late events, тесты и воспроизводимые отчёты.

Аналитика

Statistical power и MDE: как планировать тест конверсии до запуска

Подробный разбор statistical power, MDE и размера выборки для конверсии: baseline, alpha, beta, абсолютный эффект, кластеры, лаг и симуляция дизайна.