[GA4] ga_session_idとは?BigQueryで重複率を算出

ga_session_idとは、新規セッション毎に「session_start」イベントによって生成されるパラメーターでありINT型の値を持つ。また、名称としての「セッションID」と同義である。

[su_quote cite=”GA4 アナリティクスのセッションについて” url=”https://support.google.com/firebase/answer/9191807?hl=ja”]セッションが開始されると、自動的に session_start イベントが収集され、session_start イベントによってセッション ID(ga_session_id)とセッション番号(ga_session_number)が生成されます。​[/su_quote] [su_quote cite=”GA4 アナリティクスのセッションについて” url=”https://support.google.com/firebase/answer/9191807?hl=ja”]セッションIDは、イベントが発生したセッションを示します。たとえば、ユーザーがお客様のサイトで 2つのセッションを別々に実施した場合、2つの異なるセッションIDが生成されます。​[/su_quote]

手持ちのデータでの検証では ga_session_id は全てのイベントと紐づくことが確認できた。

セッションはuser_pseudo_idとga_session_idを組み合わせる

ga_session_id はユニークに計測することでセッション数の計算にも使われると公式ヘルプに記載があるが、注意点としては ga_session_id はユーザーを跨り同一の ga_session_id が使われることがある。そのため、単純に「ga_session_id」を集計しただけでは、正確なセッション数とはならないため、ユーザーIDとなる user_pseudo_id と組み合わせて集計する必要がある。

1
CONCAT(user_pseudo_id, CAST((SELECT VALUE.int_value FROM UNNEST(event_params) WHERE KEY = 'ga_session_id') AS string)) AS sid
[su_quote cite=”GA4 アナリティクスのセッションについて” url=”https://support.google.com/analytics/answer/9191807?hl=ja”]アナリティクスでは、ユニークセッションIDの数を推定することで、サイトまたはアプリで発生したセッションの数を算出します。[/su_quote]

「ga_session_id」の重複率 ga_session_id + user_pseudo_id VS ga_session_id

ユニークセッションを算出するには user_pseudo_id と組み合わせる必要があるが、この組み合わせたものと ga_session_id をユニークに集計したものでは、どれくらい違いが出るのかをBigQueryを用いて検証する。

検証方法としては手持ちのデータとなるためデータ量としては少なくなるが、日次と月次でga_session_id と user_pseudo_idを組み合わせたものと、ga_session_idの両方をユニークな件数をカウントし比較することで、両者の一致率と重複率の算出を行った。

検証用SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
WITH prep1 AS (
SELECT
  event_date,
  user_pseudo_id,
  (SELECT VALUE.int_value FROM UNNEST(event_params) WHERE KEY = 'ga_session_id') AS ga_session_id
FROM
  `データセットID.events_2023*`
),

prep2 AS (
  SELECT
    event_date,
    COUNT(DISTINCT CONCAT(user_pseudo_id, ga_session_id)) AS user_pseudo_id_ga_session_id
  FROM
    prep1
  GROUP BY
    event_date
),

prep3 AS (
  SELECT
    event_date,
    COUNT(DISTINCT ga_session_id) AS ga_session_id
  FROM
    prep1
  GROUP BY
    event_date
)

SELECT
  event_date,
  user_pseudo_id_ga_session_id,
  ga_session_id,
FROM
  prep2
    LEFT JOIN prep3 USING(event_date)
ORDER BY
  event_date
;

検証結果

1.日次
2023年04月 一致率:99.7% 重複率:0.3%
2023年05月 一致率:99.8% 重複率:0.2%
2023年06月 一致率:99.9% 重複率:0.1%

2.月次
2023年04月 一致率:99.7% 重複率:0.3%
2023年05月 一致率:99.8% 重複率:0.2%
2023年06月 一致率:99.9% 重複率:0.1%

検証結果から、一致率は99%以上であるため、概算目的であれば ga_session_id 単体でもユニークセッションとして扱っても問題ないだろが、サイト規模が大きくなるのと比例して重複率は上がるものと推測される。ただ、BigQueryでSQLを組む際は user_pseudo_id と組み合わせない理由が特段ない場合を除いては、常に組み合わせて使った方がよいだろう。

参考:GA4で日次のセッション数を集計するSQLクエリ | GA4QUERY

関連記事