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 valoresprecision
permitidos e os intervalos de confiança para precisões típicas. - O
sparse precision
é outro parâmetro para HLL+. No BigQuery, o valorsparse precision
não é definido pelo usuário e é corrigido emprecision + 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).