1. Pertanyaan
Alur onboarding baru sedang berada dalam uji A/B. Setelah dipisahkan berdasarkan jenis pengguna, perlakuan (treatment) memiliki tingkat konversi yang lebih tinggi baik untuk pengguna baru maupun pengguna lama; setelah menggabungkan kedua strata tersebut, treatment memiliki tingkat konversi keseluruhan yang lebih rendah. Product owner menginginkan keputusan peluncuran hari ini.
Buat contoh jumlah konkret yang menunjukkan bagaimana pembalikan hasil ini dapat terjadi, kemudian berikan alur analisis mulai dari data penyebut mentah dan keseimbangan pengacakan hingga estimator terstratifikasi dan uji interaksi. Terakhir, nyatakan bukti yang diperlukan untuk peluncuran global, peluncuran terstratifikasi, menjeda eksperimen, atau mengumpulkan lebih banyak data.
2. Batasan dan klarifikasi
- Ini adalah eksperimen daring yang diacak; "baru" dan "lama" adalah strata yang ditentukan sebelum eksperimen dimulai.
- Metrik utama adalah apakah setiap pengguna menyelesaikan konversi inti dalam jendela waktu tetap. Peristiwa berulang dari satu pengguna bukanlah sampel independen.
- Angka-angka dalam pertanyaan ini adalah data latihan, bukan hasil perusahaan yang sebenarnya atau ambang batas peluncuran universal.
- Pertama, selaraskan jendela observasi, deduplikasi, definisi paparan (exposure), dan watermark data. Jika suatu stratum dipengaruhi oleh treatment, stratum tersebut tidak boleh digunakan secara langsung untuk pemisahan subkelompok kausal.
3. Penalaran inti: komposisi penyebut dapat membalikkan hasil
Konversi keseluruhan adalah rata-rata tertimbang ukuran sampel dari tingkat konversi stratum. Jika proporsi stratum berbeda antar-lengan eksperimen, treatment bisa lebih baik di setiap stratum sementara agregatnya justru terbalik.
Perhatikan contoh ekstrem namun jelas berikut. Pada stratum baseline tinggi, kontrol adalah 990/1000 = 99% dan treatment adalah 100/100 = 100%. Pada stratum baseline rendah, kontrol adalah 1/100 = 1% dan treatment adalah 20/1000 = 2%. Treatment meningkat satu poin persentase di kedua stratum, namun kontrol agregat adalah 991/1100 = 90.1% dan treatment agregat adalah 120/1100 = 10.9%. Perbedaan ini muncul karena menempatkan sebagian besar observasi pada stratum baseline yang berbeda, bukan karena treatment membuat salah satu stratum menjadi lebih buruk.
Dalam eksperimen nyata, perbedaan komposisi yang begitu besar biasanya menandakan adanya masalah pada pengacakan, paparan, pengambilan sampel, atau jendela waktu. Hal ini tidak membuktikan bahwa setiap rata-rata keseluruhan selalu salah. Ketika proporsi stratum seimbang berdasarkan desain, atau standarisasi populasi target yang telah ditentukan sebelumnya digunakan, estimasi keseluruhan masih dapat mewakili efek perlakuan rata-rata (average treatment effect) dari populasi target.
4. Diagnosis dan pseudokode referensi
Agregasikan penyebut dan pembilang tingkat pengguna berdasarkan lengan, stratum, dan flag konversi. Bandingkan proporsi stratum, efek, dan interval kepercayaan. Jangan mulai dari persentase keseluruhan yang menguntungkan lalu mencoba pembagian (slicing) sembarang hingga muncul suatu penjelasan.
for arm in [control, treatment]:
for stratum in [new, returning]:
n[arm, stratum] = count_distinct_users(arm, stratum)
y[arm, stratum] = count_users_with_conversion(arm, stratum)
rate[arm, stratum] = y[arm, stratum] / n[arm, stratum]
share[arm, stratum] = n[arm, stratum] / sum_s(n[arm, s])
check_exposure_and_assignment_balance()
check_missing_users_duplicates_and_window()
report_stratum_effects_and_confidence_intervals()
weights = preregistered_target_population_shares()
standardized_effect = sum_s(weights[s] * (rate[treatment, s] - rate[control, s]))
test_arm_by_stratum_interaction()Jika strata telah tersedia sebelum pengacakan, lakukan stratifikasi pengacakan atau setidaknya pantau alokasi di dalam setiap stratum. Rencana analisis harus mempraregistrasikan strata utama, bobot populasi target, metrik utama, dan aturan penghentian agar hasil yang didapat tidak mendikte irisan mana yang harus dipilih.
5. Kebenaran, statistik, dan keputusan peluncuran
Estimator terstratifikasi mengembalikan setiap efek stratum ke bobot populasi target yang sama, sehingga perbedaan komposisi sampel tidak disalahartikan sebagai efek perlakuan. Bobot harus berasal dari definisi populasi pra-eksperimen atau desain pengacakan, bukan disimpulkan dari hasil yang diamati.
Uji interaksi antara treatment dan stratum untuk menentukan apakah perbedaan efek melampaui noise pengambilan sampel. Jika interaksinya material dan stabil, peluncuran yang berbeda untuk pengguna baru dan lama dapat dibenarkan. Jika tidak material, utamakan estimasi keseluruhan yang telah ditentukan sebelumnya daripada memilih stratum yang terlihat paling baik.
Signifikansi statistik saja tidak membenarkan peluncuran. Gabungkan efek minimum yang dapat diterima (minimum acceptable effect), metrik pengaman (guardrail metrics), durasi eksperimen, ukuran sampel, konversi yang tertunda, dan kelengkapan data. Jika pencatatan paparan, kontaminasi antar-lengan, pengacakan, atau maturitas jendela waktu terganggu, jeda keputusan dan perbaiki datanya daripada menyembunyikan masalah tersebut dengan pemotongan irisan data lebih lanjut.
6. Tindak lanjut dan jebakan
- Kapan suatu stratum dapat menciptakan masalah kausal? Jika stratum tersebut dihasilkan setelah paparan, pengkondisian padanya dapat menciptakan bias collider; gunakan variabel pra-paparan atau analisis mekanisme yang telah ditentukan sebelumnya sebagai gantinya.
- Mengapa tidak memotong irisan data (slicing) tanpa batas? Setiap irisan yang tidak terdaftar menambah peluang terjadinya hasil signifikan secara kebetulan; kendalikan multiplisitas dan beri label temuan eksplorasi sebagai hipotesis.
- Apakah setiap perbedaan agregat merupakan paradoks Simpson? Tidak. Pertama periksa penyebut, kelayakan paparan, jendela waktu, deduplikasi, dan data yang hilang, kemudian konfirmasikan apakah arahnya benar-benar terbalik di dalam strata.
- Bagaimana jika treatment memiliki komposisi stratum yang berbeda? Selidiki pengacakan dan perutean terlebih dahulu. Jika bobot populasi target diketahui, gunakan estimasi terstandarisasi yang telah ditentukan sebelumnya; jangan pernah memilih bobot setelah melihat hasil.
7. Referensi
- Panduan Analisis Data yang Baik dan Jebakan Analisis dari Google for Developers.
- Penjelasan Optimizely tentang paradoks Simpson dan hasil eksperimen tersegmentasi.
- Pertanyaan wawancara data science publik yang mencakup pembalikan hasil dalam uji A/B.
8. Poin penilaian wawancara
Mampu menghitung penyebut dan bobot
Kandidat harus menggunakan data hitungan untuk menunjukkan "menang di setiap stratum, kalah secara keseluruhan" dan mengidentifikasi proporsi stratum yang tidak seimbang sebagai petunjuk utama.
Mampu memisahkan diagnosis dari keputusan
Kandidat harus memeriksa pengacakan, paparan, jendela waktu, dan kualitas data sebelum mendiskusikan estimator, interaksi, dan aturan peluncuran.
Mampu menyatakan batasan kausal
Kandidat harus mengidentifikasi strata pasca-paparan, bias collider, dan risiko multiplisitas alih-alih memperlakukan setiap irisan sebagai kesimpulan independen.
Mampu memberikan rencana yang dapat dieksekusi
Kandidat harus mengusulkan pengacakan terstratifikasi, bobot yang dipraregistrasi, metrik pengaman, dan kondisi untuk peluncuran terstratifikasi atau pengujian lanjutan daripada hanya mengatakan "kumpulkan lebih banyak data."