๐ก 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%!
๐ 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.
๐ 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.
๐ 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.
๐ 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
๐จ Self-audit: seberapa bocor studimu? (centang yang BERLAKU)
๐ Lembar jawaban cepat (cheat sheet)
| Jenis leakage | Bau-bau alarm | Obatnya | Status proyek kita |
| Grouped / duplicate (ยง3.2.3) | Data kompilasi multi-sumber; pasangan spektrum nyaris identik lintas fold; Rยฒ > 0.90 di data compiled | Split 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 sama | Tuning 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 kecil | Dataset < 35; kesimpulan berbalik antar pengulangan | Laporkan ยฑ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 diminimalkan | Fix 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.