A/B Testi Ataması ve Ölçümleri
Deney atamalarının sonuçlarla birleştirilmesi ve varyant başına ölçümlerin hesaplanması.
A/B Testi Ataması ve Ölçümleri, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.
A/B Deneyi Sorusu Neyi Ölçer
A/B deneyi soruları, deney atamasını sonuçlarla doğru biçimde birleştirip güvenilir bir varyant başına metrik hesaplayıp hesaplayamadığınızı ölçer.
Tuzak neredeyse her zaman birleştirmededir: hiç deneye alınmamış kullanıcıların sonuçlarını saymak veya iki kez atanmış kullanıcıları iki kez saymak. Atama birleştirmesini doğru yaparsanız metriklerin hesabı basit aritmetikten ibaret kalır.
Alacağınız İki Tablo
Bir atama tablosu ve bir sonuç tablosu bekleyin:
assignments(user_id, variant, assigned_at); burada varyant 'kontrol' veya 'uygulama' olur.orders(user_id, order_id, amount, created_at)ya da genel amaçlı bir olay tablosu.
Deneye kimin dahil olduğunu belirleyen temel kaynak atamadır. Sonuçlar yalnızca kullanıcı atama tablosunda yer alıyorsa sayılır.
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
);Atamadan Başlayın, Sonuçları LEFT JOIN ile Birleştirin
Değişmez kural şudur: sorguyu atama tablosundan başlatın ve sonuçları LEFT JOIN ile birleştirin. Böylece deneye alınmış ancak hiç dönüşüm gerçekleştirmemiş kullanıcılar da korunur; doğru bir payda için buna ihtiyacınız vardır.
INNER JOIN, dönüşüm gerçekleştirmeyenleri sessizce çıkarır ve dönüşüm oranınızı olduğundan yüksek gösterir.
SELECT
a.user_id,
a.variant,
o.order_id
FROM assignments a
LEFT JOIN orders o
ON o.user_id = a.user_id;Varyant Başına Dönüşümü Sayma
Dönüşüm oranı = varyant başına dönüşüm gerçekleştiren kullanıcılar / atanan kullanıcılar. Payda için tüm atanan kullanıcıları, pay içinse farklı dönüşüm gerçekleştiren kullanıcıları sayın.
Üç siparişi olan bir kullanıcı yine tek bir dönüşüm gerçekleştiren kullanıcı sayılsın diye sipariş veren kullanıcı üzerinde COUNT(DISTINCT ...) kullanın.
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;Çift Atama Tuzağı
Bir kullanıcı atamalarda iki kez, her varyantta bir kez görünürse ne olur? Birleştirmeniz artık kullanıcıyı her iki tarafta da sayar ve deney bozulur.
Mülakat yapanlar bu durumu özellikle kurgular. Buna karşı önlem alın: birleştirmeden önce atamaları kullanıcı başına tek varyanta, genellikle ilk atamaya indirerek tekilleştirin.
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;Yalnızca Atama Sonrasındaki Sonuçları Sayın
Kullanıcı atanmadan önce verilen bir sipariş deneyden kaynaklanamaz. Bir zaman koşulu ekleyin: sonuç assigned_at zamanında veya sonrasında gerçekleşmelidir.
Dönüşüm gerçekleştirmeyen kullanıcıların yine korunması için bu koşulu LEFT JOIN'in ON cümlesine koyun.
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;Sonuç Birleştirmesinde ON ve WHERE Karşılaştırması
Bu, kesinlikle gelecek bir takip sorusudur. o.created_at >= a.assigned_at koşulunu WHERE içine taşırsanız LEFT JOIN'i INNER JOIN'e dönüştürürsünüz: kullanıcı hiç sipariş vermediyse o.created_at = NULL olur, koşul UNKNOWN sonucunu verir ve bu satırlar ortadan kalkar.
Dönüşüm gerçekleştirmeyenleri paydada korumak için sonuçları filtreleyen koşulları ON içinde tutun.
Varyant Başına Gelir Metrikleri
Dönüşümün ötesinde, mülakat yapanlar kullanıcı başına geliri (ARPU) ve dönüşüm gerçekleştiren kullanıcı başına geliri sorar. Tutarı toplayın, ardından doğru paydaya bölün.
ARPU tüm atanan kullanıcılara bölünür; dönüşüm gerçekleştiren kullanıcı başına gelir ise yalnızca sipariş veren kullanıcılara bölünür. İş biriminin hangisini istediğini açıkça belirtin.
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;İki Düzeyli Toplulaştırma Deseni
Bir metrik "kullanıcı başına ortalama sipariş sayısı" olduğunda bunu tek geçişte hesaplamayın; aksi halde kullanıcı ve sipariş düzeylerini karıştırırsınız. Önce kullanıcı düzeyinde toplulaştırın, ardından kullanıcılar arasında ortalamayı alın.
Önce kullanıcı, sonra varyant düzeyinde ilerleyen bu desen doğru ayrıntı düzeyini kullanır ve mülakatlarda sıkça ayırt edici olur.
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;Eksiksiz, Savunulabilir Sorgu
Her şeyi birleştirin: ilk atamaya indirerek tekilleştirin, sorguyu atama tablosundan başlatın, sonuçlar için zaman koşulunu ON içinde uygulayın ve varyant başına dönüşümü ve ARPU'yu raporlayın. Yazarken her koşulu açıklayın.
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;Mülakat Yapanların Beklediği Mantık Kontrolleri
Sonuçları paylaşmadan önce deney kurulumunu doğrulayın:
- Varyant büyüklükleri yaklaşık dengeli mi? 50/50 amaçlanmışken 90/10'luk bir dağılım görülmesi bir hataya işaret eder.
- Herhangi bir kullanıcı her iki varyantta da yer aldı mı? Birden fazla farklı varyanta sahip kullanıcıları sayın.
- Olası sonuç penceresi olmayan atamalar var mı? Örneğin atama veri kesiminden sonra yapılmış olabilir.
Bu kontrolleri istenmeden sunmanız analitik olgunluk gösterir.
SELECT user_id, COUNT(DISTINCT variant) AS variant_count
FROM assignments
GROUP BY user_id
HAVING COUNT(DISTINCT variant) > 1;Hızlı Kontrol
Varyant başına dönüşümü, siparişleri atamalara LEFT JOIN ile birleştirerek hesaplıyorsunuz; ancak o.created_at >= a.assigned_at koşulunu WHERE cümlesine koyuyorsunuz. Ne olur?
Özet: A/B Deneyinde Atama ve Metrikler
Artık savunulabilir bir deney analizi yöntem setiniz var:
- Atamayı temel kaynak kabul edin; sonuçları LEFT JOIN ile birleştirin.
- Kullanıcı başına tek varyant olacak şekilde tekilleştirin (ilk atama).
- Dönüşüm gerçekleştirmeyenleri korumak için sonuçlara ilişkin zaman koşulunu ON cümlesinde, asla WHERE içinde uygulamayın.
- Dönüşüm, ARPU ve dönüşüm gerçekleştiren kullanıcı başına gelir için doğru paydayı seçin.
- Kullanıcı başına ortalamalarda önce kullanıcı ayrıntı düzeyinde toplulaştırın.
- Dağılım dengesini ve varyantlar arası atamaları mantık kontrolleriyle inceleyin.
Sonraki konu: bu varyant başına metrikleri artışa, anlamlılığa ve koruyucu metriklere dönüştürmek.
Sıkça Sorulan Sorular
“A/B Testi Ataması ve Ölçümleri” dersi ücretsiz mi?
Evet — “A/B Testi Ataması ve Ölçümleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.
“A/B Testi Ataması ve Ölçümleri” dersinde ne öğreneceğim?
Deney atamalarının sonuçlarla birleştirilmesi ve varyant başına ölçümlerin hesaplanması. SQL Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
SQL Interview Prep öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“A/B Testi Ataması ve Ölçümleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu SQL Interview Prep dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Çok Adımlı Dönüşüm Hunisi Oluşturma
- Sıralı Etkinlikler ve Zaman Pencereleri
- A/B Testi Ataması ve Ölçümleri
- SQL'de Artış, Anlamlılık ve Güvenlik Kontrolleri