Validasi silang bertingkat (nested)

Eval

Validasi silang bertingkat (nested)

まとめ
  • Validasi silang bertingkat memisahkan pencarian hiperparameter dari evaluasi eksternal sehingga bias optimistis dapat dihindari.
  • Bangun loop luar/dalam di scikit-learn dan lihat bagaimana kebocoran informasi dicegah.
  • Ketahui kapan biaya ekstra layak dikeluarkan dan cara menyampaikan hasilnya.

1. Cara kerja #

  1. Loop luar — bagi dataset menggunakan K_outer; setiap fold menjadi set uji yang tidak disentuh.
  2. Loop dalam — jalankan validasi silang K_inner pada data sisanya untuk menala hiperparameter (grid search, random search, optimisasi Bayesian, dll.).
  3. Evaluasi — latih ulang dengan hiperparameter terbaik dan nilai pada fold luar yang ditahan tadi.

Ulangi prosedur ini sebanyak K_outer kali dan gabungkan skor luar (rata-rata ± standar deviasi atau interval kepercayaan).


2. Implementasi di Python #

from sklearn.model_selection import GridSearchCV, cross_val_score, KFold
from sklearn.ensemble import RandomForestClassifier

param_grid = {
    "n_estimators": [100, 200],
    "max_depth": [None, 10, 20],
}
inner_cv = KFold(n_splits=3, shuffle=True, random_state=0)
outer_cv = KFold(n_splits=5, shuffle=True, random_state=1)

grid = GridSearchCV(
    RandomForestClassifier(random_state=0),
    param_grid=param_grid,
    cv=inner_cv,
    scoring="roc_auc",
    n_jobs=-1,
)

scores = cross_val_score(grid, X, y, cv=outer_cv, scoring="roc_auc", n_jobs=-1)
print("Nested CV ROC-AUC:", scores.mean(), "+/-", scores.std())

Memberikan objek pencarian (GridSearchCV, RandomizedSearchCV, dll.) ke cross_val_score sudah cukup untuk menjalankan validasi silang bertingkat.


3. Keunggulan #

  • Mencegah kebocoran antara tuning dan evaluasi: menghindari bias optimistis ketika data yang sama dipakai untuk keduanya.
  • Perbandingan model yang adil: tiap kandidat mendapat tuning sendiri, tetapi dievaluasi pada fold luar yang sama.
  • Estimasi ketidakpastian: skor dari loop luar membentuk distribusi yang bisa dipakai menghitung variansi dan interval kepercayaan.

4. Hal yang perlu diperhatikan #

  • Biaya komputasi tinggi — biaya latihan sebanding dengan K_outer × K_inner; model berat bisa jadi tidak praktis.
  • Hati-hati dengan grid besar — ruang pencarian yang luas melipatgandakan waktu; pertimbangkan random search atau optimisasi Bayesian.
  • Dataset sangat kecil — jika data terlalu sedikit, nested CV bisa menyisakan data latih yang minim; sesuaikan nilai K atau gunakan CV berulang dengan hati-hati.

5. Tips praktis #

  • Sangat berguna untuk dataset kecil: kebocoran lebih berbahaya ketika data minim, sehingga nested CV memberi nilai tambah.
  • Fokus pada kandidat terbaik: jalankan nested CV hanya untuk model yang benar-benar menjanjikan agar waktu tetap terkendali.
  • Laporkan konfigurasi: dokumentasikan jumlah fold, strategi pencarian, dan seed acak untuk menunjukkan kontrol risiko.

Ringkasan #

  • Validasi silang bertingkat memberikan estimasi generalisasi yang tidak bias sambil tetap melakukan penalaan hiperparameter.
  • Kombinasikan GridSearchCV (atau metode lain) dengan cross_val_score; siapkan kapasitas komputasinya.
  • Gunakan untuk evaluasi akhir model-model penting agar metrik yang dilaporkan mencerminkan performa dunia nyata.