Изначально я использовал Python для сбора BI-аналитики по Яндекс.Директу. Это помогло мне сделать процесс изучения статистики более удобным: я стал максимально быстро замечать отклонения в рекламе, а освободившееся время уделял ее доработкам.
Со временем я решил оптимизировать повторяющиеся задачи по отслеживанию конверсионности рекламы. Как результат — процесс оптимизации рекламы ускорился, стало удобнее следить за кампаниями (пара кликов — и все готово!), но самое главное, рутины стало меньше.
В этой статье я покажу, как проверяю конверсионность в РСЯ с помощью Python в разрезе ключевых слов и площадок показа. Если вы повторите мои действия, получите такие отчеты:
Ключевые слова, у которых стоимость конверсии выше среднего уровня на 50% Ключевые слова, по которым расходы составили свыше 150% средней конверсии и которые до сих пор не принесли конверсии Площадки, на которых стоимость конверсии в 1,5 раза выше среднего уровня Площадки, на которых расходы составили больше 150% средней конверсии и которые до сих пор не принесли конверсии
Что вам для этого понадобится:
-
Токен для работы с API. Чтобы его получить, у вас должно быть приложение, которое Яндекс проверит и допустит к работе. Если у вас нет приложения, а провернуть все то, что я покажу в этой статье, хочется, воспользуйтесь нашим приложением — так процесс получения токена займет не более минуты. Сделать это можно здесь. Токен будет в адресной строке после “access_token=”.
-
Видеоинструкции, которые я записал для вас: в первой показываю, как построить запрос к API Яндекс.Директ, а во второй — как вывести полученные данные в BigQuery, подключиться к DataStudio и визуализировать их.
-
Готовые файлы, с помощью которых вы сами можете настроить получение статистики по ключевым словам и площадкам.
-
Python-пакет Yadirstat, который позволяет с помощью одной строки кода получить информацию сразу в нескольких разрезах (разбираться в запросах не нужно).
-
Инструкция Яндекса, если вы хотите получить конверсионность по конкретной цели, потому что в этой статье я показываю, как получить общую конверсионность.
Вводные данные
Чтобы построить аналитику для Яндекс.Директа без помощи коннекторов максимально разнообразно и глубоко, нам потребуется 4 составляющих:
-
Запрос к API Яндекс.Директа.
-
DataFrame.
-
BigQuery.
-
Data Studio.
Алгоритм выглядит так:
-
Строим запросы к API Яндекс.Директа. Пишем на Python конкретные запросы. Например, вывод статистики за последние 5 дней или вывод статистики по ключевым словам за 90 дней.
-
Запрос к API Яндекс.Директа упаковываем в DataFrame.
Для чего это делается: мы не может просто так отправить полученную из API информацию в BigQuery, к тому же у нас есть пустующие ячейки, которые нужно заполнить. Изначально там стоит прочерк “–”, а BigQuery такие прочерки не воспринимает — из-за них столбцы имеют текстовый тип данных, что не позволяет манипулировать данными. После переноса информации в DataFrame и удаления прочерков, мы можем полноценно работать с данными, писать скрипты, считать статистику и т. д. -
Отправляем данные из DataFrame в BigQuery. Почему именно так: BigQuery — это простой инструмент интернет-маркетинга и он достаточно легко подключается к Data Studio, что нам и надо.
-
Подключаемся к DataStudio и визуализируем полученные данные.
Для проверки конверсионности в РСЯ достаточно первых двух шагов: построить запросы к API Яндекс.Директа и упаковать ответы на них в DataFrame. Подробнее об этом далее.
Шаг 1. Создаем структуру запроса
Пример запроса можно взять в Яндексе. Я взял пример, который демонстрирует выполнение запроса к сервису Reports, обработку и вывод результата.
Открываем запрос. В первом блоке оставляем все так, как есть.
Ниже прописываем свой токен, логин клиента и убираем знак # в строке #“returnMoneyInMicros”: “false”, чтобы получать реальные данные денежных единиц.
Теперь фокусируемся на теле запроса.
Пример нашего запроса
Указываем даты. Если вы хотите задать произвольный период, в “DataRangeType” нужно поставить “CUSTOM_DATE” и указать даты начала и окончания периода в параметрах “DateFrom” и “DateTo”. Если же вам нужны, например, последние 90 дней, поставьте в “DataRangeType” “LAST_90_DAYS”, а “DateFrom” и “DateTo” уберите.
Указываем название столбцов, которые нужны в отчете. Здесь действуют те же ограничения, что и в Яндекс.Директе. То есть просто так запросить какую угодно статистику нельзя. Если в отчетах Яндекс.Директа система просто не дает выбрать некоторые столбцы, то в работе с API необходимо выбрать нужный вид отчета и столбцы, которые можно использовать с этим отчетом, иначе вы получите ошибку. В справке Яндекса можно узнать, какой тип отчета нужен и какие столбцы в этих отчетах вы сможете использовать.
Если нужно, включаем НДС. То есть в “IncludeVAT” вместо “NO” пишем “YES”.
Выставляем фильтр по кликам (будет показываться статистика, по которой больше 0 кликов) и фильтр по типу площадки (только “Ad_Network”);
Далее идет кусок с ответами сервера. Его оставляем без изменений.
Шаг 2. Упаковываем ответ на запрос в DataFrame
Я предпочитаю делить процесс построения запросов к серверу Яндекс.Директа на две части:
-
запрос к серверу;
-
файл с логинами, токенами, операциями с таблицами.
Это позволяет удобно работать с учетными данными клиентов и получать данные по всем клиентам сразу, не превращая код в кашу.
Ответ на запрос к API упаковываем в функцию, в которую будем передавать токен, логин, “DateFrom” и “DateTo”.
Первый файл
Здесь нам нужен запрос к серверу и упаковка его ответа в DataFrame.
Запрос мы уже подготовили в первом шаге. Теперь нам нужно избавиться от “–” и сделать из данных полноценный DataFrame.
Код выглядит так:
Алгоритм действий:
-
Открываем или создаем файл в режиме записи (название можно дать любое).
-
Записываем в файл ответ сервера с нашей статистикой (в нашем случае это переменная req).
-
Закрываем файл.
-
Сразу же читаем этот файл с помощью pd.read_csv.
В скобках указываем название файла (у нас это “cashe.csv”), индекс нашего хедера (можно оставить без изменений), разделители между данными (sep), какая у нас индексируемая колонка, делаем из “–” отсутствие данных (na_values). После скобок с помощью fillna заменяем отсутствующие данные на 0. -
Возвращаем наш DataFrame как переменную f.
Второй файл
Импортируем наш файл и библиотеки.
Убираем ограничения на отображение информации.
Записываем свои логин и токен в переменные.
Просим наш соседний файл дать информацию по ключам (обращаемся к функции rsy_keys из соседнего файла и передаем в нее токен и логин): data = rsy_keys(my_token,my_login).
Информацию получили:
Теперь необходимо оставить только строки с ключами, у которых стоимость конверсий выше среднего уровня на 50%.
Смотрим ключевые слова, по которым было потрачено больше, чем 150% стоимости конверсии и не было конверсий.
В итоге видим следующее:
Аналогично получаем статистику по площадкам:
-
В первом файле прописываем еще один запрос (он будет называться “rsy_placement”);
-
В запросе изменяем столбцы (запрашиваем не ключи, а плейсмент) и тип отчета. Используем кастомный отчет “ReportType”: “CUSTOM_REPORT”;
-
Прописываем код для получения неэффективных площадок:
Вот и все. В результате у вас появятся все отчеты, которые мы показали во введении:
-
ключевые слова, у которых стоимость конверсии выше среднего уровня на 50%;
-
ключевые слова, по которым расходы составили свыше 150% средней конверсии и которые до сих пор не принесли конверсии;
-
площадки, на которых стоимость конверсии в 1,5 раза выше среднего уровня;
-
площадки, на которых расходы составили больше 150% средней конверсии и которые до сих пор не принесли конверсии.
Если остались вопросы, пишите в комментариях.