Делаем свою модель атрибуции с помощью Power Query и Logs API Яндекс.Метрики

Статья для тех, кто не умеет в ClickHouse (как, например, я), а поковыряться в сырых данных Метрики всё-таки хочется. Будем строить модель атрибуции взвешивая источники по длине сессии пользователя.

Видео: Logs API Яндекс.Метрики и ClickHouse: что полезного можно получить из сырых данных

Выгружайте сырые данные из Метрики через Logs API Блог Яндекс.Метрики

У нас в недвижке бывает так:

  • клиент пришел с РСЯ, провёл на сайте 60 секунд и ушёл,
  • вернулся через день с ремаркетинга в GDN, провёл на сайте 120 секунд и ушёл,
  • снова вернулся через брендовый Директ, провёл на сайте 20 секунд и позвонил.

Модель по ласт клику даст всю конверсию бренд-Директу, по первому — РСЯ. Мы же хотим учесть все касания пользователя с сайтом и проранжировать их по времени, проведенному на сайте — тогда каждый канал получит свой кусок конверсии:

  • РСЯ — 60/200 = 0,3,
  • GND — 120/200 = 0,6,
  • бренд — 20/200 = 0,1.

Такой подход позволит учесть вклад в конверсию промежуточных и недооцененных каналов.

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

Например,

  • цепочка РСЯ — Бренд Директ станет просто РСЯ
  • Медийка — Эдвордс — Органика → Медийка — Эдводрс
  • РСЯ — Директ — Медийка — Эдвордс Бренд → РСЯ — Директ — Медийка

Любая модель атрибуции — это от слова модель, поэтому она не претендует на абсолютную точность или истину в последней инстанции.

Вытаскиваем сырые данные из Метрики

Сырые, не агрегированные данные — это записи об отдельных визитах, вот например так

Нам нужна таблица со следующими столбцами:

  • ID клиента (ym:s:clientID),
  • ID визита (ym:s:visitID),
  • время на сайте (ym:s:visitDuration),
  • дата визита (ym:s:date),
  • ID целей, достигнутых за данный визит,
  • источник трафика, метки UTM Source и Campaign (ym:s:lastTrafficSource,ym:s:UTMSource,ym:s:UTMCampaign).

Все параметры визитов в руководстве Яндекса

Я пользуюсь рецептом получения данных из Logs API Яндекс.Метрики, предложенный Алексеем Макаровым.

Статья Алексея Макарова, где подробно всё описано.

Идёте по ссылке и копируете токен для Метрики.

Скачиваете приложение Postman для Хрома и запускаете.

Выбираем тип запроса POST, а в поле ввода запроса вставляете следующий запрос:

https://api-metrika.yandex.ru/management/v1/counter/XXXXXXXX/
logrequests?date1=2017-07-01&date2=2017-09-24
&fields=ym:s:isNewUser,ym:s:clientID,ym:s:visitID,ym:s:pageViews,
ym:s:visitDuration,ym:s:date,ym:s:dateTime,ym:s:goalsID,
ym:s:lastTrafficSource,ym:s:UTMSource,ym:s:UTMCampaign&source=visits
&oauth_token=XXXXXXXXXXXXXXXXXXXXXX

counter/XXXXXXXX/ — подставляете номер счётчика Метрики

date1=2017-07-01&date2=2017-09-24 — нужные даты

oauth_token=XXXXXXXX — полученный токен

В ответ придёт такая штука:

Нам нужен request_id — это идентификатор, созданного запроса на получение данных из Logs API — копируем его номер для следующего шага.

Выбираем тип запроса GET, в поле ввода запроса вставлям следующий запрос:

https://api-metrika.yandex.ru/management/v1/counter/XXXXXXX/logrequest/248496?oauth_token=XXXXXXXXXXXXXXXXXXXXXX

counter/XXXXXXXX/ — подставляете номер счётчика Метрики

logrequest/248496 — request_id из предыдущего шага

oauth_token=XXXXXXXX — полученный токен

В ответ получим:

Ответ на GET-запрос

Нас интересует параметр status — у нас значение processed — запрос лога обработан и лог готов к скачиванию.

Параметр status может принимать несколько значений,
подробнее в помощи Яндекса

Обратите внимание на параметр parts. Может так получиться, что полученный лог окажется слишком большим и будет разбит на несколько частей, которые придется скачивать по отдельности.

Третий запрос — выбираем тип запроса GET, а в поле ввода запроса вставляете следующий запрос:

https://api-metrika.yandex.ru/management/v1/counter/XXXXXXXX/logrequest/248496/part/0/download?oauth_token=XXXXXXXXXXXXX

Только теперь нажимаем не Send, а Send and Download

Сохраняете файл как .csv
Всё, логи скачали, идём в Эксель.

Строим модель атрибуции

В Экселе (у меня Excel 2016) идёте в раздел «Данные», выбираете сохраненный csv-файл

Ждетё загрузку

Нажимаете «Изменить»

Попадаете в редактор запросов

Каждая строчка — это отдельный визит.

Для построения модели атрибуции по длине сессии, нам потребуется к этой таблице добавить ещё несколько столбцов:

  • сумма длительности всех визитов пользователя,
  • вес визита,
  • повершил ли пользователь конверсию.

Считаем сумму длительности всех визитов на каждого пользователя

Нам надо сделать сводную таблицу по ID клиента (ym:s:clientID) и просуммировать ym:s:visitDuration.
Если в модели мы не хотим учитывать прямые, органические или даже бренд-контекстные запросы — присваиваем им длительность «0». Копируем исходный запрос и делаем несколько преобразований.

Шаг 0. Копируем исходный запрос.
Шаг 1. Удаляем все столбцы кроме ym:s:clientID, ym:s:visitDuration, ym:s:lastTrafficSource, ym:s:UTMCampaign
Шаг 2. Добавляем условный столбец — если источник «лишний» ставите «0», иначе = ym:s:visitDuration; меняете тип данных полученного столбца на целое число.
Шаг 3. Удаляем лишние столбцы и делаем сводную таблицу суммируя продолжительность визитов для каждого уникального пользователя. (Комп очень тупил, поэтому скринкаст подвисает.)

Получили таблицу: ID пользователя и сколько времени за все платные визиты он провёл на сайте.

Находим пользователей, совершивших конверсию в любой из визитов

Копируем исходный запрос, затем находим нужных пользователей.

Фильтруем сессии с ID нужных конверсий, фильтруем нужные даты, удаляем все столбцы кроме ID посетителей, удаляем дубли, создаём пользовательский столбец «была конверсия».

Объединяем запросы в один

Мы нашли пользователей, совершивших конверсию и посчитали для каждого пользователя сумму длительностей сессий. Теперь надо эти данные объединить с исходными.

Нужно добавить данные из второго и третьего запроса в первый.

В Power Query есть аналог функции JOIN — в русской версии он ожидаемо называется «Слияние запросов».

Используем Слияние запросов для объединения данных.
Обнуляем длину сессии для каналов которые не хотим учитывать (органика, прямые заходы, бренд-трафик).
Фильтруем тех, у кого общее время равно 0 (клиенты с каналов, которые мы не хотим учитывать). Оставляем только тех, кто совершил конверсию, и находим вес визита — делим продолжительность сессии на общую продолжительность сессий для пользователя.
Удаляем все столбцы кроме ym:s:UTMCampaign и веса, делаем сводную таблицу, где суммируем конверсии для каждой UTMCampaign.

Всё. Нажимаем Закрыть и загрузить, полученная таблица — это число конверсий по метке UTM Campaign по такой модели атрибуции. Сравнивайте со стандартными моделями, принимайте решения.

Поделиться
Отправить
Запинить
2017  
Популярное