Обнаружение и классификация бот-трафика в Google Analytics 4 с помощью BigQuery ML
Пример обнаружения и классификации бот-трафика в Google Analytics 4 с помощью BigQuery ML.
Нижеприведенный кейс основан на материале «Detecting and Classifying Bot Traffic in GA4 with BigQuery ML», автором которого является Ahmed Ali.
Начало
Читайте еще:
Ни для кого не секрет, что трафик ботов является распространенной проблемой для владельцев сайтов, так как он может искажать аналитические данные и неверно представлять поведение пользователей. Боты могут использоваться для различных целей, включая парсинг сайтов, рассылку спама, клик-фрод и многое другое.
Чтобы точно анализировать поведение пользователей и принимать решения на основе данных, важно уметь обнаруживать и классифицировать бот-трафик в Google Analytics. Однако традиционные методы выявления ботов часто требуют много времени, усилий и подвержены ошибкам.
В этой статье мы рассмотрим, как BigQuery ML может помочь эффективно обнаруживать и классифицировать бот-трафик в GA4. Независимо от того, новичок вы или опытный пользователь Google Analytics 4, это руководство предоставит вам полную инструкцию по выявлению и категоризации бот-трафика с помощью моделей BigQuery ML.
Перед тем, как начать обнаружение и классификацию бот-трафика, вам необходимо связать Google Analytics 4 c BigQuery. Проверив, что таблицы экспорта присутствуют в вашем наборе данных, вы можете переходить к настройке.
Последовательность действий по обнаружению и классификации бот-трафика в Google Analytics 4 с помощью BigQuery ML такая:
- определить бот-трафик с помощью демографических и поведенческих данных;
- промаркировать данные;
- обучить модель классификации BigQuery ML с использованием маркированного трафика ботов;
- оценить модель, используя статистические показатели, такие как точность, полнота и оценка F1;
- сделать прогнозы, используя обученную модель;
- использовать прогнозы для принятия мер против бот-трафика.
1. Определение бот-трафика с помощью демографических и поведенческих данных
Чтобы точно обнаружить и классифицировать трафик ботов в GA4 с помощью BigQuery ML, сначала нужно выявить закономерности в данных, указывающие на активность ботов. Два основных типа данных могут помочь нам в этой задаче: демографические и поведенческие данные.
Поведенческие данные
Хотя некоторых ботов сложно отличить от реальных пользователей, определенные поведенческие метрики помогают выявить аномальные взаимодействия, характерные для бот-трафика. Нижеприведенные показатели можно использовать за основу для обнаружения и классификации ботов. Однако вы можете добавить и другие метрики, которые считаете полезными для вашего случая.
- Время взаимодействия (Engagement time) - у ботов оно обычно короче, чем у людей — часто менее одной секунды;
- Доля новых пользователей (New user ratio) - высокий процент новых пользователей может указывать на ботов, так как они обычно не сохраняют файлы cookie;
- Сеансов на пользователя (Sessions per user) – продвинутые боты (особенно парсеры цен) часто имитируют поведение пользователей, сохраняя файлы cookie, и могут иметь аномально высокое число сессий в день — например, 50 и более;
- Транзакции (Transactions) - боты редко совершают покупки. Если у вас не интернет-магазин, можно анализировать другие макро-конверсии (например, подписки, комментарии, отзывы).
Демографические данные
Помимо поведенческих факторов, боты часто демонстрируют специфические демографические характеристики, связанные с серверами, на которых они размещены - местоположение дата-центра, страна, город и даже запланированное время работы.
- Страна (Country) - трафик из стран, не входящих в целевую аудиторию (например, для французского сайта — внезапные визиты из США), может быть признаком ботов;
- Город (City) - аналогично стране. Некоторые боты не передают данные о городе, и в аналитике он отображается как (not set);
- Тип устройства (Device) - хотя боты могут работать с любых устройств, чаще они запускаются на десктопах (но это не строгое правило);
- Операционная система (ОС) - боты часто работают на виртуальных машинах с Linux или Windows, но и здесь бывают исключения;
- Браузер (Browser) - боты обычно используют устаревшие версии браузеров. Если такие версии нехарактерны для вашей аудитории, это может быть сигналом;
Важно: демографические данные сами по себе недостаточны для точного определения ботов. Их нужно сочетать с поведенческими метриками.
Теперь, когда у нас есть контрольный список для выявления бот-трафика в GA4, мы можем приступить к анализу нашего набора данных, чтобы найти сегменты, соответствующие этим критериям. Для исследования данных и поиска таких сегментов мы будем использовать BigQuery. Однако вы также можете провести анализ с помощью Исследований Google Analytics 4 или Looker Studio. Наша главная цель — выявить сегменты трафика, которые соответствуют установленным ранее критериям.
Чтобы извлечь указанные параметры и показатели, вы можете воспользоваться нижеприведенным SQL-запросом. Он сгенерирован с помощью инструмента GA4SQL. Конечно же, вы можете создать свой собственный запрос.
В учебных целях мы будем использовать данные за первые три месяца 2023 года, а для оценки модели я воспользуюсь данными за апрель 2023. Таким образом, я буду использовать суффикс таблицы, охватывающий период с января по март.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
/* This query is generated by ga4Sql.com */ SELECT country, city, operating_system_version, browser, browser_version, COUNT(DISTINCT user_pseudo_id) AS total_users, COUNT(DISTINCT new_users) AS new_users, COUNT(DISTINCT new_users) / COUNT(DISTINCT user_pseudo_id) AS new_users_percentage, SAFE_DIVIDE(SUM(engagement_time_seconds), COUNT(DISTINCT session_id)) AS average_engagement_time_per_session, SAFE_DIVIDE(COUNT(DISTINCT session_id), COUNT(DISTINCT user_pseudo_id)) AS sessions_per_user, SUM(purchases) AS purchases, FROM ( SELECT geo.country AS country, geo.city AS city, device.operating_system_version AS operating_system_version, device.web_info.browser AS browser, device.web_info.browser_version AS browser_version, SAFE_DIVIDE(SUM((SELECT value.int_value FROM UNNEST (event_params) WHERE KEY = 'engagement_time_msec')), 1000) AS engagement_time_seconds, CONCAT(user_pseudo_id, (SELECT value.int_value FROM UNNEST (event_params) WHERE KEY = 'ga_session_id')) AS session_id, user_pseudo_id, SUM(CASE WHEN event_name = 'purchase' THEN 1 ELSE 0 END) AS purchases, MAX(CASE WHEN event_name = 'first_visit' THEN user_pseudo_id ELSE NULL END) AS new_users FROM `osipenkovru-373609.analytics_206854065.events_*` WHERE _TABLE_SUFFIX BETWEEN '20230101' AND '20230331' GROUP BY country, city, operating_system_version, browser, browser_version, session_id, user_pseudo_id ) GROUP BY country, city, operating_system_version, browser, browser_version ORDER BY total_users desc |
, где вместо osipenkovru-373609.analytics_206854065.events_* укажите свой путь к данными Google Analytics 4. Также вы можете изменить диапазон дат в _TABLE_SUFFIX.
После выполнения запроса вам следует проанализировать набор данных, чтобы найти сегменты, соответствующие указанным выше критериям — они понадобятся нам для обучающей выборки. Вот некоторые наблюдения из моего набора данных.
Поскольку Али использует данные своего блога, у него нет данных о покупках. Если ваши данные слишком разрежены, возможно, стоит установить порог для маркировки («labeling threshold» - порог классификации или минимальное количество пользователей для выборки) — например, 100 пользователей. Оптимальный порог зависит от размера вашего сайта.
Проанализировав данные, вы можете обнаружить определенные сегменты пользователей, соответствующие ранее установленным критериям бот-трафика. Например, сегменты со 100% показателем новых пользователей и крайне низким временем взаимодействия. В другом сегменте может наблюдаться подозрительно высокое количество сессий на одного пользователя (57 сессий).
Вам необходимо самостоятельно проанализировать свои данные и найти аналогичные паттерны (схожие признаки) для выявления потенциального бот-трафика. Когда вы найдете сегмент, соответствующий критериям, запишите соответствующие параметры. Например, на основе полученных данных Али пометил как бот-трафик пользователей из Китая, использующих Android 8.10, UC Browser версии 11.9.4.874.
2. Разметка набора данных
Для разметки нашего набора данных создается новое поле is_bot с двумя возможными значениями:
- 1 — обозначает бот-трафик;
- 0 — обозначает обычный трафик (не боты).
Это можно реализовать с помощью оператора CASE WHEN в нашем SQL-запросе.
Чтобы автоматизировать процесс разметки, можно экспортировать полученный результат SQL-запроса из BigQuery в CSV и использовать Excel. В нашем примере размечены только те сегменты, где было больше 10 пользователей. Но вы можете выбрать другой порог в зависимости от размера вашего сайта.
Пример формулы Excel:
1 |
="when country = '"&A2&"' and "&" city = '"&B2&"' and "&" operating_system_version = '"&C2&"' and "&" browser = '"&D2&"' and "&" browser_version = '"&E2&"' then 1 " |
А вот сегменты, которые были обозначены как бот-трафик:
Процесс, при котором информация в наборе данных помечается или классифицируется для использования в машинном обучении, называется маркировкой данных (или аннотирование данных).
Маркировка данных аннотирует необработанные данные значимыми метками, предоставляя контекст и категоризацию для понимания моделями машинного обучения (ML). Эти метки служат важными руководствами для моделей ML, позволяя им эффективно интерпретировать данные. Другими словами, Маркировка данных преобразует необработанные данные в понятный формат для моделей машинного обучения, облегчая распознавание образов и возможности прогнозирования.
Маркировка данных играет ключевую роль в машинном обучении по многим причинам. Она предоставляет важные данные для обучения контролируемых моделей МО, позволяя им изучать закономерности и делать прогнозы на основе маркированных примеров. Наличие высококачественных маркированных данных повышает точность модели, предоставляя четкие и последовательные сигналы обучения.
Маркировка данных также играет роль в смягчении предвзятости, обеспечивая репрезентативность и сбалансированность наборов данных, предотвращая наследование предвзятости моделями. Кроме того, маркированные данные обеспечивают автоматическую обработку и анализ данных, позволяя машинам эффективно обрабатывать и извлекать информацию из огромных объемов данных, экономя время и усилия по сравнению с ручными методами.
Процесс маркировки данных включает в себя назначение предопределенных меток точкам данных на основе установленных руководств или правил. Эта задача может быть выполнена либо вручную людьми-аннотаторами, либо с помощью автоматизированных методов с использованием программного обеспечения или алгоритмов. Ручная маркировка подразумевает, что люди вручную просматривают и назначают метки в соответствии с указанными руководящими принципами. Такой подход часто обеспечивает высокую точность, но может быть трудоемким и занимать много времени.
Автоматизированная маркировка использует программное обеспечение или алгоритмы для автоматизации процесса, потенциально повышая эффективность. Однако автоматизированные методы могут привносить ошибки или предвзятость, требуя тщательной оценки и мер контроля качества.
В некоторых случаях гибридный подход сочетает ручные и автоматизированные методы для баланса точности и эффективности. Например, люди-аннотаторы могут маркировать подмножество данных для создания высококачественного обучающего набора данных, который затем используется для обучения автоматизированной системы маркировки. Затем эта система может маркировать более крупные наборы данных более эффективно, сохраняя при этом разумную точность.
После назначения меток они интегрируются с исходными необработанными данными для создания маркированного набора данных. Эти маркированные данные затем служат входными данными для обучения моделей машинного обучения.
Ручная маркировка
- Аннотаторы вручную просматривают и присваивают метки каждой точке данных;
- Обеспечивает высокую точность и качество благодаря человеческому суждению и вниманию к деталям;
- Однако это может быть трудоемким, длительным и дорогим процессом, особенно для больших наборов данных.
Автоматическая маркировка
- Программные инструменты или алгоритмы автоматизируют процесс маркировки;
- Значительно повышает эффективность и сокращает человеческий труд;
- Могут возникнуть ошибки или предвзятость из-за ограничений автоматизированных алгоритмов, что требует тщательной оценки и мер контроля качества.
Гибридный подход
- Сочетает ручные и автоматизированные методы маркировки;
- Обеспечивает баланс между точностью и эффективностью за счет использования человеческих аннотаторов для подмножества данных с целью создания высококачественного обучающего набора данных;
- Затем применяются автоматизированные методы для распространения маркировки на более крупные наборы данных с сохранением приемлемой точности.
Подробнее про маркировку данных в Google Cloud читайте в официальной документации.
Поскольку мы для своего набора данных самостоятельно определили критерии обнаружения бот-трафика, то и маркировку данных проведем самостоятельно (вручную). Вот так выглядит полный SQL-запрос с добавленным новым полем is_bot и включением столбца user_pseudo_id, поскольку обучение модели будет происходить на уровне пользователя:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
/* This query is generated by ga4Sql.com */ CREATE VIEW `osipenkovru-373609.analytics_206854065.bot_traffic` AS SELECT user_pseudo_id, CASE WHEN country = 'Germany' AND city = 'Frankfurt' AND operating_system_version = 'iOS 16.1.1' AND browser = 'Safari' AND browser_version = '16.1' THEN 1 WHEN country = 'China' AND city = 'Shanghai' AND operating_system_version = 'iOS 11.0' AND browser = 'Safari' AND browser_version = '11' THEN 1 WHEN country = 'China' AND city = '' AND operating_system_version = 'iOS 11.0' AND browser = 'Safari' AND browser_version = '11' THEN 1 WHEN country = '' AND city = '' AND operating_system_version = 'Linux ' AND browser = 'Chrome' AND browser_version = '81.0.4044.92' THEN 1 WHEN country = 'United States' AND city = 'Columbus' AND operating_system_version = 'Macintosh Intel 10.15' AND browser = 'Chrome' AND browser_version = '91.0.4472.114' THEN 1 WHEN country = 'China' AND city = 'Zhengzhou' AND operating_system_version = 'iOS 11.0' AND browser = 'Safari' AND browser_version = '11' THEN 1 WHEN country = 'United States' AND city = 'Ashburn' AND operating_system_version = 'Windows 10' AND browser = 'Firefox' AND browser_version = '63' THEN 1 WHEN country = 'United States' AND city = 'Ashburn' AND operating_system_version = 'Windows 10' AND browser = 'Edge' AND browser_version = '17.17134' THEN 1 WHEN country = '' AND city = '' AND operating_system_version = 'Android 4.3' AND browser = 'Android Browser' AND browser_version = '4' THEN 1 WHEN country = 'Germany' AND city = '' AND operating_system_version = ' ' AND browser = 'Mozilla Compatible Agent' AND browser_version = '5' THEN 1 WHEN country = 'United States' AND city = 'Ashburn' AND operating_system_version = 'iOS 11.0' AND browser = 'Safari' AND browser_version = '11' THEN 1 WHEN country = 'China' AND city = '' AND operating_system_version = 'Android 8.0.0' AND browser = 'Chrome' AND browser_version = '61.0.3163.128' THEN 1 WHEN country = 'China' AND city = '' AND operating_system_version = 'Android 8.0.0' AND browser = 'Android Webview' AND browser_version = '68.0.3440.91' THEN 1 WHEN country = 'United States' AND city = '' AND operating_system_version = 'Windows 10' AND browser = 'Chrome' AND browser_version = '76.0.3809.71' THEN 1 WHEN country = 'China' AND city = 'Shanghai' AND operating_system_version = 'Android 8.1.0' AND browser = 'UC Browser' AND browser_version = '11.9.4.974' THEN 1 WHEN country = 'China' AND city = 'Zhengzhou' AND operating_system_version = 'Android 8.1.0' AND browser = 'UC Browser' AND browser_version = '11.9.4.974' THEN 1 ELSE 0 END AS is_bot, country, city, operating_system_version, browser, browser_version, COUNT(DISTINCT user_pseudo_id) AS total_users, COUNT(DISTINCT new_users) AS new_users, COUNT(DISTINCT new_users) / COUNT(DISTINCT user_pseudo_id) AS new_users_percentage, SAFE_DIVIDE(SUM(engagement_time_seconds), COUNT(DISTINCT session_id)) AS average_engagement_time_per_session, SAFE_DIVIDE(COUNT(DISTINCT session_id), COUNT(DISTINCT user_pseudo_id)) AS sessions_per_user, SUM(purchases) AS purchases, FROM ( SELECT geo.country AS country, geo.city AS city, device.operating_system_version AS operating_system_version, device.web_info.browser AS browser, device.web_info.browser_version AS browser_version, SAFE_DIVIDE(SUM((SELECT value.int_value FROM UNNEST (event_params) WHERE KEY = 'engagement_time_msec')), 1000) AS engagement_time_seconds, CONCAT( user_pseudo_id, (SELECT value.int_value FROM UNNEST (event_params) WHERE KEY = 'ga_session_id')) AS session_id, user_pseudo_id, SUM(CASE WHEN event_name = 'purchase' THEN 1 ELSE 0 END) AS purchases, MAX(CASE WHEN event_name = 'first_visit' THEN user_pseudo_id ELSE NULL END) AS new_users FROM `osipenkovru-373609.analytics_206854065.events_*` WHERE _TABLE_SUFFIX BETWEEN '20230101'AND '20230331' GROUP BY country, city, operating_system_version, browser, browser_version, session_id, user_pseudo_id ) GROUP BY user_pseudo_id, is_bot, country, city, operating_system_version, browser, browser_version |
, где вместо osipenkovru-373609.analytics_206854065.bot_traffic задайте путь к проекту и название представления (в примере – bot_traffic), которое будет создано в BigQuery. Не забудьте заменить osipenkovru-373609.analytics_206854065.events_* на свой путь в Google Cloud. При необходимости скорректируйте даты в _TABLE_SUFFIX.
Выполните SQL-запрос. Вы должны увидеть созданное представление:
3. Обучение BigQuery ML
После подготовки обучающей выборки следующим шагом будет обучение модели с использованием бинарной логистической регрессии LOGISTIC_REG, так как наши данные относятся к двум категориям:
- 1 - для ботов;
- 0 - для обычных пользователей.
Для обучения модели необходимо выполнить следующий SQL-запрос:
1 2 3 4 5 6 7 8 9 10 11 |
CREATE OR REPLACE MODEL `osipenkovru-373609.analytics_206854065.bot_traffic_logreg` OPTIONS( MODEL_TYPE="LOGISTIC_REG", INPUT_LABEL_COLS=["is_bot"] ) AS SELECT * FROM `osipenkovru-373609.analytics_206854065.bot_traffic` |
, где вместо osipenkovru-373609.analytics_206854065.bot_traffic укажите свой путь к представлению с данными, а в osipenkovru-373609.analytics_206854065.bot_traffic_logreg введите свой путь для создания модели с именем bot_traffic_logreg.
Перед тем, как выполнить запрос и запустить обучение, посмотрите в правый верхний угол. Вы должны увидеть сообщение примерно такого содержания: This query will process .... (ML) when run. Depending on the model type and training data size, the training job can take minutes or even hours.
Этот запрос обработает 196,49 МБ (ML) при запуске. В зависимости от типа модели и размера обучающих данных, задание по обучению может занять минуты или даже часы.
Нажмите RUN и подождите. Через некоторое время (если все прошло успешно) вы должны увидеть созданную модель в разделе Models:
4. Оценка модели
После завершения обучения модели следующим шагом является оценка ее производительности с использованием функции ML.EVALUATE. Это предоставит нам список метрик, которые мы можем использовать для определения эффективности нашей модели.
Скопируйте нижеприведенный запрос и запустите его:
1 2 3 4 |
SELECT * FROM ML.EVALUATE(MODEL `osipenkovru-373609.analytics_206854065.bot_traffic_logreg`) |
, где вместо osipenkovru-373609.analytics_206854065.bot_traffic_logreg укажите свой путь к созданной модели.
После выполнения запроса вы должны увидеть следующие результаты:
- precision (точность) - соотношение правильно предсказанных ботов (true positives) к общему количеству предсказанных ботов. В контексте бот-трафика точность будет означать, насколько точно модель предсказала бот-трафик по сравнению с общим количеством предсказанного трафика. Например, если модель предсказала, что было 100 сессий бот-трафика, и 87 из них действительно оказались бот-трафиком, то точность модели составит 87%;
- recall (полнота) - отношение истинно положительных результатов к общему количеству фактических положительных результатов. В контексте бот-трафика полнота будет означать, насколько хорошо модель способна идентифицировать все фактические сессии бот-трафика. Например, если в наборе данных на самом деле было 150 сессий бот-трафика, а модель правильно идентифицировала 100 из них, то полнота модели составит 67%;
- accuracy (точность) - общий коэффициент правильных предсказаний модели. В контексте бот-трафика точность будет означать, насколько хорошо модель способна правильно предсказать все сессии трафика, как бот, так и не бот. В нашем случае у нас отличная точность — 99%;
- f1-score - это среднее гармоническое от precision и recall, обеспечивающее сбалансированную оценку эффективности модели с учетом как ложноположительных, так и ложноотрицательных результатов. Она учитывает как точность, так и полноту, чтобы предоставить сбалансированную оценку работы модели;
- log_loss (логарифмическая потеря) - мера производительности классификационной модели, где предсказанный выход представляет собой вероятностное значение между 0 и 1. В контексте бот-трафика логарифмическая потеря будет измерять, насколько хорошо модель способна предсказать вероятность того, что сессия является бот-трафиком или нет. ем ниже значение, тем лучше модель предсказывает вероятность принадлежности к ботам;
- roc_auc (ROC AUC, Receiver Operating Characteristic – Area Under the Curve) - метрика, которая измеряет способность модели различать положительные и отрицательные классы. Она отображает истинно положительный показатель (TPR) в зависимости от ложноположительного показателя (FPR) при различных пороговых значениях классификации. Для трафика ботов ROC AUC будет измерять способность модели различать трафик ботов и не-ботов. Более высокое значение ROC AUC указывает на лучшую производительность.
5. Прогнозирование, используя модель
Теперь настало время для долгожданной части, которая заключается в составлении прогнозов. Мы будем использовать функцию ML.PREDICT для генерации прогнозов на основе идеальной модели, которую мы разработали. Как упоминалось ранее, мы обучили модель на данных за первые три месяца 2023 года и будем использовать данные за апрель для прогнозирования.
Запрос для прогнозирования должен быть простым, состоящим из двух частей: первая часть предназначена для прогнозирования, а вторая часть — для набора данных за апрель, для которого мы хотим получить прогнозы.
Итоговый SQL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
SELECT user_pseudo_id, predicted_is_bot, CASE WHEN predicted_is_bot = 0 THEN predicted_is_bot_probs[OFFSET(1)].prob WHEN predicted_is_bot = 1 THEN predicted_is_bot_probs[OFFSET(0)].prob END AS probability FROM ML.PREDICT(MODEL `osipenkovru-373609.analytics_206854065.bot_traffic_logreg`, ( SELECT user_pseudo_id, country, city, operating_system_version, browser, browser_version, COUNT(DISTINCT user_pseudo_id) AS total_users, COUNT(DISTINCT new_users) AS new_users, COUNT(DISTINCT new_users) / COUNT(DISTINCT user_pseudo_id) AS new_users_percentage, SAFE_DIVIDE(SUM(engagement_time_seconds), COUNT(DISTINCT session_id)) AS average_engagement_time_per_session, SAFE_DIVIDE( COUNT(DISTINCT session_id), COUNT(DISTINCT user_pseudo_id)) AS sessions_per_user, SUM(purchases) AS purchases, FROM ( SELECT geo.country AS country, geo.city AS city, device.operating_system_version AS operating_system_version, device.web_info.browser AS browser, device.web_info.browser_version AS browser_version, SAFE_DIVIDE(SUM((SELECT value.int_value FROM UNNEST (event_params) WHERE KEY = 'engagement_time_msec')), 1000) AS engagement_time_seconds, CONCAT(user_pseudo_id, (SELECT value.int_value FROM UNNEST (event_params) WHERE KEY = 'ga_session_id')) AS session_id, user_pseudo_id, SUM(CASE WHEN event_name = 'purchase' THEN 1 ELSE 0 END) AS purchases, MAX(CASE WHEN event_name = 'first_visit' THEN user_pseudo_id ELSE NULL END) AS new_users FROM `osipenkovru-373609.analytics_206854065.events_*` WHERE _TABLE_SUFFIX BETWEEN '20230401' AND '20230430' GROUP BY country, city, operating_system_version, browser, browser_version, session_id, user_pseudo_id ) GROUP BY user_pseudo_id, country, city, operating_system_version, browser, browser_version)) |
, где вместо osipenkovru-373609.analytics_206854065.bot_traffic_logreg укажите путь к своей модели, а путь osipenkovru-373609.analytics_206854065.events_* замените на свой для данных Google Analytics 4.
Результат в BigQuery:
Результат выполнения запроса должен содержать значение в поле predicted_is_bot, где:
- 0 означает, что данный пользователь с user_pseudo_id не бот;
- 1 означает, пользователь с соответствующим уникальным идентификатором (Client ID) является ботом.
Кроме того, для каждого пользователя будет отображаться вероятностный показатель probability (например, 0.95 — 95% вероятность быть ботом). Вы можете задать порог классификации (например, 80%)
- если вероятность ≥ 80% — пользователь помечается как бот (1);
- если < 80% — как обычный пользователь (0).
6. Использование прогнозов для принятия мер против бот-трафика
Теперь вы можете использовать результаты модели различными способами:
- создание фильтров - исключайте идентификаторы пользователей, распознанных как боты, из отчетности;
- анализ бот-трафика - проведите детальное исследование, чтобы оценить влияние ботов на производительность сайта;
- оптимизация стратегий - используйте полученные данные для разработки мер по снижению бот-трафика в будущем;
- сравнительный анализ - изучите динамику бот-трафика за разные периоды времени, чтобы выявить тенденции и изменения.
После объединения данных о сеансах по каждому пользователю согласно прогнозируемым результатам, Али (автор оригинального материала) представил полученные ML-данные по своему блогу за апрель 2023 года: