Overfitting & Underfitting

Dalam proses membangun model Machine Learning, sering muncul dua masalah umum yang memengaruhi performa model secara signifikan, yaitu overfitting dan underfitting.
Keduanya berkaitan dengan kemampuan model untuk belajar dari data training dan melakukan generalisasi pada data baru.

Memahami perbedaan keduanya dan cara mengatasinya sangat penting agar model tidak hanya “cerdas di latihan”, tetapi juga “tanggap di dunia nyata”.

Apa Itu Overfitting?

Overfitting terjadi ketika model terlalu menyesuaikan diri dengan data training, hingga mempelajari noise (gangguan) dan detail tidak penting.
Akibatnya, performa model sangat baik di data training tetapi buruk di data baru (test set).

Contoh

Model klasifikasi yang “menghafal” setiap titik data di training set akan membuat batas keputusan yang sangat kompleks, sehingga gagal mengenali pola umum.

Ciri-Ciri Overfitting

  • Akurasi training sangat tinggi, tapi akurasi test rendah
  • Kurva loss pada training turun tajam, tetapi validation loss meningkat
  • Model bereaksi terlalu kuat terhadap variasi kecil pada data

Analogi

Bayangkan siswa yang menghafal soal latihan tanpa memahami konsep. Saat diberi soal baru yang sedikit berbeda, dia akan kebingungan.

Apa Itu Underfitting?

Underfitting terjadi ketika model terlalu sederhana untuk menangkap pola dari data.
Model gagal belajar hubungan penting antara fitur dan target, sehingga buruk di training maupun test set.

Contoh

Menggunakan model Linear Regression untuk data yang jelas bersifat non-linear (misalnya data berbentuk kurva).

Ciri-Ciri Underfitting

  • Akurasi rendah di training dan test
  • Error besar di seluruh dataset
  • Model tampak “tidak belajar”

Analogi

Seperti siswa yang tidak berusaha memahami pelajaran, sehingga gagal mengerjakan soal latihan maupun ujian.

Perbandingan Overfitting vs Underfitting

AspekOverfittingUnderfitting
DeskripsiModel terlalu kompleksModel terlalu sederhana
Performa TrainingSangat baikBuruk
Performa TestBurukBuruk
Penyebab UmumTerlalu banyak fitur, model terlalu fleksibel, terlalu lama trainingTerlalu sedikit fitur, model terlalu sederhana, kurang data
Solusi UtamaRegularisasi, lebih banyak data, early stoppingModel lebih kompleks, fitur tambahan, training lebih lama

Penyebab Overfitting

Beberapa penyebab umum overfitting antara lain:

  • Model memiliki terlalu banyak parameter (misalnya neural network besar dengan data kecil)
  • Dataset terlalu kecil atau tidak representatif
  • Tidak ada regularisasi (penalti kompleksitas model)
  • Training dilakukan terlalu lama
  • Noise tinggi pada data

Penyebab Underfitting

Underfitting bisa terjadi karena:

  • Model terlalu sederhana (misalnya hanya linear)
  • Kurangnya fitur relevan (fitur tidak informatif)
  • Waktu training terlalu singkat
  • Learning rate terlalu tinggi sehingga model tidak sempat belajar optimal

Cara Mengatasi Overfitting

Berikut strategi umum untuk mencegah atau mengurangi overfitting:

Gunakan Regularisasi

Menambahkan penalti pada parameter besar agar model tidak terlalu kompleks.
Contoh:

  • L1 Regularization (Lasso)
  • L2 Regularization (Ridge)
from sklearn.linear_model import Ridge
model = Ridge(alpha=0.5)

Early Stopping

Berhenti melatih model ketika performa di validation set mulai menurun meski training loss terus turun.

Dropout (untuk Neural Network)

Menghapus sebagian neuron secara acak selama training untuk mencegah ketergantungan antar neuron.

Data Augmentation

Menambah variasi data dengan rotasi, flipping, scaling, atau noise (khusus untuk data gambar dan suara).

Cross-Validation

Membagi data ke beberapa subset agar model diuji pada banyak skenario dan tidak hanya “cocok” di satu subset saja.

Cara Mengatasi Underfitting

Jika model terlalu sederhana, strategi berikut bisa membantu:

Gunakan Model Lebih Kompleks

Misalnya, dari Linear Regression → Decision Tree atau Neural Network.

Tambahkan Fitur

Ciptakan fitur baru yang lebih informatif (feature engineering).

Perpanjang Waktu Training

Latih model lebih lama agar benar-benar belajar pola data.

Kurangi Regularisasi

Jika regularisasi terlalu kuat, model bisa terlalu terbatas dalam belajar.

Studi Kasus Sederhana

Contoh sederhana dengan Polynomial Regression:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

# Data non-linear
X = np.linspace(-3, 3, 30).reshape(-1, 1)
y = 0.5 * X**3 - X**2 + X + np.random.randn(30, 1)

# Underfitting: degree 1
poly1 = PolynomialFeatures(degree=1)
X1 = poly1.fit_transform(X)
model1 = LinearRegression().fit(X1, y)

# Optimal fit: degree 3
poly3 = PolynomialFeatures(degree=3)
X3 = poly3.fit_transform(X)
model3 = LinearRegression().fit(X3, y)

# Overfitting: degree 10
poly10 = PolynomialFeatures(degree=10)
X10 = poly10.fit_transform(X)
model10 = LinearRegression().fit(X10, y)

plt.scatter(X, y, color="black")
plt.plot(X, model1.predict(X1), label="Underfitting (deg=1)")
plt.plot(X, model3.predict(X3), label="Optimal (deg=3)")
plt.plot(X, model10.predict(X10), label="Overfitting (deg=10)")
plt.legend()
plt.show()

Penutup

Overfitting dan underfitting adalah dua sisi dari keseimbangan dalam Machine Learning.
Model yang baik harus mampu:

  • Belajar cukup dari data training, dan
  • Mengeneralisasi dengan baik ke data baru.

Menemukan titik keseimbangan antara keduanya — melalui pemilihan model, regularisasi, validasi, dan tuning parameter — merupakan kunci untuk membangun model Machine Learning yang akurat, stabil, dan andal di dunia nyata.