Cross-Validation dalam Machine Learning
Dalam proses membangun model machine learning, salah satu tantangan utama adalah memastikan model dapat menggeneralisasi dengan baik terhadap data baru. Model yang terlihat bagus pada data training belum tentu baik pada data dunia nyata.
Untuk mengevaluasi kualitas model secara akurat, kita menggunakan teknik cross-validation.
Apa Itu Cross-Validation?
Cross-validation adalah teknik evaluasi model yang membagi dataset menjadi beberapa bagian (fold) untuk digunakan sebagai data training dan testing secara bergantian.
Tujuan utamanya:
- Mengukur performa model secara lebih stabil.
- Mengurangi risiko overfitting.
- Memastikan model bekerja baik untuk data yang belum pernah dilihat.
Daripada hanya sekali membagi data menjadi train-test (misalnya 80:20), cross-validation melakukan evaluasi berulang kali sehingga hasilnya lebih reliable.
Mengapa Cross-Validation Penting?
1. Evaluasi yang Lebih Akurat
Satu kali train-test split bisa bias. Cross-validation mengurangi bias dengan menguji model pada berbagai subset data.
2. Menghemat Data
Dataset kecil sering kesulitan menyediakan data test yang cukup. Dengan cross-validation, setiap data berkesempatan menjadi data test.
3. Lebih Stabil dan Konsisten
Hasil evaluasi rata-rata dari beberapa fold biasanya lebih mewakili performa sebenarnya.
4. Mendukung Hyperparameter Tuning
Metode seperti Grid Search dan Random Search hampir selalu menggunakan cross-validation.
Cara Kerja Cross-Validation
Misalnya Anda menggunakan k-fold cross-validation dengan k = 5.
- Dataset dibagi menjadi 5 bagian (fold).
- Pada iterasi pertama:
- Fold 1 → test set
- Fold 2–5 → training set
- Iterasi kedua:
- Fold 2 → test set
- Fold lainnya → training
- Lakukan hingga 5 iterasi.
- Ambil rata-rata akurasi dari 5 percobaan.
Dengan ini, setiap data diuji sekali.
Jenis-Jenis Cross-Validation
Ada beberapa varian yang digunakan sesuai kebutuhan:
K-Fold Cross-Validation (paling populer)
Dataset dibagi menjadi K bagian dengan ukuran sama, lalu model dilatih & diuji sebanyak K kali.
Contoh K yang umum: 5 atau 10.
Kelebihan:
- Akurat
- Stabil
- Tidak boros data
Kekurangan:
- Waktu training meningkat K kali lebih lama
Stratified K-Fold Cross-Validation
Mirip K-Fold, tapi menjaga komposisi class tetap proporsional di setiap fold.
Leave-One-Out Cross-Validation (LOOCV)
Setiap data tunggal menjadi test set.
Jika dataset punya 200 row → model dilatih 200 kali.
Kelebihan:
- Sangat akurat untuk dataset kecil
Kekurangan:
Sangat mahal secara komputasiSangat penting untuk dataset imbalanced (contoh: fraud detection, medical diagnosis).
Hold-Out Cross-Validation
Versi paling sederhana: membagi dataset menjadi:
- Training (misalnya 80%)
- Testing (20%)
Tidak termasuk teknik “berulang”, tapi tetap termasuk metode split.
Repeated K-Fold Cross-Validation
K-Fold biasa → diulang beberapa kali dengan pembagian berbeda.
Contoh:
- K=5
- Repeated=3
→ Total train-test = 15 kali
Lebih stabil daripada K-Fold biasa.
Time Series Split (untuk data berurutan)
Tidak boleh shuffle data.
Menggunakan expanding window seperti:
- Train: 1 → Test: 2
- Train: 1-2 → Test: 3
- Train: 1-3 → Test: 4
- dan seterusnya
Sangat penting untuk forecasting dan data time series lainnya.
Contoh Implementasi Cross-Validation (Scikit-learn)
K-Fold
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
kfold = KFold(n_splits=5)
scores = cross_val_score(model, X, y, cv=kfold)
print(scores.mean())
Stratified K-Fold
from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=5, shuffle=True)
scores = cross_val_score(model, X, y, cv=skf)
Time Series Split
from sklearn.model_selection import TimeSeriesSplit
tscv = TimeSeriesSplit(n_splits=5)
scores = cross_val_score(model, X, y, cv=tscv)
Best Practices Cross-Validation
- Gunakan Stratified K-Fold untuk klasifikasi supaya distribusi kelas tetap seimbang.
- Gunakan TimeSeriesSplit untuk data time series. Jangan pernah shuffle data.
- Gunakan K = 5 atau 10 sebagai nilai default. K=5 memberi hasil stabil dan cepat.
- Gunakan Cross-validation untuk hyperparameter tuning, GridSearchCV & RandomizedSearchCV memakai ini.
- Jangan gunakan cross-validation pada data yang sudah displit secara hierarkis. Contoh penggunaan yang salah: data dari user yang sama muncul di train & test.
Kesimpulan
Cross-validation adalah teknik evaluasi yang sangat penting dalam machine learning karena:
- memberikan estimasi performa yang lebih stabil,
- mengurangi overfitting,
- membantu pemilihan model & hyperparameter,
- dapat beradaptasi untuk berbagai jenis dataset, termasuk time series.
Dengan memahami berbagai jenis cross-validation dan kapan menggunakannya, Anda dapat membangun model yang lebih andal dan robust terhadap data nyata.