HLL++(HyperLogLog++)とは、GA4がユーザー数・セッション数などのユニーク数を高速かつ効率的に算出するために採用している統計的推定アルゴリズムです。 正確なカウントではなく推定値を使うことで、大量データでも高速な集計を実現しています。
GA4のレポートでユーザー数やセッション数を確認する際、実は内部で「HLL++」という統計的アルゴリズムが使われています。本記事ではHLL++の概要と、GA4における活用について解説します。
HLL++とは
HyperLogLog++(HLL++) は、メモリ効率に優れた「基数近似」アルゴリズムです。
- 正確なカウントではなく推定値ですが、少ないリソースで高精度を維持できます
- precision(精度) の設定により「誤差 vs メモリ使用量」のバランスを調整できます
- 精度を高めるほど誤差は小さくなりますが、必要なデータ量も増えます
GA4におけるHLL++の活用
GA4は大量データでも高速かつ高精度にユニーク数を算出するためにHLL++を採用しています。
| 指標 | precision | sparse precision |
|---|---|---|
| セッション数 | 12 | 17 |
| アクティブユーザー | 14 | 25 |
| 総ユーザー | 14 | 25 |
※ precisionの値はGoogleが公開している技術資料に基づくもので、内部実装の詳細値(特に sparse precision)は公式ドキュメントで明示されていない場合があります。GA4のアップデートに伴い変更される可能性もあるため、参考値として参照してください。
precisionとは
HLL++が内部で使うビット数(2ⁿ個のバケットに振り分ける)で、値が大きいほど精度が上がり誤差が小さくなります。ただし必要なメモリ量も増えます。
- precision = 12 → 誤差は約1.6%
- precision = 14 → 誤差は約0.8%
sparse precisionとは
少量データのときだけ使われる一時的な最適化設定です。データ件数が少ないあいだは、より高い精度(=より大きなprecision値)でスケッチを保持し、件数が一定数を超えたタイミングで通常の precision に丸めることで、高速化・省メモリと精度の両立を図っています。
セッション数の計算方法
GA4では user_pseudo_id とイベントパラメータ ga_session_id を組み合わせてユニークなセッションを特定し、precision = 12でHLL++を適用してセッション数を算出しています。
※
HLL_COUNT.INITはBigQueryの集約関数のため、GROUP BYを伴わない場合は全行を対象としてスケッチを構築します。下記は全期間のセッション数を一括算出するイメージのSQLです。
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 ...events_*
なぜGA4のユーザー数は厳密ではないのか
HLL++は推定アルゴリズムのため、GA4で表示されるユーザー数やセッション数は完全に正確な値ではありません。これがBigQueryエクスポートのデータとGA4レポートの数値が若干異なる理由の一つです。
ただし、BigQueryとGA4レポートで値が一致しない要因はHLL++による近似だけではなく、レポート上のしきい値適用、サンプリング、データ反映タイミングのズレ、計算対象期間や集計単位の違いなど複数あります。
GA4のレポート数値は「高速かつ高精度な推定値」として理解しておくことが重要です。
まとめ
| 項目 | 内容 |
|---|---|
| アルゴリズム名 | HyperLogLog++(HLL++) |
| 用途 | ユーザー数・セッション数などのユニーク数の高速推定 |
| 値の性質 | 推定値(正確なカウントではない) |
| GA4とBigQueryの差異の一因 | HLL++による近似のほか、しきい値・サンプリング・集計単位の違いなど |