Penetapan Uji A/B dan Metrik
Menggabungkan penetapan eksperimen dengan hasil, lalu menghitung metrik per varian.
Penetapan Uji A/B dan Metrik adalah pelajaran SQL Interview Prep gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.
Apa yang Diuji oleh Pertanyaan Uji A/B
Pertanyaan uji A/B memeriksa apakah Anda dapat menggabungkan penetapan eksperimen dengan hasil secara benar dan menghitung metrik per varian yang rapi.
Jebakannya hampir selalu terletak pada penggabungan: menghitung hasil untuk pengguna yang tidak pernah terdaftar, atau menghitung ganda pengguna yang ditetapkan dua kali. Lakukan penggabungan penetapan dengan benar, maka metriknya menjadi aritmetika sederhana.
Tabel yang Anda Dapatkan
Harapkan adanya tabel penetapan dan tabel hasil:
assignments(user_id, variant, assigned_at)dengan varian berupa kelompok kontrol atau perlakuan.orders(user_id, order_id, amount, created_at)atau tabel peristiwa umum.
Penetapan adalah sumber kebenaran untuk menentukan siapa yang termasuk dalam eksperimen. Hasil hanya dihitung jika pengguna tercantum 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
);Mulai dari Penetapan, LEFT JOIN Hasil
Aturan utamanya: jadikan tabel penetapan sebagai tabel utama dan gunakan LEFT JOIN untuk menggabungkan hasil. Dengan begitu, pengguna yang terdaftar tetapi tidak pernah berkonversi tetap dipertahankan, yang Anda perlukan untuk penyebut yang jujur.
INNER JOIN akan diam-diam menghapus pengguna yang tidak berkonversi dan menaikkan tingkat konversi Anda secara artifisial.
SELECT
a.user_id,
a.variant,
o.order_id
FROM assignments a
LEFT JOIN orders o
ON o.user_id = a.user_id;Menghitung Konversi per Varian
Tingkat konversi = pengguna yang berkonversi / pengguna yang ditetapkan, per varian. Hitung pengguna yang berkonversi secara unik sebagai pembilang dan semua pengguna yang ditetapkan sebagai penyebut.
Gunakan COUNT(DISTINCT ...) pada pengguna pesanan sehingga pengguna dengan tiga pesanan tetap dihitung sebagai satu pengonversi.
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;Jebakan Penetapan Ganda
Bagaimana jika seorang pengguna muncul dua kali dalam penetapan, satu kali pada setiap varian? Penggabungan Anda kini menghitungnya di kedua sisi dan eksperimen menjadi tercemar.
Pewawancara sengaja memasukkan kasus ini. Cegah masalah tersebut: hapus duplikasi penetapan hingga tersisa satu varian per pengguna, biasanya penetapan pertama, sebelum melakukan penggabungan.
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;Hanya Hitung Hasil Setelah Penetapan
Pesanan yang dibuat sebelum pengguna ditetapkan tidak mungkin disebabkan oleh eksperimen. Tambahkan syarat waktu: hasil harus terjadi pada atau setelah assigned_at.
Letakkan kondisi ini di klausa ON pada LEFT JOIN agar pengguna yang tidak berkonversi tetap dipertahankan.
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 vs WHERE dalam Penggabungan Hasil
Ini adalah pertanyaan lanjutan yang hampir pasti muncul. Jika Anda memindahkan o.created_at >= a.assigned_at ke WHERE, Anda mengubah LEFT JOIN menjadi INNER JOIN: baris ketika pengguna tidak pernah melakukan pesanan memiliki o.created_at = NULL, predikatnya bernilai UNKNOWN, dan baris tersebut hilang.
Pertahankan kondisi penyaringan hasil di ON agar pengguna yang tidak berkonversi tetap ada dalam penyebut.
Metrik Pendapatan per Varian
Selain konversi, pewawancara menanyakan pendapatan per pengguna (ARPU) dan pendapatan per pengonversi. Jumlahkan jumlahnya, lalu bagi dengan penyebut yang tepat.
ARPU dibagi dengan semua pengguna yang ditetapkan; pendapatan per pengonversi hanya dibagi dengan pengguna yang melakukan pesanan. Jelaskan secara tegas metrik mana yang dibutuhkan bisnis.
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;Pola Agregasi Dua Tingkat
Ketika suatu metrik adalah "rata-rata pesanan per pengguna", jangan menghitungnya dalam satu tahap karena Anda akan mencampur tingkat pengguna dan tingkat pesanan. Agregasikan ke tingkat pengguna terlebih dahulu, lalu hitung rata-ratanya di seluruh pengguna.
Pola per pengguna lalu per varian ini menggunakan tingkat perincian yang benar dan sering menjadi pembeda dalam wawancara.
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;Kueri Lengkap yang Dapat Dipertanggungjawabkan
Gabungkan semuanya: hapus duplikasi hingga tersisa penetapan pertama, jadikan penetapan sebagai tabel utama, beri syarat waktu pada hasil di ON, lalu laporkan konversi dan ARPU per varian. Jelaskan setiap syarat saat menuliskannya.
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;Pemeriksaan Kewajaran yang Diharapkan Pewawancara
Sebelum menyampaikan hasil, validasi penyiapan eksperimen:
- Apakah ukuran varian kurang lebih seimbang? Pembagian 90/10 ketika yang diharapkan adalah 50/50 menandakan adanya kesalahan.
- Apakah ada pengguna yang masuk ke kedua varian? Hitung pengguna yang memiliki lebih dari satu varian DISTINCT.
- Apakah ada penetapan yang tidak memiliki jendela hasil yang mungkin karena dilakukan setelah batas akhir data?
Menyampaikan pemeriksaan ini tanpa diminta menunjukkan kematangan analitis.
SELECT user_id, COUNT(DISTINCT variant) AS variant_count
FROM assignments
GROUP BY user_id
HAVING COUNT(DISTINCT variant) > 1;Pemeriksaan Singkat
Anda menghitung konversi per varian dengan menggabungkan pesanan ke penetapan menggunakan LEFT JOIN, tetapi menempatkan o.created_at >= a.assigned_at dalam klausa WHERE. Apa yang terjadi?
Rangkuman: Penetapan dan Metrik Uji A/B
Sekarang Anda memiliki pedoman analisis eksperimen yang dapat dipertanggungjawabkan:
- Perlakukan penetapan sebagai sumber kebenaran; gunakan LEFT JOIN untuk menggabungkan hasil.
- Hapus duplikasi hingga tersisa satu varian per pengguna (penetapan pertama).
- Beri syarat waktu pada hasil dalam klausa ON, bukan WHERE, agar pengguna yang tidak berkonversi tetap dipertahankan.
- Pilih penyebut yang tepat untuk konversi, ARPU, dan pendapatan per pengonversi.
- Agregasikan ke tingkat pengguna terlebih dahulu untuk menghitung rata-rata per pengguna.
- Lakukan pemeriksaan kewajaran terhadap keseimbangan pembagian dan penetapan silang.
Berikutnya: mengubah metrik per varian ini menjadi kenaikan, signifikansi, dan metrik pengaman.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Penetapan Uji A/B dan Metrik” gratis?
Ya — teks lengkap “Penetapan Uji A/B dan Metrik” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Penetapan Uji A/B dan Metrik”?
Menggabungkan penetapan eksperimen dengan hasil, lalu menghitung metrik per varian. Kamu berlatih SQL Interview Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Interview Prep?
Tidak diperlukan pengalaman sebelumnya. SQL Interview Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Penetapan Uji A/B dan Metrik” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Interview Prep ini?
Ya. Setiap pelajaran SQL Interview Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Membangun Corong Multi-Langkah
- Kejadian Berurutan dan Jendela Waktu
- Penetapan Uji A/B dan Metrik
- Peningkatan, Signifikansi, dan Pengaman dalam SQL