Pertemuan 06: Evaluasi Model & Tuning - Supervised Learning
Setelah mengikuti pertemuan ini, mahasiswa diharapkan mampu:
- Memahami berbagai metrics evaluasi untuk klasifikasi dan regresi
- Mengimplementasikan cross-validation untuk validasi model yang robust
- Melakukan hyperparameter tuning dengan GridSearchCV dan RandomizedSearchCV
- Mendeteksi dan mengatasi overfitting dan underfitting
- Mengoptimalkan performa model pada data geofisika
Ringkasan Materi
1. Train-Test Split Strategy
Pembagian data yang proper crucial untuk evaluasi. Typical split: 70-80% training, 20-30% testing. Gunakan stratified split untuk imbalanced classification. Untuk time series data, gunakan time-based split.
2. Cross-Validation
K-Fold Cross-Validation membagi data menjadi K folds, train K times dengan different test fold. Memberikan estimasi performa yang lebih robust daripada single train-test split.
from sklearn.model_selection import cross_val_score, StratifiedKFold
# K-Fold Cross Validation
model = RandomForestClassifier(n_estimators=100, random_state=42)
# For classification - stratified
cv_scores = cross_val_score(model, X, y, cv=5, scoring='f1_weighted')
print(f"CV Scores: {cv_scores}")
print(f"Mean CV Score: {cv_scores.mean():.3f} (+/- {cv_scores.std():.3f})")
# Stratified K-Fold (better for imbalanced data)
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
cv_scores_strat = cross_val_score(model, X, y, cv=skf, scoring='f1_weighted')
print(f"Stratified CV Score: {cv_scores_strat.mean():.3f}")
3. Overfitting vs Underfitting
- Overfitting: Model terlalu kompleks, memorize training data. High train score, low test score.
- Underfitting: Model terlalu simple, tidak capture pattern. Low train dan test score.
- Solution: Regularization, more data, simpler/more complex model, feature selection.
from sklearn.model_selection import learning_curve
import numpy as np
import matplotlib.pyplot as plt
# Learning curves untuk diagnose overfitting
train_sizes, train_scores, val_scores = learning_curve(
model, X, y, cv=5, n_jobs=-1,
train_sizes=np.linspace(0.1, 1.0, 10),
scoring='f1_weighted'
)
# Plot
plt.figure(figsize=(10, 6))
plt.plot(train_sizes, train_scores.mean(axis=1), label='Training score')
plt.plot(train_sizes, val_scores.mean(axis=1), label='Validation score')
plt.xlabel('Training Set Size')
plt.ylabel('Score')
plt.title('Learning Curves')
plt.legend()
plt.grid()
plt.show()
4. Hyperparameter Tuning
Optimasi parameter model untuk best performance. GridSearchCV untuk exhaustive search, RandomizedSearchCV untuk faster random sampling.
from sklearn.model_selection import GridSearchCV
# Define parameter grid
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [10, 20, 30, None],
'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 2, 4]
}
# Grid Search
grid_search = GridSearchCV(
RandomForestClassifier(random_state=42),
param_grid,
cv=5,
scoring='f1_weighted',
n_jobs=-1,
verbose=1
)
grid_search.fit(X_train, y_train)
print("Best parameters:", grid_search.best_params_)
print("Best CV score:", grid_search.best_score_)
# Evaluate on test set
best_model = grid_search.best_estimator_
test_score = best_model.score(X_test, y_test)
print(f"Test score: {test_score:.3f}")
5. Model Selection Guidelines
- Small dataset → Simpler models (Linear, Decision Tree)
- Large dataset → Complex models (Random Forest, Neural Networks)
- Interpretability needed → Linear models, Decision Tree
- High accuracy needed → Ensemble methods, Deep Learning
- Always use cross-validation untuk reliable estimate
- Check learning curves untuk diagnose over/underfitting
- Start dengan default parameters, tune jika perlu
- Consider computational cost vs performance gain
- Validate final model pada completely unseen data
Resources Tambahan
Tugas & Latihan
- Implementasikan 5-Fold Cross-Validation pada model klasifikasi dan regresi Anda
- Plot learning curves untuk diagnose overfitting/underfitting
- Lakukan Grid Search untuk tune minimal 3 hyperparameters Random Forest
- Compare performa model sebelum dan sesudah tuning (buat comparison table)
- Dokumentasikan best hyperparameters dan validation scores
Persiapan Pertemuan Selanjutnya
Pada pertemuan berikutnya, kita akan membahas Exploratory Data Analysis (EDA). Pastikan Anda sudah:
- Familiar dengan plotting library: Matplotlib dan Seaborn
- Memahami statistik deskriptif dasar (mean, median, std, correlation)
- Install library:
seaborn,plotly(untuk visualisasi interaktif) - Data yang sudah di-clean dari tugas minggu ini akan digunakan untuk EDA