Belajar Data Scientist - A/B Testing & Causal Inference
Episode 16 of 28

Belajar Data Scientist - A/B Testing & Causal Inference

Membuktikan kausalitas, bukan sekadar korelasi: merancang eksperimen A/B yang valid, menghitung ukuran sampel, menguji signifikansi, dan mengukur uplift — dilengkapi praktik analisis hasil A/B test lengkap

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Setelah di episode 15 kita meramal masa depan, pada episode ini kita membahas cara mengubah masa depan lewat eksperimen. A/B testing adalah metode paling andal untuk membuktikan kausalitas: apakah perubahan pada produk benar-benar menyebabkan peningkatan metrik, atau hanya kebetulan?

Mengapa ini keterampilan inti data scientist? Karena korelasi (episode 6) tidak pernah cukup. "Pengguna yang lihat banner X belanja lebih banyak" bisa jadi karena pengguna yang sudah loyal memang melihat banner itu — bukan karena banner-nya bekerja. Satu-satunya cara menyimpulkan dengan jujur adalah eksperimen acak. Dari optimasi halaman checkout sampai harga produk, keputusan bisnis terpenting seharusnya didasarkan pada uji yang dirancang dengan benar.

Eksperimen yang Valid

A/B test yang baik memenuhi beberapa prinsip dasar:

  1. Random assignment — pengguna dibagi acak ke grup kontrol & treatment; memastikan kedua grup setara (secara rata-rata).
  2. Ukuran sampel cukup — jika sampel terlalu kecil, eksperimen tak punya kekuatan statistik untuk melihat efek.
  3. Satu hipotesis utama — tentukan metrik primer sebelum mulai; mengubah metrik setelah melihat hasil = p-hacking.
  4. Durasi tetap — jangan menghentikan eksperimen "begitu p-value kecil" tanpa aturan.
100%

Menentukan Ukuran Sampel

Sebelum eksperimen, hitung berapa sampel yang dibutuhkan — ini menghindari eksperimen yang berjalan berbulan-bulan tanpa hasil:

Perhitungan ukuran sampel
import math
 
def min_sample_size(alpha=0.05, power=0.8, effect=0.01, base_rate=0.10):
    z_alpha = 1.96   # untuk alpha 0.05 (dua arah)
    z_beta = 0.84    # untuk power 0.80
    p = (base_rate + base_rate + effect) / 2
    q = 1 - p
    n = (z_alpha + z_beta) ** 2 * 2 * p * q / effect ** 2
    return math.ceil(n)
 
print("sampel per grup:", min_sample_size())

Pertanyaan yang harus dijawab sebelum running: berapa ukuran efek terkecil yang ingin dideteksi (effect size)? berapa power? berapa baseline rate? — jawabannya menentukan durasi dan biaya eksperimen.

Praktik: Analisis A/B Test

Studi kasus: tim produk mengganti warna tombol checkout dan ingin tahu apakah conversion rate naik. Data: 10.000 pengguna per grup.

Analisis hasil A/B test
import numpy as np
import pandas as pd
from scipy import stats
 
np.random.seed(21)
n = 10000
control = np.random.binomial(1, 0.100, n)   # baseline 10%
treatment = np.random.binomial(1, 0.115, n) # treatment 11.5%
 
c_rate = control.mean()
t_rate = treatment.mean()
print(f"kontrol  : {c_rate:.3%}")
print(f"treatment: {t_rate:.3%}")
print(f"uplift   : {(t_rate - c_rate):.3%}")
 
z_stat, p_value = stats.proportions_ztest(
    [treatment.sum(), control.sum()],
    [n, n],
)
print(f"z = {z_stat:.3f}, p-value = {p_value:.4f}")

Membaca Hasil dengan Jujur

Keputusan mengikuti alur: p-value < 0.05 → tolak H0 (ada perbedaan signifikan); lalu tanyakan apakah besarnya berarti bagi bisnis? Uplift 1.5 poin persentase di contoh adalah efek signifikan secara statistik — tetapi jika biaya implementasi besar, keputusan tetap bisa "tidak".

Warning

Signifikan ≠ penting. Efek signifikan secara statistik bisa terlalu kecil untuk layak secara bisnis. Dan sebaliknya: eksperimen yang hasilnya tidak signifikan bukan berarti treatment tidak bekerja — bisa jadi sampelnya kurang. Selalu laporkan efek + confidence interval, bukan hanya p-value.

Confidence Interval untuk Uplift

Confidence interval uplift
from statsmodels.stats.proportion import confint_proportions_2indep
 
ci = confint_proportions_2indep(
    treatment.sum(), n, control.sum(), n, compare="diff", alpha=0.05
)
print(f"uplift CI 95%: [{ci[0]:.3%}, {ci[1]:.3%}]")

Jika interval tidak mengandung 0, perbedaan signifikan. Interval juga menunjukkan rentang efek yang masuk akal — bahasa yang lebih kaya daripada satu angka p-value.

Causal Inference Lanjutan

Tidak semua pertanyaan kausal bisa dijawab A/B test — kadang eksperimen acak tidak etis atau mustahil. Metode observasional yang dipakai praktisi:

MetodeKapan DipakaiIntuisi
Regression discontinuityThreshold kebijakan (misal cutoff umur)Bandingkan tepat di kedua sisi garis batas
Difference-in-differencesPerubahan kebijakan di satu grupBandingkan selisih perubahan antar grup
Propensity score matchingTidak bisa randomisasiCocokkan unit serupa di kedua grup
Instrumental variableAda variabel yang hanya memengaruhi treatmentMemanfaatkan "keacakan alami"

Prinsip bersama: semua mencari variasi quasi-eksperimental untuk meniru kondisi acak. Mendalaminya butuh eksperimen tambahan; untuk sekarang, ingat aturannya — korelasi bukan bukti, dan klaim kausal harus menyebut metode & asumsinya.

Kesalahan Umum

PitfallDampakSolusi
Peeking berulang ("cek tiap hari")False positive meningkatTetapkan durasi & stopping rule
Multiple metrics tanpa koreksiPeluang salah meningkatSatu metrik primer + koreksi
Mengabaikan ukuran sampelEksperimen tanpa dayaHitung n sebelum mulai
Menyebarkan hasil sebagianSegmen biasAnalisis segmentasi dengan hati-hati
Menghentikan dini saat "bagus"Keputusan prematurPatuhi aturan yang ditetapkan awal

Penutup

Inti yang harus dibawa pulang:

  • A/B test membuktikan kausalitas lewat random assignment — bukan sekadar korelasi.
  • Rancang dulu: metrik primer, ukuran sampel, durasi, dan stopping rule.
  • Keputusan berdasar p-value + confidence interval + ukuran efek — bukan p-value saja.
  • Efek signifikan secara statistik ≠ penting secara bisnis.
  • Jika randomisasi mustahil, pakai metode causal inference observasional dengan asumsi yang jujur.

Di episode 17 selanjutnya kita akan membahas communication & storytelling — menyampaikan insight ke stakeholder non-teknis, yang mengubah temuan menjadi keputusan. Sampai jumpa di episode 17!

Belajar Data Scientist - A/B Testing & Causal Inference | Belajar Data Scientist