Comment prévoir le trafic de recherche avec Python et GA4

Publié: 2021-04-26

Dans toute stratégie axée sur l'optimisation des moteurs de recherche (SEO), l'analyse des données est essentielle. Il y a de plus en plus de spécialistes dans ce domaine qui choisissent de développer leur carrière dans l'analyse du trafic de recherche organique, qui en soi a un comportement et des particularités assez différents du reste : référencement payant, email, social organique, direct, etc. ce sens et grâce à un large éventail d'outils disponibles aujourd'hui, ce type d'études a réussi à évoluer à un degré impensable par rapport à il y a quelques années à peine.

Cette avancée majeure est principalement due à l'apparition de nouvelles méthodologies et développements qui nous ont permis de générer des modèles analytiques sans avoir à nous appuyer sur des opérations mathématiques compliquées. Nous avons la chance d'avoir à notre disposition les techniques et algorithmes déjà testés et prêts à commencer à travailler avec eux.

Dans l'article ci-dessous, nous allons nous intéresser à la création d'un modèle prédictif pour un ensemble de données d'une série temporelle où la tendance calculée est ajustée à la saisonnalité et à la périodicité précédente. Plus précisément, nous allons prédire le trafic de recherche organique de notre propriété à partir de Google Analytics 4 (ci-après GA4). Il existe de nombreuses options pour réaliser cela, mais pour ce cas particulier, j'ai décidé d'exécuter le développement entièrement en Python.
Le script sur lequel cet article est basé se compose de trois parties clairement différenciées :

  • Extraction de données . Comment utiliser la nouvelle API GA4 étape par étape pour collecter le trafic de recherche organique.
  • Modélisation des données . Utilisation de Prophet, la bibliothèque open-source de Facebook pour faire des prédictions de séries chronologiques.
  • Visualisation des données . Afficher les changements de tendance et la prédiction modélisée.

Extraction de données GA4 via son API à l'aide de Python

La première chose que nous devons savoir lorsque nous traitons de l'API de données Google Analytics (GA4) est que GA4 est son statut de développement. Comme détaillé par Google sur sa page, il est actuellement dans une version préliminaire. Plus précisément, à la date de rédaction de cet article, il est toujours en phase bêta.

Il convient de noter que GA4 a été publié le 14 octobre 2020. Seuls quelques mois se sont écoulés. En effet, ceux qui possédaient déjà une propriété Universal Analytics et qui en créent une nouvelle GA4 pourront continuer à utiliser les deux versions côte à côte, sans aucune restriction. On ne sait pas avec certitude quand les propriétés Universal Analytics cesseront de fonctionner. Dans tous les cas, ma recommandation serait de créer une nouvelle propriété de type GA4 dès que possible. De cette façon, vous aurez un historique des données plus large. Il faut aussi considérer que chaque jour qui passe GA4 intègre de nouvelles fonctionnalités ou améliore celles existantes. Pour le moment, il est en constante évolution.

Pour cette raison, bien sûr, il peut y avoir de petits changements dans le code décrit ci-dessous. Bien sûr, ils seront minimes. Par exemple, j'ai déjà rencontré des bagatelles mineures telles que renommer le champ "entity" (phase Alpha) en "property" (phase Beta) dans la classe RunReportRequest() .
Tout d'abord, avant de créer la demande d'API, il est nécessaire de comprendre quels éléments sont disponibles. Fondamentalement, il s'agit de suivre la structure ci-dessous :

Types pour RunReportRequest de l'API bêta GA4 Data v1

À première vue, c'est assez intuitif, même si la réalité est tout autre. Pour faire une demande, il est nécessaire de toujours avoir au moins la documentation suivante à portée de main :

  • Développeur Google APIS
  • Création de rapports sur l'API de données Google Analytics (GA4).

C'est simplement parce que les noms de champs diffèrent légèrement de la documentation officielle, qui représente les champs au format JSON. Un exemple est le champ fieldname de la classe Filter. En Python, nous devrions le décrire comme field_name. Une bonne règle générale sera toujours de passer d'un champ de type camel case (comme « fieldName ») à un serpent case (comme « field_name »).

Avant de continuer, arrêtons-nous un instant pour initialiser notre projet. Comme dans la grande majorité des cas lors du développement de scripts en Python, nous devons passer un certain temps à importer les bibliothèques nécessaires et à préparer l'environnement d'exécution.

  • Créez un nouveau projet en Python. Dans ce cas, le logiciel PyCharm a été utilisé.
  • Activez l'API de données Google Analytics dans Google Cloud Platform et téléchargez le fichier de compte de service créé (type JSON) et enregistrez-le dans le dossier où le projet Python a été créé. Lors de l'ouverture de ce fichier, la valeur du champ client_email doit être copiée, ce qui ressemblera à [email protected].
  • Ajoutez cette valeur client_email à la propriété GA4 à partir de laquelle les données seront extraites. Vous devrez le faire dans la section de gestion des utilisateurs. Au minimum, il faudra lui accorder le niveau d'autorisation 'Lecture & Analyse'.
  • Via le terminal client (PyCharm) installez la bibliothèque de données Google Analytics dans le répertoire du projet avec lequel les requêtes API seront effectuées :
    pip install google-analytics-data

À partir de là, tout ce que vous avez à faire est de créer la requête, qui, comme vous pouvez le voir ci-dessous, se compose essentiellement de trois parties (client, requête et réponse), et d'afficher ou d'enregistrer les données collectées.

Code pour faire une demande simple à GA4

Toute dimension, métrique, filtre, ordre des données, plage de dates, etc. ajouté à la variable de requête doit être ajouté en tant que classe (voir l'image précédente "Types pour RunReportRequest") liée à une variable ( metrics = [Metric (..)] ). Cela facilite grandement la compréhension de la structure des données à collecter. En ce sens, pour chaque classe du plus haut niveau un import spécifique doit être effectué. Autrement dit, si vous souhaitez ajouter une dimension et une métrique pour une plage de temps spécifique, au moins les objets suivants seront requis…

 depuis google.analytics.data_v1beta importer BetaAnalyticsDataClient
depuis google.analytics.data_v1beta.types importer RunReportRequest
de google.analytics.data_v1beta.types importer DateRange
depuis google.analytics.data_v1beta.types importer la dimension
à partir de google.analytics.data_v1beta.types importer la métrique

Bien entendu, il est également possible d'ajouter des valeurs spécifiques à certaines variables ( name='eventCount' ). Pour cette raison, il est essentiel de comprendre et de se plonger dans la documentation décrite précédemment.

En plus de cela, une attention particulière doit être portée à la variable os.environ ["GOOGLE_APPLICATION_CREDENTIALS"] , qui contiendra le chemin vers le fichier précédemment téléchargé à l'étape 2. Cette ligne de code évitera certains problèmes lors de la gestion des autorisations au API Google.

Si le code a été exécuté correctement, vous verrez un résultat qui ressemble à ceci : {Date, Events}, {20210418, 934}, {…}, ….

Oncrawl Data³

Développez votre analyse avec des connexions transparentes à des ensembles de données supplémentaires. Analysez votre stratégie de référencement en fonction des données sur les backlinks, le trafic SEO, les classements et les ensembles de données personnalisés de votre CRM, de votre solution de surveillance ou de toute autre source.
Apprendre encore plus

Prédiction des données via Facebook Prophet

De nos jours, il existe de nombreuses options gratuites et existantes pour effectuer tout type de prédiction basée sur l'historique des données. Dans ce cas précis, j'ai choisi la bibliothèque Prophet, mais qu'est-ce que c'est vraiment ?

Il s'agit d'une bibliothèque open source (disponible pour R et Python) créée par l'équipe Data Science de Facebook pour estimer le comportement d'un ensemble de données de séries chronologiques basé sur un modèle additif où les tendances non linéaires sont ajustées à une saisonnalité quotidienne, hebdomadaire et annuelle. compte des effets des jours de vacances.
Pour en revenir à l'implémentation proposée (prédiction du trafic de recherche organique), la première chose à faire est d'installer les bibliothèques suivantes :

  • Pandas ( pip install pandas ). Gérer et analyser les structures de données.
  • Plotly ( pip install plotly ). Création de graphismes en tous genres.
  • Prophète ( conda install -c conda-forge fbprophet -y ).

Ensuite, comme toujours, vous devez effectuer les importations associées à ces bibliothèques. Après cela, il ne vous reste plus qu'à effectuer la modélisation de la prédiction et sa visualisation correspondante. Pour ce faire, dans le cas de Prophet, il vous suffit de suivre ce processus :

  • Initialisez un nouvel objet Prophet avec les attributs souhaités pour générer la prédiction.
  • Demandez la méthode d'ajustement, en lui transmettant les données extraites de GA4 sous forme de dataframe. Cette requête peut prendre plusieurs secondes dans certains cas. Le dataframe avec les données collectées ne doit être composé que de deux colonnes dont les noms sont toujours les mêmes : ds (champ de type date) et y (métrique à étudier).
  • Créez une nouvelle base de données future en définissant le nombre de périodes jusqu'à lesquelles la prédiction doit atteindre à partir de la plage de dates sélectionnée et la fréquence à laquelle les données seront agrégées (hebdomadaire, mensuelle, etc.)
  • Demandez la méthode de prédiction, qui attribuera à chaque ligne de la nouvelle future trame de données une valeur prédite (yhat).
  • Demandez la méthode plot pour pouvoir visualiser les prédictions générées.
  • Demandez la méthode plot_components qui aide à comprendre visuellement la tendance et la saisonnalité des données.
 m = Prophète()
m.fit(df)
futur = m.make_future_dataframe(périodes=365)
prévision = m.predict(futur)
m.plot (prévision)
m.plot_components (prévision)
plt.show()

Bien que la prédiction souhaitée ait été générée en seulement six étapes et qu'elle semble relativement simple, plusieurs éléments doivent être pris en compte qui seront essentiels pour générer la prédiction. Ils affectent tous la pertinence de la prédiction d'une manière ou d'une autre. Au final, il s'agit de générer une prédiction conforme à la logique, dans le cas de cet article, de notre trafic de recherche organique. Pour cela, il est nécessaire de comprendre certains paramètres plus avancés de Prophet.

  • Jours spéciaux et vacances. Il y a la possibilité d'ajouter des jours spéciaux.
  • Valeurs aberrantes. Ils doivent être éliminés s'ils affectent l'estimation.
  • Points de changement. Détection des changements de tendance sur le temps analysé.
  • Diagnostic. Validation basée sur la mesure de l'erreur de prédiction en fonction de l'étude historique des données.
  • Augmenter. Sélection entre linéaire ou logistique.
  • Saisonnalité. Choix entre additif ou multiplicatif.

Tout cela et bien d'autres options sont parfaitement détaillés dans cette documentation de la bibliothèque Prophet.

Création du script complet pour pouvoir visualiser la prédiction de trafic

Il ne reste plus qu'à réunir toutes les pièces du puzzle en un seul script. La manière habituelle d'aborder ce type de casse-tête est de créer une fonction pour chacun des processus précédemment détaillés, de manière à ce qu'ils puissent être exécutés de manière ordonnée et propre :

 def ga4(property_id, start_date, end_date):
[…]

def prévision (dim, met, per, freq):
[…]

si __nom__ == "__main__":
dimension, statistique = ga4(PROPERTY_ID, START_DATE, END_DATE)
prévision (dimension, métrique, PÉRIODES, FREQ)

Avant de visualiser le résultat final de la prédiction, il est judicieux de regarder le trafic de recherche organique analysé.

En un premier coup d'œil, vous pouvez voir comment les différentes stratégies et actions mises en place ont eu un effet au fil du temps. Contrairement à d'autres canaux (par exemple, les campagnes de recherche payante), le trafic généré par la recherche organique présente généralement peu d'oscillations appréciables (vallées ou pics). Il a tendance à croître ou à diminuer progressivement au fil du temps et est parfois influencé par des événements saisonniers. Habituellement, des fluctuations notables sont associées aux mises à jour de l'algorithme du moteur de recherche (Google, Bing, etc.).

La sortie du script peut être vue dans les images suivantes, où des facteurs importants tels que la tendance, la saisonnalité, la prédiction ou la fréquence des données sont détaillés.
Si l'on analyse la prédiction obtenue, on pourrait conclure de manière générique que "si l'on continue avec la même stratégie SEO mise en place jusqu'à présent, le trafic des moteurs de recherche continuera à croître progressivement". Nous pouvons garantir que "nos efforts pour améliorer les performances du site Web, générer un contenu de qualité, fournir des liens pertinents, etc. en valent la peine".

Visualisation de la tendance, de la saisonnalité et de la prédiction, tendance du trafic de recherche organique

Pour conclure, je partagerai le code dans son intégralité afin que vous n'ayez qu'à le copier et l'exécuter dans votre IDE (Integrated Development Environment) de Python. Il va sans dire que toutes les bibliothèques mentionnées ci-dessus doivent avoir été installées pour que cela fonctionne correctement.

 importer des pandas en tant que pd
importer fbprophète
depuis fbprophet import Prophet
de fbprophet.plot importer add_changepoints_to_plot
importer matplotlib.pyplot en tant que plt
importer le système d'exploitation

depuis google.analytics.data_v1beta importer BetaAnalyticsDataClient
de google.analytics.data_v1beta.types importer DateRange
depuis google.analytics.data_v1beta.types importer la dimension
à partir de google.analytics.data_v1beta.types importer la métrique
à partir du filtre d'importation google.analytics.data_v1beta.types
depuis google.analytics.data_v1beta.types importer FilterExpression
depuis google.analytics.data_v1beta.types importer FilterExpressionList
depuis google.analytics.data_v1beta.types importer RunReportRequest

PROPRIÉTÉ_
START_DATE = '2020-01-01'
END_DATE = '2021-03-31'
PÉRIODES = 4
FREQ = 'M'

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "[Ajouter ici le chemin du fichier json avec les identifiants]"

def ga4(property_id, start_date, end_date):
client = BetaAnalyticsDataClient()

request = RunReportRequest(property='properties/' + property_id,
dimensions=[Dimension(nom='date')],
metrics=[Metric(name='eventCount')],
date_ranges=[DateRange(start_date=start_date,
date_fin=date_fin)],
dimension_filter=Expression de filtre(
and_group=FilterExpressionList(expressions=[
FilterExpression(filter=Filter(field_name='sessionDefaultChannelGrouping',
string_filter=Filtre.StringFilter(
value='Recherche organique',
match_type=Filter.StringFilter.MatchType(
1)))),
FilterExpression(filter=Filter(field_name='eventName',
string_filter=Filtre.StringFilter(
valeur='session_start',
match_type=Filter.StringFilter.MatchType(
1))))
]))
)

réponse = client.run_report(demande)

x, y = ([] pour i dans la plage (2))
pour la ligne dans response.rows :
x.append(ligne.dimension_values[0].value)
y.append(ligne.metric_values[0].value)
print(ligne.dimension_values[0].value, ligne.metric_values[0].value)

retourner x, y

def prévision(x, y, p, f):
print('Prophète %s' % fbprophète.__version__)

données = {'ds' : x, 'y' : y}
df = pd.DataFrame(données, colonnes=['ds', 'y'])

m = Prophète(croissance='linéaire',
changepoint_prior_scale=0.5,
seasonity_mode='additif',
daily_seasonality=Faux,
week_seasonality=Vrai,
yearly_seasonality=Vrai,
jours fériés=Aucun,
)
m.fit(df)
future = m.make_future_dataframe(periods=p, freq=f)
prévision = m.predict(futur)

print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].head())

fig = m.plot(prévision, xlabel='Date', ylabel='Visites')
add_changepoints_to_plot(fig.gca(), m, prévision)
m.plot_components (prévision)
plt.show()

si __nom__ == "__main__":
channel_group, event_count = ga4(PROPERTY_ID, START_DATE, END_DATE)
prévisions (channel_group, event_count, PERIODS, FREQ)

J'espère que cet article vous a servi d'inspiration et qu'il vous sera d'une grande utilité dans vos prochains projets. Si vous souhaitez continuer à en savoir plus sur ce type de mise en œuvre ou en savoir plus sur le marketing numérique plus technique, veuillez me contacter. Vous pouvez trouver plus d'informations dans mon profil d'auteur ci-dessous.