๐Ÿ•ต๏ธ Leakage Detective Kit

Belajar mengenali data leakage โ€” pakai data asli dari eksperimenmu sendiri (CV.98 & ICRAF-952)

Berdasarkan Jang et al. 2026, GCB Bioenergy โ€” "Illusions of Accuracy"

๐Ÿ’ก Gagasan besar: Data leakage bukan kode yang rusak โ€” kode berjalan sempurna, tapi alat ukurnya menipu. Informasi dari data test diam-diam bocor ke proses latihan, jadi skor bagus itu ilusi. Dari 64 studi biochar paling banyak dikutip, semua punya potensi leakage, dan split acak bisa menggelembungkan akurasi sampai +86%.

๐ŸŽ“ Setup: dua istilah yang sering tertukar

Bug = kode salah โ†’ hasil salah atau crash. Contoh nyata: paket R MLSP yang kita bedah โ€” fungsi merge()-nya bikin dua kolom LAB_NUM โ†’ langsung error. Itu mesin rusak.

Leakage = kode benar, tapi evaluasinya berbohong. Model kelihatan jago karena "udah pernah lihat jawaban ulangan". Itu speedometer yang selalu bilang 80 km/jam padahal motor cuma ngebut 40.

Paper Jang meneliti speedometer yang menipu. Dan kabar baiknya: kamu sudah pernah menyentuh kasusnya sendiri tanpa sadar โ€” dua proyek kita (TabPFN/CV.98 dan MLSP/952) keduanya kena audit.

๐Ÿ“ Berkas kasus: dua dataset yang sudah kamu pegang

CV.98 โ€” 98 sampel, 1 petakan sawah 28 ha di Swiss ICRAF-952 โ€” 952 sampel, library global multi-negara Target: SOC (karbon organik tanah) dari spektrum vis-NIR

Semua angka di halaman ini dihitung dari data asli itu (audit 2 Sep 2026), bukan contoh rekaan โ€” kecuali dua simulasi yang diberi label jelas.

๐Ÿ—‚๏ธ Kasus 1: Si Kembar yang Terpisah (grouped/duplicate leakage)

๐Ÿค” TEBAK DULU

Di CV.98, dari 50 pasang spektrum yang paling mirip, 47 pasang ternyata mendarat di fold yang BERBEDA (train vs test). Menurutmu ini:

A. Buktinya CV kita salah total, semua angka harus dibuang B. Risiko leakage nyata โ€” tapi besarnya harus diukur dulu, bukan langsung panik C. Tidak masalah sama sekali, spektrum mirip itu biasa
๐Ÿ”‘ Buka jawaban
Jawaban: B
Kenapa ini bahaya: kalau sampel 67 & 80 praktis kembar (jarak 0.023, lihat gambar) dan 67 ada di train sementara 80 di test โ€” model tinggal "mengenali wajah" saja, tidak pernah belajar hubungan spektrumโ†’SOC. Test set-nya tidak benar-benar asing.
Kenapa jangan panik: risiko โ‰  besaran. Saat diukur dengan split per grup (KMeans kemiripan spektrum), RMSE CV.98 hanya naik 0.263 โ†’ 0.272 (+3.4%). Kenapa kecil? Satu sawah 28 ha, satu musim, satu instrumen โ€” dan n=98 kecil, fold acak hampir pasti memisahkan kembarannya. Bandingkan dengan studi biochar di paper Jang: inflasi sampai +86%!
Dua spektrum kembar di CV.98
๐Ÿ“ˆ Cara baca: kiri = dua spektrum dari dua fold berbeda โ€” bentuknya nyaris identik (biru vs kuning). Kanan = selisihnya, berayun kecil di sekitar nol. Ini "kembar sejati" yang oleh split acak dipisah ke train dan test.
Random vs grouped split pada data asli
๐Ÿ“ˆ Cara baca: merah (split per grup) selalu lebih tinggi dari biru (split acak) โ€” itu artinya split acak memang sedikit terlalu optimis. Tapi kenaannya kecil: +3.4% (CV.98) dan +6.8% (ICRAF-952). Angka 1.16โ€“1.24 di kanan jauh lebih besar karena library global jauh lebih sulit diprediksi (perhatikan Rยฒ-nya cuma 0.50!).
๐Ÿ€ Analogi: Kamu dilatih basket oleh pelatih A, lalu "diuji" oleh kembar identik pelatih A yang baru kamu kenal seminggu. Jurus-jurusnya persis sama โ€” nilai ujianmu pasti bagus. Itu split acak pada data berkelompok. Ujian yang jujur = diuji oleh pelatih dari sekolah lain (field yang benar-benar belum pernah dilihat).

๐Ÿ—‚๏ธ Kasus 2: Pelaporan yang "Cek Jawaban Dulu" (leaky preprocessing)

๐Ÿค” TEBAK DULU

Kamu harus menstandarkan fitur (PCA/scaling) sebelum melatih model. Kapan StandarScaler/PCA boleh di-fit?

A. Di semua data dulu, biar standarisasinya konsisten, baru di-split B. Hanya di data train โ€” lalu transformasi yang sama diaplikasikan ke test C. Bebas, tidak berpengaruh ke hasil
๐Ÿ”‘ Buka jawaban
Jawaban: B
Kenapa A bocor: PCA yang di-fit di semua data "mencium" struktur data test (rata-rata, arah variasi). Test set seharusnya asing โ€” tapi arah-arah PCA sudah disetel mengikuti isinya. Ini persis ยง3.2.4 paper Jang: preprocessing di luar loop CV = leakage.
Bukti angka (simulasi, 60 ulangan): RMSE 0.53 (benar) vs 0.55 (bocor). Bocornya kecil โ€” tapi konsisten satu arah, dan bisa jauh lebih besar kalau feature selection yang ikut mencium test set.
PCA fit di train saja vs semua data
๐Ÿ“ˆ Cara baca: batang merah (bocor) lebih pendek = kelihatan lebih akurat โ€” tapi itu karena PCA-nya "sudah kenal" data test. Error bar tumpang tindih: efeknya kecil di kasus ini, tapi selalu searah.
Kabar baik dari audit kita: SNV di pipeline kita aman 100% โ€” SNV menormalkan tiap spektrum dengan rata-rata & deviasi dirinya sendiri (per-baris), jadi secara matematis mustahil bocor antar fold. PCA(20)/PLS kita di-fit di train saja lalu memproyeksikan test. โœ”
๐Ÿ€ Analogi: Standarisasi itu seperti membuat kunci ujian. Kalau kuncinya dibuat setelah melihat soal-soal ulangan (test set), ya kuncinya "cocok" dengan ulangan itu. Kunci harus dibuat hanya dari soal latihan (train), lalu dipakai apa adanya di ulangan.

๐Ÿ—‚๏ธ Kasus 3: Ulangan yang Dipakai Berkali-kali (test-set reuse)

๐Ÿค” TEBAK DULU

Kita membandingkan 4 model (Ridge, PLSR, TabPFNร—2) di 10 fold yang SAMA, lalu melakukan sweep tuning (ฮฑ Ridge, k PLSR) di dataset yang sama. Mana yang melanggar?

A. Membandingkan 4 model di fold yang sama B. Memilih nilai tuning terbaik dari sweep yang sama, lalu melaporkan skor CV-nya sebagai performa C. Keduanya sama-sama melanggar berat
๐Ÿ”‘ Buka jawaban
Jawaban: B (A masih wajar)
Kapan A tidak apa-apa: membandingkan model di test set yang sama itu adil โ€” semua model kena ujian yang sama. Itu perbandingan, bukan optimisasi.
Kapan jadi leakage: begitu kamu memilih berdasarkan hasil test (ฮฑ=1.0 terbaik! k=5 terbaik!) dan melaporkan angka test itu juga โ€” kamu sudah meng-overfit test set secara implisit. Jang ยง3.2.5: model tanpa sadar "dioptimalkan untuk test set spesifik itu".
Aturan main yang benar: tuning pakai validasi internal (dari data train), atau nested CV. Angka test terakhir hanya boleh "dijapuk" sekali, di model final. Temuan kita "PLSR k=5 lebih baik dari k=10" masih aman karena disebut sebagai temuan tuning โ€” tapi kalau nanti dilaporkan pakai 0.269 dari fold yang sama, itu mulai jadi abu-abu. Sadari garisnya.
๐Ÿ€ Analogi: Latihan soal tahun lalu buat belajar = bagus. Tapi kalau kamu mencoba 50 variasi jawaban di soal itu, pilih yang paling benar, lalu bilang "aku jago, lihat skor ku di soal ini" โ€” kamu tidak mengukur kemampuan, kamu menghafal ulangan.

๐Ÿ—‚๏ธ Kasus 4: Fitur yang Membocorkan Jawaban (leaky & temporal features)

๐Ÿค” TEBAK DULU

Studi biochar memakai "konsentrasi awal zat" sebagai fitur untuk memprediksi "kapasitas adsorpsi". Menurut paper Jang, masalahnya:

A. Fiturnya terlalu sederhana B. Fitur itu terikat intrinsik ke hasil (proxy jawaban) โ€” model hanya perlu membaca fiturnya, tidak belajar pola sungguhan C. Tidak ada masalah, lebih banyak fitur lebih baik
๐Ÿ”‘ Buka jawaban
Jawaban: B
Kenapa ini bocor: konsentrasi awal & lama inkubasi adalah "kembaran jawaban" yang menyusup sebagai fitur. Model tampak jago karena sebenarnya sedang membaca jawaban yang diselipkan di saku soal.
Varian waktunya (temporal leakage): memakai info MASA DEPAN untuk prediksi masa kini โ€” misal ukur SOC tahun ke-5 untuk "memprediksi" kondisi tahun ke-2. Di CV.98 kita: sampel diambil 2 kampanye (Meiโ€“Jun & Sepโ€“Okt 2021) tapi tanggal per sampel tidak ikut dipublikasikan dan fold-nya acak โ†’ tidak bisa diaudit. Ini risiko sisa yang harus diakui, bukan disembunyikan.
Checklist cepat: tanyakan "saat model ini dipakai sungguhan di lapangan, apakah fitur ini tersedia SEBELUM prediksi?" Kalau tidak โ€” itu cheat feature.
๐Ÿ€ Analogi: Memprediksi nilai ujian matematika pakai fitur "jumlah soal yang dijawab benar". Tentu akurasinya 99% โ€” kamu tidak memprediksi apa-apa, kamu mengintip lembar jawaban. Di paper biochar, 24 dari 64 studi punya selipan seperti ini.

๐Ÿ—‚๏ธ Kasus 5: Ujian dengan 10 Soal (dataset kecil, n < 35)

๐Ÿค” TEBAK DULU

Eksperimen label-efficiency kita menguji model dengan hanya 10 dan 20 sampel berlabel. Paper Jang menyebut dataset < 35 sampel sebagai zona paling berbahaya. Efek sampingnya di eksperimen KITA:

A. TabPFN pasti lebih baik di 10 sampel karena pretrained B. Kesimpulan di n=10/20 paling rentan tidak stabil โ€” peringkat model bisa berbalik di pengulangan lain; angkanya harus dibawa dengan kepercayaan rendah C. Tidak berpengaruh, RMSE sudah dirata-rata 3 kali
๐Ÿ”‘ Buka jawaban
Jawaban: B
Kenapa: dengan n=10, satu sampel "aneh" menggeser RMSE secara dramatis. Interval kesalahan kita di n=10 memang besar (ยฑ0.026โ€“0.13). Kesimpulan "Ridge menang di semua budget" TETAP valid sebagai rata-rata โ€” tapi klaim per-bandingan di n=10 itu rapuh. Ini kejujuran tambahan buat presentasi Toshi: hasil n kecil = indikatif, bukan konklusif.
Kaitan ke leakage: di dataset kecil, efek leakage (kembaran, preprocessing bocor) tercampur dengan noise โ€” dan proporsional jauh lebih besar. Paper Jang: overfitting + leakage "paling parah di studi < 35 sampel".
๐Ÿ€ Analogi: Menilai kemampuan anak dari 10 soal itu seperti menilai koki dari 1 suapan sup โ€” sedikit garam kelebihan, seluruh penilaian berubah. 88 soal (dataset penuh) jauh lebih stabil.

๐Ÿ’ฅ Kasus ekstrem: seberapa buruk bisa jadi? (simulasi)

Bagian ini simulasi sintetis berlabel jelas (bukan data lapangan) โ€” 30 "field" ร— 8 sampel, target dikendalikan "sidik jari field". Persis skenario biochar di paper Jang: banyak titik dari sistem yang sama, disebar acak ke train/test.

Random vs field split, kasus ekstrem
๐Ÿ“ˆ Cara baca: split acak per titik: RMSE 0.59 (kelihatan jago). Split per field: RMSE 1.42 โ€” +142%! Model tadi sebenarnya cuma mengenali "sidik jari" field yang kebetulan ikut ada di train. Ini ilusi akurasi yang dimaksud judul paper: Illusions of Accuracy. Di dunia nyata Jang menemukan inflasi hingga +86%.
๐ŸŽฏ Pola bakunya: makin besar porsi informasi "kelompok" di targetmu, makin berbahaya split acak. Kalau targetmu ditentukan oleh hal yang berulang dalam kelompok (lokasi, batch, studi sumber), split per grup itu wajib, bukan pilihan.

๐ŸŽฎ Lab interaktif: rasakan sendiri leakagenya

๐Ÿงช Simulator "Sidik Jari Kelompok"

Geser kekuatan sidik jari (seberapa besar target ditentukan oleh kelompoknya), lalu jalankan eksperimen di browser-mu: 200 ulangan ร— split acak vs split per grup. Lihat sendiri kapan split acak mulai berbohong.

Tekan tombol untuk menjalankan simulasi di browser-muโ€ฆ

Ekspektasi: ฮฒ=0 โ†’ gap kecil (~10%) murni "harga field baru" (ekstrapolasi jujur, bukan leakage). ฮฒ besar โ†’ gap membengkak jauh di atas itu = ilusi akurasi akibat kembaran grup tersebar di train/test. Model: regresi ridge 41-fitur, 20 field ร— 10 sampel, 200 ulangan.

๐Ÿšจ Self-audit: seberapa bocor studimu? (centang yang BERLAKU)

Belum ada yang dicentang.

๐Ÿ“‹ Lembar jawaban cepat (cheat sheet)

Jenis leakageBau-bau alarmObatnyaStatus proyek kita
Grouped / duplicate (ยง3.2.3)Data kompilasi multi-sumber; pasangan spektrum nyaris identik lintas fold; Rยฒ > 0.90 di data compiledSplit per grup (GroupKFold); cek near-duplicate duluโš ๏ธ CV.98: ada (47/50 kembaran lintas-fold) tapi kecil (+3.4%); 952: +6.8%
Leaky preprocessing (ยง3.2.4)StandardScaler/PCA/imputasi di-fit sebelum split; "akurasi naik setelah preprocessing" ๐ŸšฉFit di train saja โ†’ transform testโœ… aman (SNV per-baris; PCA/PLS di train)
Test-set reuse (ยง3.2.5)Banyak konfigurasi dicoba, yang terbaik dilaporkan dari test yang samaTuning di validasi internal; test dipakai sekaliโš ๏ธ ringan (4 model 1 test = OK; tuningโ†’lapor = jangan)
Leaky/temporal features (ยง3.2.6/3.2.1)Fitur = proxy target; info masa depan; akurasi "terlalu bagus untuk dipercaya"Tanya "fitur tersedia saat prediksi sungguhan?"โœ… fitur aman; โš ๏ธ tanggal CV.98 tidak ada โ†’ risiko sisa
n kecilDataset < 35; kesimpulan berbalik antar pengulanganLaporkan ยฑinterval; sebut "indikatif"โš ๏ธ budget 10/20 label di zona bahaya
(Bukan leakage tapi sama merusaknya)Split berubah tiap run (tanpa set.seed); which.max untuk hal yang harus diminimalkanFix seed; cek arah seleksiโŒ bug MLSP yang kita temukan & dokumentasikan

๐Ÿง  Checklist detektif (hafalkan 5 pertanyaan ini)

1. Ada kelompok tersembunyi? โ†’ split per grup.
2. Preprocessing fit di mana? โ†’ harus di train.
3. Test set dipakai memilih apa? โ†’ jangan, tuning di validasi internal.
4. Fitur tersedia saat prediksi nyata? โ†’ kalau tidak, buang.
5. n-nya berapa? โ†’ kalau < 35, bawa garam. ๐Ÿง‚

Bonus heuristik: skor terlalu bagus = data point, bukan prestasi. Rยฒ 0.90+ di data compiled + split acak = hampir selalu alarm, bukan kehebatan.

๐Ÿ“š Sumber

Jang, H.J., Ng, W., Chen, S., Setia, R., Minasny, B. (2026). Illusions of Accuracy: Widespread Data Leakage Distorts Machine Learning Results in Biochar Research. GCB Bioenergy. doi:10.1111/gcbb.70173 โ€” 64 studi top-cited, 98% split point-level, inflasi hingga +86%, hanya 1 studi (Zhang 2020) yang split per grup.

Audit data asli: CV.98 (LimeSoDa/Metzger et al. 2024, Agroscope) & ICRAF-952 (OSSL v1.2) โ€” skrip audit leakage_audit.py & demo952.py, 2 Sep 2026.