P-Hacking dan Peeking: Kenapa Berhenti Test Saat Menang Itu Curang
TL;DR
P-hacking adalah praktik ngutak-atik analisis sampai p-value turun di bawah 0,05, sementara peeking adalah ngecek hasil eksperimen berkali-kali dan berhenti begitu hasilnya kelihatan signifikan. Dua-duanya naikin peluang false positive jauh di atas 5% yang kamu kira kamu pakai. Dari simulasi 20.000 eksperimen tanpa efek nyata, ngintip 10 kali bikin tingkat false positive naik dari 4,95% jadi 19,4%.
P-hacking adalah praktik ngutak-atik cara analisis sampai p-value akhirnya turun di bawah 0,05. Peeking adalah ngecek hasil eksperimen berkali-kali dan berhenti begitu angkanya kelihatan menang.
Dua-duanya bikin peluang kamu salah ngambil kesimpulan jauh lebih besar dari 5% yang kamu kira lagi kamu pakai.
Yang bikin dua kebiasaan ini awet: keduanya kelihatan kayak kerja bagus. Ngecek dashboard tiap pagi terasa rajin. Ngebreakdown hasil per segmen terasa teliti.
Apa itu p-hacking?
P-hacking adalah nyoba banyak versi analisis dari satu set data yang sama, terus cuma ngelaporin versi yang hasilnya signifikan. Datanya nggak dipalsuin sama sekali. Yang diubah-ubah itu pilihan metrik, pilihan segmen, pilihan periode, atau pilihan cara buang outlier.
Peluang dapet hasil signifikan naik tiap kali kamu nambah satu pilihan analisis. Nguji 5 metrik sekaligus di data yang sebenernya nggak punya efek apa-apa bikin peluang minimal satu metrik lolos jadi 22,6%. Naik ke 20 metrik, peluangnya 64,2%.
Angka itu bukan hasil eksperimen, tapi hitungan langsung: 1 dikurangi 0,95 pangkat jumlah metriknya.
Kalau istilah p-value masih terasa abstrak buat kamu, penjelasan p-value ini baiknya dibaca duluan.
Apa itu peeking dalam A/B test?
Peeking adalah ngintip hasil eksperimen sebelum target sampel kepenuhan, terus mutusin berhenti berdasarkan apa yang kamu lihat. Nama lainnya optional stopping. Masalahnya bukan di ngintipnya, tapi di keputusan berhenti yang diambil dari intipan itu.
Uji hipotesis standar dirancang buat satu kali pengambilan keputusan, di satu titik yang udah ditentuin sebelumnya. Alpha 5% itu janji: dari 100 eksperimen tanpa efek nyata, kira-kira 5 bakal kelihatan signifikan gara-gara kebetulan.
Begitu kamu ngecek 10 kali dan berhak berhenti kapan aja, kamu punya 10 kesempatan buat kena kebetulan itu. Janji 5% tadi otomatis batal.
Seberapa parah efek peeking sebenernya?
Aku simulasiin 20.000 eksperimen palsu buat ngukur ini. Setup-nya: dua varian dengan conversion rate yang sama persis, 5% dua-duanya, jadi secara definisi nggak ada efek apapun buat ditemuin. Target sampel 10.000 pengunjung per varian, uji z dua proporsi, ambang 0,05.
Bedanya cuma satu: berapa kali hasilnya diintip sebelum target kepenuhan.
| Berapa kali ngintip | Hasil "menang" palsu | Lipat dari yang seharusnya |
|---|---|---|
| 1 kali, di akhir | 4,95% | 1,0x |
| 2 kali | 8,4% | 1,7x |
| 5 kali | 14,0% | 2,8x |
| 10 kali | 19,4% | 3,9x |
| 20 kali | 25,3% | 5,1x |
Baris pertama nunjukin simulasinya jalan bener. Sekali ngecek di akhir ngasih 4,95%, persis kayak yang dijanjiin alpha 5%.
Baris terakhir yang bikin nyesek. Tim yang ngecek dashboard tiap pagi selama 20 hari kerja dan berhak matiin eksperimen kapan aja punya peluang 1 banding 4 buat ngumumin kemenangan dari eksperimen yang efeknya nol.
Satu dari empat. Itu bukan kesialan sesekali, itu default.
Bentuk p-hacking apa yang paling sering muncul di tim produk?
Yang di bawah ini semuanya pernah aku lihat di ruang rapat, dan nggak satupun diniatin buat nipu:
- Ganti metrik utama di tengah jalan. Conversion rate nggak gerak, jadi laporannya pindah ke add to cart yang kebetulan naik.
- Nyari segmen yang menang. Hasil keseluruhan datar, terus dipecah per device, per kota, per usia, sampai ada satu kotak yang hijau.
- Motong periode. Minggu pertama jelek, jadi analisisnya dimulai dari minggu kedua dengan alasan minggu pertama masa penyesuaian.
- Buang outlier setelah lihat hasil. Pesanan Rp 40 juta dari satu pelanggan korporat dibuang, tapi cuma di varian yang bikin hasilnya jelek.
- Ngelanjutin test yang harusnya udah selesai. Target sampel kepenuhan, hasilnya nggak signifikan, terus eksperimennya dibiarin jalan seminggu lagi.
Kelima-limanya punya pola yang sama. Keputusan analisis diambil setelah datanya kelihatan, bukan sebelum.
Contoh kasus: eksperimen banner di toko_berkah
Tim toko_berkah nguji banner promo baru di halaman depan selama 21 hari. Target sampel 12.000 pengunjung per varian, dihitung dari baseline conversion 4,1%.
Hari ke-6, dashboard nunjukin treatment unggul 0,7 poin persen dengan p-value 0,041. Sampel yang kekumpul baru 3.400 per varian, sekitar 28% dari target.
Rekomendasinya waktu itu ditahan. Eksperimennya jalan terus sampai 21 hari penuh.
| Titik pengecekan | Sampel per varian | Selisih conversion | p-value |
|---|---|---|---|
| Hari 6 | 3.400 | +0,7 poin | 0,041 |
| Hari 12 | 6.900 | +0,3 poin | 0,29 |
| Hari 21 | 12.100 | +0,1 poin | 0,71 |
Keunggulan 0,7 poin di hari ke-6 nyusut jadi 0,1 poin di akhir. Efeknya nggak pernah ada. Yang ada cuma ayunan angka biasa waktu sampelnya masih kecil.
Kalau eksperimennya distop di hari ke-6, tim bakal ngerayain kenaikan 17% relatif dan ngeroll out banner itu ke semua halaman. Terus bingung setahun kemudian kenapa akumulasi semua kemenangan eksperimen mereka nggak kelihatan di angka omzet.
Itu gejala yang paling khas. Portofolio eksperimen yang penuh kemenangan tapi grafik bisnisnya datar.
Gimana cara nyegah p-hacking dan peeking?
- Tulis rencana analisis sebelum eksperimen jalan. Satu metrik utama, satu ambang, satu target sampel, satu tanggal berhenti. Simpan di dokumen yang tanggalnya kelihatan.
- Hitung target sampel duluan. Cara ngitungnya ada di panduan ukuran sampel A/B test. Tanpa target, kamu nggak punya garis finis.
- Sembunyiin p-value dari dashboard harian. Biarin yang kelihatan cuma jumlah peserta dan kesehatan tracking.
- Tentuin daftar segmen di awal. Kalau kamu mau lihat 4 segmen, tulis keempatnya sebelum data masuk dan sesuaikan ambangnya.
- Perlakukan temuan dadakan sebagai hipotesis. Segmen yang menang di luar rencana bukan kesimpulan. Itu bahan buat eksperimen berikutnya.
- Simpan eksperimen yang kalah. Tim yang cuma nyimpen dokumentasi kemenangan bakal kehilangan kemampuan buat ngukur diri sendiri.
Kalau memang perlu ngintip, apa yang boleh dipakai?
Kadang berhenti lebih awal itu kebutuhan nyata, bukan godaan. Eksperimen mahal, atau ada risiko nyata ke pengguna. Buat kasus kayak gitu ada metode yang emang dirancang buat pengecekan berulang.
Sequential testing naikin ambang signifikansi di pengecekan awal dan nurunin di pengecekan akhir, jadi total peluang false positive-nya tetap 5%. Kamu boleh ngintip sesering yang kamu mau, asal aturannya ditetapin sebelum eksperimen jalan.
Alpha spending function ngebagi jatah 5% itu ke beberapa titik pengecekan. Ngecek 5 kali berarti tiap titik dapet jatah lebih ketat dari 0,05.
Buat masalah banyak metrik, koreksi Benjamini-Hochberg lebih longgar dari Bonferroni dan cocok kalau metrik kamu banyak. Implementasi siap pakainya ada di scipy.stats.false_discovery_control.
Intinya satu: aturan berhentinya dibikin sebelum data masuk. Metode apapun kehilangan jaminannya kalau aturannya disusun sambil ngelihat hasil.
Kesalahan umum di sekitar topik ini
Ngira p-value kecil berarti efeknya besar
P-value 0,001 nggak bilang apa-apa soal ukuran efek. Sampel yang besar banget bisa bikin selisih 0,05 poin persen jadi signifikan. Selalu laporin ukuran efek plus rentang kepercayaannya, bukan cuma p-value.
Nganggap hasil nggak signifikan berarti efeknya nol
Hasil nggak signifikan artinya kamu belum punya bukti cukup. Bisa jadi efeknya emang nol, bisa juga sampel kamu kekecilan. Bedanya kelihatan dari rentang kepercayaannya, bukan dari p-value.
Nambah sampel diam-diam
Target 12.000 kepenuhan, hasilnya p 0,08, terus eksperimennya diperpanjang seminggu "biar lebih yakin". Ini peeking dengan nama lain, dan efeknya ke false positive sama persis.
FAQ
Kalau hasilnya udah jelas banget menang di hari ketiga, tetap nggak boleh berhenti?
Kalau kamu berhenti gara-gara angkanya bagus, itu peeking, seberapapun jelasnya kelihatan. Efek yang keliatan besar di awal justru paling sering menciut waktu sampel nambah. Kalau kamu memang butuh opsi berhenti lebih awal, siapin metode sequential testing sebelum eksperimen jalan, bukan diputusin di tengah jalan.
Apa bedanya p-hacking sama fraud?
Fraud itu ngarang atau ngubah data. P-hacking nggak nyentuh datanya sama sekali, yang diutak-atik cara analisisnya. Makanya p-hacking jauh lebih umum dan jauh lebih susah kedeteksi. Kebanyakan orang yang ngelakuinnya nggak ngerasa lagi curang, mereka cuma ngerasa lagi teliti nyari sudut pandang yang pas.
Boleh nggak monitoring dashboard eksperimen tiap hari?
Boleh, asal kamu monitor hal yang bener. Cek jumlah peserta per varian, cek error rate, cek apakah tracking-nya jalan. Yang nggak boleh itu ngelihat p-value metrik utama terus ngambil keputusan berhenti dari situ. Banyak tim sengaja nyembunyiin kolom p-value dari dashboard sampai target sampelnya kepenuhan.
Gimana kalau eksperimen jelas bikin rugi, apa harus tetap dilanjutin?
Berhenti karena kerugian itu beda dari berhenti karena kemenangan. Tentuin batas guardrail di awal, misalnya kalau error rate naik 2 kali lipat atau omzet turun 10%, eksperimen dimatiin. Aturan ini dibikin sebelum data masuk, jadi kamu nggak lagi milih-milih momen berhenti berdasarkan hasil.
Analisis per segmen itu selalu p-hacking?
Nggak selalu. Yang bikin masalah itu kalau segmennya baru dibikin setelah kamu lihat hasil keseluruhan gagal. Kalau segmen prioritas kamu tulis di dokumen sebelum eksperimen jalan dan kamu koreksi ambang signifikansinya, analisis per segmen tetap sah. Perlakukan hasil segmen yang muncul belakangan sebagai bahan hipotesis buat test berikutnya.
Yang bisa kamu lakuin minggu ini
Ambil tiga eksperimen terakhir yang timmu jalanin. Cek dua hal: berapa persen target sampel yang kepenuhan waktu eksperimennya distop, dan apakah metrik yang dilaporin sama dengan metrik yang ditulis di awal.
Kalau salah satunya nggak cocok, kamu baru nemu alasan kenapa kemenangan di dashboard nggak nyambung ke angka bisnis.
Buat ngerapiin dasarnya, mulai dari konsep uji hipotesis dan istilah A/B testing. Sesudah itu, tetapin metrik pengaman yang nggak boleh rusak selama eksperimen jalan lewat panduan guardrail metric.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
Pandas to_excel: Ekspor DataFrame ke Excel (2026)
to_excel nyimpen DataFrame pandas jadi file Excel .xlsx. Ini cara pakainya, dari satu sheet sampai banyak sheet, plus setelan yang bikin hasilnya rapi.
Pandas read_excel: Baca File Excel di Python
pandas read_excel baca file Excel jadi DataFrame, bisa pilih sheet tertentu dan lompatin baris judul yang berantakan. Ini cara pakai plus parameter penting dengan contoh data toko.
Pandas read_csv: Baca File CSV di Python untuk Analis
pandas read_csv baca file CSV jadi DataFrame siap olah cuma satu baris kode. Ini cara pakai plus parameter penting kayak sep, encoding, dan usecols dengan contoh data toko.