Sebuah keputusan hanya sebaik data yang menopangnya, dan keputusan dari data yang buruk tidak sekadar meleset — keputusan semacam itu bisa menimpa orang nyata: stok yang salah menutup gerai, segmentasi yang keliru menentukan siapa layak menerima bantuan, prediksi yang dibangun di atas tabel yang setengah kosong. Kualitas data karenanya bukan sekadar urusan teknis penyisih data; kualitas adalah urusan etika. Chapter ini membahas dua sisi yang berkelindan: bagaimana data berkualitas rendah membahayakan keputusan, dan bagaimana provenance — jejak asal-usul data — menjaga analisis tetap bisa dipertanggungjawabkan.
Bahaya Keputusan dari Data Berkualitas Rendah #
Masalah kualitas paling sering terasa sepele saat ditemukan dan baru terasa serius setelah dipakai. Satu transaksi yang tercatat dua kali membuat menu es teh tampak dua kali lebih laku; satu kolom yang setengah kosong membuat pelanggan tanpa catatan terlihat tidak pernah datang padahal catatannya saja yang hilang. Ketika angka-angka seperti itu naik ke rapat dan menjadi dasar keputusan, kesalahannya berhenti menjadi urusan tabel dan menjadi urusan orang.
Cara mengukur dan menstabilkan kualitas secara teknis sudah kita bedah tuntas pada chapter Validasi Kualitas Data — pemeriksaan nilai hilang, duplikat, integritas antar tabel, hingga laporan kualitas otomatis. Di sini kita menempatkannya pada kerangka etika: pertanyaannya bukan hanya “berapa persen datanya bersih”, melainkan “keputusan siapa yang bergantung pada tabel ini, dan siapa yang dirugikan bila tabelnya salah”.
Provenance: Jejak Asal Data #
Provenance adalah catatan perjalanan data: dari mana data berasal, kapan diambil, lewat apa, siapa pemiliknya, dan dengan dasar apa kita boleh memakainya. Data tanpa provenance adalah data yang tidak bisa dibela — ketika hasil analisisnya dipertanyakan, kita tidak bisa menjawab pertanyaan paling dasar: “tabel ini terbentuk dari apa dan kapan”. Mekanisme mencatatnya sudah kita praktikkan pada chapter Pencatatan Asal Data ; kerangka etikanya berbentuk lima pertanyaan yang wajib terjawab sebelum analisis dimulai:
- Sumber: data ini diambil dari sistem mana, oleh siapa, dengan cara apa?
- Waktu: kapan snapshot diambil, dan berlaku untuk periode mana?
- Dasar pemakaian: izin atau lisensi apa yang menyertainya — temuan yang kita rangkai pada chapter Persetujuan Penggunaan Data ?
- Definisi: apa arti tiap kolom menurut sistem sumbernya, bukan menurut tebakan kita?
- Riwayat perlakuan: data ini sudah pernah difilter, dibersihkan, atau digabung dengan apa saja sebelum sampai ke kita?
Lima jawaban itu biasanya cukup ditulis pada satu berkas kecil yang tinggal di samping data. Biayanya satu menit per dataset; manfaatnya adalah seluruh analisis yang berdiri di atasnya menjadi bisa ditelusuri ulang.
Daftar Periksa Etis Kualitas #
Sebelum sebuah dataset dipakai untuk keputusan yang menyangkut orang, daftar periksa berikut layak dijalankan dari ujung ke ujung:
- Kelengkapan diperiksa per kelompok yang akan terdampak, bukan hanya rata-rata keseluruhan.
- Duplikat diidentifikasi dan setiap keputusan menyisihkannya dicatat alasannya.
- Nilai di luar rentang wajar (harga negatif, umur 200 tahun) diperlakukan sebagai temuan, bukan langsung dibuang diam-diam.
- Definisi tiap kolom dikonfirmasi ke sumbernya — dua sistem bisa memakai nama kolom yang sama untuk makna berbeda.
- Usia data dicek terhadap kecepatan perubahan dunia yang diukurnya; data stok minggu lalu bisa basi, data demografi lima tahun lalu bisa masih sahih.
- Provenance tercatat lengkap sebelum baris pertama analisis dijalankan.
Daftar ini bukan formalitas. Setiap butirnya adalah titik di mana analisis yang salah diam-diam menjadi keputusan yang salah terang-terangan.
Merangkum Kualitas dalam Kode #
Ringkasan kualitas yang bisa dibaca sekilas membuat pemeriksaan di atas menjadi kebiasaan, bukan acara. Kode berikut memeriksa tiga masalah klasik pada tabel transaksi kecil — duplikat, nilai hilang, dan nilai di luar rentang — lalu menghitung berapa baris yang benar-benar layak dianalisis:
import pandas as pd
transaksi = pd.DataFrame({
"id": [101, 102, 102, 103, 104, 105],
"menu": ["kopi susu", "es teh", "es teh", "cappuccino", "kopi susu", "es jeruk"],
"jumlah": [2, 1, 1, 3, None, 2],
"harga": [24000, 15000, 15000, 28000, -24000, 18000],
})
pemeriksaan = {
"jumlah baris": len(transaksi),
"baris duplikat (id 102 tercatat dua kali)": int(transaksi.duplicated().sum()),
"nilai hilang (jumlah pesanan id 104)": int(transaksi.isna().sum().sum()),
"harga di luar rentang wajar (id 104 negatif)": int((transaksi["harga"] <= 0).sum()),
}
for nama, nilai in pemeriksaan.items():
print(f"- {nama}: {nilai}")
lolos = (
~transaksi.duplicated(keep=False)
& transaksi["jumlah"].notna()
& (transaksi["harga"] > 0)
)
print()
print("baris lolos seluruh pemeriksaan:", int(lolos.sum()), "dari", len(transaksi))Output yang Dihasilkan:
- jumlah baris: 6
- baris duplikat (id 102 tercatat dua kali): 1
- nilai hilang (jumlah pesanan id 104): 1
- harga di luar rentang wajar (id 104 negatif): 1
baris lolos seluruh pemeriksaan: 3 dari 6Mari kita telaah bagian-bagian pentingnya:
- Baris 10-15 (kamus
pemeriksaan): setiap entri memasangkan temuan dengan cara mengukurnya.duplicated()menandai baris kedua dari pasangan identik;isna().sum().sum()menjumlahkan seluruh sel kosong; perbandinganharga <= 0menangkap nilai yang mustahil secara domain. Menyusunnya sebagai kamus membuat laporan mudah ditambah satu baris baru setiap kali ada jenis masalah baru. - Baris 20-24 (mask
lolos):duplicated(keep=False)menandai semua baris pada pasangan duplikat (bukan menyisakan satu),notna()menyaring baris berisi nilai kosong, danharga > 0menyaring nilai mustahil. Tiga syarat digabung dengan&sehingga hanya baris yang bersih dari ketiganya yang dihitung. - Hasil output: 3 dari 6 baris lolos — setengah tabel ternyata bermasalah. Angka ringkas seperti inilah yang layak dibawa ke rapat sebelum analisis dimulai, bukan setelah keputusan dibuat.
Ringkasan seperti ini tidak menghentikan kesalahan data, tetapi menghentikan kesalahan data dari naik kelas menjadi kesalahan keputusan — orang yang membaca “3 dari 6” akan bertanya dulu sebelum memercayai rata-ratanya.
Rangkuman #
- Kualitas data adalah urusan etika karena keputusan yang dibangun di atasnya menyangkut orang nyata; kesalahan tabel berubah menjadi kesalahan keputusan begitu hasilnya dipakai.
- Nilai yang hilang jarang hilang secara adil — kekosongan yang menumpuk pada satu kelompok adalah pintu masuk bias yang tidak terlihat dari rata-rata.
- Provenance menjawab lima pertanyaan: sumber, waktu, dasar pemakaian, definisi kolom, dan riwayat perlakuan — dijual murah satu berkas kecil, dibayar mahal saat absen.
- Ringkasan kualitas dalam bentuk hitungan ringkas (baris, duplikat, hilang, di luar rentang, baris lolos) membuat pemeriksaan menjadi kebiasaan sebelum analisis dimulai.
Data yang sah diperoleh dan bermutu baik masih menyimpan satu keterbatasan yang tidak bisa dibersihkan: model yang dilatih darinya hanya berlaku untuk dunia yang serupa dengan dunia latihnya. Menyatakan batas itu secara terbuka adalah keterampilan yang kita bahas pada chapter Keterbatasan Model .
Referensi: