Aproximação da contagem exclusiva no Google Analytics

Minhaz Kazi, mediador de desenvolvedores, Google Analytics – outubro de 2022

Medir a quantidade exata de contagens distintas (por exemplo, a cardinalidade) de grandes conjuntos de dados exige uma memória significativa e afeta a performance. As propriedades do Google Analytics 4 usam o algoritmo HyperLogLog++ (HLL++) para estimar a cardinalidade da métrica mais usada, incluindo Usuários ativos e Sessões. Por exemplo, ao visualizar os Usuários ativos na IU do Google Analytics e na API Data, a contagem é uma aproximação. O uso do HLL++ para essas métricas garante uma performance melhor com maior precisão de estimativa e limites de erro menores. Esta postagem do blog mostra detalhes sobre como o HLL++ é usado nas propriedades do Google Analytics 4 e como é possível replicar algumas das estimativas usando dados de exportação de eventos do BigQuery.

Sobre o HLL++

O HLL++ estima a cardinalidade usando menos memória e melhorando a performance. Ele tem adições feitas no algoritmo HyperLogLog e é baseado no documento em inglês HyperLogLog in Practice: Algorithmic Engineering of a State of the Art Cardinality Estimation Algorithm ("HyperLogLog na prática: engenharia algorítmica de um algoritmo de estimativa de cardinalidade de última geração", em tradução livre). As mudanças no parâmetro precision do HLL++ levam ao equilíbrio entre o uso da memória e a precisão das estatísticas calculadas. Aumentar o valor do parâmetro diminui o erro, mas eleva o consumo de memória.

Implementação da contagem exclusiva no BigQuery

  • Use COUNT(DISTINCT) para medir a cardinalidade exata. Essa abordagem requer mais memória e leva mais tempo para ser executada, especialmente em grandes conjuntos de dados.
  • APPROX_COUNT_DISTINCT estima os resultados com HLL++. No entanto, APPROX_COUNT_DISTINCT não permite que os usuários configurem a precisão da estimativa.
  • Para usar valores de precision personalizados, use as funções HyperLogLog++. Consulte o documento em inglês HLL++ Sketches ("Esboços do HLL++", em tradução livre) para saber quais são os valores precision permitidos e os intervalos de confiança para precisões típicas.
  • O sparse precision é outro parâmetro para HLL+. No BigQuery, o valor sparse precision não é definido pelo usuário e é corrigido em precision + 5.

Implementação do HLL++ nas propriedades do Google Analytics 4

O Google Analytics 4 usa a seguinte configuração para medir a cardinalidade das métricas relacionadas.

Métrica precision sparse precision
Sessões 12 17
Usuários ativos 14 25
Total de usuários 14 25

Como usar as funções do HLL++ no BigQuery com os dados de eventos do Google Analytics

Se os dados de eventos da sua propriedade do Google Analytics 4 estiverem disponíveis no BigQuery, tente fazer a correspondência entre as métricas da IU e os dados do BigQuery. Os exemplos a seguir pressupõem que:

  • O identificador de relatórios está definido como By device only na propriedade do Google Analytics 4.
  • Outras possíveis fontes de discrepância, como fuso horário do relatório, já foram resolvidas.

Total de usuários

Contagem exata usando COUNT(DISTINCT):

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

Contagem aproximada usando APPROX_COUNT_DISTINCT:

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

É possível replicar APPROX_COUNT_DISTINCT usando as funções do HLL++ no BigQuery. Isso retorna resultados idênticos ou muito semelhantes a 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_*`

Por fim, para replicar os dados na IU do Google Analytics, use 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_*`

Usuários ativos

Para calcular a contagem de Usuários ativos na tabela de exportação de eventos do BigQuery, primeiro é necessário filtrar os eventos apenas por Usuários ativos. A implementação do filtro Usuário ativo está fora do escopo deste artigo.

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

Sessões

O parâmetro de evento ga_session_id identifica sessões únicas individuais para cada usuário. A combinação de user_pseudo_id e ga_session_id vai ser exclusiva em todo o conjunto de dados para sessões únicas. Esse é o método padrão de contagem de sessões das propriedades do Google Analytics 4. Para sessões, precision é 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_*`

Você pode usar consultas nesta postagem do blog com os exemplos de Consultas básicas e Consultas avançadas para conseguir mais insights dos dados de exportação de eventos do BigQuery para suas propriedades do Google Analytics 4. Se a propriedade gera uma quantidade significativa de dados de eventos, você também pode implementar as funções do HLL++ para estimar a cardinalidade de outras métricas usadas com frequência nas consultas do BigQuery. Para saber mais sobre o HLL++ e por que o cálculo de cardinalidade é caro para grandes conjuntos de dados, leia a postagem do blog detalhada no Blog do Cloud, em inglês: Using HLL++ to speed up count-distinct in massive datasets ("Como usar o HLL++ para acelerar a diferenciação de contagem em conjuntos de dados grandes", em tradução livre).