Difference-in-Differences untuk Kasus yang Tidak Bisa Di-A/B Test
Blog/Tips & Trik/Difference-in-Differences untuk Kasus yang Tidak Bisa Di-A/B Test

Difference-in-Differences untuk Kasus yang Tidak Bisa Di-A/B Test

BimaBima
·1 Agustus 2025·9 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Difference-in-differences adalah cara ngukur dampak sebuah program dengan ngurangin perubahan di kelompok yang kena program dengan perubahan di kelompok pembanding pada periode yang sama. Metode ini kepakai waktu kamu nggak bisa ngacak siapa yang dapat perlakuan, misalnya program yang jalan di satu cabang. Syarat utamanya tren paralel, yaitu dua kelompok bergerak seiring sebelum program dimulai.

Difference-in-differences adalah cara ngukur dampak program dengan ngurangin perubahan di kelompok yang kena program dengan perubahan di kelompok pembanding pada periode yang sama.

Kepakai pas kamu nggak bisa ngacak siapa yang dapat perlakuan. Program jalan di satu cabang, harga naik di satu kota, aturan berubah buat semua orang sekaligus.

Hitungannya cuma dua pengurangan. Yang susah bukan rumusnya, tapi milih pembanding yang layak.

Apa itu difference-in-differences?

Difference-in-differences adalah metode buat memperkirakan dampak sebuah perlakuan dengan bandingin dua selisih. Selisih pertama: perubahan sebelum dan sesudah di kelompok yang kena perlakuan. Selisih kedua: perubahan sebelum dan sesudah di kelompok pembanding. Dampak program adalah hasil pengurangan dua selisih itu.

Idenya sederhana. Kelompok pembanding kepakai buat nebak apa yang bakal terjadi ke kelompok perlakuan seandainya programnya nggak jalan.

Contoh terkenalnya datang dari David Card dan Alan Krueger tahun 1994. Mereka ngukur dampak kenaikan upah minimum di New Jersey dengan bandingin restoran cepat saji di sana sama restoran di Pennsylvania yang upah minimumnya nggak berubah.

Kenapa bandingin sebelum dan sesudah aja nggak cukup?

Karena banyak hal berubah barengan sama programmu. Musim, hari raya, harga bahan baku, sampai kondisi ekonomi. Kalau kamu cuma lihat kenaikan omzet setelah program, kamu nggak bisa misahin mana yang datang dari program dan mana yang bakal naik sendiri.

Ini kerabat dekat dari masalah korelasi vs kausalitas. Dua hal terjadi berurutan bukan berarti yang satu nyebabin yang lain.

Kelompok pembanding nutup lubang itu. Kalau cabang pembanding juga naik di periode yang sama tanpa program apa pun, kenaikan itu bukan hasil kerjamu.

Gimana cara ngitung difference-in-differences?

Empat angka, dua pengurangan. Itu aja.

  1. Hitung rata-rata metrikmu di kelompok perlakuan sebelum program.
  2. Hitung rata-rata yang sama sesudah program.
  3. Ulangi dua langkah itu buat kelompok pembanding.
  4. Kurangin selisih pembanding dari selisih kelompok perlakuan.
Dampak = (Perlakuan_sesudah - Perlakuan_sebelum)
       - (Pembanding_sesudah - Pembanding_sebelum)

Buat dapat perkiraan ketidakpastiannya, hitungan yang sama bisa ditulis sebagai regresi dengan satu variabel interaksi:

import statsmodels.formula.api as smf

model = smf.ols('omzet ~ perlakuan + sesudah + perlakuan:sesudah',
                data=df).fit()
print(model.summary())

Koefisien di baris perlakuan:sesudah itu perkiraan dampakmu, lengkap sama rentang ketidakpastiannya. Parameter lengkapnya di dokumentasi statsmodels ols. Kalau bentuk regresinya masih asing, mampir ke regresi linear berganda dulu.

Contoh kasus: layanan antar di cabang Depok

Toko_berkah punya dua cabang: Depok dan Bekasi. Bulan Mei, cabang Depok mulai layanan antar gratis buat belanja di atas Rp100.000. Cabang Bekasi nggak dapat program apa pun.

Data omzet rata-rata per minggu, 8 minggu sebelum dan 8 minggu sesudah:

CabangSebelumSesudahSelisih
Depok (program)Rp42,0 jutaRp51,5 juta+Rp9,5 juta
Bekasi (pembanding)Rp38,0 jutaRp43,4 juta+Rp5,4 juta
Difference-in-differences+Rp4,1 juta

Kalau cuma lihat cabang Depok, kesimpulannya omzet naik 22,6 persen berkat layanan antar. Angka itu bakal dipakai buat nge-rol program ke semua cabang.

Tapi Bekasi juga naik 14,2 persen tanpa program apa-apa. Bulan Juni memang musim ramai, ditambah ada dua acara di sekitar toko.

Dampak yang jujur cuma Rp4,1 juta per minggu, yaitu 9,8 persen dari omzet awal Depok. Masih bagus, tapi kurang dari separuh angka mentahnya.

Angka itu yang dipakai buat hitungan untung rugi. Biaya kurir dan bensin buat layanan antar Rp2,6 juta per minggu, dengan margin 12 persen dampak Rp4,1 juta cuma nambah untung sekitar Rp492.000. Programnya rugi.

Keputusannya: batas gratis ongkir dinaikin ke Rp150.000 dan jangkauannya dipersempit ke radius 3 km. Uji berikutnya jalan dengan cara yang sama.

Apa syarat supaya hasilnya bisa dipercaya?

Syarat utamanya tren paralel. Dua kelompokmu harus bergerak seiring sebelum program dimulai. Level omzetnya boleh beda jauh, yang penting arah dan kecepatan naik turunnya mirip.

Cara ngeceknya: plot data mingguan dua cabang selama minimal 8 minggu sebelum program. Kalau dua garisnya sejajar walau posisinya beda, kamu aman.

Di kasus toko_berkah tadi, selama 8 minggu pra-program Depok tumbuh rata-rata 1,2 persen per minggu dan Bekasi 1,1 persen. Cukup dekat buat lanjut.

Tiga hal lain yang perlu kamu pastiin:

  • Nggak ada kejadian lain yang cuma kena satu kelompok. Jalan ditutup di depan cabang pembanding bikin hitunganmu kacau.
  • Nggak ada pelanggan yang pindah antar kelompok. Kalau dua cabang jaraknya 2 km, pelanggan Bekasi bisa pindah ke Depok karena gratis ongkir. Kenaikan Depok jadi sebagian datang dari kerugian Bekasi.
  • Komposisi kelompok nggak berubah. Kalau cabang pembanding buka lebih lama di tengah periode, dia bukan pembanding yang sama lagi.

Gimana cara nguji hasilnya lebih jauh?

Dua pengecekan tambahan yang murah dan sering nangkep masalah.

Uji placebo. Jalanin hitungan yang sama tapi pura-pura programnya mulai 4 minggu sebelum tanggal asli, pakai data pra-program doang. Kalau hasilnya keluar besar, berarti dua kelompokmu emang udah beda tren dan hasil utamamu nggak bisa dipercaya.

Ganti pembanding. Ulangi hitungan pakai cabang lain sebagai pembanding. Kalau angkanya berubah drastis, hasilmu terlalu bergantung sama satu pilihan pembanding.

Kalau kamu punya lebih dari dua cabang, gabungin beberapa cabang jadi satu kelompok pembanding. Rata-rata dari beberapa cabang biasanya lebih stabil daripada satu cabang tunggal.

Kesalahan umum pakai difference-in-differences

1. Milih pembanding yang paling mirip levelnya. Yang penting bukan level yang sama, tapi tren yang sejajar. Cabang dengan omzet separuhnya bisa jadi pembanding bagus.

2. Nggak ngecek data pra-program. Ini langkah yang paling sering dilewat dan paling nentuin.

3. Periode sesudah kependekan. Minggu pertama sering ada lonjakan penasaran yang nggak bertahan. Ambil minimal 6 sampai 8 minggu.

4. Ngabaikan perpindahan pelanggan. Ini bikin dampakmu keliatan lebih besar dari kenyataan, karena pembandingnya ikut kena.

5. Laporin satu angka tanpa rentang ketidakpastian. Angka Rp4,1 juta itu perkiraan. Tanpa rentangnya, pembaca laporanmu nggak tahu seberapa goyang.

6. Pakai metode ini padahal pengacakan mungkin dilakukan. Kalau kamu bisa ngacak, ngacak aja. Baca desainnya di glossary A/B testing.

FAQ

Difference-in-differences itu apa?

Difference-in-differences adalah cara ngukur dampak program dengan ngurangin perubahan di kelompok yang kena program dengan perubahan di kelompok pembanding di periode yang sama. Dua pengurangan itu yang bikin namanya begitu. Metode ini kepakai pas kamu nggak bisa ngacak siapa yang dapat perlakuan, misalnya kebijakan yang jalan di satu cabang atau satu wilayah.

Kapan difference-in-differences lebih cocok dari A/B test?

Pas perlakuannya nggak mungkin diacak per orang. Contohnya program yang jalan di satu cabang, perubahan harga di satu kota, atau kebijakan pemerintah. A/B test tetap lebih kuat kalau pengacakan bisa dilakukan, karena dia nggak butuh asumsi tren paralel. Difference-in-differences itu pilihan kedua yang masih jauh lebih baik dari sekadar bandingin sebelum dan sesudah.

Apa itu asumsi tren paralel?

Asumsi tren paralel bilang bahwa tanpa program, dua kelompokmu bakal bergerak dengan pola yang mirip. Levelnya boleh beda, yang penting arah dan kecepatannya seiring. Kamu nggak bisa buktiin asumsi ini secara pasti, tapi bisa ngecek datanya sebelum program dimulai. Kalau dua garis udah nggak sejajar di periode itu, hasil hitunganmu nggak bisa dipercaya.

Gimana cara ngitung difference-in-differences?

Hitung dulu selisih sesudah dikurangi sebelum di kelompok yang kena program, lalu hitung selisih yang sama di kelompok pembanding. Kurangin dua angka itu, dan hasilnya perkiraan dampak programnya. Kalau kelompok program naik 9,5 juta dan pembanding naik 5,4 juta, dampak yang bisa kamu klaim cuma 4,1 juta, bukan 9,5 juta.

Apa yang bikin hasil difference-in-differences salah?

Tiga hal utama: tren dua kelompok udah beda sejak sebelum program, ada kejadian lain yang cuma kena satu kelompok di waktu yang sama, atau ada perpindahan pelanggan antar kelompok. Yang ketiga sering kejadian di cabang yang berdekatan, karena pelanggan pindah belanja. Kalau salah satu ini ada, angkanya jadi campuran dampak program dan hal lain.

Cari pembandingmu dulu

Dua hal yang perlu dibawa: kenaikan setelah program bukan dampak program, dan kelompok pembanding yang nentuin angka mana yang boleh kamu klaim.

Ambil satu program yang lagi jalan di kantormu, cari satu kelompok yang nggak kena program itu, lalu plot data 8 minggu sebelumnya buat dua-duanya. Kalau garisnya sejajar, kamu udah punya bahan buat ngukur dampaknya beneran.

Lanjut baca uji hipotesis buat nguji selisihnya, atau glossary metric buat milih metrik yang layak dipantau sebelum dan sesudah.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Pandas to_excel: Ekspor DataFrame ke Excel (2026)
Tips & Trik
18 Juli 2026•8 menit baca

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.

BimaBima
Pandas read_excel: Baca File Excel di Python
Tips & Trik
16 Juli 2026•8 menit baca

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.

BimaBima
Pandas read_csv: Baca File CSV di Python untuk Analis
Tips & Trik
14 Juli 2026•8 menit baca

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.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore