Ketika sebuah angka naik ke laporan dan menjadi dasar keputusan, orang berhak bertanya: “bagaimana angka ini dihitung, dan bisakah saya lihat sendiri?” Analisis yang tidak bisa dijalankan ulang hanya bisa dipercaya atau tidak dipercaya — tidak bisa diperiksa. Reproduksibilitas adalah janji bahwa orang lain, dengan kode dan data yang sama, akan mendapat angka yang sama; janji itulah yang mengubah hasil kerja kita dari pendapat pribadi menjadi temuan yang bisa diaudit. Chapter ini membahas kerangka etikanya — mengapa hasil wajib bisa diulang, apa yang dikunci, dan bagaimana membuktikannya.

Kepercayaan Melalui Audit #

Ada tiga situasi nyata di mana kemampuan dijalankan ulang menentukan nasib sebuah analisis. Pertama, audit: ketika hasilnya dipertanyakan — oleh atasan, tim kepatuhan, atau mitra — satu-satunya jawaban yang meredakan adalah menjalankan ulang dan mendapat angka yang sama. Kedua, kerja tim: rekan yang melanjutkan proyek kita, memperbaiki bug, atau memperbarui model butuh titik berangkat yang pasti, bukan menebak-nebak dari ingatan. Ketiga, masa depan: model yang dipantau dan diperbarui berkala hanya bisa diperbarui secara bertanggung jawab bila angka lamanya masih bisa dibandingkan dengan angka baru secara adil — syarat yang hanya dipenuhi analisis yang bisa diulang.

Dalam kerangka etika, reproduksibilitas adalah bentuk kerendahan hati yang terukur: kita mengaku bahwa kesalahan bisa saja terjadi, dan karena itu kita menyediakan cara bagi orang lain untuk menemukannya. Analisis yang tidak bisa diperiksa memaksa semua orang menerima kata kita — posisi yang tidak sepatutnya dituntut seorang profesional.

Tiga Pengunci: Seed, Versi Data, Lingkungan #

Hasil analisis berubah sendiri dari tiga sumber, dan ketiganya punya kunci masing-masing:

Sumber perubahanKenapa hasil bergeserCara mengunci
Keacakanpembagian data, bootstrap, dan inisialisasi model memakai angka acaksatu seed yang ditulis di laporan
Data yang berubahsumber terus bertambah baris baru; potret hari ini berbeda dengan minggu lalusnapshot beku bertanggal + identitas berkas (checksum)
Lingkungan yang berbedaversi pustaka berbeda bisa menghitung hal yang sedikit berbedadaftar dependensi dengan versi terkunci

Ketiga mekanismenya sudah kita praktikkan detailnya pada chapter Reproducible Analysis — mengatur seed di titik paling atas, membekukan salinan data, dan mengunci versi pustaka. Membuktikan identitas berkas data dari waktu ke waktu memakai checksum kita bahas lanjut pada chapter Version Control untuk Data . Di sini kita berhenti pada satu pemahaman penting: ketiga kunci itu bukan preferensi gaya kerja, melainkan syarat agar klaim kita bisa diuji ulang — dan syarat itu berlaku sejak hari pertama proyek, bukan menjelang tenggat laporan.

Membuktikan dengan Menjalankan Ulang Dua Kali #

Pembuktian termurah adalah membuktikan sendiri. Kode berikut menjalankan analisis bootstrap sederhana — mengestimasi rata-rata belanja beserta sebarannya — dua kali dengan seed yang sama, lalu sekali lagi dengan seed yang berbeda:

python
import numpy as np

belanja = np.array([42, 18, 65, 30, 25, 51, 38, 47, 22, 33])

def jalankan_analisis(seed):
    rng = np.random.default_rng(seed)
    rerata_bootstrap = []
    for _ in range(500):
        sampel = rng.choice(belanja, size=len(belanja), replace=True)
        rerata_bootstrap.append(sampel.mean())
    rerata_bootstrap = np.array(rerata_bootstrap)
    return round(float(rerata_bootstrap.mean()), 3), round(float(rerata_bootstrap.std()), 3)

hasil_pertama = jalankan_analisis(42)
hasil_kedua = jalankan_analisis(42)
hasil_lain = jalankan_analisis(7)

print("seed 42, jalankan pertama :", hasil_pertama)
print("seed 42, jalankan kedua   :", hasil_kedua)
print("seed 7,  sebagai pembanding:", hasil_lain)
print()
print("dua jalankan seed 42 identik:", hasil_pertama == hasil_kedua)

Output yang Dihasilkan:

text
seed 42, jalankan pertama : (36.87, 4.275)
seed 42, jalankan kedua   : (36.87, 4.275)
seed 7,  sebagai pembanding: (37.012, 4.591)

dua jalankan seed 42 identik: True

Mari kita telaah bagian-bagian pentingnya:

  1. Baris 5-12 (jalankan_analisis): seluruh keacakan analisis mengalir dari satu objek default_rng(seed) — kebiasaan yang membuat satu angka seed mengunci seluruh rantai hasil. Fungsi ini menerima seed sebagai parameter, sehingga siapa pun bisa menjalankan versi yang persis sama dengan memanggil angka yang sama.
  2. Baris 14-16 (jalankan dua kali): dua panggilan jalankan_analisis(42) menghasilkan tuple yang identik, (36.87, 4.275). Inilah definisi operasional dari reproducible — bukan kesan, melainkan perbandingan yang bernilai True.
  3. Baris 16 dan baris ketiga output (seed 7): seed yang berbeda menghasilkan angka yang berbeda namun sama-sama sah, (37.012, 4.591). Dua-duanya estimasi yang benar dari prosedur yang sama; keduanya hanya berbeda titik berangkat keacakan. Justru karena setiap seed menghasilkan jawaban berbeda, nilai seed wajib ditulis di laporan — tanpa angka itu, orang lain yang menjalankan ulang akan mendapat hasil lain dan tidak ada cara menentukan mana yang benar.

Latihan kecil seperti ini layak menjadi gerbang rilis sebelum laporan dibagikan: jalankan seluruh analisis dua kali dari keadaan bersih, dan pastikan hasilnya identik. Kebiasaan satu menit ini menangkap sebagian besar kebocoran reproduksibilitas — variabel sisa dari sel sebelumnya, berkas yang kebaca dari folder lain, atau angka acak yang tidak dikunci.

Jejak Audit yang Layak Ditinggalkan #

Di atas tiga pengunci, analisis yang bisa diaudit meninggalkan catatan tentang dirinya sendiri. Enam butir berikut adalah daftar minimum yang perlu tersimpan bersama proyek:

  • Kode lengkap dari awal sampai angka akhir — termasuk tahap pembersihan, bukan hanya model akhirnya.
  • Identitas data: berkas apa yang dipakai, dari mana asalnya (provenance), dan checksum-nya sebagai bukti versi.
  • Seed semua komponen acak, ditulis eksplisit di laporan, bukan hanya di kode.
  • Versi pustaka yang terpasang saat hasil dibuat.
  • Tanggal beku — potret data berlaku hingga kapan, dan kapan analisis dijalankan.
  • Keputusan dan asumsi: mengapa kolom tertentu dibuang, mengapa ambang tertentu dipilih — keputusan yang tidak tercatat akan terlihat seperti manipulasi saat diaudit.

Pencatatan seperti ini kini banyak ditopang alat pelacakan eksperimen seperti MLflow yang menyimpan parameter, metrik, dan artefak tiap kali analisis dijalankan; kebiasaan mencatatnya bisa kita rujuk kembali pada pembahasan eksperimen dan pencatatan . Alat berganti, daftarnya tidak: keenam butir itu adalah isi minimum dari sebuah analisis yang berani diperiksa.

Rangkuman #

  • Reproduksibilitas mengubah hasil kerja dari pendapat menjadi temuan: orang lain bisa menjalankan ulang dan mendapat angka yang sama, sehingga klaim bisa diaudit.
  • Tiga sumber perubahan — keacakan, data, lingkungan — dikunci dengan seed, snapshot beku ber-checksum, dan daftar dependensi berversi.
  • Membuktikan sendiri dengan menjalankan dua kali adalah gerbang rilis termurah; seed yang tidak ditulis membuat hasil tidak bisa diperiksa siapa pun.
  • Jejak audit minimum: kode utuh, identitas data, seed, versi pustaka, tanggal beku, dan catatan keputusan.

Seluruh peralatan ini menopang satu hal yang lebih besar: analisis yang bisa dijalankan ulang adalah analisis yang bisa dipertanggungjawabkan. Pertanggungjawaban kepada manusia yang terdampak hasil kerja kita itulah topik penutup Section ini, pada chapter Tanggung Jawab Data Scientist .

Referensi: