Прогнозирование SEO-трафика Google Analytics 4 с помощью Python и Prophet

08 августа, 2022

В этой статье познакомимся с алгоритмом прогнозирования SEO-трафика вашего веб-сайта с помощью Python и библиотеки Prophet на примере данных Google Analytics 4.

Обновление: я выпустил электронное руководство по Google Analytics 4. Бесплатно скачать его можно в формате .PDF по ссылке.

Вступление

Умение прогнозировать будущие показатели вашего бизнеса на основе исторических данных - следующий уровень, к которому должен стремиться каждый веб-аналитик и интернет-маркетолог, работающий с новым счетчиком Google Analytics и временными рядами. Учитывая одну из парадигм, по которой Google развивает GA4, невольно задумываешься о том, какими еще компетенциями и навыками должен обладать специалист в современном мире.

Наверняка вы знаете, что Google Analytics 4 может автоматически прогнозировать поведение пользователей с помощью технологии машинного обучения. Например, оценить вероятность конверсии, которую совершают пользователи в ближайшие 7 дней на основе их активности на вашем сайте или в мобильном приложении за последние 28 дней, или вероятность оттока, то есть когда те, кто был активен, вдруг перестанут проявлять активность. Искусственный интеллект может спрогнозировать и доход от покупки в ближайшие 28 дней на основе поведения пользователя за последние 28 дней.

Пример прогноза вероятности покупки в Google Analytics 4

Недавно в счетчике GA4 появился дополнительный способ идентификации Моделирование. Когда пользователи запрещают отслеживание их действий, количество данных в отчетах резко сокращается. Чтобы устранить пробелы, в дело вступает машинное обучение и специальные алгоритмы. Они могут использоваться для аппроксимации пробелов в данных, которые создаются пользователями, которые отказываются от персонализации рекламы, путем моделирования поведения пользователей, которые согласились с отслеживанием.

Другими словами, Google Analytics будет сам достраивать недостающие данные для тех пользователей, кто отказался от отслеживания, на основе данных тех пользователей, кто был не против, чтобы их отслеживали.

Способы идентификации пользователей в Google Analytics 4

За AI и ML будущее, в этом нет никаких сомнений. Все эти нововведения в Google Analytics 4 так же подтверждают вышеописанное - мы не просто должны уметь анализировать данные, которые смог для нас собрать аналитический инструмент, но и стараться самостоятельно прогнозировать изменения трафика в зависимости от тех или иных событий.

В этом материале я опишу способ прогнозирования SEO-трафика на основе исторических данных вашего счетчика Google Analytics 4 с помощью Python, библиотеки Prophet, браузера и Colab.

Перед тем, как мы это сделаем, сразу хотелось бы отметить следующее:

  • чем больше у вас будет исторических данных, тем точнее будет ваша модель и, следовательно, прогнозы;
  • целью данной публикации является описание методики и последовательности действий, а не обучение вас работы с Colab, Python и пониманию того, как устроена библиотека Prophet и какие в нее заложены функции. Но зная сам алгоритм, вам будет проще разобраться в отдельных процессах в дальнейшем. Именно поэтому в статье какие-то вещи могут быть упомянуты вскользь и до конца не разбираться (например, как работает API Google Analytics 4, что такое сервисный аккаунт Google, какие еще есть функции в библиотеке Prophet или почему нужны именно такие библиотеки Python, а не другие);
  • поскольку программы, библиотеки и сами сервисы постоянно обновляются, я, как автор, не гарантирую полной работоспособности представленного кода через n-ое количество времени. Возможно, вам предстоит переработать его под свои задачи. Обязательно учитывайте дату выхода этого материала при повторении шагов, описанных в этой статье.

Мы будем прогнозировать органический трафик (Organic Search) для данных Google Analytics 4, где рассчитанный тренд корректируется с учетом сезонности и предыдущей периодичности. Сделать прогноз можно разными способами и с помощью различных инструментов, но именно в этой статье речь пойдет о Python, API Google Analytics 4, Prophet и Colab.

Решение текущей задачи будет состоять из трех основных этапов:

  1. получение данных из Google Analytics 4 о SEO-трафике за определенный период времени;
  2. моделирование данных с помощью Prophet;
  3. визуализация данных - показать изменение тренда и смоделированный прогноз.

Давайте начнем.

Получение данных Google Analytics 4

Для того, чтобы получить данные из Google Analytics 4, необходимо:

  • создать проект, сервисный аккаунт и включить API Google Analytics в Google Cloud Platform;
  • добавить сервисный аккаунт в ресурс Google Analytics 4;
  • загрузить файл в Colab;
  • установить библиотеку для Python;
  • написать код извлечения данных.

Разберем каждый шаг подробнее.

Настройки в Google Cloud Plaftorm

Перейдите по ссылке и создайте новый проект в Google Cloud Platform.

Создание проекта

Примечание: для работы вы можете использовать аккаунт без привязанной карты.

Задайте произвольное название в поле Project name (например forecast) и нажмите кнопку Create:

Название проекта (Project name)

Выбрав проект, в поиске введите Google Analytics Data API и включите API Google Analytics:

Поиск по Google Analytics Data API

С помощью кнопки Enable:

Enable Google Analytics Data API

Затем перейдите в раздел IAM & AdminService Accounts:

IAM & Admin – Service Accounts

Создайте сервисный аккаунт через Create Service Account:

Создание сервисного аккаунта (Create Service Account)

Введите имя сервисного аккаунта (например: forecast):

Имя сервисного аккаунта (Service account name)

Нажмите Done. Будет создан сервисный аккаунт, вы увидите его в списке всех аккаунтов. Напротив него нажмите на иконку с тремя точками и выберите Manage keys:

Manage keys

Затем создайте новый ключ: Add key – Create new key:

Создание нового ключа (Create new key)

Key type – JSON. В завершение нажмите Create:

Key type – JSON

После этого будет создан файл, который автоматически сохранится у вас локально на компьютере.

Добавление сервисного аккаунта в Google Analytics 4

Откройте этот файл (в блокноте, Notepad++ и т.д.) и скопируйте значение поля client_email:

Копирование значения поля client_email

Откройте свой ресурс Google Analytics 4, с которым планируете работать и для которого будете делать прогноз трафика. Перейдите в раздел Администратор – Ресурс - Управление доступом к ресурсу:

Управление доступом к ресурсу

Добавьте нового пользователя:

Добавление нового пользователя

Для работы с Google Analytics Data API v1 необходимы только разрешения на чтение и анализ (он же Читатель). В поле адреса электронный почты добавьте скопированный на предыдущем шаге e-mail сервисного аккаунта:

Роль - Читатель

В правом верхнем углу нажмите кнопку Добавить. На этом настройки Google Analytics 4 завершены.

Работа с Colab

Чтобы упростить процесс написания кода и повторения тех шагов, которые описаны в этой статье, мы будем использовать Colab. Colaboratory (просто Colab), позволяет писать и выполнять код Python в браузере. При этом:

  • не требуется никакой настройки;
  • вы получаете бесплатный доступ к графическим процессорам;
  • вы можете предоставлять доступ к документам другим людям.

Примечание: вы можете использовать и другие программы для написания кода, например: Jupyter Notebook, PyCharm, Visual Studio Code и т.д.

Перейдите по ссылке под той же учетной записью, что вы создали проект в Google Cloud Plaftorm, и добавьте новый блокнот.

Создание блокнота в Colab

Установка библиотеки

Перейдите в свой блокнот Colab и введите первую команду.

Нажмите Run. Вы должны увидеть список установленных пакетов:

Список установленных пакетов

Среди них будут те, которые нам нужны в дальнейшем - prophet, pystan, pandas, matplotlib. Нам необходимо установить библиотеку google-analytics-data, которая предоставляет программные методы для доступа к данным отчетов Google Analytics 4. Сделать это можно с помощью команды:

Введите команду и нажмите Run в своем блокноте Colab. Библиотека начнет устанавливаться. В конце вам отобразиться сообщение типа Successfully installed google-analytics-data-0.13.1 google-api-core-2.8.2 grpcio-status-1.47.0 proto-plus-1.20.6 protobuf-3.20.1. Но при этом вас попросят перезапустить среду выполнения, чтобы использовать недавно установленные версии.

Установка библиотеки google-analytics-data

Нажмите Restart Runtime и перезапустите среду выполнения.

В левом меню нажмите на иконку папки и загрузите файл в формате json в сессионное хранилище, который вы получили в Google Cloud Plaftorm после создания сервисного аккаунта.

Загрузка файла в проект

После того, как он загрузится, откройте его в проекте и убедитесь, что в нем все данные отображаются корректно:

Загруженный .json файл в Colab

Примечание: ваш загруженный файл будет удален при перезапуске среды выполнения.

Код для извлечения данных на Python

Теперь вы можете извлечь данные, отправив запрос к API Google Analytics 4. В официальной документации Google есть примеры запросов на Python для получения статистики по нужным параметрам и показателям. Вы можете использовать мой нижеприложенный код:

В Colab это выглядит так:

Код для извлечения SEO-данных Google Analytics 4

Примечание: при копировании кода не забудьте про отступы. В Python это важно. Может быть такое, что вы все сделаете так, как я показал, но при этом у вас не будет одного отступа, и тогда код будет срабатывать некорректно.

Этот запрос позволяет получить информацию по вашим сеансам с источникам трафика Organic Search за установленный период. В качестве определения количества сеансов используется фильтр по событию session_start, которое срабатывает тогда, когда пользователь начинает новый сеанс на вашем сайте. Итоговый подсчет идет именно по ним.

Любой параметр, показатель, фильтр, порядок данных, диапазон дат и т.д., добавленные в переменную запроса, должны быть добавлены как класс. Именно поэтому в начале кода мы добавляем такие строки:

В приведенном выше коде вам необходимо изменить некоторые значения на свои:

  • PROPERTY_ID = '206854065' (идентификатор ресурса Google Analytics 4)

Идентификатор ресурса Google Analytics 4

  • START_DATE = '2022-07-01' (начальная дата выгрузки данных)
  • END_DATE = '2022-07-31' (конечная дата выгрузки данных)

И в строке os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "vocal-mountain-355620-fc279c61a21b.json" вам нужно изменить название файла, который вы загрузили в проект, на свое:

Изменение названия файла

Эта строка кода позволит избежать некоторых проблем при управлении разрешениями на Google API. Если вы загрузили этот файл в проект не в корневую папку, то в os.environ["GOOGLE_APPLICATION_CREDENTIALS"] вам надо прописать полный путь к файлу.

Запустив код, вы должны получить ответ в виде SEO-данных из вашего счетчика Google Analytics 4 в формате {Дата, События}, {20220713, 1000}, {…}, … :

Результат выполнения кода

Как вы уже знаете, чем больше у вас будет исторических данных, тем точнее будет ваша модель и, следовательно, прогноз. Поэтому рекомендуется выгружать данные из Google Analytics 4 за больший период, чем месяц. Например, за 6-9-12 месяцев.

Прогнозирование данных с помощью Facebook Prophet

В настоящее время существует множество бесплатных и готовых библиотек для выполнения любого типа прогнозирования на основе исторических данных. В этом материале я буду использовать библиотеку Prophet от Facebook *.

* Деятельность американской компании Meta (бывшая Facebook) запрещена в России, организация признана экстремистской.

Prophet - это библиотека с открытым исходным кодом на Python и R от компании Facebook. Она предназначена для прогнозирования временных рядов и часто используется в работе аналитиками данных поскольку, согласно независимым исследованиям разных компаний, обладает высокой точностью предсказаний по сравнению с аналогами. В рамках этой публикации я не буду подробно расписывать все ее возможности, а лишь хочу показать один из примеров ее использовании применительно к данным Google Analytics 4.

Подробнее про Prophet вы можете узнать:

А также посмотрев лекцию Прогнозирование метрик с помощью Facebook Prophet от Karpov.Courses на YouTube:

Примечание: при изучении чужих статей и кода обращайте внимание на дату публикации, поскольку не так давно библиотека Prophet была изменена (например, та же установка библиотеки: начиная с версии 1.0 имя пакета в PyPI — prophet; до версии 1.0 - fbprophet).

В основе прогноза лежит процедура подгонки аддитивных регрессионных моделей, в которой нелинейные тренды корректируются с учетом ежедневной сезонности, еженедельных и годовых значений, а также учитываются последствия отпускных дней и праздников (например, официальные праздничные и выходные дни - Новый год, Рождество, спортивные мероприятия, культурные события, природные явления. В такие дни поведение и свойства временных рядов могут существенно меняться/колебаться, вызывать всплески и серьезные отклонения. В Prophet вы можете это учесть и гибко настроить условия прогноза благодаря доступным переменным.

Для прогнозирования и визуализации полученных данных нам необходимы библиотеки prophet, pystan, pandas, matplotlib. В Colab они уже все предустановлены, поэтому дальнейший процесс прогноза существенно сокращается. Наша задача будет заключаться только в их импорте.

Prophet находится в каталоге PyPI, поэтому вы можете использовать pip для его установки:

Prophet также можно установить через conda-forge:

Для библиотеки Prophet:

  • начиная с версии 0.6, Python 2 больше не поддерживается;
  • начиная с версии 1.0 имя пакета в PyPI — prophet; до версии 1.0 это был fbprophet (в старых статьях в интернете используется именно fbprophet);
  • начиная с версии 1.1 минимальная поддерживаемая версия Python — 3.7.

При работе с Prophet:

  • создается экземпляр объекта Prophet с нужными атрибутами для прогноза;
  • запрашивается метод подгонки для данных, извлеченных из Google Analytics 4, в виде датафрейма. В некоторых случаях этот запрос может занять несколько секунд. Входные данные для Prophet всегда представляют собой датафрейм с двумя столбцами: ds и y. Столбец ds (отметка даты) должен иметь формат, поддерживаемый Pandas, в идеале вида ГГГГ-ММ-ДД для даты или ГГГГ-ММ-ДД ЧЧ:ММ:СС для отметки времени. Столбец y (метрика для изучения/прогноза) должен быть числовым;
  • для полученного датафрейма задается количество периодов, до которых должен достигаться прогноз из выбранного диапазона дат, и частоту, с которой данные будут агрегироваться (еженедельно, ежемесячно и т.д.);
  • запрашивается метод predict, который назначит каждой строке будущего датафрейма прогнозируемое значение (yhat);
  • запрашивается метод plot, чтобы иметь возможность просматривать сгенерированные прогнозы;
  • запрашивается метод plot_components, который помогает визуально понять тенденцию и сезонность данных.

Пример сформированного запроса:

Prophet очень гибок в настройке и имеет большое количество разных функций. В рамках данной статьи я не берусь рассказывать про них, поскольку некоторые авторы даже выпускают целые книги по работе с данной библиотекой, чего уж говорить об одной публикации.

Наша главная цель - создать прогноз для органического поиска наших данных Google Analytics 4, придерживаясь определенной логике. Например, учитывать снижение количества трафика в выходные и праздничные дни, исключить выбросы, если они имеют место быть, выбрать сезонную модель (аддитивная и мультипликативная сезонность) и т.д.

В отличие от других каналов (например, рекламный трафик, e-mail рассылки или посты в социальных сетях), SEO-трафик обычно имеет мало заметных колебаний (впадин или пиков). Он имеет тенденцию к постепенному росту или снижению с течением времени, и иногда на него влияют сезонные явления. Обычно заметные колебания связаны с обновлениями в алгоритме поисковых систем (Google, Яндекс, Bing и т.д.).

Функция, которую мы будем использовать для прогнозирования, будет выглядеть так:

Таким образом, мы заносим входные данные в датафрейм, состоящий из двух столбцов ds и y, а затем создаем экземпляр Prophet с необходимым набором атрибутов для прогнозирования:

  • growth - тип тренда. Принимает два возможных значения: линейный по умолчанию (linear) и логистический (logistic);
  • changepoint_prior_scale - параметр, задающий чувствительность автоматического механизма обнаружения точек излома в тренде временного ряда y (0.05 по умолчанию). Более высокие значение позволят иметь больше таких точек излома (что одновременно увеличит риск переобучения модели);
  • seasonality_mode - режим моделирования сезонных компонент. Принимает два возможных значения: аддитивный по умолчанию (additive) и мультипликативный (multiplicative);
  • daily_seasonality - параметр настройки дневной сезонности (т.е. закономерных колебаний в пределах дня). Принимает следующие возможные значения: auto (автоматический режим, принят по умолчанию), TRUE, FALSE или количество членов ряда Фурье, с помощью которого аппроксимируется компонента годовой сезонности;
  • weekly_seasonality - параметр настройки недельной сезонности (т.е. закономерных колебаний в пределах недели). Возможные значения те же, что и у daily_seasonality;
  • yearly_seasonality - параметр настройки годовой сезонности (т.е. закономерных колебаний в пределах года). Возможные значения те же, что и у daily_seasonality;
  • holidays - параметр учитывает фактор праздников (Новый год, Рождество, спортивные мероприятия, культурные события, природные явления). Настраиваются с помощью дополнительного атрибута holidays_prior_scale.

Подробнее о параметрах читайте в официальной документации.

После определения всех компонент мы вызываем метод fit командой m.fit(df) передаем исторический датафрейм. Запрос может занять несколько секунд. После этого мы используем функцию make_future_dataframe() с заданным периодом прогнозирования (periods) и частотой (freq). Параметры periods и freq в моем коде вынесены отдельно и объявлены в переменных PERIODS и FREQ соответственно. Поэтому вы легко можете поменять их столько раз, сколько требуется.

Но ее можно задать и явно, например так (периодичность - ежемесячно, периоды - 12 месяцев в год, умноженные на 6 лет):

Следующая строка в коде запрашивает метод predict. Он будет присваивать каждой строке future прогнозируемое значение, которое он называет yhat. Если вы передадите исторические даты, это обеспечит подгонку в выборке. Объектом forecast является новый датафрейм, который включает в себя столбец yhat с прогнозом, а также столбцы для компонентов и интервалов неопределенности.

Далее строится прогноз с помощью:

Визуализация данных

Мы также визуализируем компоненты прогноза с помощью метода m.plot_components(forecast) и добавляем к ним точки изменения тренда (trend changepoints) с помощью функции add_changepoints_to_plot для выявления переломных моментов на графике, то есть когда произошли существенные изменения в тренде временного ряда.

Для демонстрации работы библиотеки Prophet я выгрузил данные по органическому трафику из счетчика Google Analytics 4 с 1 января 2021 года по 31 июля 2022 года, а в качестве периода прогнозирования указал 12 месяцев (periods=12) с разбиением по месяцам (freq='M'). После выполнения кода я получил такие графики и значения:

Визуализация прогноза

По оси X отложены даты с учетом прогноза (12 месяцев - значит до сентября 2023 года), а по оси Y отображаются данные по органическому трафику моего блога. Prophet включил исходные данные в виде черных точек, а синяя линия - это модель прогноза. Голубая область - доверительный интервал. С помощью функции add_changepoints_to_plot добавлены красные линии: вертикальные пунктирные линии - это точки изменения, которые Prophet определил, где изменился тренд, а сплошная красная линия - это тренд с удалением всей сезонности.

Прогноз трафика

Помимо этого Prophet отобразит сам тренд и ту сезонность для органического поиска, которую вы задали в настройках запроса. У меня это были weekly_seasonality и yearly_seasonality со значением True:

Тренд и сезонность (недельная и ежегодная сезонности)

Исходя из полученных цифр и прогноза с таким набором входных параметров, получается, что к сентябрю 2023 года мой блог osipenkov.ru ждет снижение органического трафика.

В заключение я бы хотел поделиться итоговым кодом, который вы можете использовать в своем проекте Colab, изменив данные в тех настройках, что я описал.

И ссылкой на мой проект Colab, который я использовал при написании этого материала.

Вот таким вот способом с помощью Python и библиотеки Prophet вы можете спрогнозировать рост или падение вашего трафика Google Analytics 4 (необязательно Organic Search), задав соответствующий фильтр при выгрузке статистики.

Список используемой литературы:

Получайте бесплатные уроки и фишки

По контекстной, таргетированной рекламе и аналитике