Тест по каннибализации брендового трафика
Ссылка на отчет: https://app.powerbi.com/view?r=eyJrIjoiYzA5NzBlNzktMTY3NS00MDM0LTgyYjAtZmFlOWVmMzE0YzBhIiwidCI6IjAwMmY1NDQ0LTg0ZDktNDEyMS05NjZkLTM5NGJmMGE1MTAwYiIsImMiOjl9
Ссылка на файл: https://drive.google.com/file/d/0B4WTOaX6z5ZvUjFQLVlHY2xHQkk/view?usp=sharing
Клиенты часто задаются вопросом - стоит ли подключать контекстную рекламу по собственным брендовым запросам? Универсального ответа нет, но есть универсальный тест. Он поможет понять, как поступать конкретно в вашем случае.
Мы говорим о тесте по каннибализации трафика. Его результат — значение ITR (incremental traffic ratio). Это доля добавленных сеансов, которую принес контекст. Например, если ITR=80%, это означает, что брендовый контекст «съел» у SEO всего 20% трафика, а 80% кликов были новыми, дополнительными.
Для проведения теста необходимо собрать брендовую рекламную кампанию в «Яндекс.Директе», в настройках кампании выставить временной таргетинг приемом «Шашечки»:
Далее необходимо собрать статистику по «Визитам» в «Яндекс.Метрике» отдельно по часам с включённым и выключенным контекстом. И здесь начинается самая долгая и муторная работа. Выделять эти данные вручную - худшее, что может произойти за вашу карьеру аналитика. Я знаю о чем говорю, сам так жестил. До тех пор, пока наша хакатон-команда не сказала "Хватит это терпеть!".
Мы решили автоматизировать сбор статистики, расчет результатов и статистической достоверности при помощи Microsoft Power BI.
Всю работу можно было разбить на 3 этапа - подключение к API Яндекс.Метрики и выгрузка "сырых данных" - обработка полученных данных на стороне PowerQuery - расчет результатов и статистической достоверности на стороне DAX
1.Подключение к API Яндекс.Метрики и выгрузка "сырых данных"
На первом этапе мы воспользовались 2-мя коннекторами к API Метрики, написанными Сергеем Лосевым (знай наших!) и Максом Уваровым. Первый коннектор помог с выгрузкой статистики по визитам с органической выдачи Яндекс по брендовым запросам клиента
В коннекторе к органическому трафику есть статические параметры: dimensions, metrics, limit, а также фильтр на searchEngineRoot=='yandex'. Динамические параметры подставляются в каждом вашем случае индивидуально: 1. Номер счетчика 2. Даты начала и окончания теста 3. Фильтр ym:s:searchPhrase=@ , в котором вы указываете ваши брендовые запросы (или корни их образующие). Например ym:s:searchPhrase=@'Эльдорад'
Коннектор к трафику Яндекс.Директ вызывается через функцию PQYM, динамическими являются параметры: 2. Номер счетчика 3. Даты начала и окончания теста 4. ClinetID Яндекс.Директа
ВАЖНО: на скриншоте вы можете видеть, что за трафик с Яндекс.Директ здесь принимаются клики, а не визиты, как это было в случае с органикой. Что не совсем корректно. Но в нашем случае это - вынужденная мера, вызванная тех. проблемами на стороне счетчика клиента (даже Юра был бессилен(= ). Я верю, что вам судьба уготовила счетчики без таких провалов в данных, и вы сможете в поле metrics вызвать не ym:ad:clicks, а ym:ad:visits
2. Обработка полученных данных на стороне PowerQuery
На этапе обработки запросов мы путем несложных махинаций получаем колонку ContextCondition, которая говорит о том, была ли включена или выключена контекстная реклама в данный час данного дня (помните про принцип шашечек, на котором базируется этот тест?)
Далее мы, ссылаясь на запрос Brand_organic, разбиваем его на 2 таблицы. В первой содержаться агрегированные по дням данные о часах с включенным контекстом, во второй - с выключенным.
Статистика о трафике с Яндекс.Директ приводится к тому же виду, что и "органическая".
3. Расчет результатов и статистической достоверности на стороне DAX
Связав через List.Dstes таблицы Brand_organic_c_off, Brand_organic_c_on и Brand_context получаем панорамную статистику текущего теста:
Искомое значение IRT вычисляется по формуле: IRT = Добавленные визиты / Визиты с контекста , где Добавленные визиты = Визиты с контекста + Визиты с органики в часы с включенным контекстом
Т.о., для расчета ITR нам нужны промежуточные вычисляемые метрики.
Ну что ж, все необходимые данные есть, супер, огонь, давайте считать ITR:
Победа - полученный ITR составил 43% при критическом значении 3% (т.е. с 40% "запасом").
Критическое значение - это точка, в которой мы "выходим в 0". Ведь брендовые клики пусть и дешевые, но не бесплатные. minITR рассчитывается индивидуально для каждого клиента из системы уравнений
бренд CPC * X = Z доход с 1 бренд клика * X * minITR = Z
где X — количество кликов с бренд-РК, Z — доход с бренд-РК
Полученный ITR=43% - число крайне чудесное и позитивное. Оно говорит о том, что при подключении брендового контекста на данном клиенте, 43% контекст-кликов являются новыми, добавленным. Что, в свою очередь значит, новую, добавленную прибыль!
Осталось проверить статистическую значимость нашего теста. Ведь золотые мешки нашего бренд-трафика на деле могут оказаться всего-лишь черными пакетами погрешности и слез (а какие метафоры начинаете использовать вы на 25й час без сна?=)
Для проверки рассчитаем доверительный интервал по формуле
confidence interval = X +- (1,96 * Standard Deviation/(n^0,5)) где X - матожидание, Standard Deviation - стандартное отклонение (сигма), n - размер выборки
Для реализации заводим все необходимые вычисляемые метрики: На всякий случай держите DAX-формулы: AVERAGE() - матожидание COUNT() - размер выборки STDEV.P() - стандартное отклонение
Рассчитали. CI = 37% - 46%. Окончательно выдохнули - даже если ориентироваться по нижней границе ДИ, "запас" относительно критического ITR составляет 34%
Вот и все. Скачивайте, пользуйтесь. Заводите свои тесты, подставляйте свои параметры. Получайте значения ITR и дополнительные деньги. Любите жизнь и надевайте зимой вторые штаны=) Если мы выкатим какой-нибудь апдейт (в планах - проще и элегантнее реализовать 2-й этап с обработкой запросов) - обязательно поделимся в группе про Power BI и Excel