Näherungswert der eindeutigen Anzahl in Google Analytics

Minhaz Kazi, Developer Advocate, Google Analytics – Oktober 2022

Das Messen der genauen Anzahl unterschiedlicher Zahlen (d.h. der Kardinalität) für große Datasets erfordert viel Arbeitsspeicher und wirkt sich auf die Leistung aus. Google Analytics 4-Properties verwenden den Algorithmus HyperLogLog++ (HLL++) zur Schätzung der Kardinalität für die am häufigsten verwendeten Messwerte, einschließlich Aktive Nutzer und Sitzungen. Wenn Sie beispielsweise Aktive Nutzer in der Google Analytics-Benutzeroberfläche sowie über die Data API aufrufen, ist die Anzahl eine Annäherung. Die Verwendung von HLL++ für diese Messwerte sorgt für eine bessere Leistung mit höherer Genauigkeit bei der Schätzung und geringeren Fehlergrenzen. In diesem Blogpost erfahren Sie, wie HLL++ in Google Analytics 4-Properties verwendet wird und wie Sie einige der Schätzungen mithilfe von BigQuery-Ereignisexportdaten replizieren können.

Über HLL++

HLL++ schätzt die Kardinalität bei geringerem Speicherverbrauch und verbesserter Leistung. HLL++ hat Ergänzungen gegenüber dem HyperLogLog-Algorithmus und basiert auf HyperLogLog in der Praxis: Algorithmische Entwicklung eines modernen Algorithmus zur Abschätzung der Kardinalität. Änderungen am HLL++-Parameter precision wirken sich auf die Arbeitsspeichernutzung und die Genauigkeit der berechneten Statistiken aus. Wenn Sie den Parameterwert erhöhen, wird der Fehler verringert, aber die Arbeitsspeichernutzung erhöht.

Implementierung der eindeutigen Anzahl in BigQuery

  • Mit COUNT(DISTINCT) können Sie die genaue Kardinalität messen. Dieser Ansatz erfordert mehr Arbeitsspeicher und die Ausführung dauert länger, insbesondere bei großen Datasets.
  • APPROX_COUNT_DISTINCT schätzt Ergebnisse mit HLL++. Mit APPROX_COUNT_DISTINCT können Nutzer die Näherungsgenauigkeit jedoch nicht konfigurieren.
  • Verwenden Sie zur Verwendung benutzerdefinierter precision-Werte HyperLogLog++-Funktionen. Die zulässigen precision-Werte und die Konfidenzintervalle für typische Genauigkeiten finden Sie unter HLL++-Skizzen.
  • sparse precision ist ein weiterer Parameter für HLL+. In BigQuery kann der Wert sparse precision nicht vom Nutzer definiert werden und ist auf precision + 5 festgelegt.

HLL++-Implementierung in Google Analytics 4-Properties

In Google Analytics 4 wird die folgende Konfiguration verwendet, um die Kardinalität der zugehörigen Messwerte zu messen.

Messwert precision sparse precision
Sitzungen 12 17
Aktive Nutzer 14 25
Nutzer insgesamt 14 25

BigQuery-HLL++-Funktionen mit Google Analytics-Ereignisdaten verwenden

Wenn die Ereignisdaten Ihrer Google Analytics 4-Property in BigQuery verfügbar sind, können Sie versuchen, die Messwerte aus der UI mit BigQuery-Daten abzugleichen. In den folgenden Beispielen wird davon ausgegangen:

  • Die Berichts-ID ist für die Google Analytics 4-Property auf By device only festgelegt.
  • Andere potenzielle Ursachen für Abweichungen, z.B. die Zeitzone für die Berichterstellung, wurden bereits berücksichtigt.

Nutzer insgesamt

Genaue Anzahl mit COUNT(DISTINCT):

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

Ungefähre Anzahl mit APPROX_COUNT_DISTINCT:

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

Sie können APPROX_COUNT_DISTINCT mit den HLL++-Funktionen von BigQuery replizieren. Dadurch werden identische oder sehr ähnliche Ergebnisse als APPROX_COUNT_DISTINCT zurückgegeben:

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_*`

Und schließlich verwenden Sie precision = 14, um die Daten in der Google Analytics-Benutzeroberfläche zu replizieren:

SELECT
  HLL_COUNT.EXTRACT(HLL_COUNT.INIT(user_pseudo_id, 14)) AS total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`

Aktive Nutzer

Wenn Sie die Anzahl der aktiven Nutzer aus der BigQuery-Ereignisexporttabelle berechnen möchten, müssen Sie die Ereignisse zuerst nach Aktive Nutzer filtern. Die Implementierung des Filters Aktiver Nutzer wird in diesem Artikel nicht behandelt.

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

Sitzungen

Der Ereignisparameter ga_session_id identifiziert einzelne Sitzungen für jeden Nutzer. Die Kombination aus user_pseudo_id und ga_session_id ist für einzelne Sitzungen in Ihrem Dataset eindeutig. Das ist die Standardmethode zum Zählen von Sitzungen für Google Analytics 4-Properties. Bei Sitzungen ist 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_*`

Sie können Abfragen in diesem Blogpost mit den Beispielen für einfache Abfragen und erweiterte Abfragen verwenden, um zusätzliche Informationen aus den BigQuery-Ereignisexportdaten für Ihre Google Analytics 4-Properties zu erhalten. Wenn Ihre Property eine große Menge an Ereignisdaten generiert, können Sie auch die HLL++-Funktionen implementieren, um die Kardinalität anderer Messwerte zu schätzen, die Sie häufig in BigQuery-Abfragen verwenden. Weitere Informationen zu HLL++ und dazu, warum die Kardinalitätsberechnung für große Datasets teuer ist, finden Sie im ausführlichen Blogpost im Cloud-Blog: Using HLL++ to Speed up count-distinct in massive datasets.