Google 애널리틱스의 고유 개수 근사값

민하즈 카지, Google 애널리틱스 Developer Advocate – 2022년 10월

대규모 데이터 세트의 정확한 고유 개수(카디널리티)를 측정하려면 상당한 메모리가 필요하며 성능에도 영향을 줍니다. Google 애널리틱스 4 속성은 HyperLogLog++(HLL++) 알고리즘을 사용하여 활성 사용자, 세션 등 가장 많이 사용되는 측정항목의 카디널리티를 추정합니다. 예를 들어 Google 애널리틱스 UI는 물론 Data API를 통해 활성 사용자를 조회하는 경우 개수는 근사값입니다. 이러한 측정항목에 HLL++를 사용하면 추정 정확도가 높아지고 오류 범위가 낮아지므로 성능이 향상됩니다. 이 블로그 게시물에서는 Google 애널리틱스 4 속성에서 HLL++를 사용하는 방법과 BigQuery 이벤트 내보내기 데이터를 사용하여 일부 추정치를 복제하는 방법을 자세히 설명합니다.

HLL++ 정보

HLL++는 적은 메모리를 사용하고 성능을 개선하면서 카디널리티를 추정합니다. HLL++는 HyperLogLog 알고리즘을 통해 보강되었으며 HyperLogLog 실무: 첨단 카디널리티 추정 알고리즘의 알고리즘 엔지니어링을 기반으로 합니다. HLL++ precision 매개변수를 변경하면 메모리를 사용하는 만큼 계산된 통계의 정확성이 개선됩니다. 매개변수 값을 늘리면 오류는 줄어들지만 메모리 소비가 증가합니다.

BigQuery의 고유 개수 구현

  • 정확한 카디널리티를 측정하려면 COUNT(DISTINCT)를 사용합니다. 이 방식에는 더 많은 메모리가 필요하며, 특히 대규모 데이터 세트의 경우 실행하는 데 시간이 더 오래 걸립니다.
  • APPROX_COUNT_DISTINCT는 HLL++를 사용하여 결과를 얻습니다. 그러나 APPROX_COUNT_DISTINCT의 경우 사용자가 정확한 근사값을 구성할 수 없습니다.
  • 커스텀 precision 값을 사용하려면 HyperLogLog++ 함수를 사용합니다. 허용되는 precision 값과 일반적인 정밀도의 신뢰 구간은 HLL++ 스케치를 참고하세요.
  • sparse precision은 HLL+의 또 다른 매개변수입니다. BigQuery에서 sparse precision 값은 사용자가 정의할 수 없으며 precision + 5로 고정되어 있습니다.

Google 애널리틱스 4 속성의 HLL++ 구현

Google 애널리틱스 4에서는 다음 구성을 사용하여 관련 측정항목의 카디널리티를 측정합니다.

측정항목 precision sparse precision
세션 12 17
활성 사용자 14 25
총 사용자 14 25

Google 애널리틱스 이벤트 데이터와 함께 BigQuery HLL++ 함수 사용하기

BigQuery에서 Google 애널리틱스 4 속성의 이벤트 데이터를 사용할 수 있는 경우 UI의 측정항목을 BigQuery 데이터와 연결해 볼 수 있습니다. 아래 예에서는 다음을 가정합니다.

  • Google 애널리틱스 4 속성의 보고 식별자는 By device only로 설정됩니다.
  • 불일치의 다른 원인(예: 보고 시간대)은 이미 해결되었습니다.

총 사용자

COUNT(DISTINCT)를 사용한 정확한 개수:

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

APPROX_COUNT_DISTINCT를 사용한 대략적인 개수:

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

BigQuery HLL++ 함수를 사용하여 APPROX_COUNT_DISTINCT를 복제할 수 있습니다. 다음은 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_*`

마지막으로 Google 애널리틱스 UI에서 데이터를 복제하려면 다음과 같이 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_*`

활성 사용자

BigQuery 이벤트 내보내기 표에서 활성 사용자 수를 계산하려면 먼저 활성 사용자에 대한 이벤트만 필터링해야 합니다. 활성 사용자 필터 구현은 이 문서에서 다루지 않습니다.

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

세션

ga_session_id 이벤트 매개변수는 각 사용자의 개별 고유 세션을 식별합니다. user_pseudo_idga_session_id의 조합은 고유 세션의 데이터 세트에서 고유합니다. 다음은 Google 애널리틱스 4 속성의 세션을 계산하는 표준 방법입니다. 세션의 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_*`

기본 쿼리고급 쿼리 예시와 함께 이 블로그 게시물의 쿼리를 사용하면 Google 애널리틱스 4 속성의 BigQuery 이벤트 내보내기 데이터에서 추가 통계를 얻을 수 있습니다. 속성에서 상당한 양의 이벤트 데이터가 생성되는 경우 HLL++ 함수를 구현하여 BigQuery 쿼리에서 일반적으로 사용하는 다른 측정항목의 카디널리티를 추정할 수도 있습니다. HLL++에 대해 자세히 알아보고 대규모 데이터 세트의 카디널리티 계산 비용이 비싼 이유에 대해 알아보려면 Cloud 블로그의 심층 블로그 게시물인 HLL++를 사용하여 대규모 데이터 세트의 개수 구분 속도 높이기를 참고하세요.