Как прогнозировать поисковый трафик с помощью Python и GA4
Опубликовано: 2021-04-26В любой стратегии, ориентированной на поисковую оптимизацию (SEO), анализ данных имеет важное значение. Все больше и больше специалистов в этой области выбирают для развития своей карьеры анализ органического поискового трафика, который сам по себе имеет поведение и особенности, сильно отличающиеся от остальных: платный поиск, электронная почта, органический социальный, прямой и т. д. В В этом смысле и благодаря широкому спектру инструментов, доступных сегодня, такого рода исследования сумели развиться до немыслимой степени по сравнению с тем, что было всего несколько лет назад.
Этот крупный шаг вперед в основном связан с появлением новых методологий и разработок, которые позволили нам генерировать аналитические модели, не полагаясь на сложные математические операции. Нам повезло, что в нашем распоряжении уже проверенные техники и алгоритмы, готовые к работе с ними.
В статье ниже мы сосредоточимся на создании прогностической модели для набора данных временного ряда, где рассчитанный тренд корректируется с учетом сезонности и предыдущей периодичности. В частности, мы будем прогнозировать органический поисковый трафик нашего ресурса на основе Google Analytics 4 (далее GA4). Есть много вариантов сделать это, однако для этого конкретного случая я решил полностью выполнить разработку на Python.
Сценарий, на котором основана эта статья, состоит из трех четко различающихся частей:
- Извлечение данных . Пошаговое руководство по использованию нового API GA4 для сбора органического поискового трафика.
- Моделирование данных . Использование Prophet, библиотеки Facebook с открытым исходным кодом, для прогнозирования временных рядов.
- Визуализация данных . Показать изменения тренда и смоделированный прогноз.
Извлечение данных GA4 через API с использованием Python
Первое, что нам нужно знать, когда мы имеем дело с Google Analytics Data API (GA4), — это то, что GA4 — это его статус разработки. Как подробно описано Google на своей странице, в настоящее время он находится на ранней стадии. В частности, на момент написания этой статьи она все еще находилась в стадии бета-тестирования.
Следует отметить, что GA4 был опубликован 14 октября 2020 года. Прошло всего несколько месяцев. Фактически, те, у кого уже есть ресурс Universal Analytics и кто создает новый ресурс GA4, смогут продолжать использовать обе версии одновременно без каких-либо ограничений. Точно неизвестно, когда свойства Universal Analytics перестанут работать. В любом случае, я бы порекомендовал как можно скорее создать новое свойство типа GA4. Таким образом, у вас будет более широкая история данных. Также следует учитывать, что каждый день прохождения GA4 интегрирует новые функции или улучшает существующие. На данный момент он находится в постоянной эволюции.
Из-за этого, конечно, могут быть небольшие изменения в коде, описанном ниже. Хотя наверняка, они будут минимальными. Например, я уже сталкивался с мелкими мелочами, такими как переименование поля «сущность» (альфа-фаза) в «свойство» (бета-фаза) внутри класса RunReportRequest() .
Прежде всего, прежде чем создавать запрос API, необходимо понять, какие элементы доступны. По сути, все дело в следующей структуре:
Типы для RunReportRequest API GA4 Data v1 Beta
На первый взгляд все интуитивно понятно, хотя на деле все обстоит иначе. Для оформления запроса необходимо всегда иметь под рукой как минимум следующую документацию:
- Разработчик Google APIS.
- Отчетность Google Analytics Data API (GA4).
Это просто потому, что имена полей немного отличаются от официальной документации, которая представляет поля в формате JSON. Примером может служить поле fieldname класса Filter. В Python мы должны описать его как field_name. Хорошим общим правилом всегда будет переход от поля типа верблюжьего регистра (например, «fieldName») к регистру змеи (например, «field_name»).
Прежде чем продолжить, давайте остановимся на мгновение, чтобы инициализировать наш проект. Как и в подавляющем большинстве случаев при разработке скриптов на Python, нам приходится тратить некоторое время на импорт необходимых библиотек и подготовку среды выполнения.
- Создайте новый проект в Python. В данном случае использовалось программное обеспечение PyCharm.
- Включите Google Analytics Data API в Google Cloud Platform, загрузите созданный файл служебной учетной записи (тип JSON) и сохраните его в папке, в которой был создан проект Python. При открытии этого файла необходимо скопировать значение поля client_email, которое будет иметь вид [email protected].
- Добавьте это значение client_email в свойство GA4, из которого будут извлекаться данные. Вам нужно будет сделать это в разделе управления пользователями. Как минимум, необходимо будет предоставить ему уровень разрешений «Чтение и анализ».
- Через клиентский терминал (PyCharm) установите библиотеку данных Google Analytics в директорию проекта, с которой будут делаться запросы к API:
pip install google-analytics-data
С этого момента все, что вам нужно сделать, это создать запрос, который, как вы можете видеть ниже, в основном состоит из трех частей (клиент, запрос и ответ), и просмотреть или сохранить собранные данные.
Код для отправки простого запроса в GA4
Любое измерение, метрика, фильтр, порядок данных, диапазон дат и т. д., добавленные в переменную запроса, должны быть добавлены как класс (см. предыдущее изображение «Типы для RunReportRequest»), связанный с переменной ( metrics = [Metric (..)] ). Это значительно упрощает понимание структуры собираемых данных. В этом смысле для каждого класса высшего уровня должен быть выполнен определенный импорт. То есть, если вы хотите добавить измерение и метрику для определенного временного диапазона, потребуются как минимум следующие объекты…
из google.analytics.data_v1beta импортировать BetaAnalyticsDataClient из google.analytics.data_v1beta.types импортировать RunReportRequest из google.analytics.data_v1beta.types импортировать диапазон дат из google.analytics.data_v1beta.types параметр импорта из google.analytics.data_v1beta.types импортировать метрику
Конечно, также можно добавлять определенные значения к определенным переменным ( name='eventCount' ). По этой причине важно понять и погрузиться в описанную ранее документацию.
В дополнение к этому особое внимание необходимо уделить переменной os.environ["GOOGLE_APPLICATION_CREDENTIALS"] , которая будет содержать путь к ранее скачанному на шаге 2 файлу. Эта строка кода позволит избежать некоторых проблем при управлении разрешениями на Google API.
Если код был выполнен правильно, вы увидите результат, который выглядит следующим образом: {Дата, События}, {20210418, 934}, {…}, ….
Данные при сканировании³
Прогнозирование данных через Facebook Prophet
В настоящее время существует множество бесплатных и существующих опций для выполнения любого типа прогнозирования на основе истории данных. В данном конкретном случае я выбрал библиотеку Prophet, но что это на самом деле?
Это библиотека с открытым исходным кодом (доступна для R и Python), созданная командой Facebook по науке о данных для оценки поведения набора данных временных рядов на основе аддитивной модели, в которой нелинейные тренды корректируются с учетом ежедневной сезонности, еженедельных и годовых значений. учитывать последствия отпускных дней.
Возвращаясь к предлагаемой реализации (прогнозирование органического поискового трафика), первое, что нужно сделать, это установить следующие библиотеки:
- Панды ( pip install pandas ). Управление и анализ структур данных.
- Сюжетно ( pip install plotly ). Создание графики всех видов.
- Пророк ( conda install -c conda-forge fbprophet -y ).
Затем, как всегда, необходимо выполнить импорт, связанный с этими библиотеками. После этого вам остается только выполнить моделирование предсказания и его соответствующую визуализацию. Для этого, в случае с Prophet, вы должны следовать этому процессу:
- Инициализируйте новый объект Prophet с нужными атрибутами для создания прогноза.
- Запросите метод подгонки, передав ему данные, извлеченные из GA4, в виде кадра данных. В некоторых случаях этот запрос может занять несколько секунд. Фрейм данных с собранными данными должен состоять только из двух столбцов, имена которых всегда одинаковы: ds (поле типа даты) и y (метрика для изучения).
- Создайте новый будущий фрейм данных, задав количество периодов, до которых должен достигаться прогноз из выбранного диапазона дат, и частоту, с которой данные будут агрегироваться (еженедельно, ежемесячно и т. д.).
- Запросите метод прогнозирования, который назначит каждой строке нового будущего фрейма данных прогнозируемое значение (yhat).
- Запросите метод plot, чтобы иметь возможность просматривать сгенерированные прогнозы.
- Запросите метод plot_components, который помогает визуально понять тенденцию и сезонность данных.
м = Пророк() m.fit(df) будущее = m.make_future_dataframe (периоды = 365) прогноз = m.predict (будущее) м.участок(прогноз) m.plot_components (прогноз) plt.show()
Хотя желаемый прогноз был сгенерирован всего за шесть шагов и кажется относительно простым, необходимо учитывать несколько элементов, которые будут ключевыми для создания прогноза. Все они так или иначе влияют на уместность предсказания. В конце концов, речь идет о создании прогноза, который соответствует логике (в случае с этой статьей) нашего органического поискового трафика. Для этого необходимо разобраться в некоторых более продвинутых настройках Prophet.
- Особые дни и каникулы. Есть возможность добавления особых дней.
- Выбросы. Их необходимо исключить, если они влияют на оценку.
- Точки изменения. Обнаружение изменений тренда за анализируемое время.
- Диагностика. Валидация основана на измерении ошибки предсказания в соответствии с историческим изучением данных.
- Увеличивать. Выбор между линейным или логистическим.
- Сезонность. Выбор между аддитивным или мультипликативным.
Все это и многие другие опции прекрасно подробно описаны в этой документации библиотеки Prophet.
Создание полного скрипта для визуализации прогноза трафика
Осталось только соединить все кусочки головоломки в единый скрипт. Обычный способ решить этот тип головоломки — создать функцию для каждого из ранее детализированных процессов таким образом, чтобы их можно было выполнять упорядоченно и четко:
def ga4 (id_свойства, start_date, end_date): […] прогнозирование по определению (dim, met, per, freq): […] если __name__ == "__main__": параметр, показатель = ga4(PROPERTY_ID, START_DATE, END_DATE) прогнозирование(параметр, показатель, PERIODS, FREQ)
Прежде чем визуализировать окончательный результат прогноза, рекомендуется взглянуть на проанализированный органический поисковый трафик.
С первого взгляда видно, как различные стратегии и предпринятые действия оказали влияние с течением времени. В отличие от других каналов (например, кампаний с платным поиском), трафик, генерируемый органическим поиском, обычно имеет мало заметных колебаний (впадин или пиков). Он имеет тенденцию к постепенному росту или снижению с течением времени, и иногда на него влияют сезонные явления. Обычно заметные колебания связаны с обновлениями в алгоритме поисковых систем (Google, Bing и т. д.).
Результат скрипта можно увидеть на следующих изображениях, где подробно описаны важные факторы, такие как тенденция, сезонность, прогноз или частота данных.
Если мы проанализируем полученный прогноз, то можно сделать общий вывод, что «если мы продолжим использовать ту же стратегию SEO, которая применялась до сих пор, трафик из поисковых систем будет продолжать постепенно расти». Мы можем гарантировать, что «наши усилия по улучшению работы веб-сайта, созданию качественного контента, размещению релевантных ссылок и т. д. того стоили».
Визуализация тренда, сезонности и прогнозирования тренда органического поискового трафика
В заключение я поделюсь кодом целиком, так что вам нужно будет только скопировать его и запустить в вашей IDE (интегрированной среде разработки) Python. Само собой разумеется, что все упомянутые выше библиотеки должны быть установлены для правильной работы.
импортировать панд как pd импортировать fbprophet из fbprophet импортировать пророка из fbprophet.plot импортировать add_changepoints_to_plot импортировать matplotlib.pyplot как plt импорт ОС из google.analytics.data_v1beta импортировать BetaAnalyticsDataClient из google.analytics.data_v1beta.types импортировать диапазон дат из google.analytics.data_v1beta.types параметр импорта из google.analytics.data_v1beta.types импортировать метрику из google.analytics.data_v1beta.types фильтр импорта из google.analytics.data_v1beta.types импортировать FilterExpression из google.analytics.data_v1beta.types импортировать FilterExpressionList из google.analytics.data_v1beta.types импортировать RunReportRequest ИМУЩЕСТВО_ START_DATE = '01.01.2020' END_DATE = '31 марта 2021 г.' ПЕРИОДЫ = 4 ЧАСТОТА = 'М' os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "[Добавьте сюда путь к json-файлу с учетными данными]" def ga4 (id_свойства, start_date, end_date): клиент = BetaAnalyticsDataClient() запрос = RunReportRequest(property='properties/' + property_id, размеры = [Размер (имя = 'дата')], метрики = [Метрика (имя = 'eventCount')], date_ranges=[DateRange(start_date=start_date, конечная_дата=конечная_дата)], Dimension_filter=ВыражениеФильтра( and_group=FilterExpressionList(expressions=[ FilterExpression(filter=Filter(field_name='sessionDefaultChannelGrouping', string_filter=Фильтр.StringFilter( value='Обычный поиск', match_type=Фильтр.StringFilter.MatchType( 1)))), FilterExpression(filter=Filter(field_name='eventName', string_filter=Фильтр.StringFilter( значение = 'сессия_старт', match_type=Фильтр.StringFilter.MatchType( 1)))) ])) ) ответ = client.run_report(запрос) x, y = ([] для i в диапазоне (2)) для строки в response.rows: x.append(row.dimension_values[0].value) y.append(строка.metric_values[0].value) print(row.dimension_values[0].value, row.metric_values[0].value) вернуть х, у прогнозирование защиты (x, y, p, f): print('Пророк %s' % fbprophet.__version__) данные = {'ds': х, 'у': у} df = pd.DataFrame (данные, столбцы = ['ds', 'y']) m = Пророк (рост = «линейный», changepoint_prior_scale=0,5, сезонность_режим = 'добавка', daily_seasonality = Ложь, weekly_seasonality=Верно, yearly_seasonality = Верно, праздники = нет, ) m.fit(df) будущее = m.make_future_dataframe (периоды = p, частота = f) прогноз = m.predict (будущее) print(прогноз[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].head()) fig = m.plot(прогноз, xlabel='Дата', ylabel='Посещения') add_changepoints_to_plot(fig.gca(), м, прогноз) m.plot_components (прогноз) plt.show() если __name__ == "__main__": группа_каналов, количество_событий = ga4(PROPERTY_ID, START_DATE, END_DATE) прогнозирование (группа_каналов, количество_событий, ПЕРИОДЫ, ЧАСТОТА)
Я надеюсь, что эта статья послужила источником вдохновения и поможет вам в ваших следующих проектах. Если вы хотите продолжить изучение этого типа реализации или узнать больше о техническом цифровом маркетинге, свяжитесь со мной. Вы можете найти больше информации в моем профиле автора ниже.