Курс Google Analytics → Как определить мошенничество CPA-сетей с помощью GA API и R
Если ваш бизнес привлекает трафик на сайт с помощью CPA-сетей — обязательно прочтите историю о том, какие технические хитрости могут использовать недобросовестные партнерские сети:
И вот еще одно сообщение:
От себя добавлю, что я лично встречал такое на одном из украинских интернет магазинов.
Компания OWOX вместе с Райффайзенбанком уже успела сделать отдельный кейс по этой теме и рассказала, как можно обезопасить себя от такого мошенничества используя стриминг сырых данных о посещениях сайта в Google BigQuery.
Для тех, кто не использует BigQuery в качество хранилища данных сайта я решил сделать решение на R, которое позволяет проверить свои Google Analytics данные на наличие такой проблемы. Сразу хочу сказать, что решение можно использовать, если в custom dimensions Google Analytics хранятся ClientID, SessionID, Hit Timestamp и Referrer — эти поля являются необходимыми для решения задачи. Если у вас таких данных нет — самое время настроить сбор таких данных по инструкции от Simo Ahava — Improve Data Collection With Four Custom Dimensions. Это поможет вам в будущем обрабатывать GA данные во внешних системах и строить более сложные отчеты, в том числе по атрибуции.
Если вы никогда не использовали язык программирования R, то стоит для начала установить R (Windows/Mac) и R Studio. Так же, не забудьте установить все используемые библиотеки — команды для их установки находятся в конструкциях «#install.package». Чтобы установить библиотеку достаточно выделить команду (без знака решетки) и нажать Ctrl+Enter (для Mac — Cmd+Enter). Чтобы запустить весь скрипт — можно выделить весь код и нажать Ctrl+Enter (для Mac — Cmd+Enter). Впрочем, изучение вопроса выгрузки данных из GA можно из этой статьи в блоге Burger Data.
Версия скрипта на R для Google Analytics
#install.package("googleAnalyticsR", dependencies = TRUE) #install.packages("googleAuthR") library(googleAnalyticsR)#Подключаем библиотеку googleAnalyticsR library(googleAuthR)#Подключаем библиотеку googleAuthR ga_auth() dateFrom <- '2018-03-01' #С какого дня выгружать данные из GA dateTo <- '2018-03-15' #По какой день выгружать данные из GA segment_def_for_call <- "users::condition::ga:medium=~cpa" #сегмент пользователей, которые хоть раз были по каналу СРA seg_obj <- segment_ga4("CPA", segment_id = segment_def_for_call) #задаем сегмент в формат запроса к API GAData <- google_analytics_4(123456789, date_range = c(dateFrom,dateTo), metrics = c("pageviews","sessions"), dimensions = c("dimension1", "dimension5","sourceMedium", "dimension6","pagePath","dimension3"), segments = seg_obj, anti_sample = TRUE) # Запрос к API Google Analytics GAData <- GAData[order(GAData$dimension1, GAData$dimension6),] #Сортируем данные сначала по ClientID и по HitTimestamp GAData$timestamp <-substr(GAData$dimension6, 1, 19) #Удаляем из HitTimestamp лишние данные GAData$timestamp <- gsub("T", " ", GAData$timestamp) # Заменяем "Т" на пробел (нужно для преобразования даты в Timestamp формат) GAData$timestamp <-as.numeric(as.POSIXct(GAData$timestamp)+7200) #Преобразовываем дату в Timestamp формат и записываем в новую колонку #install.packages("dplyr") library(dplyr) #Подключаем библиотеку dplyr для дополнительной обработки дата фрейма GAData$timeFromLastHit <-GAData$timestamp - lag(GAData$timestamp)#Считаем время с последнего хита и записываем в новую колонку GAData$timeFromLastHit <- ifelse((GAData$dimension1==lag(GAData$dimension1)), GAData$timeFromLastHit, "0") #Ставим 0 для первого хита пользователя GAData$lastPagePath <-lag(GAData$pagePath) # GAData$lastPagePath <- ifelse((GAData$dimension1==lag(GAData$dimension1)), GAData$lastPagePath, "-") # GAData$sourceLastHit<- lag(GAData$sourceMedium) #Записываем в новую колонку источник предыдущего хита GAData$sourceLastHit <- ifelse((GAData$dimension1==lag(GAData$dimension1)), GAData$sourceLastHit, "-") # GAData$NewSession <- ifelse(((GAData$sourceLastHit==GAData$sourceMedium)&(GAData$dimension1==lag(GAData$dimension1))), "No", "Yes") #Записываем в новую колонку признак новой сессии subGAData <- GAData[!grepl("No", GAData$NewSession),] #Создаем новый датафрейм с хитами, которые спровоцировали новую сессию subGAData$timeFromLastHit <- as.numeric(as.character(subGAData$timeFromLastHit)) #Конвертируем timeFromLastHit в числовой формат subGAData <-subset(subGAData, ((timeFromLastHit<60)&(timeFromLastHit>0)&(pagePath==lastPagePath))) #Оставляем в датафрейме только те данные, в которых предыдущая страница равна текущей и время с предыдущего хита < 60 subGAData <- subGAData[,c("dimension1","sourceMedium","dimension6", "pagePath", "dimension3", "timeFromLastHit", "lastPagePath", "sourceLastHit")] names(subGAData)[1]<-"ClientID" #меняем название колонок names(subGAData)[3]<-"Hit Timestamp" names(subGAData)[5]<-"Referrer" write.csv(subGAData, file = "cpa_cheating.csv") # записываем данные в csv #install.packages("googlesheets") library("googlesheets") gs_upload("cpa_cheating.csv") #записываем данные в гугл таблицу
Дальше перейдем к конфигурациям скрипта. Обязательно перед запуском нужно:
- в 8 и 9 строке нужно указать даты, за которые вы хотите выгрузить данные из Google Analytics;
- в 11 строке нужно указать канал (utm_medium), по которому будет происходить проверка на перезапись источников трафика;
- в 14 строке нужно указать View ID Google Analytics, из которого будут выгружаться данные. Это значение можно найти в настройках представления;
- в 17 строке указаны параметры Google Analytics. В dimension1 — ClientID, dimension5 — SessionID, dimension6 —HitTimestamp, dimension3 — Referrer. Скорее всего, у вас эти даные будут находится под другими индексами, потому здесь и ниже в скрипте нужно поменять индексы custom dimensions на свои.
В каждой строчке кода находятся комментарии, потому можно разобраться в моей логике обработки данных и по необходимости усовершенствовать скрипт. Напомню, скрипт позволяет получить таблицу в Google Sheets, которая показывает список всех пользователей (ClientID), для которых на одной и той же странице в пределах 60 секунд была зафиксирована смена источника трафика.
Подробнее о полях таблицы Google Analytics:
- ClientID — уникальный идентификатор пользователя;
- sourceMedium — перезаписанный источник сеанса пользователя;
- Hit Timestamp — пользовательское время на момент перезаписи источника;
- pagePath — страница, на которой был перезаписан источник трафика;
- Referrer — URI страницы, с которой был совершен переход на текущую;
- timeFromLastHit —столько секунд назад для этого пользователя был зафиксирован хит с другим (предыдущим) источником трафика;
- lastPagePath —предыдущая страница пользователя, которую просмотрел этот пользователь перед перезаписью источника трафика;
- sourceLastHit — источник трафика для предыдущей страницы пользователя, которая была не раньше чем 60 секунд назад.
В таблице Google Analytics нет случаев, когда явно видно подозрительную перезапись источника трафика, о которой написано в начале статьи, поскольку сейчас там видно случаи, когда один и тот же пользователь из одной поисковой выдачи Google в пределах 1 минуты кликал по платным и органическим объявлениям одного сайта. Скорее всего, если в такой таблице у вас в Referrer будут отображаться ссылки вашего сайта — это будет свидетельствовать о том, что у вас замечена подозрительная активность CPA-сетей.
Если вы тоже изучали этот вопрос (мошенничества СРА-сетей) — пишите в комментариях, какие случаи встречали и помогло ли мое решение в выявлении такой проблемы.
Источник: https://iosiuk.blogspot.com/2018/03/cpa-google-analytics-r.html
Другие уроки курса "Google Analytics"
- Google Analytics: обзор системы с примером использования
- Определяем цели и метрики
- Как установить Google Analytics на сайт
- Как подготовить свой Google Analytics к GDPR
- Как Google Analytics собирает информацию
- Пользователь, сессия, просмотр страниц
- Показатель отказов в Google Analytics
- Показатель отказов на одностраничных сайтах
- Google Analytics: Что такое Client ID
- Сегменты в Google Analytics
- События в Google Analytics
- Цели в Google Analytics
- Как Google Analytics определяет источник трафика?
- Ярлыки и сохраненные отчеты в Google Analytics
- Заметки / аннотации в Google Analytics
- UTM-метки в Google Analytics: зачем нужны и как настроить
- Все что вы хотели знать о UTM-метках, но боялись спросить
- Почему в direct попадает другой трафик и как это исправить
- Интерфейс отчетов + пользовательские отчеты в Google Analytics
- Обзор отчетов Google Analytics в реальном времени
- Сравнение моделей мультиканальной атрибуции
- Диаграмма «Новые и вернувшиеся пользователи» — будьте осторожнее!
- Анализ просмотренных блоков страницы
- Пользовательские сводки / Dashboards в Google Analytics
- Специальные оповещения / Custom Alerts в Google Analytics
- Когортный анализ в Google Analytics
- Идентификатор отслеживания аккаунта Google Analytics
- Дополнение Google Analytics для Google Taблиц
- Пользовательские параметры и показатели
- Какие данные запрещено собирать в Google Analytics
- Как передать ClientID в произвольный параметр
- Как настроить User ID в Google Analytics
- Собственная группа каналов в Google Analytics
- Как в Google Analytics отобразить полный адрес страницы
- Вычисляемые показатели в Google Analytics
- Отслеживание внутреннего поиска на сайте в Google Analytics
- Расхождения данных о кликах из AdWords в Google Analytics
- Что такое GA Measurement Protocol
- Google Analytics API для маркетолога на практическом примере
- Отправка информации об оплате в GA из Google Spreadsheet (без CRM)
- Как определить мошенничество CPA-сетей с помощью GA API и R
- Обходим семплирование и собираем сырые данные
- Google Forms: фиксируем событие отправки формы в Google Analytics
- Cоздаем списки ремаркетинга из старых пользователей без ограничений
- Стриминг данных из Google Analytics в Facebook Pixel
- Синхронизация событий с пикселями Facebook, VK, Yandex, MyTarget
- Как добавить больше двух параметров в отчет Google Analytics
- Несколько действий внутри customTask
- Как фиксировать трафик и лиды с партнерских сайтов
- Удаляем параметр fbclid из отчетов
- Скрипт. Исключаем метку fbclid в промышленных масштабах