SQL 캠프 광고 이미지
  • SQL
  • GA
  • 서비스 분석 사례
  • 데이터 분석

GA4가 활성 사용자 수를 세는 방식 총정리 [심화편]

SQL 캠프 광고 이미지
SQL 캠프 광고 이미지
 
안녕하세요, Johnny입니다.
포스타입 팀블로그에 활성 사용자(Active User)에 관한 총정리 글을 발행한 지 2년이 지났습니다. 감사하게도 페이지 조회수가 1만이 넘을 정도로 많은 분들께서 해당 글을 찾아주셨습니다.🙇‍♂️ 거의 모든 IT 프로덕트가 활성 사용자 수 또는 고객의 수를 측정하고 있기 때문에 그만큼 관심이 많은 주제임을 알 수 있었습니다.
 
 
2년 사이에는 어떤 변화가 있었을까요?
아마 가장 큰 변화를 꼽자면 구글 애널리틱스의 오랜 버전인 UA(Universal Analytics)가 서비스 종료를 앞두고 있다는 점이겠죠. 이제 크로스 플랫폼 환경에 최적화된 GA4 도입은 피할 수 없는 숙명이 되었습니다.
그래서 지난 활성 사용자 총정리 글의 후속으로 GA4의 활성 사용자를 조금 더 깊이 있게 파 보는 내용을 준비했습니다. 지난 글에 비해 조금 더 사전 지식이 필요하겠지만 아래와 같은 독자에게는 도움이 될 만한 내용이 있으리라 생각합니다.
 
활성 사용자의 개념을 더 자세히 이해하고 더 의미 있게 활용하고 싶어요.
GA4로 강제 전환하면서 UA에 비해 MAU가 감소했어요. GA4는 정확히 어떻게 활성 사용자 수를 세고 있는 건가요?
그냥 활성 사용자가 아닌, 유저 행동에 따른 활성 사용자를 좀 더 정확하게 알고 싶어요.
 
자, 이제 GA4-BigQuery를 활용한 활성 사용자 수 두 번째 글을 시작하겠습니다.
 
 

🚨 GA4에서는 사용자와 총 사용자가 다른 개념입니다

먼저 GA4는 위에서 설명해 드렸듯 크로스 플랫폼 환경에 맞춰 출시한 분석 서비스입니다. 기존에는 UA가 웹 분석, Firebase가 앱 분석을 제공했다면 GA4는 웹-앱 이용을 통합해 분석해 제공합니다.
GA4에서는 다양한 플랫폼을 통합해 분석하기 위해 모든 활동이 이벤트를 중심으로 헤쳐모이게 됩니다.
이때 GA4에서 이벤트가 기록된 모든 이용자 수는 총 사용자(Total User)가 됩니다. UA에서의 활성 사용자는 GA4의 총 사용자 개념에 가까웠는데요. GA4에서의 활성 사용자는 그렇지 않습니다.
 
GA4의 '총 사용자'와 '사용자' 지표 차이. 총 사용자는 565만으로, 사용자 555만에 비해 높습니다.
위 캡처는 포스타입 서비스에 설치된 GA4 2023년 1월 한 달간의 지표입니다. 보시다시피 총 사용자 수는 565만이지만 사용자 수는 555만이죠. 이 차이는 무엇일까요?
 
notion image
 
GA4의 활성 사용자는 모든 이벤트가 아닌, 이용자의 인게이지먼트(참여)가 발생한 이벤트만을 기준으로 합니다. 예컨대 앱 삭제, 알림 수신과 같은 이벤트는 이용자가 서비스에 직접 참여한 것이 아니기 때문에 활성 사용자로 보기 어렵죠. 이런 이벤트는 '총 사용자'에는 해당하지만 '(활성) 사용자'에는 해당하지 않습니다. (※. GA4에서는 사용자와 활성 사용자가 사실상 통용되는 개념입니다.)
그렇다면 활성 사용자에 해당하는 참여 이벤트는 어떤 기준을 따르고 있을까요?
플랫폼별로 다릅니다. 아래는 구글의 공식 문서가 제시하는, 활성 사용자 기준입니다.
 
웹사이트 또는 애플리케이션을 방문한 개별 사용자의 수입니다. 활성 사용자는 참여 세션이 있는 사용자 또는 애널리틱스에서 다음을 수집한 사용자입니다.
  • 웹사이트의 first_visit 이벤트 또는 engagement_time_msec 매개변수
  • Android 의 first_open 이벤트 또는 engagement_time_msec 매개변수
  • iOS 앱의 first_open 또는 user_engagement 이벤트
 
여기서 설명하는 각 이벤트는 여기에서 정확하게 확인할 수 있는데요. 서비스를 처음 방문 또는 실행했거나 세션 시간이 기록된 이벤트를 뜻합니다.
 
공식 문서의 BigQuery 샘플 쿼리는 아쉽게도 engagement_time_msec 조건만 둬서 이 조건을 정확하게 반영하지는 않았는데요. 위 기준을 정확하게 반영해 쿼리 조건을 짠다면 아래와 같을 겁니다.
 
 
(UA 개념에 가까운) 총 사용자와 신규 사용자에 관한 GA4 쿼리가 궁금하다면 여기를 참고하실 수 있습니다.
 
 

GA4는 고유한 개수를 빨리 세기 위해 근사치를 활용합니다📇

그렇다면 여기서 클라이언트 ID(user_pseudo_id)의 고유한 개수를 세면 될까요?
GA4는 정확도를 낮추되 퍼포먼스를 향상시키기 위해 근사치를 활용합니다.
자세한 내용은 구글이 지난해 10월 발행한 아티클을 확인해주시면 되는데요. 제게는 아하! 모먼트였고 이 글을 작성하게 된 계기이기도 합니다.
요약하자면 GA4는 활성 사용자, 세션 등 자주 측정하는, 고유한 개수에 관한 측정항목을 측정하기 위해 HyperLogLog++ (HLL++) 알고리즘을 활용한다는 것입니다. 적은 메모리를 사용하되 어느 정도의 오차를 허용해 신뢰할 만한 값을 빠르게 얻는 것입니다.
즉, GA4의 샘플링이 100%를 기반으로 했다고 할지라도 활성 사용자를 포함한 어떤 수치들은 정확도 100%를 보장하지 않는다는 것이죠. (아하!)
 
notion image
 
GA4 탐색 분석의 샘플링 정보. 샘플링이 100%라는 것이 곧 정확도 100%를 뜻하지는 않는 것입니다.
정확도 100%의 카디널리티를 세는 방식이 아래라면,
 
 
GA4는 HLL++ 함수를 활용해 아래와 같이 카디널리티를 세고 있다는 내용입니다.
 
 
구글 공식 문서는 이를 기반으로 필터가 적용되지 않은 활성 사용자 계수 쿼리를 제공하고 있습니다.
 
 

새롭게 알게된 사실을 합쳐봅시다⛓️

우리가 지난 글에서 알고 있던 사실은 아래와 같습니다.
  • GA4에서는 클라이언트 ID(user_pseudo_id)와 사용자 ID(user_id)를 활용해 활성 사용자를 센다.
반면, 이번 글에서 새롭게 알게 된 사실은 아래와 같습니다.
  • GA4에서는 플랫폼에 따라 정해진 고유한 이벤트에 참여하는 경우에만 활성 사용자로 본다.
  • GA4에서는 활성 사용자 수 등을 세기 위해 정확한 계수(COUNT DISTINCT)가 아닌, HLL++ 함수를 활용한 근사치 계수 방식을 채택하고 있다.
이미 알고 있던 것과 새롭게 알게 된 것을 조합해 BigQuery의 쿼리를 정리해보면 아래와 같습니다.
 
 
가까운 미래에 활성 사용자를 필터링할 수 있는 필드인 is_active_user가 추가될 예정이라고 하니, 조금 더 간편하게 데이터를 추출할 수 있지 않을까 생각합니다.
 
 

그래도 여전히 GA4 UI와는 숫자가 다르다면🙀

위에서 정리한 쿼리로 포스타입 서비스의 2023년 1월 1일 DAU를 돌려보았습니다.
BigQuery로 정확히 계산한 DAU는 64.59만 명, BigQuery로 근사치를 계산한 DAU는 64.32만 명, GA4 UI에서 확인한 DAU는 64.47만 명입니다. 오차가 존재하지만 무시할 만한 수준입니다. 그런데 여기서 N-day의 기간을 늘릴수록 오차는 불어나게 되는데요. 그 이유는 무엇일까요?
 
GA4는 아래와 같은 순서대로 사용자를 식별합니다. (출처는 여기입니다.)
User-ID → Google 신호 데이터 → 기기 ID (→ 모델링)
 
이때 Google 신호 데이터는 BigQuery로 추출할 수 없습니다. 모델링 역시 마찬가지입니다. 그렇다보니 로그인하지 않은 이용자의 개수(user_pseudo_id)가 많아지면 많아질수록, 즉 관찰 기간이 길어질수록 Google 신호 데이터와 모델링으로 중첩이 제거되지 않은 BigQuery상 수치가 중첩을 최대한 제거한 GA4 UI상 수치에 비해 높을 수밖에 없는 거죠.
GA4 UI에 표시되는 '기준점 적용됨'이라는 문구가 이같은 상황을 의미합니다. 자세한 내용은 여기서 확인하실 수 있습니다.
 
물론 사용자 세기의 문제는 다중 기기 환경에서 더욱 고도화된 측정을 통해 사용자 수를 줄여나가는 여정이기에 GA4 UI의 수치가 현실, 즉 스크린 너머의 실제 사용자 수에 더욱 가깝다고 말할 수 있겠죠.
테스트해본 결과, 로그인한 이용자의 개수(user_id)는 기간이 길어지더라도 대략 0.3% 미만의 오차를 거의 벗어나지 않는 것으로 확인했습니다. ☑️
 
 
고객의 수를 정확하게 아는 것은 비즈니스 데이터를 측정하고 분석하는 첫 출발점이라고 생각합니다.
최근 구글의 UA 선셋 정책으로 아마 많은 분들께서 GA4로의 전환을 검토하며 혼란스러우리라 생각하는데요. UA → GA4 전환 과정에서 서로 다른 사용자 개념과 활성 사용자 계수 방식에 대해 깊게 이해할 수 있는 기회가 되었다면 좋겠습니다.
또 위 쿼리를 잘 활용한다면 우리 비즈니스에 더욱 잘 맞는 활성 사용자 수를 더 정확하게 추출할 수 있으리라 생각합니다.
 
 
✍🏻
Editor 보민’s comment
이 글의 원문은 포스타입 팀 블로그에 업로드된 ‘GA4가 활성 사용자 수를 세는 방식 총정리 [심화편]’ 입니다.
GA4 보고서에서 자주 볼 수 있는 ‘사용자’와 ‘총 사용자’가 다른 개념이라는 것 혹시 알고 계셨나요? GA4를 공부하면서 가장 놀랐던 것 중 하나가 이 ‘사용자’와 ‘총 사용자’의 개념이 다르다는 점이었는데요. 심지어 근사치를 사용한다니, GA4에서 말하는 ‘사용자’의 정의를 정확하게 알지 못했다면 수치가 왜 다르게 나오는지 몰라서 답답하게만 느껴졌을 것 같습니다.
또 이번 글에서는 GA4에서 집계되는 ‘활성 사용자’를 빅쿼리를 이용해 직접 구해보는 방법에 대해 이야기해 보았는데요. 어떻게 쿼리를 작성해야 하는지, 왜 그런 쿼리를 작성해야만 하는지 자세히 설명되어 있어 어렵지 않게 이해할 수 있었습니다.
혹시 이 글에서 언급된 활성 사용자라는 개념이 생소하시거나, 들어는 봤는데 정확하게 어떤 개념인지 모르겠다 하시는 분들은 시리즈 첫 번째 글 ‘기획자와 마케터를 위한 활성 사용자 총정리’를 한 번 읽어보세요.
차길호포스타입 | 비즈옵스 매니저

크리에이터 이코노미 스타트업에서 경영에 관한 전략과 오퍼레이션 관련 업무를 담당하고 있습니다. 회사, 비즈니스, 프로덕트가 마주한 문제를 해결할 수 있도록 돕는 일을 합니다. 데이터 분석을 통해 정형화하기 어려운 문제를 간결하게 정의하고 해결하는 것에 관심이 많습니다.

함께 읽어보면 좋은 글

주식회사 데이터리안