TL;DR
Bias analisis data adalah kesalahan sistematis yang bikin kesimpulan meleset walaupun angkanya bener secara hitungan. Delapan yang paling sering muncul: survivorship, confirmation, selection, cherry-picking, anchoring, sample kecil, Simpson's paradox, dan bias skala sumbu. Cara ngeceknya sederhana: tanya siapa yang hilang dari data, tulis hipotesis sebelum ngeliat hasil, dan pecah agregat jadi segmen.
Bias analisis data adalah kesalahan sistematis yang bikin kesimpulan kamu meleset ke satu arah, walaupun semua rumusnya bener dan query-nya jalan mulus.
Ini yang bikin bias serem. Angka salah gampang ketahuan. Total nggak balance, count-nya minus. Bias nggak. Dashboard-nya cantik, angkanya konsisten, tapi ceritanya salah.
Aku kumpulin 8 bias yang paling sering nyelip di kerjaan analyst sehari-hari. Tiap poin ada tanda-tandanya dan cara ngeceknya.
Survivorship bias kejadian waktu kamu analisis data dari yang bertahan doang, lupa sama yang udah keluar dari sistem.
Contoh paling sering: analisis kepuasan pelanggan yang cuma pakai pelanggan aktif. Skor NPS-nya 62, kelihatan sehat. Padahal 340 pelanggan yang paling kecewa udah churn duluan dan nggak masuk survei.
Yang churn itu justru nyimpen alasan kenapa produk kamu bocor.
Cara cek: tanya satu hal sebelum mulai: siapa yang nggak ada di tabel ini? Kalau jawabannya "yang udah berhenti", tarik mereka balik ke analisis.
Ini yang paling sering nyerang analyst yang kerja bareng stakeholder kuat.
Manager udah yakin kampanye TikTok jalan. Kamu diminta "buktiin pakai data". Otomatis kamu filter periode yang paling bagus, pilih metrik yang paling manis, dan skip channel lain.
Hasilnya bener secara hitungan. Kesimpulannya tetap nyesatin.
Cara cek: tulis hipotesis kamu di notes sebelum buka data. Terus tulis juga: hasil kayak gimana yang bakal bikin aku nyerah sama hipotesis ini? Kalau kamu nggak bisa jawab, kamu lagi nyari pembenaran, bukan lagi analisis.
Selection bias muncul waktu cara kamu milih sampel bikin grup tertentu kepilih lebih sering.
Survei kepuasan yang dikirim lewat email cuma kejaring pelanggan yang buka email. Polling di Instagram Story cuma kejaring follower yang aktif jam segitu.
Nambah responden nggak nyelesain masalah ini. Sampel 10 ribu yang bias tetap salah, cuma salahnya lebih pede.
Cara cek: bandingin komposisi sampel sama komposisi populasi asli. Kalau 70% responden dari Jakarta padahal cuma 30% pelanggan dari Jakarta, kamu punya masalah.
Ambil rentang tanggal yang pas, dan hampir semua tren bisa dibikin naik atau turun.
Penjualan turun sepanjang tahun? Tampilin 6 minggu terakhir aja, kebetulan ada Ramadan, jadi naik 18%. Nggak bohong. Tapi nyesatin.
Cara cek: selalu tampilin minimal 12 bulan atau 2 siklus penuh. Kalau periode dipotong, tulis alasannya di caption chart, bukan di catatan kaki yang nggak ada yang baca.
Angka pertama yang kamu lihat jadi patokan buat semua penilaian setelahnya.
Waktu forecast, kalau kamu buka file lama yang nulis target 500 juta, semua estimasi kamu bakal ngambang di sekitar situ. Padahal angka itu asalnya dari asumsi 2 tahun lalu.
Cara cek: bikin estimasi sendiri dari nol dulu, baru buka angka lama. Urutannya penting.
Persentase dari sampel kecil itu jebakan visual. "75% pelanggan puas" kedengeran kuat sampai kamu tau responden-nya cuma 4 orang.
Masalahnya makin parah di analisis per segmen. Total 2.000 transaksi kedengeran banyak, tapi kalau dipecah jadi 40 kota, ada kota yang cuma punya 3 transaksi.
Cara cek: selalu tampilin n di sebelah persentase. Kasih aturan sederhana: segmen dengan n di bawah 30 nggak dilaporin sebagai persentase, laporin sebagai angka mentah.
Ini bias favoritku karena paling licik. Tren di data total bisa berlawanan arah sama tren di tiap segmennya.
Kelihatannya mustahil. Tapi kejadian terus. Penyebabnya: komposisi segmen berubah antar periode.
Cara cek: setiap kali kamu lihat agregat, pecah minimal ke satu dimensi (kota, kategori, channel). Kalau arahnya beda, agregat kamu lagi boong.
Detail contoh angkanya ada di bagian berikutnya.
Sumbu Y yang mulai dari 94 bukan dari 0 bisa bikin kenaikan 2% kelihatan kayak lonjakan gila.
Kebalikannya juga bisa: sumbu Y sampai 100.000 bikin kenaikan 3.000 kelihatan datar.
Cara cek: untuk bar chart, sumbu Y wajib mulai dari 0. Untuk line chart, boleh nggak dari 0 asal kamu kasih label jelas. Kesalahan visualisasi data lain juga banyak yang lahir dari sini.
Aku pakai dataset toko_berkah, data transaksi UMKM retail dengan 2 channel penjualan: offline dan marketplace.
Lihat rata-rata nilai transaksi Q1 vs Q2:
| Periode | Rata-rata transaksi (total) |
|---|---|
| Q1 2026 | Rp 142.000 |
| Q2 2026 | Rp 128.000 |
Turun Rp 14.000. Manager panik, minta investigasi kenapa pelanggan makin pelit.
Terus aku pecah per channel:
| Channel | Q1 | Q2 | Arah |
|---|---|---|---|
| Offline | Rp 168.000 | Rp 175.000 | Naik 4,2% |
| Marketplace | Rp 95.000 | Rp 101.000 | Naik 6,3% |
Dua-duanya naik. Tapi totalnya turun.
Penyebabnya komposisi. Di Q1, marketplace cuma 31% dari transaksi. Di Q2 naik jadi 58% gara-gara promo gratis ongkir. Marketplace punya nilai transaksi lebih kecil, jadi begitu porsinya membesar, rata-rata total ketarik ke bawah.
Pelanggan nggak makin pelit. Mereka cuma pindah channel.
Query buat ngecek pola ini di data kamu sendiri:
SELECT
channel,
DATE_TRUNC('quarter', tanggal_transaksi) AS kuartal,
COUNT(*) AS jumlah_transaksi,
ROUND(AVG(total_belanja)) AS rata_rata_belanja,
ROUND(
100.0 * COUNT(*) / SUM(COUNT(*)) OVER (
PARTITION BY DATE_TRUNC('quarter', tanggal_transaksi)
),
1
) AS porsi_persen
FROM transaksi
WHERE tanggal_transaksi >= '2026-01-01'
GROUP BY channel, DATE_TRUNC('quarter', tanggal_transaksi)
ORDER BY kuartal, channel;
Kolom porsi_persen itu kuncinya. Kalau porsi antar segmen bergeser jauh antar periode, rata-rata total kamu nggak bisa dipercaya sendirian.
Fungsi SUM dipakai sebagai window function di sini, bikin subtotal per kuartal tanpa perlu subquery terpisah. Kalau kamu belum familiar, window function ini yang paling sering dipakai buat hitung persentase kontribusi.
Ada 3 hal yang sering aku lihat.
Nambah data dikira nyelesain bias. Nggak. Kalau sumber datanya bias, nambah baris cuma bikin kesimpulan salah kamu makin pede. Yang perlu diperbaiki cara ngumpulinnya.
Ngaku bias di catatan kaki tapi kesimpulannya tetap. Nulis "data ini punya keterbatasan" di slide terakhir nggak ngapus biasnya. Kalau biasnya beneran ngubah arah kesimpulan, kesimpulannya yang harus ganti.
Ngejar netral sampai lumpuh. Nggak ada dataset yang bebas bias. Tugas kamu bukan bikin analisis sempurna, tapi tau bias mana yang lagi kamu tanggung dan seberapa besar efeknya ke keputusan.
Buat cek statistik dasarnya, dokumentasi tipe-tipe research bias dari Scribbr lumayan lengkap dan gratis dibaca.
Bias analisis data adalah kesalahan sistematis yang bikin kesimpulan meleset ke satu arah, walaupun perhitungannya udah bener. Bedanya sama error acak: error acak bikin hasil naik-turun random, bias bikin hasil selalu condong ke satu sisi. Sumbernya bisa dari cara data dikumpulin, cara data dipilih, atau cara analyst nafsirin hasilnya.
Mulai dari satu pertanyaan: siapa atau apa yang nggak masuk ke dataset ini? Terus pecah angka agregat jadi segmen. Kalau tren per segmen kebalikan dari tren total, kamu kena Simpson's paradox. Terakhir, tulis hipotesis kamu sebelum buka data. Kalau hasilnya kebetulan selalu ngedukung hipotesis awal, patut curiga.
Sampling error muncul karena sampel nggak pernah sama persis sama populasi. Nambah jumlah sampel bakal ngecilin sampling error. Bias beda: nambah sampel malah bikin kesimpulan salahnya makin percaya diri. Survei online 100 ribu responden tetap bias kalau yang bisa akses cuma orang yang punya internet cepat.
Dari yang aku lihat, confirmation bias dan survivorship bias juaranya. Confirmation bias muncul waktu stakeholder udah punya jawaban di kepala dan minta data yang ngedukung. Survivorship bias muncul waktu kamu analisis pelanggan aktif doang, lupa sama yang udah churn. Padahal justru mereka yang nyimpen jawabannya.
AI bisa bantu di bagian mekanis: nyari segmen yang tren-nya kebalikan, ngasih tau kolom mana yang missing value-nya numpuk di satu grup. Tapi AI belajar dari data yang kamu kasih. Kalau datanya udah bias sejak dikumpulin, AI cuma bakal ngulang bias yang sama dengan lebih cepat.
Bias nggak kelihatan di angka. Dia kelihatan di pertanyaan yang nggak kamu tanya. Pecah agregat jadi segmen sebelum ambil kesimpulan. Dan tulis hipotesis sebelum buka data, bukan sesudah.
Mau latihan langsung mecah agregat per segmen pakai SQL? Coba latihan window function di panduan window function SQL. Di situ ada dataset UMKM yang bisa kamu utak-atik sendiri.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Cara pakai pandas rolling buat hitung moving average dan haluskan data time series yang naik-turun. Lengkap dengan contoh penjualan harian UMKM.
Data transaksi harian sering terlalu ramai buat dilihat. Pandas resample ngeringkasnya jadi total per minggu atau per bulan cuma dengan satu baris, asal indeksnya tanggal.
Kolom tanggal yang kebaca sebagai teks bikin sortir dan hitung selisih hari jadi kacau. Ini cara pd.to_datetime ubah teks jadi tanggal asli, plus tangani format berantakan.