Pertemuan 06: Evaluasi Model & Tuning - Supervised Learning

🎯 Tujuan Pembelajaran

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
📊 Materi Presentasi
💡 Catatan: Slide presentasi di atas akan otomatis terupdate ketika dosen melakukan perubahan pada Google Slides. Pastikan koneksi internet Anda stabil untuk viewing yang optimal.

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.

Python
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.
Python
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.

Python
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
✅ Best Practices:
  • 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

📚

Pandas Documentation

Official docs untuk data manipulation

Visit →
🔧

Lasio Library

Python library untuk LAS file handling

Visit →
💻

Sample Notebooks

Jupyter notebooks dengan contoh lengkap

Download →
📊

Sample LAS Files

Well log data untuk praktek

Download →

Tugas & Latihan

📝 Tugas Mingguan:
  1. Implementasikan 5-Fold Cross-Validation pada model klasifikasi dan regresi Anda
  2. Plot learning curves untuk diagnose overfitting/underfitting
  3. Lakukan Grid Search untuk tune minimal 3 hyperparameters Random Forest
  4. Compare performa model sebelum dan sesudah tuning (buat comparison table)
  5. 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
← Previous: Introduction ML Next: EDA →