การประมาณจำนวนที่ไม่ซ้ำกันใน Google Analytics

Minhaz Kazi ผู้ประสานงานนักพัฒนาแอปจาก Google Analytics – ตุลาคม 2022

การวัดจำนวนที่แน่นอน (เช่น จำนวนสมาชิกในเซ็ต) สำหรับชุดข้อมูลขนาดใหญ่ต้องใช้หน่วยความจำที่มีนัยสำคัญและส่งผลต่อประสิทธิภาพ พร็อพเพอร์ตี้ Google Analytics 4 ใช้อัลกอริทึม HyperLog++ (HLL++) เพื่อประมาณ Cardinality สำหรับเมตริกที่ใช้ส่วนใหญ่ ซึ่งรวมถึงผู้ใช้ที่ใช้งานอยู่และเซสชัน ตัวอย่างเช่น เมื่อดูผู้ใช้ที่ใช้งานอยู่ใน UI ของ Google Analytics รวมถึงดูผ่าน Data API จำนวนดังกล่าวจะเป็นค่าโดยประมาณ การใช้ HLL++ สำหรับเมตริกเหล่านี้ช่วยรับประกันประสิทธิภาพที่ดีขึ้นด้วยความแม่นยำในการประมาณที่สูงขึ้นและมีขอบเขตข้อผิดพลาดที่ต่ำกว่า บล็อกโพสต์นี้ให้รายละเอียดเกี่ยวกับวิธีใช้ HLL++ ในพร็อพเพอร์ตี้ Google Analytics 4 และวิธีจำลองค่าประมาณบางส่วนโดยใช้ข้อมูลการส่งออกเหตุการณ์ BigQuery

เกี่ยวกับ HLL++

จะประมาณ Cardinality ของ HLL++ ขณะที่ใช้หน่วยความจำน้อยลงและปรับปรุงประสิทธิภาพ HLL++ มีการเสริมแต่งผ่านอัลกอริทึม HyperLogLog และแบบที่ใช้ HyperLogLog in Practice: วิศวกรรมอัลกอริทึมของสถานะศิลปะ อัลกอริทึมการประมาณ Cardinality การเปลี่ยนแปลงในพารามิเตอร์ precision ของ HLL++ เปรียบเทียบการใช้งานหน่วยความจำกับความแม่นยำของสถิติที่คำนวณแล้ว การเพิ่มค่าพารามิเตอร์จะทำให้ข้อผิดพลาดลดลง แต่จะเพิ่มการใช้หน่วยความจำ

การใช้งานการนับที่ไม่ซ้ำกันใน BigQuery

  • ใช้ COUNT(DISTINCT) เพื่อวัด Cardinality ที่แน่นอน วิธีนี้ต้องใช้หน่วยความจำมากขึ้นและใช้เวลาในการเรียกใช้นานขึ้น โดยเฉพาะเมื่อมีชุดข้อมูลขนาดใหญ่
  • APPROX_COUNT_DISTINCT จะประมาณผลลัพธ์ด้วย HLL++ อย่างไรก็ตาม APPROX_COUNT_DISTINCT ไม่อนุญาตให้ผู้ใช้กำหนดค่าความแม่นยำในการประมาณ
  • หากต้องการใช้ค่า precision ที่กำหนดเอง ให้ใช้ฟังก์ชัน HyperLog++ โปรดดู HLL++ Sketches สําหรับค่า precision ที่อนุญาตและช่วงความเชื่อมั่นสําหรับความแม่นยำทั่วไป
  • sparse precision เป็นพารามิเตอร์อีกรายการสำหรับ HLL+ ซึ่งใน BigQuery ผู้ใช้ไม่สามารถกำหนดค่า sparse precision ได้และจะคงที่ที่ precision + 5

การใช้งาน HLL++ ในพร็อพเพอร์ตี้ Google Analytics 4

Google Analytics 4 ใช้การกําหนดค่าต่อไปนี้สําหรับการวัดจํานวนสมาชิกในเซ็ตของเมตริกที่เกี่ยวข้อง

เมตริก precision sparse precision
เซสชัน 12 17
ผู้ใช้ที่ใช้งานอยู่ 14 25
ผู้ใช้ทั้งหมด 14 25

การใช้ฟังก์ชัน HLL++ ของ BigQuery กับข้อมูลเหตุการณ์ของ Google Analytics

หากข้อมูลเหตุการณ์ของพร็อพเพอร์ตี้ Google Analytics 4 มีอยู่ใน BigQuery ให้ลองจับคู่เมตริกจาก UI กับข้อมูล BigQuery ตัวอย่างต่อไปนี้มีสมมติฐาน

  • ตัวระบุการรายงานตั้งค่าไว้เป็น By device only สําหรับพร็อพเพอร์ตี้ Google Analytics 4
  • แหล่งที่มาอื่นๆ ของความคลาดเคลื่อนที่อาจเกิดขึ้น เช่น เขตเวลาในการรายงาน ได้รับการแก้ไขแล้ว

ผู้ใช้ทั้งหมด

จำนวนที่แน่นอนโดยใช้ COUNT(DISTINCT):

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

จำนวนโดยประมาณที่ใช้ APPROX_COUNT_DISTINCT:

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

คุณจำลอง APPROX_COUNT_DISTINCT โดยใช้ฟังก์ชัน HLL++ ของ BigQuery ได้ การดำเนินการนี้จะแสดงผลลัพธ์ที่เหมือนกันหรือคล้ายกันมากกับ APPROX_COUNT_DISTINCT:

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

และสุดท้าย หากต้องการจำลองข้อมูลใน UI ของ Google Analytics ให้ใช้ precision = 14

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

ผู้ใช้ที่ใช้งานอยู่

หากต้องการคำนวณจํานวนผู้ใช้ที่ใช้งานอยู่จากตารางการส่งออกเหตุการณ์ BigQuery คุณต้องกรองเหตุการณ์สำหรับผู้ใช้ที่ใช้งานอยู่เท่านั้นก่อน การใช้ตัวกรองผู้ใช้ที่ใช้งานอยู่ไม่อยู่ในขอบเขตของบทความนี้

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

เซสชัน

พารามิเตอร์เหตุการณ์ ga_session_id จะระบุเซสชันที่ไม่ซ้ำกันของผู้ใช้แต่ละราย ชุดค่าผสมของ user_pseudo_id และ ga_session_id จะไม่ซ้ำกันในชุดข้อมูลสําหรับเซสชันที่ไม่ซ้ำกัน ซึ่งเป็นวิธีมาตรฐานในการนับเซสชันสําหรับพร็อพเพอร์ตี้ Google Analytics 4 สำหรับเซสชัน 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_*`

คุณสามารถใช้การค้นหาในบล็อกโพสต์นี้กับตัวอย่างการค้นหาพื้นฐานและการค้นหาขั้นสูงเพื่อรับข้อมูลเชิงลึกเพิ่มเติมจากข้อมูลการส่งออกเหตุการณ์ BigQuery สําหรับพร็อพเพอร์ตี้ Google Analytics 4 หากพร็อพเพอร์ตี้สร้างข้อมูลเหตุการณ์ได้เป็นจำนวนมาก คุณจะใช้ฟังก์ชัน HLL++ เพื่อประมาณจำนวนสมาชิกในเซ็ตของเมตริกอื่นๆ ที่ใช้กันโดยทั่วไปในการค้นหา BigQuery ได้ด้วย หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับ HLL++ และเหตุผลที่การคำนวณ Cardinality มีราคาสูง สำหรับชุดข้อมูลขนาดใหญ่ โปรดอ่านบล็อกโพสต์เชิงลึกเกี่ยวกับ Cloud Blog การใช้ HLL++ เพื่อเร่งการนับในชุดข้อมูลขนาดใหญ่ให้เร็วขึ้น