Lensa ML

Training, Validation, dan Test Set

Langkah 1 dari 6: Kenapa Harus Dibagi?

Kamu tidak bisa menilai ujianmu sendiri

xyderajat = 1
Kompleksitas model (derajat polinomial)1
Derajat
1
Kecocokan train
88%
Parameter
2

Model sederhana mengikuti tren umum tanpa berbelok ke titik-titik tertentu. Kecocokan training-nya sudah tinggi.

Geser derajat polinomial dari 1 sampai 10 dan perhatikan kartu Kecocokan train. Nilainya hanya bergerak dari sekitar 88% ke 90%, karena least-squares fit pada 30 titik yang sama tidak pernah memburuk saat derajatnya ditambah. Parameter tambahan selalu membantu pada data yang sudah dilihat model, jadi skor training tidak bisa dipakai untuk memeringkat model. Kurva aslinya di sini adalah kuadratik 2 + 1.2x − 0.18x², ditambah noise. Lekukan apa pun setelah derajat 2 berarti mencocokkan noise itu, dan hanya data yang tidak ikut dalam pencocokan yang bisa mengungkapkannya.

Langkah 2 dari 6: Train dan Test

Pembagian dasar

Train (24)Test (6)80/20xy
Rasio train/test80/20
Derajat model3
Ukuran train
24
Ukuran test
6
Skor train
91%
Skor test
74%

Pembagian 80/20 adalah pilihan standar. Test set memberi estimasi tanpa bias tentang performa model pada data baru yang belum pernah dilihatnya.

Geser rasio train/test antara 50/50 dan 90/10, lalu ubah derajat modelnya. Dengan 30 titik, pembagian 90/10 hanya menyisakan 3 titik test, dan satu titik yang kebetulan buruk bisa menggeser skor test beberapa persen. Kedua bagian harus berasal dari distribusi yang sama, jadi pembagiannya acak atau tersebar di seluruh rentang x, seperti di sini. Pengecualiannya time series: lakukan training pada masa lalu dan test pada masa depan, karena pembagian acak membuat model bisa melihat nilai yang datang belakangan. Dengan sejuta contoh, pembagian 99/1 pun masih menyisakan 10.000 kasus test.

Langkah 3 dari 6: Validation Set

Menyetel model tanpa curang

Train (20)Val (5)Test (5)65%15%20%xy
Porsi validation15%
Derajat model3
Train
92%
Val
57%
Test
84%

Validation set adalah ujian latihanmu. Kamu memakainya untuk menyetel hyperparameter (seperti kompleksitas model) tanpa menyentuh test set. Porsi validation 15% sudah umum. Test set tetap dikunci sampai evaluasi akhir.

Naikkan porsi validation dari 10% ke 30% sementara porsi test tetap 20%, dan lihat porsi training menyusut dari 70% ke 50%. Data training menentukan weight. Data validation memilih pengaturan yang tidak bisa dipelajari lewat training: derajat di sini, atau learning rate, jumlah layer, dan kekuatan regularization pada neural network. Setiap pilihan yang dibuat dengan melihat skor validation sedikit mencocokkan model ke validation set, sehingga skor validation terbaik akhirnya agak terlalu optimistis. Bias itulah alasan test set tetap dipisahkan.

Langkah 4 dari 6: Underfitting dan Overfitting

Kurva training menunjukkan masalahnya

UnderfitTitik PasOverfitKompleksitas →LossTrainValselisih
Kompleksitas model3
Train loss
0.608
Val loss
0.903
Selisih
0.295

Underfitting: Train loss dan val loss sama-sama tinggi. Model terlalu sederhana untuk menangkap polanya. Naikkan kompleksitasnya.

Geser kompleksitas model dari 1 sampai 10 dan ikuti kedua kurvanya. Validation loss paling rendah di kompleksitas 5 (0,608) dan naik setelah itu, sementara training loss terus turun sampai 0,067 di kompleksitas 10. Aturan diagnosisnya sederhana: training loss tinggi berarti underfitting, dan training loss rendah dengan selisih yang makin lebar berarti overfitting. Neural network menunjukkan bentuk yang sama sepanjang waktu training, bukan sepanjang ukuran model. Early stopping memanfaatkannya dengan menyimpan weight dari epoch yang validation loss-nya paling rendah, bukan dari epoch terakhir.

Langkah 5 dari 6: Cross-Validation

Semua data ikut dipakai untuk validation

176.3%269.3%380.1%472.2%572.6%TrainValidationrerata 74.1%
Jumlah fold (k)k = 5
Fold
5
Skor rata-rata
74.1%
Simpangan baku
3.7%

K-fold cross-validation berputar melewati 5 fold sehingga setiap titik data divalidasi tepat satu kali. 5-fold adalah pilihan paling umum. Simpangan baku 3,7% antar-fold menunjukkan seberapa jauh skor bergantung pada cara data dibagi.

Geser jumlah fold k dari 2 sampai 10. Setiap baris melatih model baru pada k − 1 fold dan menilainya pada satu fold kuning, jadi k = 10 melatih sepuluh model. Cross-validation menggantikan satu pembagian validation ketika datanya sedikit, tetapi tidak menggantikan test set. Setelah pengaturan dipilih dengan cara ini, langkah yang biasa dilakukan adalah melatih ulang satu model pada semua data selain test dan menilainya sekali pada test set. Nested cross-validation menambahkan putaran luar ketika data terlalu sedikit untuk test set yang tetap.

Langkah 6 dari 6: Aturan Emas

Jangan sentuh test set sampai akhir

TrainBelajarValidasiMenyetelUlangiIterasiTestEvaluasi akhiriterasiDilaporkan75.0%Dunia nyata75.0%
Berapa kali test set "diintip"0
Dilaporkan
75.0%
Dunia nyata
75.0%
Inflasi
0%

Aturan emas: jangan sentuh test set sampai evaluasi akhir. Latih model dengan data training, setel dengan data validation, lalu evaluasi dengan data test satu kali.

Geser penghitung intipan dari 0 sampai 20 dan bandingkan batang Dilaporkan dan Dunia nyata. Mengintip berarti membuat keputusan apa pun setelah melihat skor test: mengubah feature, threshold, atau model mana yang dipertahankan. Setiap keputusan itu mencocokkan pilihanmu dengan contoh-contoh test tersebut. Leakage juga punya bentuk yang lebih samar. Melakukan scaling pada feature dengan statistik dari seluruh dataset sebelum data dibagi, atau membiarkan gambar yang nyaris sama masuk ke kedua bagian, sama-sama menggelembungkan skor test. Benchmark ikut terkena ketika banyak paper melakukan tuning pada satu test set selama bertahun-tahun.

Apa itu training set, validation set, dan test set?

Training set, validation set, dan test set adalah tiga bagian dataset yang tidak saling tumpang tindih, masing-masing dengan satu tugas. Training set mencocokkan parameter model, validation set memilih pengaturan seperti ukuran model atau learning rate, dan test set memberi satu estimasi akhir tentang performa pada data yang tidak pernah memengaruhi model. Pemisahan inilah yang membuat skor yang dilaporkan punya arti.

Semua proyek supervised learning memakai pembagian ini, dari regresi di scikit-learn sampai neural network besar. Kompetisi Kaggle menyembunyikan private test set dengan alasan yang sama, dan benchmark publik seperti ImageNet memisahkan label test-nya. Kalau pembagiannya buruk, entah karena leakage, duplikat, atau tuning berulang pada test set, model bisa terlihat sangat bagus di lab tetapi gagal di produksi.

Ide utama

  • Skor training selalu membaik seiring kompleksitas, jadi tidak bisa dipakai untuk memilih model.
  • Training set mencocokkan parameter, validation set memilih hyperparameter, dan test set melaporkan skor akhir.
  • Ketiga bagian harus berasal dari distribusi yang sama, kecuali pada time series, ketika test set berasal dari masa depan.
  • Validation loss berbentuk U menandai peralihan dari underfitting ke overfitting.
  • Cross-validation memakai ulang data untuk validation ketika sampelnya sedikit.
  • Keputusan apa pun yang didasarkan pada hasil test mengubah test set menjadi validation set kedua.

Pertanyaan umum

Berapa rasio pembagian train/validation/test yang baik?

70/15/15 dan 80/10/10 adalah pilihan umum untuk dataset berisi beberapa ribu sampai beberapa ratus ribu contoh. Yang menentukan adalah ukuran absolut test set: dengan 1.000 contoh test dan akurasi 90%, standard error-nya sekitar √(0.9 × 0.1 / 1000) ≈ 0,95 poin persentase. Dataset yang sangat besar bisa memberi 98% atau lebih untuk training dan tetap punya skor validation dan test yang presisi.

Apa bedanya validation set dan test set?

Keduanya dipisahkan dari training, tetapi validation set dipakai berkali-kali untuk membandingkan model dan pengaturan, sedangkan test set dipakai sekali di akhir. Karena validation set memengaruhi keputusan, skornya cenderung terlalu tinggi. Skor test set baru bebas bias kalau tidak ada pilihan yang dibuat berdasarkan skor itu.

Apa itu stratified split?

Stratified split menjaga porsi tiap kelas tetap sama di setiap bagian. Dengan 5% contoh positif, pembagian acak pada dataset kecil bisa membuat test set nyaris tanpa contoh positif, sedangkan stratifikasi menjamin sekitar 5% di tiap bagian. Library seperti scikit-learn mendukungnya lewat argumen stratify.

Bolehkah melatih model dengan validation set setelah tuning?

Boleh. Setelah hyperparameter ditetapkan, training ulang pada gabungan data training dan validation biasanya menghasilkan model yang sedikit lebih baik karena contohnya lebih banyak. Test set tetap dipisahkan, dan dipakai untuk menilai model akhir ini.

Penjelasan terkait

Referensi

  1. James, Witten, Hastie & Tibshirani, "An Introduction to Statistical Learning", ch. 5
  2. Kaufman, Rosset, Perlich & Stitelman (2012), "Leakage in Data Mining: Formulation, Detection, and Avoidance", ACM TKDD
  3. Recht, Roelofs, Schmidt & Shankar (2019), "Do ImageNet Classifiers Generalize to ImageNet?", ICML
  4. Goodfellow, Bengio & Courville, "Deep Learning", ch. 5

Terakhir diperbarui