Как визуализировать показатель качества ключевых слов — рецепт скрипта на языке R
Хотите быстро определить слабые места ваших рекламных кампаний? Используйте понятные и удобные графики со сводкой информации о составляющих показателя качества ключевых слов. В этой статье я подробно опишу, как легко получить и проанализировать эти данные с помощью языка программирования R и нескольких дополнительных пакетов.
Зачем нужно визуализировать показатель качества?
В посте «Как улучшить показатель качества в Google Рекламе» мы уже рассказывали, что в феврале 2016 года Google запустил новую версию API, и появилась возможность выгружать статусы составляющих показателя качества. Но тогда еще не было готовых бесплатных скриптов для работы с этими данными.
Небольшая ремарка. Думаю, ни для кого из рекламодателей не секрет, как работает Google Ads аукцион. Все объявления ранжируются согласно рейтингу, рассчитанному по формуле:
[показатель качества ключевого слова] * [ставка]
Визуализация показателя качества помогает оптимизировать работу специалиста. Добившись высокого уровня показателя качества ключевых слов, вы значительно снизите стоимость клика и за тот же бюджет получите больше качественного трафика.
Что требуется для реализации скрипта?
- Скачать и установить последнюю версию языка R. Как это сделать — смотрите видео урок.
- Для более удобной работы в R советую скачать среду разработки R Studio. Об этом тоже снят видео урок.
- Установить необходимые дополнительные пакеты: rgoogleads, ggplot2, dplyr, forcats (разберём в статье) — видео урок.
- Получить client ID и client secret в Google Console (необязательно). Подробнее читайте в статье «Как оценить потерянный доход в Google Ads с помощью языка R».
- Получить токен разработчика Google Ads API (необязательно).
- Аккаунт Google Analytics должен быть связан с Google Ads.
После этого можно перейти к внедрению скрипта.
Получение токена разработчика, client id и secret id
Далее в статье для запроса данных из Google Ads API мы будем использовать пакет rgoogleads.
В учебных целях в пакет rgoogleads уже включены все необходимые компоненты: токен разработчика, client id, secret id. Тем не менее я настоятельно рекомендую вам получить собственные учётные данные.
Токен разработчика можно запросить только из управляющего аккаунта. Следуйте инструкциям ниже:
- Создайте новый управляющий аккаунт, если у вас его нет.
- Перейдите в «Инструменты и настройки» — «Настройки» — «Центр API».
- Заполните сведения о разработчике.
- Нажмите «Подать заявку на базовый доступ».
- Заполните и отправьте анкету.
Далее вам потребуется объяснить поддержке Google Ads API, для каких целей вы будете использовать API, после чего вы получите базовый доступ.
Теперь нам необходимо зарегистрировать приложение в Google Cloud Console. Для этого выполните описанные ниже шаги:
- Откройте Google Cloud Console.
- Создайте новый проект, если у вас его ещё нет.
- В основном меню перейдите в раздел APIs & Services — Oauth consent screen.
- Заполните все необходимые поля, и перейдите в меню Credentials — Create credentials — OAuth client ID
- Из выпадающего меню выбираем Desktop app, вводим название приложение и жмём create.
- На этом настройка приложения закончена жмём ОК.
- Созданное приложение можно сохранить на ПК, название файла при сохранении может быть произвольным, допустим что мы сохранили его с именем app.json по ардесу C:/auth.
- Последним шагом настройки проекта в Google Cloud необходимо включить Google Ads API. Переходим в раздел library.
- В поиске пишем Google Ads.
- Включаем в проекте Google Ads API.
Таким образом мы получили токен разработчика и настроили проект в Google Cloud, теперь можно переходить к написанию кода на языке R.
Установка и подключение нужных пакетов на R
Пакет на языке R пакет можно рассматривать как его расширение. Каждый пакет состоит из набора функций и данных. Как и любое дополнительное программное обеспечение, пакеты необходимо один раз установить и подключать каждый раз, когда вам необходим его функционал.
Давайте установим и подключим пакеты, которые нам понадобятся по ходу статьи:
# установка пакетов
install.packages(c('rgoogleads', 'dplyr', 'forcats', 'ggplot2'))
# подключение пакетов
library(rgoogleads)
library(dplyr)
library(forcats)
library(ggplot2)
Авторизация в Google Ads API
Здесь у вас есть два варианта:
- пройти авторизацию со стандартными параметрами, используя вшитые учётные данные, такие как токен разработчика и id и secret клиента;
- использовать собственные учётные данные и конфигурацию авторизации.
Если у вас нет токена разработчика и своего приложения, используйте функцию gads_auth(), указав только свой email.
# авторизация
gads_auth('me@gmail.com')
Если же у вас есть собственные учётные данные, предварительно укажите их, используя функцию gads_auth_configur().
# данные клиента
my_app <- httr::oauth_app(
appname = 'Название клиента',
key = 'Id клиента',
secret = 'Secret клиента'
)
# конфигурация авторизации
gads_auth_configure(
app = my_app,
developer_token = 'ВАШ ТОКЕН РАЗРАБОТЧИКА'
)
# авторизация
gads_auth('me@gmail.com')
Если вы скачали данные вашего клиента в виде JSON файла, можете просто указать к нему путь, используя аргумент path.
# конфигурация авторизации
gads_auth_configure(
path = 'путь/к/файлу/app.json',
developer_token = 'ВАШ ТОКЕН РАЗРАБОТЧИКА'
)
# авторизация
gads_auth('me@gmail.com')
После запуска функции gads_auth() вы будете перенаправлены в браузер. В браузере пакет запросит у вас разрешение на доступ к данным, после подтверждения вы увидите сообщение «Authentication complete. Please close this page and return to R.».
Запрос данных из Google Ads API
Мы вплотную подобрались к запросу нужных нам данных. Следующим шагом в скрипте необходимо указать из какого именно аккаунта нам необходимо получить данные.
# аккаунты
## управляющий аккаунт
gads_set_login_customer_id('xxx-xxx-xxxx')
## рекламный аккаунт
gads_set_customer_id('xxx-xxx-xxxx')
Управляющий аккаунт необходимо указывать только в том случае, если доступ к рекламному аккаунту у вас через управляющий аккаунт. Если запрашиваете данные напрямую из рекламного аккаунта, функция gads_set_login_customer_id() вам не понадобится.
Теперь загрузим необходимые для визуализации данные:
# запрос данных из Google Ads
ads_data
<- gads_get_report(
resource = 'keyword_view',
fields = c('customer.descriptive_name',
'ad_group_criterion.criterion_id',
'ad_group_criterion.final_urls',
'ad_group_criterion.status',
'ad_group.id',
'ad_group.name',
'ad_group.status',
'campaign.id',
'campaign.name',
'campaign.status',
'metrics.impressions',
'metrics.clicks',
'metrics.cost_micros',
'metrics.ctr',
'metrics.search_top_impression_share',
'ad_group_criterion.quality_info.creative_quality_score',
'ad_group_criterion.quality_info.post_click_quality_score',
'ad_group_criterion.quality_info.search_predicted_ctr',
'ad_group_criterion.quality_info.quality_score'),
where
= c('metrics.impressions > 0',
'ad_group_criterion.quality_info.creative_quality_score
IN ("ABOVE_AVERAGE", "AVERAGE", "BELOW_AVERAGE")'),
during = 'LAST_30_DAYS'
)
В примере кода замените xxx-xxx-xxxx на идентификаторы вашего управляеющего и рекламного аккаунта.
Мы запросили необходимые для визуализации поля. К запрашиваемым данным применили фильтры, используя аргумент where:
- количество показов по ключевому слову более 0;
- показатель качества посадочной страницы ниже среднего, средний или выше среднего.
Таким образом мы оставляем в выборке только те ключевые слова, по которым достаточно данных для определения показателя качества и всех его компонентов.
Отчётный период можно задать несколькими способами:
- аргумент during, который мы использовали, позволяет задавать относительный период, в нашем примере 'LAST_30_DAYS'.
- пара аргументов date_from и date_to позволяет задавать статичный отчётный период между двумя датами. Даты необходимо передавать в формате ГГГГ-ММ-ДД.
Преобразование данных
Мы получили все нужные данные, теперь каждое ключевое слово необходимо определить в одну из категорий, в зависимости от количества балов показателя качества.
- 1 - 4 баллов — Low;
- 5 - 7 баллов — Middle;
- 8 - 10 баллов — High.
Наиболее простой способ это сделать — использовать пакет dplyr и функцию case_when().
# Определяем группу показателя качества для каждого ключевого слова
ads_data <- mutate(ads_data,
qiality_score_group = case_when(
ad_group_criterion_quality_info_quality_score <= 4 ~ 'Low',
between(ad_group_criterion_quality_info_quality_score, 5, 7) ~ 'Middle',
ad_group_criterion_quality_info_quality_score >= 8 ~ 'High'
)
)
Визуализация данных
Далее мы будем использовать для визуализации пакет ggplot2.
Ниже я приведу несколько примеров диаграмм, которые вы можете построить для анализа составляющих показателя качества.
Средний показатель качества в разрезе кампаний
Код для построения визуализации:
# Визуализация среднего показателя качества в разрезе кампаний
ads_data %>%
group_by(campaign_name) %>%
summarise(avg_qs = mean(ad_group_criterion_quality_info_quality_score, na.rm = TRUE)) %>%
ggplot(aes(x = fct_reorder(.f = campaign_name, .x = avg_qs, .fun = median), y = avg_qs, fill = avg_qs)) +
geom_bar(stat = "identity", position = "dodge") +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5, size = 9)) +
scale_fill_gradient(high = hcl(15,100,75), low = hcl(195,100,75)) +
ggtitle("Average Quality Score by Campaign") +
xlab('Campaign') +
ylab('Average Quality Score')
С помощью этого графика можно быстро определить кампании, над которыми нужно поработать. В конкретном случае в четвертой кампании средний показатель качества ключевых слов достаточно низкий — меньше пяти. Первые две кампании настроены на таргетинг в контекстно-медийной сети, в связи с чем на них не стоит обращать внимание.
Распределение ключевых слов по уровню показателя качества в разрезе рекламных кампаний
В ходе подготовки данных, в таблицу «ads_data» добавлен столбец «qiality_score_group», в котором каждое ключевое слово соответствует одной из трёх групп в зависимости от показателя качества:
- «Low» — ключевые слова с показателем качества ниже пяти;
- «Middle» — группа ключевых слова с показателем качества от пяти до семи;
- «High» — ключевые слова с показателем качества выше семи.
Код для построения визуализации:
# Визуализация по группированному показателю качества
ads_data %>%
group_by(campaign_name, qiality_score_group) %>%
summarise(keywords_count = n_distinct(ad_group_criterion_criterion_id)) %>%
ggplot(aes(x = campaign_name, y = keywords_count,fill = qiality_score_group))+
geom_col(stat = "count", position = "fill") +
scale_fill_manual(breaks=c("High","Middle","Low"),
values=c(High = "forestgreen",
Middle = "tan1" ,
Low = "firebrick1"))+
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5, size = 9))+
ggtitle("Number of keywords by Quality Score Group") +
xlab('Campaign') +
ylab('Kweywords number')
На представленном графике видно, что кампании «Ser / Контрагенты / NP» (пятая кампания справа), более 70% ключевых слов находятся в группе «Low», то есть показатель качества по этим словам ниже пяти.
Распределение ключевых слов по уровню релевантности объявления
Каждое ключевое слово соответствует одной из четырех групп в зависимости от того, какую оценку поставил Google:
- «Above average» — выше среднего;
- «Average» — средняя оценка;
- «Below average» — ниже среднего.
Код для построения визуализации:
# Визуализация по релевантности объявления
ggplot(ads_data, aes(x = campaign_name, fill = ad_group_criterion_quality_info_creative_quality_score))+
geom_bar(stat = "count", position = "fill")+
scale_fill_manual(values=c("forestgreen", "tan1" , "firebrick1","grey" ))+
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5, size = 9),
legend.position = 'bottom')+
ggtitle("Landing page experience by Campaign") +
xlab('Campaign') +
ylab('Kweywords number')
Релевантность объявления оказывает наименьшее влияние на показатель качества, тем не менее повысить оценку этой составляющей несложно. Вы можете выделить ключевые слова с низкой релевантностью объявления в отдельную группу объявлений либо добавить в рекламную кампанию новые объявления с ключевыми словами в заголовке или тексте.
Распределение ключевых слов по уровню релевантности целевой странице
Код для построения визуализации:
# Визуализация по качеству целевой страницы
ggplot(ads_data, aes(x = campaign_name, fill = ad_group_criterion_quality_info_post_click_quality_score))+
geom_bar(stat = "count", position = "fill")+
scale_fill_manual(values=c("forestgreen", "tan1" , "firebrick1","grey" ))+
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5, size = 9),
legend.position = 'bottom')+
ggtitle("AdRelevance by Campaign") +
xlab('Campaign') +
ylab('Kweywords number')
Оценка содержимого страницы сайта, на которую ведет рекламное объявление, важна при определении показателя качества. Улучшить ее сложно, так как алгоритм Google учитывает много факторов — от контента самой страницы, до удобства использования сайта.
Распределение ключевых слов по ожидаемому показателю кликабельности
Код для построения визуализации:
# Визуализация по ожидаемому значению CTR
ggplot(ads_data, aes(x = campaign_name, fill = ad_group_criterion_quality_info_search_predicted_ctr))+
geom_bar(stat = "count", position = "fill")+
scale_fill_manual(values=c("forestgreen", "tan1" , "firebrick1","grey" ))+
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5, size = 9),
legend.position = 'bottom')+
ggtitle("Expected CTR by Campaign") +
xlab('Campaign') +
ylab('Kweywords number')
Если у вас низкое ожидаемое значение CTR, можно:
- повысить ставки, чтобы объявления оказывалось на более высоких (и более кликабельных) позициях;
- добавить расширения объявлений;
- прописать в тексте объявления слова, которые привлекут внимание пользователей. Например, «скидка», «акция» или «распродажа».
Оценка процента показа над результатами поиска и CTR в зависимости от балла показателя качества
На данный момент с помощью визуализации мы нашли все слабые места, касающиеся показателя качества, разложив его на составляющие.
Для того, что бы оценить потенциальный результат, который мы получим, подняв показатель качества, мы можем посмотреть процент показов над результатами поиска в разрезе на группы показателя качества.
Код для построения визуализации:
# оценка % показа над результатами поиска
ads_data %>%
group_by(qiality_score_group) %>%
mutate(med_impression_share = median(search_top_impression_share))
%>%
ggplot(aes(x = fct_relevel(qiality_score_group, "Low",
"Middle", "High"),
y = search_top_impression_share, fill = med_impression_share))+
geom_boxplot(outlier.color = "grey", outlier.stroke = F) +
scale_fill_gradient(high = hcl(15,100,75), low = hcl(195,100,75)) +
scale_y_continuous(labels = scales::percent_format()) +
theme(legend.position = 'none') +
ggtitle("Search Top Impression Share by Quality Score Group") +
xlab('Quality Score Group') +
ylab('Search Top Impression Share, %')
Из приведённого выше графика видно, что у группы High наибольший процент показов над результатами поиска, и в целом процент показов над результатами поиска имеет линейную зависимость от группы показателя качества.
Так же мы можем проанализировать кликабельность (CTR) в зависимости от группы показателя качества.
Код для построения визуализации:
# CTR в зависимости от группы показателя качества
ads_data %>%
group_by(qiality_score_group) %>%
mutate(med_ctr = median(ctr)) %>%
ggplot(aes(x = fct_relevel(qiality_score_group, "Low", "Middle", "High"), y = ctr, fill = med_ctr))+
geom_boxplot(outlier.color = "grey", outlier.stroke = F) +
scale_fill_gradient(high = hcl(15,100,75), low = hcl(195,100,75)) +
scale_y_continuous(labels = scales::percent_format()) +
theme(legend.position = 'none') +
ggtitle("Search Top Impression Share by Quality Score Group") +
xlab('Quality Score Group') +
ylab('Search Top Impression Share, %')
Соответственно и CTR по ключевым словам из группы High выше.
Из приведённых выше графиков понятно, что повысив показатель качества мы значительно увеличим процент показов над результатами поиска, что в свою очередь увеличит CTR наших объявлений. Объём качественного трафика при этом также однозначно увеличится.
Выводы
Если правильно внедрить все пункты этой статьи, вы получите скрипт, который поможет визуализировать показатель качества и оптимизировать работу специалиста по контекстной рекламе. Чтобы запустить скрипт в RStudio, нужно:
- установить язык R и среду разработки RStudio;
- установить и подключить пакеты «rgoogleads»,«dplyr», «ggplot2» и «forcats»;
- по желанию получить свой токен разработчика и идентификатор клиента;
- пройти аутентификацию в Google Ads;
- запустить скрипт.
- проанализировать полученные графики.
Я привел несколько примеров графиков для удобного анализа всех факторов влиющиз на показатель качества:
- средний показатель качества в разрезе групп объявлений;
- распределение ключевых слов по уровню показателя качества в разрезе рекламных кампаний;
- распределение ключевых слов по уровню релевантности объявления;
- распределение ключевых слов по уровню релевантности целевой странице;
- распределение ключевых слов по ожидаемому показателю кликабельности.
Тщательно проработав показатель качества по ключевым словам, вы сможете значительно снизить стоимость клика и получить в несколько раз больше трафика в рамках выделенного бюджета, не теряя при этом качество трафика.
Если вы интересуетесь или планируете начать изучение языка R наверняка вам будет интересен мой telegram и youtube канал R4marketing, большая часть контента которого посвящены R — подписывайтесь!
По теме
Диджитализация АТБ. Комплексный онлайн-маркетинг для лидера ритейла Украины — кейс
Рассказываем как выстроить комплексную диджитал-стратегию
Что такое контекстная реклама — все, что нужно знать
По прогнозам к 2027 году рынок контекстной рекламы достигнет $447,9 млрд. Ее используют как мировые гиганты, так и небольшой бизнес. Но подойдет ли она вам?
Свежее
Кейс: как увеличить показы и установки приложения на 16% за две недели
Подробно о том, как мы улучшили позиции в топе и видимость в поисковой выдаче
Как легко запомнить пароли, пин-коды, телефоны и все важное
В статье поделюсь несколькими лайфхаками, которые помогут сохранить вашу память (и нервы!) и вовремя вспоминать, наконец, пин-коды банковских карт, исторические даты и другие важные вещи
Как оптимизировать конверсии для страниц приложения в App Store и Google Play
Какие поля и параметры имеют больше значения, и как выжать из них все