Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

Одна из основных задач PPC-специалиста — следить за конверсионностью рекламы. Александр Любивый из digital-агентства Bquadro показывает в материале для ppc.world, как оптимизировать этот процесс с помощью Python.

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

Изначально я использовал Python для сбора BI-аналитики по Яндекс.Директу. Это помогло мне сделать процесс изучения статистики более удобным: я стал максимально быстро замечать отклонения в рекламе, а освободившееся время уделял ее доработкам.

Со временем я решил оптимизировать повторяющиеся задачи по отслеживанию конверсионности рекламы. Как результат — процесс оптимизации рекламы ускорился, стало удобнее следить за кампаниями (пара кликов — и все готово!), но самое главное, рутины стало меньше.

В этой статье я покажу, как проверяю конверсионность в РСЯ с помощью Python в разрезе ключевых слов и площадок показа. Если вы повторите мои действия, получите такие отчеты:

Что вам для этого понадобится:

  • Токен для работы с API. Чтобы его получить, у вас должно быть приложение, которое Яндекс проверит и допустит к работе. Если у вас нет приложения, а провернуть все то, что я покажу в этой статье, хочется, воспользуйтесь нашим приложением — так процесс получения токена займет не более минуты. Сделать это можно здесь. Токен будет в адресной строке после “access_token=”.
  • Видеоинструкции, которые я записал для вас: в первой показываю, как построить запрос к API Яндекс.Директ, а во второй — как вывести полученные данные в BigQuery, подключиться к DataStudio и визуализировать их.
  • Готовые файлы, с помощью которых вы сами можете настроить получение статистики по ключевым словам и площадкам.
  • Python-пакет Yadirstat, который позволяет с помощью одной строки кода получить информацию сразу в нескольких разрезах (разбираться в запросах не нужно).
  • Инструкция Яндекса, если вы хотите получить конверсионность по конкретной цели, потому что в этой статье я показываю, как получить общую конверсионность.

Вводные данные

Чтобы построить аналитику для Яндекс.Директа без помощи коннекторов максимально разнообразно и глубоко, нам потребуется 4 составляющих:

  • Запрос к API Яндекс.Директа.
  • DataFrame.
  • BigQuery.
  • Data Studio.

Алгоритм выглядит так:

  1. Строим запросы к API Яндекс.Директа. Пишем на Python конкретные запросы. Например, вывод статистики за последние 5 дней или вывод статистики по ключевым словам за 90 дней.
  2. Запрос к API Яндекс.Директа упаковываем в DataFrame. Для чего это делается: мы не может просто так отправить полученную из API информацию в BigQuery, к тому же у нас есть пустующие ячейки, которые нужно заполнить. Изначально там стоит прочерк “--”, а BigQuery такие прочерки не воспринимает — из-за них столбцы имеют текстовый тип данных, что не позволяет манипулировать данными. После переноса информации в DataFrame и удаления прочерков, мы можем полноценно работать с данными, писать скрипты, считать статистику и т. д.
  3. Отправляем данные из DataFrame в BigQuery. Почему именно так: BigQuery — это простой инструмент интернет-маркетинга и он достаточно легко подключается к Data Studio, что нам и надо.
  4. Подключаемся к DataStudio и визуализируем полученные данные.

Для проверки конверсионности в РСЯ достаточно первых двух шагов: построить запросы к API Яндекс.Директа и упаковать ответы на них в DataFrame. Подробнее об этом далее.

Шаг 1. Создаем структуру запроса

Пример запроса можно взять в Яндексе. Я взял пример, который демонстрирует выполнение запроса к сервису Reports, обработку и вывод результата.

Открываем запрос. В первом блоке оставляем все так, как есть.

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

Ниже прописываем свой токен, логин клиента и убираем знак # в строке #“returnMoneyInMicros”: “false”, чтобы получать реальные данные денежных единиц.

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

Теперь фокусируемся на теле запроса.

Пример нашего запроса
Пример нашего запроса

Указываем даты. Если вы хотите задать произвольный период, в “DataRangeType” нужно поставить “CUSTOM_DATE” и указать даты начала и окончания периода в параметрах “DateFrom” и “DateTo”. Если же вам нужны, например, последние 90 дней, поставьте в “DataRangeType” “LAST_90_DAYS”, а “DateFrom” и “DateTo” уберите.

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

Указываем название столбцов, которые нужны в отчете. Здесь действуют те же ограничения, что и в Яндекс.Директе. То есть просто так запросить какую угодно статистику нельзя. Если в отчетах Яндекс.Директа система просто не дает выбрать некоторые столбцы, то в работе с API необходимо выбрать нужный вид отчета и столбцы, которые можно использовать с этим отчетом, иначе вы получите ошибку. В справке Яндекса можно узнать, какой тип отчета нужен и какие столбцы в этих отчетах вы сможете использовать.

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

Если нужно, включаем НДС. То есть в “IncludeVAT” вместо “NO” пишем “YES”.

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

Выставляем фильтр по кликам (будет показываться статистика, по которой больше 0 кликов) и фильтр по типу площадки (только “Ad_Network”).

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

Далее идет кусок с ответами сервера. Его оставляем без изменений.

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

Шаг 2. Упаковываем ответ на запрос в DataFrame

Я предпочитаю делить процесс построения запросов к серверу Яндекс.Директа на две части:

  • запрос к серверу;
  • файл с логинами, токенами, операциями с таблицами.

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

Ответ на запрос к API упаковываем в функцию, в которую будем передавать токен, логин, “DateFrom” и “DateTo”.

Первый файл

Здесь нам нужен запрос к серверу и упаковка его ответа в DataFrame.

Запрос мы уже подготовили в первом шаге. Теперь нам нужно избавиться от “--” и сделать из данных полноценный DataFrame.

Код выглядит так:

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

Алгоритм действий:

  1. Открываем или создаем файл в режиме записи (название можно дать любое).
  2. Записываем в файл ответ сервера с нашей статистикой (в нашем случае это переменная req).
  3. Закрываем файл.
  4. Сразу же читаем этот файл с помощью pd.read_csv.В скобках указываем название файла (у нас это “cashe.csv”), индекс нашего хедера (можно оставить без изменений), разделители между данными (sep), какая у нас индексируемая колонка, делаем из “--” отсутствие данных (na_values). После скобок с помощью fillna заменяем отсутствующие данные на 0.
  5. Возвращаем наш DataFrame как переменную f.

Второй файл

Импортируем наш файл и библиотеки.

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

Убираем ограничения на отображение информации.

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

Записываем свои логин и токен в переменные.

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

Просим наш соседний файл дать информацию по ключам (обращаемся к функции rsy_keys из соседнего файла и передаем в нее токен и логин): data = rsy_keys(my_token,my_login).

Информацию получили:

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

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

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

Смотрим ключевые слова, по которым было потрачено больше, чем 150% стоимости конверсии и не было конверсий.

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

В итоге видим следующее:

Аналогично получаем статистику по площадкам:

  • В первом файле прописываем еще один запрос (он будет называться “rsy_placement”);
  • В запросе изменяем столбцы (запрашиваем не ключи, а плейсмент) и тип отчета. Используем кастомный отчет “ReportType”: “CUSTOM_REPORT”.
Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python
  • Прописываем код для получения неэффективных площадок:

Как проверить конверсионность рекламы в Яндекс.Директе с помощью Python

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

  • ключевые слова, у которых стоимость конверсии выше среднего уровня на 50%;
  • ключевые слова, по которым расходы составили свыше 150% средней конверсии и которые до сих пор не принесли конверсии;
  • площадки, на которых стоимость конверсии в 1,5 раза выше среднего уровня;
  • площадки, на которых расходы составили больше 150% средней конверсии и которые до сих пор не принесли конверсии.

Если остались вопросы, пишите в комментариях.

1212
6 комментариев

Спасибо за статью.

Скажите, а эти данные можно получить в экселе, путем обработки выгрузки с помощью обычных фильтров?

"Подключаемся к DataStudio и визуализируем полученные данные", а где можно посмотреть саму визуализацию.

1

В экселе можно делать любые операции с данными, конкретно в случае Яндекс Директа это делается с помощью надстройки Power Query - она позволяет подключитсья к API Директа.
Посмотреть примеры визуализации вы можете в статье нашего специалиста на хабре https://habr.com/ru/post/515222/

1

Классный материал, но какой-то недописанный. В начале упоминался Bigquery, но в итоге шаг пропущен. Допишите :) Было бы круто с примером ELT на cloud function

Если расписывать все в подробностях, получится чуть ли не целая курсовая работа :) Трудностей в работе с BigQuery быть не должно - необходимо туда положить наши данные с помощью Python, а потом подключиться к нужным таблицам в DataStudio. Наш специалист рассказывал про это в статье на Хабре: https://habr.com/ru/post/515222/

1

Добрый день. А помимо получения статистики, можно ли в автоматическом режиме вносить изменения? Условный пример: собираются данные и раз в месяц делается сверка, программа видит что по определенной площадке цена конверсии х2-х3 от нормы, а сама делает запрет на этой площадке. Такую автоматическую "оптимизацию" реально создать на питоне?