Approximation du nombre unique dans Google Analytics

Minhaz Kazi, Developers Advocate, Google Analytics – Octobre 2022

Mesurer le nombre exact d'éléments distincts (c'est-à-dire la cardinalité) d'ensembles de données volumineux nécessite beaucoup de mémoire et affecte les performances. Les propriétés Google Analytics 4 utilisent l'algorithme HyperLogLog++ (HLL++) pour estimer la cardinalité des métriques les plus utilisées, y compris les utilisateurs actifs et les sessions. Par exemple, lorsque vous affichez les utilisateurs actifs dans l'interface utilisateur Google Analytics et via l'API Data, le nombre est approximatif. L'utilisation de HLL++ pour ces métriques garantit de meilleures performances avec une plus grande précision des estimations et des limites d'erreur inférieures. Cet article de blog explique comment HLL++ est utilisé dans les propriétés Google Analytics 4 et comment répliquer certaines estimations à l'aide des données d'exportation d'événements BigQuery.

À propos de HLL++

HLL++ évalue la cardinalité tout en utilisant moins de mémoire et en améliorant les performances. HLL++ a fait l'objet d'augmentations par rapport à l'algorithme HyperLogLog. Il est basé sur l'algorithme HyperLogLog in Practice: Algorithmic Engineering of a State of the Art Cardinality Estimation Algorithm (HyperLogLog dans la pratique : ingénierie algorithmique d'un algorithme de pointe pour l'estimation de la cardinalité). Les modifications apportées au paramètre HLL++ precision font le compromis entre l'utilisation de la mémoire et la précision des statistiques calculées. Augmenter la valeur du paramètre réduit l'erreur, mais augmente la consommation de mémoire.

Implémentation du décompte unique dans BigQuery

  • Utilisez COUNT(DISTINCT) pour mesurer la cardinalité exacte. Cette approche nécessite davantage de mémoire et prend plus de temps à s'exécuter, en particulier pour les ensembles de données volumineux.
  • APPROX_COUNT_DISTINCT fournit une approximation des résultats avec HLL++. Cependant, APPROX_COUNT_DISTINCT ne permet pas aux utilisateurs de configurer la précision d'approximation.
  • Pour utiliser des valeurs precision personnalisées, utilisez les fonctions HyperLogLog++. Consultez les croquis HLL++ pour connaître les valeurs precision autorisées et les intervalles de confiance pour les précisions types.
  • sparse precision est un autre paramètre pour HLL+. Dans BigQuery, la valeur sparse precision ne peut pas être définie par l'utilisateur et est fixée à precision + 5.

Implémentation de HLL++ dans les propriétés Google Analytics 4

Google Analytics 4 utilise la configuration suivante pour mesurer la cardinalité des métriques associées.

Métrique precision sparse precision
Sessions 12 17
Utilisateurs actifs 14 25
Nombre total d'utilisateurs 14 25

Utiliser des fonctions BigQuery HLL++ avec des données d'événements Google Analytics

Si les données d'événement de votre propriété Google Analytics 4 sont disponibles dans BigQuery, vous pouvez essayer de faire correspondre les métriques de l'UI avec les données BigQuery. Les exemples suivants supposent que:

  • L'identifiant de rapport est défini sur By device only pour la propriété Google Analytics 4.
  • Les autres sources potentielles de divergence, telles que le fuseau horaire des rapports, sont déjà traitées.

Nombre total d'utilisateurs

Nombre exact avec COUNT(DISTINCT):

SELECT
  COUNT(DISTINCT user_pseudo_id) AS exact_total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`

Nombre approximatif avec APPROX_COUNT_DISTINCT:

SELECT
  APPROX_COUNT_DISTINCT(user_pseudo_id) AS approx_total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`

Vous pouvez répliquer APPROX_COUNT_DISTINCT à l'aide des fonctions HLL++ de BigQuery. Les résultats renvoyés sont identiques ou très similaires à ceux de APPROX_COUNT_DISTINCT:

SELECT
  HLL_COUNT.EXTRACT(HLL_COUNT.INIT(user_pseudo_id, 15)) AS approx_total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`

Enfin, pour répliquer les données dans l'interface utilisateur de Google Analytics, utilisez precision = 14:

SELECT
  HLL_COUNT.EXTRACT(HLL_COUNT.INIT(user_pseudo_id, 14)) AS total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`

Utilisateurs actifs

Pour calculer le nombre d'utilisateurs actifs à partir de la table d'exportation des événements BigQuery, vous devez d'abord filtrer les événements pour n'afficher que les utilisateurs actifs. La mise en œuvre du filtre Utilisateur actif n'entre pas dans le cadre de cet article.

WITH ActiveUsers AS
(
  SELECT
    user_pseudo_id
  FROM
    `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
  WHERE
  <implement active user filter logic>
)
SELECT
  HLL_COUNT.EXTRACT(HLL_COUNT.INIT(user_pseudo_id, 14)) AS active_user_count,
FROM ActiveUsers

De sessions

Le paramètre d'événement ga_session_id identifie les sessions uniques pour chaque utilisateur. La combinaison de user_pseudo_id et ga_session_id sera unique dans votre ensemble de données pour des sessions uniques. Il s'agit de la méthode standard de comptabilisation des sessions pour les propriétés Google Analytics 4. Pour les sessions, precision est de 12.

SELECT
  HLL_COUNT.EXTRACT(
    HLL_COUNT.INIT(
      CONCAT(
        user_pseudo_id,
        (SELECT `value` FROM UNNEST(event_params) WHERE key = 'ga_session_id' LIMIT 1).int_value),
      12)) AS session_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`

Vous pouvez utiliser les requêtes de cet article de blog avec les exemples de requêtes de base et de requêtes avancées afin d'obtenir des insights supplémentaires à partir des données d'exportation d'événements BigQuery pour vos propriétés Google Analytics 4. Si votre propriété génère une quantité importante de données d'événement, vous pouvez également implémenter les fonctions HLL++ pour estimer la cardinalité d'autres métriques que vous utilisez couramment dans vos requêtes BigQuery. Pour en savoir plus sur HLL++ et sur les raisons pour lesquelles le calcul de la cardinalité est coûteux pour les grands ensembles de données, consultez l'article de blog détaillé sur le blog Cloud : Using HLL++ to speed up count-distinct in large dataset (Utiliser HLL++ pour accélérer le nombre de nombres distincts dans les ensembles de données volumineux).