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

Minhaz Kazi ผู้ประสานงานนักพัฒนาซอฟต์แวร์ของ Google Analytics ตุลาคม 2022

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

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

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

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

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

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

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

เมตริก 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 คุณจะต้องทำดังนี้ ต้องกรองเหตุการณ์สำหรับผู้ใช้ที่ใช้งานอยู่เท่านั้น การติดตั้งใช้งานแท็ก Active ตัวกรองผู้ใช้อยู่นอกขอบเขตของบทความนี้

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++ เพื่อทำสิ่งต่อไปนี้ได้ ประมาณ Cardinality ของเมตริกอื่นๆ ที่คุณใช้บ่อยใน BigQuery การค้นหา ดูข้อมูลเพิ่มเติมเกี่ยวกับ HLL++ และเหตุผลที่การประมวลผล Cardinality มีราคาสูง สำหรับชุดข้อมูลขนาดใหญ่ ให้อ่านบล็อกโพสต์ข้อมูลเชิงลึกในบล็อกของ Cloud: การใช้ HLL++ เพื่อเพิ่มความเร็วที่ไม่ซ้ำกันของจำนวนในชุดข้อมูลขนาดใหญ่