Курс 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"

  1. Google Analytics: обзор системы с примером использования
  2. Определяем цели и метрики
  3. Как установить Google Analytics на сайт
  4. Как подготовить свой Google Analytics к GDPR
  5. Как Google Analytics собирает информацию
  6. Пользователь, сессия, просмотр страниц
  7. Показатель отказов в Google Analytics
  8. Показатель отказов на одностраничных сайтах
  9. Google Analytics: Что такое Client ID
  10. Сегменты в Google Analytics
  11. События в Google Analytics
  12. Цели в Google Analytics
  13. Как Google Analytics определяет источник трафика?
  14. Ярлыки и сохраненные отчеты в Google Analytics
  15. Заметки / аннотации в Google Analytics
  16. UTM-метки в Google Analytics: зачем нужны и как настроить
  17. Все что вы хотели знать о UTM-метках, но боялись спросить
  18. Почему в direct попадает другой трафик и как это исправить
  19. Интерфейс отчетов + пользовательские отчеты в Google Analytics
  20. Обзор отчетов Google Analytics в реальном времени
  21. Сравнение моделей мульти­канальной атрибуции
  22. Диаграмма «Новые и вернувшиеся пользователи» — будьте осторожнее!
  23. Анализ просмотренных блоков страницы
  24. Пользовательские сводки / Dashboards в Google Analytics
  25. Специальные оповещения / Custom Alerts в Google Analytics
  26. Когортный анализ в Google Analytics
  27. Идентификатор отслеживания аккаунта Google Analytics
  28. Дополнение Google Analytics для Google Taблиц
  29. Пользовательские параметры и показатели
  30. Какие данные запрещено собирать в Google Analytics
  31. Как передать ClientID в произвольный параметр
  32. Как настроить User ID в Google Analytics
  33. Собственная группа каналов в Google Analytics
  34. Как в Google Analytics отобразить полный адрес страницы
  35. Вычисляемые показатели в Google Analytics
  36. Отслеживание внутреннего поиска на сайте в Google Analytics
  37. Расхождения данных о кликах из AdWords в Google Analytics
  38. Что такое GA Measurement Protocol
  39. Google Analytics API для маркетолога на практическом примере
  40. Отправка информации об оплате в GA из Google Spreadsheet (без CRM)
  41. Как определить мошенничество CPA-сетей с помощью GA API и R
  42. Обходим семплирование и собираем сырые данные
  43. Google Forms: фиксируем событие отправки формы в Google Analytics
  44. Cоздаем списки ремаркетинга из старых пользователей без ограничений
  45. Стриминг данных из Google Analytics в Facebook Pixel
  46. Синхронизация событий с пикселями Facebook, VK, Yandex, MyTarget
  47. Как добавить больше двух параметров в отчет Google Analytics
  48. Несколько действий внутри customTask
  49. Как фиксировать трафик и лиды с партнерских сайтов
  50. Удаляем параметр fbclid из отчетов
  51. Скрипт. Исключаем метку fbclid в промышленных масштабах

Marketello читают маркетологи из крутых компаний