Aproximación del recuento único en Google Analytics

Minhaz Kazi, Developer Advocate de Google Analytics, octubre de 2022

Medir recuentos exactos diferenciados (como la cardinalidad) en conjuntos de datos de gran tamaño requiere una memoria significativa y afecta al rendimiento. Las propiedades de Google Analytics 4 utilizan el algoritmo HyperLogLog++ (HLL++) para estimar la cardinalidad de las métricas más usadas, como los Usuarios activos y las Sesiones. Por ejemplo, el recuento de Usuarios activos que se muestra en la UI de Google Analytics y a través de la API Data es una aproximación. Si usas HLL++ en estas métricas, obtendrás un mejor rendimiento, ya que aumentará la precisión de las estimaciones y se reducirán los márgenes de error. En esta entrada de blog se explica cómo se usa HLL++ en las propiedades de Google Analytics 4 y cómo replicar algunas estimaciones mediante datos de exportación de eventos de BigQuery.

Información sobre HLL++

HLL++ estima la cardinalidad al tiempo que usa menos memoria y mejora el rendimiento. HLL++ tiene aumentos realizados a través del algoritmo HyperLogLog y está basado en HyperLogLog in Practice: Algorithmic Engineering of a State of the Art Cardinality Estimation Algorithm (HyperLogLog en la práctica: ingeniería algorítmica de un algoritmo de estimación de cardinalidad de última generación). Al hacer cambios en el parámetro precision de HLL++, se mantiene una proporción entre el uso de memoria y la precisión de las estadísticas calculadas. Al aumentar el valor del parámetro se reduce el error, pero aumenta el consumo de memoria.

Implementación del recuento único en BigQuery

  • Usa COUNT(DISTINCT) para medir la cardinalidad exacta. Este método requiere más memoria y tardará más en ejecutarse, sobre todo en conjuntos de datos de gran tamaño.
  • APPROX_COUNT_DISTINCT calcula aproximaciones de los resultados con HLL++. Sin embargo, APPROX_COUNT_DISTINCT no permite a los usuarios configurar la precisión de la aproximación.
  • Para usar valores de precision personalizados, usa las funciones HyperLogLog++. Consulta los esquemas de HLL++ para ver los valores que se permiten en precision y los intervalos de confianza para obtener las precisión habituales.
  • sparse precision es otro parámetro para HLL+. En BigQuery, el valor de sparse precision no lo puede definir el usuario y está fijado en precision + 5.

Implementación de HLL++ en propiedades de Google Analytics 4

Google Analytics 4 usa la siguiente configuración para medir la cardinalidad de las métricas relacionadas:

Métrica precision sparse precision
Sesiones 12 17
Usuarios activos 14 25
Total de usuarios 14 25

Usar funciones HLL++ de BigQuery con datos de eventos de Google Analytics

Si los datos de eventos de tu propiedad de Google Analytics 4 están disponibles en BigQuery, puedes intentar relacionar las métricas de la UI con los datos de BigQuery. En los siguientes ejemplos se asume que:

  • El identificador de informes está establecido en By device only para la propiedad de Google Analytics 4.
  • Otras posibles fuentes de discrepancia como, por ejemplo, la zona horaria de los informes, ya se han solucionado.

Total de usuarios

Recuento exacto usando COUNT(DISTINCT):

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

Recuento aproximado 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_*`

Puedes replicar APPROX_COUNT_DISTINCT con funciones HLL++ de BigQuery. Obtendrás los mismos resultados o muy similares 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_*`

Y, por último, para replicar los datos en la UI de Google Analytics, usa 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_*`

Usuarios activos

Para calcular los Usuarios activos de una tabla de exportación de eventos de BigQuery, primero debes filtrar los eventos por Usuarios activos únicamente. La implementación del filtro de Usuario activo queda fuera del ámbito de este artículo.

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

Sesiones

El parámetro de evento ga_session_id identifica las sesiones únicas individuales de cada usuario. La combinación de user_pseudo_id y ga_session_id será única en todo el conjunto de datos para sesiones únicas. Este es el método estándar para contar las sesiones en propiedades de Google Analytics 4. Para las sesiones, el valor de precision es 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_*`

Puedes usar las consultas de esta entrada de blog con los ejemplos de Consultas básicas y de Consultas avanzadas para obtener información adicional de los datos de exportaciones de eventos de BigQuery para tus propiedades de Google Analytics 4. Si tu propiedad genera una cantidad significativa de datos de eventos, también puedes implementar las funciones HLL++ para estimar la cardinalidad de otras métricas que usas habitualmente en tus consultas de BigQuery. Para obtener más información sobre HLL++ y los motivos por los que la computación de cardinalidad resulta cara para los conjuntos de datos de gran tamaño, lee la entrada detallada del blog de Google Cloud sobre cómo usar HLL++ para acelerar el recuento diferenciado en conjuntos de datos enormes.