Persediaan Temu Duga SQL · Pelajaran

Penetapan Ujian A/B dan Metrik

Menggabungkan penetapan eksperimen dengan hasil serta mengira metrik bagi setiap varian.

Pelajaran 3 daripada 413 langkah

Penetapan Ujian A/B dan Metrik ialah pelajaran Persediaan Temu Duga SQL percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Persediaan Temu Duga SQL, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Persediaan Temu Duga SQL merangkumi sejumlah 4 pelajaran.

Perkara yang Diuji oleh Soalan Ujian A/B

Soalan ujian A/B menyemak sama ada Anda boleh menggabungkan penetapan eksperimen dengan hasil dengan betul dan mengira metrik yang tepat bagi setiap varian.

Perangkapnya hampir selalu terletak pada gabungan: mengira hasil bagi pengguna yang tidak pernah didaftarkan, atau mengira dua kali pengguna yang ditetapkan dua kali. Dapatkan gabungan penetapan yang betul, maka metrik hanyalah kiraan aritmetik mudah.

Dua Jadual yang Diberikan

Anda akan menemui jadual penetapan dan jadual hasil:

  • assignments(user_id, variant, assigned_at) yang varian di dalamnya ialah 'kawalan' atau 'rawatan'.
  • orders(user_id, order_id, amount, created_at) atau jadual peristiwa umum.

Penetapan ialah sumber rujukan utama untuk menentukan siapa yang menyertai eksperimen. Hasil hanya dikira jika pengguna muncul dalam penetapan.

CREATE TABLE assignments (
  user_id     INT,
  variant     VARCHAR(20),
  assigned_at TIMESTAMP
);

CREATE TABLE orders (
  user_id    INT,
  order_id   INT,
  amount     NUMERIC,
  created_at TIMESTAMP
);

Mulakan daripada Penetapan, LEFT JOIN Hasil

Peraturan asas: mulakan daripada jadual penetapan dan gunakan LEFT JOIN untuk hasil. Ini mengekalkan pengguna yang didaftarkan tetapi tidak pernah melakukan penukaran, yang diperlukan untuk mendapatkan penyebut yang jujur.

INNER JOIN akan menggugurkan pengguna yang tidak melakukan penukaran secara senyap-senyap dan menaikkan kadar penukaran anda.

SELECT
  a.user_id,
  a.variant,
  o.order_id
FROM assignments a
LEFT JOIN orders o
  ON o.user_id = a.user_id;

Mengira Penukaran bagi Setiap Varian

Kadar penukaran = pengguna yang melakukan penukaran / pengguna yang ditetapkan, bagi setiap varian. Kira penukar unik dalam pengangka dan semua pengguna yang ditetapkan dalam penyebut.

Gunakan COUNT(DISTINCT ...) pada pengguna pesanan supaya pengguna yang mempunyai tiga pesanan masih dikira sebagai seorang penukar.

SELECT
  a.variant,
  COUNT(DISTINCT a.user_id)                              AS assigned,
  COUNT(DISTINCT o.user_id)                              AS converters,
  ROUND(100.0 * COUNT(DISTINCT o.user_id)
              / COUNT(DISTINCT a.user_id), 2)            AS conv_rate_pct
FROM assignments a
LEFT JOIN orders o ON o.user_id = a.user_id
GROUP BY a.variant;

Perangkap Penetapan Dua Kali

Bagaimana jika seorang pengguna muncul dua kali dalam penetapan, sekali bagi setiap varian? Gabungan anda kini mengira pengguna itu pada kedua-dua belah dan eksperimen tercemar.

Penemu duga sering sengaja menguji perkara ini. Tangani dengan membuang pendua penetapan supaya setiap pengguna hanya mempunyai satu varian, biasanya berdasarkan penetapan pertama, sebelum menggabungkannya.

WITH dedup AS (
  SELECT user_id, variant,
    ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY assigned_at) AS rn
  FROM assignments
)
SELECT user_id, variant
FROM dedup
WHERE rn = 1;

Kira Hanya Hasil Selepas Penetapan

Pesanan yang dibuat sebelum pengguna ditetapkan tidak mungkin disebabkan oleh eksperimen. Tambahkan pengawal masa: hasil mesti berlaku pada atau selepas assigned_at.

Letakkan syarat ini dalam klausa ON bagi LEFT JOIN supaya pengguna yang tidak melakukan penukaran masih dikekalkan.

SELECT
  a.variant,
  COUNT(DISTINCT a.user_id) AS assigned,
  COUNT(DISTINCT o.user_id) AS converters
FROM assignments a
LEFT JOIN orders o
  ON o.user_id = a.user_id
 AND o.created_at >= a.assigned_at
GROUP BY a.variant;

ON berbanding WHERE dalam Cantuman Hasil

Ini soalan susulan yang pasti muncul. Jika Anda memindahkan o.created_at >= a.assigned_at ke dalam WHERE, Anda menukarkan LEFT JOIN menjadi gabungan dalaman: baris bagi pengguna yang tidak pernah membuat pesanan mempunyai o.created_at = NULL, predikat itu ialah UNKNOWN, lalu baris tersebut hilang.

Kekalkan syarat penapisan hasil dalam ON untuk mengekalkan pengguna yang tidak melakukan penukaran dalam penyebut.

Metrik Pendapatan bagi Setiap Varian

Selain penukaran, penemu duga bertanya tentang pendapatan bagi setiap pengguna (ARPU) dan pendapatan bagi setiap penukar. Jumlahkan amaun, kemudian bahagi dengan penyebut yang betul.

ARPU dikira dengan membahagikan pendapatan kepada semua pengguna yang ditetapkan; pendapatan bagi setiap penukar pula hanya dibahagikan kepada pengguna yang membuat pesanan. Nyatakan dengan jelas metrik yang diperlukan oleh perniagaan.

SELECT
  a.variant,
  COUNT(DISTINCT a.user_id)                               AS assigned,
  COALESCE(SUM(o.amount), 0)                              AS revenue,
  ROUND(COALESCE(SUM(o.amount), 0)
        / COUNT(DISTINCT a.user_id), 2)                   AS arpu
FROM assignments a
LEFT JOIN orders o
  ON o.user_id = a.user_id
 AND o.created_at >= a.assigned_at
GROUP BY a.variant;

Corak Pengagregatan Dua Tahap

Apabila metriknya ialah "purata pesanan bagi setiap pengguna", jangan mengiranya dalam satu laluan kerana Anda akan mencampurkan tahap pengguna dan tahap pesanan. Agregatkan ke tahap pengguna dahulu, kemudian kira purata merentas pengguna.

Corak mengikut pengguna dahulu, kemudian mengikut varian, menggunakan tahap data yang betul dan merupakan pembezaan biasa dalam temu duga.

WITH per_user AS (
  SELECT a.variant, a.user_id,
    COUNT(o.order_id) AS orders_cnt
  FROM assignments a
  LEFT JOIN orders o
    ON o.user_id = a.user_id
   AND o.created_at >= a.assigned_at
  GROUP BY a.variant, a.user_id
)
SELECT variant, ROUND(AVG(orders_cnt), 3) AS avg_orders_per_user
FROM per_user
GROUP BY variant;

Pertanyaan Lengkap yang Boleh Dipertahankan

Gabungkan semuanya: buang pendua kepada penetapan pertama, mulakan daripada penetapan, letakkan pengawal masa hasil dalam ON, dan laporkan penukaran serta ARPU bagi setiap varian. Huraikan tujuan setiap pengawal semasa menulisnya.

WITH enrolled AS (
  SELECT user_id, variant, assigned_at
  FROM (
    SELECT user_id, variant, assigned_at,
      ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY assigned_at) AS rn
    FROM assignments
  ) x WHERE rn = 1
)
SELECT
  e.variant,
  COUNT(DISTINCT e.user_id)                            AS assigned,
  COUNT(DISTINCT o.user_id)                            AS converters,
  ROUND(100.0 * COUNT(DISTINCT o.user_id)
              / COUNT(DISTINCT e.user_id), 2)          AS conv_pct,
  ROUND(COALESCE(SUM(o.amount),0)
        / COUNT(DISTINCT e.user_id), 2)                AS arpu
FROM enrolled e
LEFT JOIN orders o
  ON o.user_id = e.user_id
 AND o.created_at >= e.assigned_at
GROUP BY e.variant;

Semakan Kewajaran yang Dijangka oleh Penemu Duga

Sebelum memetik keputusan, sahkan persediaan eksperimen:

  • Adakah saiz varian agak seimbang? Pembahagian 90/10 sedangkan 50/50 yang dimaksudkan menandakan ralat.
  • Adakah mana-mana pengguna berada dalam kedua-dua varian? Kira pengguna yang mempunyai lebih daripada satu varian berbeza.
  • Adakah terdapat penetapan yang tiada tetingkap hasil yang mungkin (ditetapkan selepas had data)?

Menawarkan semakan ini tanpa diminta menunjukkan kematangan analisis.

SELECT user_id, COUNT(DISTINCT variant) AS variant_count
FROM assignments
GROUP BY user_id
HAVING COUNT(DISTINCT variant) > 1;

Semakan Pantas

Anda mengira penukaran bagi setiap varian dengan menggabungkan pesanan kepada penetapan menggunakan LEFT JOIN, tetapi meletakkan o.created_at >= a.assigned_at dalam klausa WHERE. Apakah yang berlaku?

Imbas Kembali: Penetapan Ujian A/B dan Metrik

Anda kini mempunyai panduan analisis eksperimen yang boleh dipertahankan:

  • Anggap penetapan sebagai sumber rujukan utama; gunakan LEFT JOIN untuk hasil.
  • Buang pendua supaya setiap pengguna hanya mempunyai satu varian (penetapan pertama).
  • Letakkan pengawal masa hasil dalam klausa ON, bukan WHERE, untuk mengekalkan pengguna yang tidak melakukan penukaran.
  • Pilih penyebut yang betul bagi penukaran, ARPU dan pendapatan bagi setiap penukar.
  • Agregatkan ke tahap pengguna dahulu untuk mendapatkan purata bagi setiap pengguna.
  • Jalankan semakan kewajaran terhadap keseimbangan pembahagian dan penetapan silang.

Seterusnya: menukarkan metrik bagi setiap varian ini kepada peningkatan, keertian statistik dan metrik pengawal.

Percuma untuk bermula

Pelajari SQL dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “Penetapan Ujian A/B dan Metrik” percuma?

Ya — teks penuh “Penetapan Ujian A/B dan Metrik” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Persediaan Temu Duga SQL, tingkat taraf kepada CoddyKit PRO. Kursus Persediaan Temu Duga SQL merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Penetapan Ujian A/B dan Metrik”?

Menggabungkan penetapan eksperimen dengan hasil serta mengira metrik bagi setiap varian. Anda berlatih Persediaan Temu Duga SQL menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Persediaan Temu Duga SQL?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Persediaan Temu Duga SQL di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Penetapan Ujian A/B dan Metrik” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Persediaan Temu Duga SQL ini?

Ya. Setiap pelajaran Persediaan Temu Duga SQL menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Membina Corong Berbilang Langkah
  2. Peristiwa Mengikut Turutan dan Tetingkap Masa
  3. Penetapan Ujian A/B dan Metrik
  4. Peningkatan, Keberertian dan Pengawal dalam SQL
← Kembali ke Persediaan Temu Duga SQL