Coding Interview Prep · บทเรียน

ค่าการเพิ่มขึ้น นัยสำคัญ และเกณฑ์ควบคุมใน SQL

คำนวณค่าการเพิ่มขึ้นของอัตราเปลี่ยนผ่าน และตรวจสอบข้อมูลเพื่อค้นหาการทดลองที่ผิดปกติ

บทเรียน 4 จาก 413 ขั้นตอน

ค่าการเพิ่มขึ้น นัยสำคัญ และเกณฑ์ควบคุมใน SQL เป็นบทเรียน Coding Interview Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Coding Interview Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน

จากเมตริกสู่การตัดสินใจ

การเปลี่ยนผ่านของแต่ละกลุ่มเป็นเพียงจุดเริ่มต้น คำถามในการสัมภาษณ์คือ กลุ่มทดลองชนะจริงหรือไม่ ซึ่งหมายถึงการคำนวณ การเพิ่มขึ้น ประเมินว่าความแตกต่างนั้นเป็นผลจริงหรือเป็นเพียงสัญญาณรบกวน และตรวจสอบเมตริก ตัวชี้วัดเฝ้าระวัง ที่ช่วยตรวจจับการทดลองที่ผิดพลาด

คุณจะไม่ต้องเรียกใช้ชุดเครื่องมือสถิติเต็มรูปแบบใน SQL แต่สามารถคำนวณค่าที่จำเป็นและสัญญาณนัยสำคัญโดยประมาณที่ผู้สัมภาษณ์ต้องการเห็นได้

CTE สรุปข้อมูลต่อกลุ่มการทดลอง

การคำนวณทั้งหมดหลังจากนี้สร้างต่อจากข้อมูลสรุปที่เป็นระเบียบชุดเดียว: สำหรับแต่ละกลุ่ม ให้มีจำนวนผู้ใช้ n จำนวนผู้ใช้ที่เปลี่ยนผ่าน c และอัตราการเปลี่ยนผ่าน p คำนวณครั้งเดียวใน CTE แล้วนำกลับมาใช้ซ้ำ

WITH summary AS (
  SELECT
    variant,
    COUNT(DISTINCT user_id)            AS n,
    COUNT(DISTINCT converted_user)     AS c
  FROM experiment_flat
  GROUP BY variant
)
SELECT
  variant, n, c,
  1.0 * c / n AS p
FROM summary;

การเพิ่มขึ้นแบบสัมบูรณ์เทียบกับแบบสัมพัทธ์

การเพิ่มขึ้นมีสองคำจำกัดความ และโดยปกติผู้สัมภาษณ์ต้องการแบบสัมพัทธ์:

  • การเพิ่มขึ้นแบบสัมบูรณ์ = p_treatment - p_control (จุดเปอร์เซ็นต์)
  • การเพิ่มขึ้นแบบสัมพัทธ์ = (p_treatment - p_control) / p_control (เปอร์เซ็นต์การปรับปรุง)

การกล่าวว่า "เพิ่มขึ้น 2 จุด" กับ "การเพิ่มขึ้นสัมพัทธ์ 20%" อาจอธิบายผลลัพธ์เดียวกันได้ โปรดระบุให้ชัดเจน

การคำนวณการเพิ่มขึ้นด้วยการจัดกลุ่มคอลัมน์ในแถวเดียว

หากต้องการเปรียบเทียบสองกลุ่มในแถวเดียว ให้ดึงกลุ่มควบคุมและกลุ่มทดลองมาไว้ข้างกันโดยใช้การรวมข้อมูลแบบมีเงื่อนไข แล้วจึงคำนวณทางคณิตศาสตร์

วิธีนี้หลีกเลี่ยงการเชื่อมตารางกับตัวเองที่เปราะบาง และทำให้สูตรการเพิ่มขึ้นอ่านเข้าใจง่าย

WITH s AS (
  SELECT variant,
    COUNT(DISTINCT user_id)        AS n,
    COUNT(DISTINCT converted_user) AS c
  FROM experiment_flat GROUP BY variant
),
rates AS (
  SELECT
    MAX(CASE WHEN variant='control'   THEN 1.0*c/n END) AS p_ctrl,
    MAX(CASE WHEN variant='treatment' THEN 1.0*c/n END) AS p_trt
  FROM s
)
SELECT
  p_ctrl, p_trt,
  p_trt - p_ctrl                          AS abs_lift,
  ROUND(100.0 * (p_trt - p_ctrl) / p_ctrl, 2) AS rel_lift_pct
FROM rates;

เหตุใดความแตกต่างจึงอาจเป็นสัญญาณรบกวน

อัตราของกลุ่มทดลองที่สูงกว่าอาจเกิดจากความบังเอิญในการสุ่มตัวอย่าง การทดสอบนัยสำคัญถามว่า หากทั้งสองกลุ่มเหมือนกันจริง ความแตกต่างที่มากขนาดนี้จะเกิดขึ้นได้บ่อยเพียงใด

องค์ประกอบสำคัญคือ ค่าคลาดเคลื่อนมาตรฐานของแต่ละอัตรา ซึ่งจะลดลงเมื่อขนาดตัวอย่างเพิ่มขึ้น ตัวอย่างขนาดใหญ่ทำให้การเพิ่มขึ้นเล็กน้อยน่าเชื่อถือ ส่วนตัวอย่างขนาดเล็กทำให้แม้การเพิ่มขึ้นมากก็น่าสงสัย

ค่าคลาดเคลื่อนมาตรฐานของสัดส่วน

สำหรับอัตราการเปลี่ยนผ่าน p จากผู้ใช้ n คน ค่าคลาดเคลื่อนมาตรฐานคือ sqrt(p * (1 - p) / n) ซึ่งสามารถคำนวณแยกตามกลุ่มได้โดยตรงใน SQL

ค่านี้วัดความผันผวนของแต่ละอัตราก่อนที่คุณจะนำมาเปรียบเทียบกัน

WITH s AS (
  SELECT variant,
    COUNT(DISTINCT user_id)        AS n,
    COUNT(DISTINCT converted_user) AS c
  FROM experiment_flat GROUP BY variant
)
SELECT
  variant, n,
  1.0 * c / n                                       AS p,
  SQRT( (1.0*c/n) * (1 - 1.0*c/n) / n )             AS std_err
FROM s;

คะแนน z สำหรับสองสัดส่วน

สัญญาณนัยสำคัญโดยประมาณคือคะแนน z ของสองสัดส่วน ซึ่งเท่ากับความแตกต่างระหว่างอัตราหารด้วยค่าคลาดเคลื่อนมาตรฐานของความแตกต่างนั้น ค่าสัมบูรณ์ที่มากกว่าประมาณ 1.96 สอดคล้องกับเกณฑ์ 95% ที่ใช้กันทั่วไป

ระบุให้ชัดเจนว่านี่เป็นเพียงค่าประมาณ ไม่ใช่สิ่งทดแทนการทดสอบที่เหมาะสม แต่สามารถตอบคำถามว่า "ผลนี้น่าจะเป็นจริงหรือไม่" ได้ใน SQL

WITH r AS (
  SELECT
    MAX(CASE WHEN variant='control'   THEN 1.0*c/n END) AS p1,
    MAX(CASE WHEN variant='control'   THEN n END)        AS n1,
    MAX(CASE WHEN variant='treatment' THEN 1.0*c/n END) AS p2,
    MAX(CASE WHEN variant='treatment' THEN n END)        AS n2
  FROM (
    SELECT variant, COUNT(DISTINCT user_id) n,
           COUNT(DISTINCT converted_user) c
    FROM experiment_flat GROUP BY variant
  ) s
)
SELECT
  p2 - p1 AS abs_lift,
  (p2 - p1) / SQRT( p1*(1-p1)/n1 + p2*(1-p2)/n2 ) AS z_score
FROM r;

การตีความคะแนน z

แปลงตัวเลขให้เป็นข้อสรุป เพื่อให้ผู้สัมภาษณ์เห็นความเข้าใจเชิงธุรกิจ ไม่ใช่เพียงคณิตศาสตร์:

  • |z| >= 1.96: ความแตกต่างมีนัยสำคัญที่ระดับความเชื่อมั่นประมาณ 95%
  • |z| < 1.96: หลักฐานยังไม่เพียงพอ การเพิ่มขึ้นอาจเป็นเพียงสัญญาณรบกวน

ใช้ CASE เพื่อแสดงป้ายกำกับที่อ่านเข้าใจง่าย และจับคู่การมีนัยสำคัญกับขนาดการเพิ่มขึ้นในทางปฏิบัติเสมอ

SELECT
  z_score,
  CASE WHEN ABS(z_score) >= 1.96
       THEN 'significant at 95%'
       ELSE 'not significant' END AS verdict
FROM (
  SELECT 2.3 AS z_score
) t;

ความไม่ตรงกันของสัดส่วนตัวอย่าง (SRM)

ตัวชี้วัดเฝ้าระวังแรกที่ผู้สัมภาษณ์จะตรวจสอบคือ ผู้ใช้ถูกแบ่งตามที่ออกแบบไว้จริงหรือไม่ การทดลองแบบ 50/50 ที่ได้ผลเป็น 53/47 ทั้งที่มีผู้ใช้หลายล้านคนเป็นสัญญาณอันตราย แสดงว่าการสุ่มแบ่งกลุ่มหรือการบันทึกข้อมูลมีข้อผิดพลาด

เปรียบเทียบจำนวนที่สังเกตได้กับการแบ่งกลุ่มที่คาดหวัง ความเบี่ยงเบนมากจะทำให้การทดลองทั้งหมดใช้ไม่ได้ ก่อนที่คุณจะพิจารณาเมตริกเสียอีก

WITH cnt AS (
  SELECT variant, COUNT(DISTINCT user_id) AS n
  FROM experiment_flat GROUP BY variant
),
tot AS (SELECT SUM(n) AS total FROM cnt)
SELECT
  c.variant, c.n,
  ROUND(100.0 * c.n / t.total, 2)        AS observed_pct,
  50.0                                   AS expected_pct
FROM cnt c CROSS JOIN tot t;

เมตริกตัวชี้วัดเฝ้าระวัง

ตัวชี้วัดเฝ้าระวังคือเมตริกที่ต้อง ไม่แย่ลง แม้เมตริกหลักจะดีขึ้นก็ตาม ตัวชี้วัดเฝ้าระวังที่ใช้กันทั่วไป ได้แก่ เวลาแฝงของหน้า อัตราการคืนเงิน อัตราการยกเลิกการสมัคร และอัตราข้อผิดพลาด

รายงานตัวชี้วัดเหล่านี้แยกตามกลุ่มควบคู่กับเมตริกที่แสดงผลดี กลุ่มทดลองที่เพิ่มการเปลี่ยนผ่านได้แต่ทำให้การคืนเงินเพิ่มขึ้นสองเท่าไม่ถือว่าประสบความสำเร็จ การคำนวณตัวชี้วัดเฝ้าระวังโดยไม่ต้องมีผู้ถามจะแสดงให้เห็นถึงวิจารณญาณด้านผลิตภัณฑ์

SELECT
  variant,
  AVG(load_ms)                                  AS avg_latency_ms,
  ROUND(100.0 * SUM(refunded) / COUNT(*), 2)    AS refund_rate_pct,
  ROUND(100.0 * SUM(errored)  / COUNT(*), 2)    AS error_rate_pct
FROM experiment_flat
GROUP BY variant;

รายงานผลฉบับสมบูรณ์

รายงานผลการทดลองฉบับสมบูรณ์ที่ผู้สัมภาษณ์ชื่นชอบจะรวมสี่สิ่งไว้ในผลลัพธ์เดียว ได้แก่ อัตราต่อกลุ่มการทดลอง การเพิ่มขึ้นสัมพัทธ์ ข้อสรุปด้านนัยสำคัญ และการตรวจสอบ SRM สร้าง CTE ต่อกันเป็นชั้น ๆ แล้วนำเสนอเป็นตารางเดียวที่พร้อมใช้ตัดสินใจ

ปิดท้ายด้วยการระบุว่า: มีนัยสำคัญ ขนาดการเพิ่มขึ้นยอมรับได้ ตัวชี้วัดเฝ้าระวังยังดี การแบ่งกลุ่มสมดุล ดังนั้นจึงควรปล่อยใช้งานหรือระงับไว้

WITH s AS (
  SELECT variant, COUNT(DISTINCT user_id) n,
         COUNT(DISTINCT converted_user) c
  FROM experiment_flat GROUP BY variant
),
r AS (
  SELECT
    MAX(CASE WHEN variant='control'   THEN 1.0*c/n END) p1,
    MAX(CASE WHEN variant='control'   THEN n END) n1,
    MAX(CASE WHEN variant='treatment' THEN 1.0*c/n END) p2,
    MAX(CASE WHEN variant='treatment' THEN n END) n2
  FROM s
)
SELECT
  ROUND(100.0*(p2-p1)/p1, 2) AS rel_lift_pct,
  CASE WHEN ABS((p2-p1)/SQRT(p1*(1-p1)/n1 + p2*(1-p2)/n2)) >= 1.96
       THEN 'significant' ELSE 'not significant' END AS verdict,
  CASE WHEN ABS(1.0*n2/(n1+n2) - 0.5) > 0.02
       THEN 'SRM warning' ELSE 'split ok' END AS srm_check
FROM r;

ตรวจสอบอย่างรวดเร็ว

กลุ่มทดลองมีการเพิ่มขึ้นของการเปลี่ยนผ่านสัมพัทธ์ 25% แต่แต่ละกลุ่มมีผู้ใช้เพียง 40 คน ข้อสรุปที่ถูกต้องคืออะไร

สรุป: การเพิ่มขึ้น นัยสำคัญ และตัวชี้วัดเฝ้าระวัง

ตอนนี้คุณสามารถเปลี่ยนเมตริกดิบของแต่ละกลุ่มให้เป็นการตัดสินใจได้แล้ว:

  • แยกความแตกต่างระหว่างการเพิ่มขึ้นแบบ สัมบูรณ์ (จุดเปอร์เซ็นต์) กับการเพิ่มขึ้นแบบ สัมพัทธ์ (เปอร์เซ็นต์)
  • คำนวณ ค่าคลาดเคลื่อนมาตรฐานของแต่ละอัตรา และคะแนน z ของสองสัดส่วนเป็นสัญญาณนัยสำคัญโดยประมาณ (|z| >= 1.96 ~ 95%)
  • ดำเนินการตรวจสอบ SRM เพื่อยืนยันว่าการแบ่งกลุ่มตรงตามการออกแบบ
  • รายงาน เมตริกตัวชี้วัดเฝ้าระวัง เพื่อไม่ให้ผลดีบดบังการถดถอย
  • นำเสนอรายงานผลเดียวที่พร้อมใช้ตัดสินใจ และจับคู่การมีนัยสำคัญกับขนาดการเพิ่มขึ้นในทางปฏิบัติเสมอ

เนื้อหานี้จบการวิเคราะห์ฟันเนลและการทดสอบ A/B ใน SQL

เริ่มต้นได้ฟรี

เรียนรู้ Coding Interview Prep ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
90
บทเรียน
360

คำถามที่พบบ่อย

บทเรียน “ค่าการเพิ่มขึ้น นัยสำคัญ และเกณฑ์ควบคุมใน SQL” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ค่าการเพิ่มขึ้น นัยสำคัญ และเกณฑ์ควบคุมใน SQL” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Coding Interview Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ค่าการเพิ่มขึ้น นัยสำคัญ และเกณฑ์ควบคุมใน SQL”

คำนวณค่าการเพิ่มขึ้นของอัตราเปลี่ยนผ่าน และตรวจสอบข้อมูลเพื่อค้นหาการทดลองที่ผิดปกติ คุณปฏิบัติ Coding Interview Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Coding Interview Prep หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Coding Interview Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ค่าการเพิ่มขึ้น นัยสำคัญ และเกณฑ์ควบคุมใน SQL” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Coding Interview Prep นี้ได้ไหม

ได้ บทเรียน Coding Interview Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. สร้างกระบวนการ Funnel หลายขั้นตอน
  2. เหตุการณ์ตามลำดับและช่วงเวลา
  3. การกำหนดกลุ่มการทดสอบ A/B และตัวชี้วัด
  4. ค่าการเพิ่มขึ้น นัยสำคัญ และเกณฑ์ควบคุมใน SQL
← กลับไปที่ Coding Interview Prep