Математика в платных источниках трафика (Яндекс Директ, VK ADS, Сбер, TG ADS, Авито реклама и прочее)
Сегодня мы хотим поговорить о том, как с помощью простых математических методов можно избежать ошибок при анализе информации и внесении изменений. Ведь неверные данные приводят к неверным действиям, а в нашем случае именно недостоверность информации становится причиной ошибок.
Сначала разберем любые данные
Принятие решений по тому, берем ли мы данные для дальнейшей рассмотрения и оптимизации (корректировки, внесение изменений), сводится к тому, что необходимо определить минимальный объем выборки для анализа. Для этого у нас есть 3 метрики, которые позволяют сделать вывод, используем мы эти данные или продолжаем набирать статистику:
- Трафик (количество кликов)
- Количество конверсий
- Конверсионность (полученный показатель из первых двух)
Для правильного назначения корректировок ставок/стратегии важно как можно точнее вычислить вероятность конверсии для каждой кампании/группы/ключа/сегмента. Однако при небольшом числе кликов показателю конверсии нельзя доверять — он обладает значительной погрешностью.
Не следует путать показатель конверсии с ее вероятностью. Например, если у нас 1 клик и 0 конверсий, то показатель равен нулю, но это не значит, что и вероятность покупки тоже нулевая.
Вероятность по определению — это частота на бесконечности. Другими словами, если бы число кликов было бы бесконечно большим, то показатель и вероятность конверсии были бы равны. При большом числе кликов эти два числа примерно равны. Но при малом они могут существенно отличаться.
Для расчета необходимой выборки когда погрешность между конверсиями будет минимальна, мы используем следующую таблицу:
Тут показано, как от CR и количества кликов снижается статистическая ошибка данных.
Ориентировочную погрешность для своих проектов берем в районе 30% и ниже. Почему так?
Мы считаем не математическую модель, а ведем бизнес клиента, где есть внешние факторы (издержки, бюджеты и пр.). Скорость принятия и внедрения решений также важна, как и правильные выводы по статистике. НО! Чем больше статистики, тем лучше.
Формулы:
SE=√((CR×(1-CR))/Клики) — сама формула стандартного отклонения выглядит так, мы условно считаем разброс показателей CR +- погрешность, насколько в плюс или минус может изменяться конверсия.
Формула в таблицах (эксель и прочее): =КОРЕНЬ(C2*(1-C2)/A2 )
Но в нашем случае для оценки в логарифмическом масштабе используется наша формула: =КОРЕНЬ(((1-CR))/(CR×Клики)), это то же самое, просто мы отклонение делим на исходное значение CR и получаем % отклонения, насколько может быть разброс по CR.
Формула в таблицах (эксель и прочее): =КОРЕНЬ(((1-B3))/(B3*A3))
Если кратко — формула возвращает стандартную ошибку CR в % на основе количества кликов и самой конверсии.
По сокращениям:
- B3 — CR, в % 0,05 (5% CR)
- A3 — Клики
Еще важный вопрос, ну вот CR мы определили, а если нам важны показатели другие? Например, CPL, CPO? Эти показатели производные от CR и CPC, чем стабильнее CR при стабильном CPC, тем более стабильны и эти показатели, следовательно, мы также можем больше доверять им. CPC иногда колеблется, ну мы на эту характеристику «особо» не влияем, только если «жестко» задавать значения в стратегии.
Итак, любые данные, которые мы видим, мы должны всегда дополнять стат. погрешностью, чтобы ответить себе на вопрос: а если я бесконечно буду повторять эксперимент, я получу те же данные? Если ошибка минимальна, то ответ: да (в вакууме, напомню, что у нас нестабильная ситуация в бизнесе всегда), если нет, то копим данные.
Примеры:
- Ключ набрал 100 кликов и количество конверсий - 10, у нас CR - 10%, погрешность = 30%. (Данные можем брать для анализа).
- Ключ набрал 100 кликов и количество конверсий - 1, у нас CR - 1%, погрешность = 100%. (Необходимо поднакопить статы или применить методы, о которых пойдет речь ниже).
Способы снизить погрешность
- Берем схожие проекты (аффилиаты — сеть сайтов под одного рекламодателя или разные филиалы) — можно объединять в общую статистику и выставлять по агрегированным данным (условный пулинг, о нем ниже), также высчитывая погрешность.
Это обычно подходит, чтобы понять суммарную статистику по ЦА (демография, тип устройства и так далее), но при этом не забываем анализировать сайты и отдельно, потому что разные филиалы, разное расположение в выдаче могут значительно влиять на результат, а усреднением вы ничего не заметите.
- Метод выставления ставок/стоимости в стратегии на верхних уровнях — на уровне кампании/группы (отдельно сегменты). Какие проблемы? Разные ключи имеют разный CR, можно наделать ошибок, выставляя ставки общими. Со старта всё равно прибегаем к этому методу, потому что заранее конверсионность ключевых слов знать не можем, только если не было предыдущих запусков.
- Метод «Пуллинг данных». Суть проста: когда недостаточно статистики по какому-либо нижнему уровню (группа/ключ), мы берем конверсию с верхних уровней и усредняем показатели. Таким образом, даже на малом объеме трафика мы можем уже делать корректировки и считать прогнозный CR и CPL/CPO. Работает при условии «схожести» уровней, то есть группа должна объединять нормальный кластер схожих запросов, то же самое и по кампании, но там обычно сложнее (слишком много разнородности). *Не работает для сегментов, схожести там нет).
1. Формула взвешенного пулинга конверсии (CR)
Пусть:
- CR{ф} — конверсия по ключевой фразе (фраза)
- CR{г}— конверсия по группе объявлений (родительский уровень)
- N{ф}— количество кликов по ключевой фразе
- N{г} — количество кликов по группе объявлений
Тогда пулинг по конверсии можно сделать так:
Этот подход объединяет статистику с двух уровней: фраза и группа, взвешивая по количеству кликов (объёму данных). Если у фразы мало кликов, то её показатель «подтягивается» к группе.
2. Общая формула для нескольких уровней
Если есть несколько уровней (например, фраза, группа, кампания), формулу можно расширить:
Где CR{к} и N{к} — конверсия и клики по кампании.
3. Сглаживание при малом объеме данных (с использованием гиперпараметра)
Чтобы избежать сильного влияния малого объёма данных, добавляют параметр сглаживания (например, при Nf очень малом):
Где k — это гиперпараметр сглаживания, который задаёт вес или влияние статистики с более высокого уровня (например, группы объявлений или кампании) относительно данных на низшем уровне (например, ключевой фразы). Иными словами, если у ключевой фразы малый объём данных (мало кликов), то k помогает «подтянуть» её показатель конверсии к более устойчивому значению на уровне группы, чтобы избежать сильного шума из-за малого объёма выборки.
По факту это показатель кликов, чем больше значение — тем больше подтягивания к CR группы, чем меньше — к фразе. Подбирается эмпирически.
4. Пример применения
Если у фразы всего 10 кликов и CR равен 0.1, а у группы 1000 кликов и CR равен 0.05, то, применяя пулинг:
То есть конверсия для фразы «смягчается» к значению группы, учитывая малый размер выборки по фразе. А это значит, что мы дальше можем прокинуть CPL запуленный и понять, вообще стоит с этой фразой делать что-то или нет.
Алгоритм применения:
- Есть ключ, погрешность по нему большая — принимаем решение пулить с уровнем группы.
- На уровне группы проверяем погрешность, она ниже 30%? — пулим с уровнем группы, выше 30%? — пулим уровень группы с уровнем кампании (если там погрешность адекватная, если нет, тем же алгоритмом проходимся по уровню выше) и вычисляем уже скорректированный CR для группы.
- Далее для ключевика пулим CR с учетом откорректированного показателя конверсии для группы.
То есть сначала:
- Проверяем погрешность каждого уровня, если недостаточная (а мы иначе не применяли бы пулинг), то используем уровень выше.
- Если на уровне выше, нет стат.значимости -> большая стат. ошибка данных, то добавляем уровень кампании:
, если нормальная, то достаточно формулы:
Пулинг используем нечасто, он в целом непростой (есть еще многоуровневый), так как нужно следить за схожестью уровней, иначе велик шанс совершить ошибку. Позже сюда добавлю скрипт на Python для автоматического расчета пулинга.
В некоторых случаях можно делать выводы и на меньших объемах, жертвуя точностью, а также вносить небольшие корректировки с целью на выходе уже увеличить шансы на правильное распределение по сегментам. Пример: недостаточно данных по сегменту, но уже видим большие отклонения? Внесите небольшие (до 10-15%) предкорректировки, чтобы увеличить шанс на правильное распределение трафика между сегментами.
А что если конверсий нет?
- Отталкиваться от KPI — если срез/сегмент/ключ/группа/кампания потратил больше x2,5-x4 CPL/CPO и не принес конверсий, его можно отключить. Желательно уточнять дополнительным проходом по всем срезам: не конвертит кампания? Проверяем группы внутри, не конвертит группа? Проверяем все ключи и поисковые запросы по ней, обычно траты приходятся на 2–3 таргетинга, и их можно пессимизировать и перезапустить тест. Дальше проверяем сегменты, удобно, если у вас выгружены данные в ClickHouse и вы можете любой срез построить за пару секунд.
- Использовать формулу 1/CRx3 — позволяет вычислить минимальный объем трафика, после которого уже с большой долей вероятности не будет конверсий (также важно смотреть на расход). Выражение 1/CR — это, по сути, количество кликов на 1 конверсию, CR подбираем ожидаемый. Если после x3 конверсий (читай, количества кликов) ничего нет (опять же, возвращаемся к формуле выше), то и ждать дальше не стоит.
А теперь как мы отслеживаем результаты экспериментов
Стандартно — любое изменение мы отслеживаем в следующей парадигме:
- Есть стандартная «нулевая» точка — это то, что было до эксперимента.
- Эксперимент — то, что мы тестируем (неважно, как вы это добавляете: через эксперименты Директа или, если хотите, делаете это вручную или вносите в текущие РК).
- Замер результата: сравниваем только одинаковые периоды (2 недели к 2 неделям, без перекоса сезонности по дням недели — нельзя сравнивать пн со средой).
Замеры делаем через калькулятор стат. достоверности http://hungrysites.ru/ab/. Результат А - это до, вариант Вариант B - после.
В зависимости от того, что сравниваем:
- Количество посетителей — это или клики, или показы (если хотим сравнить CTR).
- Количество конверсий — конверсии или клики (если хотим сравнить CR).
Всё просто, для стат. значимости надо 95% (условная погрешность на 5%), вам даже напишут это, пользуйтесь.
ВАЖНО!
АБ-тесты хороши, если делаем через внутренние инструменты Директа, то там фактора сезонности нет, если делаем изменения действующих РК (снижаем бюджеты, добавляем объявления и так далее), то тут надо ухищряться. Есть такая штука, как сезонность (считаем ее по каждому проекту), изменение от месяца к месяцу можно взять как поправочный кэф для экспериментов. Например: сравнение июля с июнем, у нас выросла частотность на 20%, поправочный кэф: 1,2. Если мы тестили месяц к месяцу, нуль гипотеза — июнь, а альтернативная гипотеза — июль (изменения), то нужно анализируемые показатели также уменьшить на 1,2 (обычно берем меньше, так как не всегда это влияет на перфоманс). Таким образом сравниваем уточненные выборку с учетом сезонности, это помогает сформировать более правильные выводы.
Также нужно следить за срезами, чтобы не было перекосов по трафику, но об этом в другой статье.
Дополнительные материалы по теме:
На этом все, постарался по максимуму объяснить простыми словами как анализировать данные с точки зрения простой математики.
Ставьте реакции, пишите комментарии, этим вы поможете мне получить больше охвата. Спасибо!