GA4

【GA4 SQL】アクティブユーザー数の定義と総ユーザー数との違い

アクティブユーザー数の定義

GA4にはユーザー数のカウント方法にいくつかの条件を付けたものを用意していて、その中の1つに「アクティブユーザー数」がある。近しい指標としては「合計ユーザー数」(探索での表記は「総ユーザー数」)があり、これは全く条件を付けずにカウントされている。対して「アクティブユーザー数」はいくつかの条件のもとにユーザー数がカウントされておりユーザー数を母数とする指標としてGA4で採用されている。「アクティブユーザー数」の条件をまとめると以下の3つのいずれかを満たせばアクティブユーザーとしてカウントされる。

  • エンゲージメントセッションが発生
  • first_visitイベントが付く
  • engagement_time_msecパラメータの値が収集

エンゲージメント セッションが発生するか、アナリティクスで以下の情報が収集されると、アクティブ ユーザーとして認識されます。

  • ウェブサイトの first_visit イベントまたは engagement_time_msec パラメータ
  • Android アプリの first_open イベントまたは engagement_time_msec パラメータ
  • iOS アプリの first_open イベントまたは user_engagement イベント

参考:[GA4] ユーザーに関する指標を理解する – アナリティクス ヘルプ

エンゲージメントセッションの定義は以下の通り。

エンゲージメント セッションとは、10 秒を超えて継続したセッション、コンバージョン イベントが発生したセッション、または 2 回以上のページビューもしくはスクリーン ビューが発生したセッションです。

参考:エンゲージメント セッション – アナリティクス ヘルプ

この定義をみて疑問に感じるのは、engagement_time_msecパラメータの値が収集されればという条件がかなり緩いいため、この条件の中に「エンゲージメントセッション」も内包されるのではないのか?という点であるが、「エンゲージメントセッション」の条件を省いて値を集計したところ、探索での集計結果よりも値が少なく計上された。そのため、すべてがengagement_time_msecパラメータの発生の条件の中に包含されないケースもあるということがあるということが分かった。

合計ユーザー数とどれほどの差異があるのか?

これはサイトによって異なるが、アクティブユーザー数のカウントの条件がかなり敷居が低いため、基本的には合計ユーザー数とほとんど同値となる。しかし、流入数が多いサイトや期間を数ヶ月間など長い期間で比較した場合、差が大きくなることがある。検証した1例だと約500人の数値の乖離があったサイトもあった。差異がどれほどあるかは実際にGA4の探索で「総ユーザー数」と「アクティブユーザー数」を並べて検証してみれば検証可能である。

合計ユーザー数とアクティブユーザー数をどちらを使うべきか?

結論からいうと「アクティブユーザー数」を使うことを推奨する。理由は以下の通り。

  • GA4が「アクティブユーザー数」を採用している
    ユーザーに関する指標を算出する際に、GA4のレポートで使われているユーザー数は「アクティブユーザー数」が元になっているため、合わせた方がよい。
  • Botを省くことができる
    全てではないが、アクティブユーザー数を採用することでBotのフィルターをかけることができるかもしれない。

また、そもそもサイトへのアクセス後に1秒以内に離脱した「ユーザー」について考慮すれば、直帰するかの判断も付かないような短い時間で離脱したユーザー・Botをカウントする意味はないように思える。

BigQueryの対応フィールドは「is_active_user」

2023年7月にアクティブユーザーか否かを判定する「is_active_user」フィールドが追加された。そのため、これ以降であればこのフィールドを判定条件として活用することができる。BOOLEAN型であるため、WHERE文に「is_active_user」を追加するだけで「総ユーザー数」から「アクティブユーザー数」への置換が可能となる。23年7月以前のデータを扱う場合は、アクティブユーザーの条件を満たす判定式を組み込み算出する必要がある。

参考:[GA4] BigQuery Export スキーマ > is_active_user – アナリティクス ヘルプ

以上が、アクティブユーザー数のまとめとなる。BigQueryにおけるアクティブユーザー数(「is_active_user」を使用する方法とアクティブユーザー数の条件を組み込む方法)を取得するSQLを以下に提示する。アクティブユーザー数の条件を組み込む方法のコードはnoteでリツイートもしくは「Visual SEM Report」の購入後の保護ページにPASSを記載しているので、そちらを張り付けると以下コンテンツの続きが閲覧可能。

【GA4SQL】アクティブユーザー数カウント -note

合計ユーザー(総ユーザー)数をカウントするクエリ

探索でいう総ユーザー数を集計するクエリは、単純に重複のない’user_pseudo_id’をカウントすれば求められる。

WITH
  Total_UU AS (
    SELECT
      PARSE_DATE("%Y%m%d", event_date) AS ymd,
      COUNT(DISTINCT user_pseudo_id) AS _total_uu
    FROM
      `<project>.<dataset>.events_*`
    WHERE
        _TABLE_SUFFIX BETWEEN '20240401' AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
    GROUP BY
      ymd
    ORDER BY
      ymd ASC
  )

SELECT * FROM Total_UU

アクティブユーザー数をカウントするクエリ

・24/04/03:アクティブユーザー数の集計方法にミスがあったため修正

-- 「is_active_user」フィールドによるカウント
WITH
  Active_UU AS (
    SELECT
      ymd,
      COUNT(uuid) AS _active_uu
    FROM (
      SELECT
        PARSE_DATE("%Y%m%d", event_date) AS ymd,
        user_pseudo_id AS uuid,
      FROM
        `<project>.<dataset>.events_*`
      WHERE
        _TABLE_SUFFIX BETWEEN '20240401' AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
      AND
        is_active_user
      GROUP BY
        ymd,
        uuid
    )
    GROUP BY
      ymd
    ORDER BY
      ymd ASC
  )

SELECT * FROM Active_UU

Protected Area

This content is password-protected. Please verify with a password to unlock the content.

日次のランディングページごとのアクティブユーザー数をカウント

-- 「is_active_user」フィールドによるカウント
WITH
  LP_UU_Daily AS (
    SELECT
      ymd,
      page_location AS LandingPage,
      COUNT(DISTINCT user_pseudo_id) AS _uu
    FROM (
      SELECT
        PARSE_DATE("%Y%m%d", event_date) AS ymd,
        user_pseudo_id,
        REGEXP_REPLACE((SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location'), r"\?.*", "") AS page_location
      FROM
        `<project>.<dataset>.events_*`
      WHERE
          _TABLE_SUFFIX BETWEEN '20240315' AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
        AND
          event_name = 'session_start'
        AND
          is_active_user  
  )
  GROUP BY
    ymd,
    page_location
  ORDER BY
    ymd ASC
)
    
SELECT
  *
FROM
  LP_UU_Daily

Protected Area

This content is password-protected. Please verify with a password to unlock the content.

関連記事

【GA4SQL】GENERATE_DATE_ARRAY関数で日付テーブルを作成

【GA4 SQL】エンゲージメント セッション数をBigQueryから集計

【GA4 SQL】再帰CTEで同一ページを除いた「2ページ目」を取得 BigQuery WITH RECURSIVE

PAGE TOP