Lensa ML

Overfitting dan Underfitting

Langkah 1 dari 6: Underfitting

Saat model terlalu sederhana untuk menangkap pola

xyderajat = 1 (linear)
TrainTest
Train error
10.91
Test error
16.47
Kedua error tinggi.

Model linear tidak bisa menangkap pola kuadratik dalam data. Training error dan test error sama-sama tetap tinggi: inilah underfitting. Model ini punya bias tinggi dan variance rendah.

Perhatikan bagaimana garis lurus meleset dari kurva di kedua ujungnya. Datanya berasal dari y = 0.5x² − 2x + 5 ditambah noise, dengan 12 titik training dan 6 titik test. Error di sini adalah mean squared error, yaitu rata-rata (y − ŷ)² di semua titik. Untuk garis linear ini, train MSE sekitar 10,9 dan test MSE sekitar 16,5. Kalau training error saja setinggi ini, menambah data tidak akan membantu. Model butuh kapasitas lebih: feature tambahan, derajat lebih tinggi, atau network yang lebih besar.

Langkah 2 dari 6: Overfitting

Saat model menangkap noise, bukan sinyal

xyderajat = 11 (tinggi)
TrainTest
Train error
0.00
Test error
20.37

Polinomial derajat 11 melewati seluruh 12 titik training (train error nyaris nol), tetapi melengkung di antara titik-titik itu. Pada titik test, error-nya jauh di atas polinomial kuadratik sederhana. Inilah overfitting: model mengikuti noise, bukan polanya.

Bandingkan jalur kurva di antara titik training dengan posisi berlian test. Polinomial derajat 11 punya 12 koefisien, sama dengan jumlah titik training, sehingga kurvanya bisa melewati setiap titik dengan tepat. Itulah interpolasi, dan train error turun sampai nol. Risiko yang sama ada di deep learning: Zhang et al. (2016) menunjukkan bahwa network gambar standar bisa mencapai training error nol, bahkan pada label yang diacak. Model dengan parameter yang cukup bisa menghafal, jadi training error yang rendah saja tidak membuktikan apa-apa.

Langkah 3 dari 6: Sweet Spot

Kompleksitas yang pas untuk menggeneralisasi

xyderajat = 2sweet spot
TrainTest
Train error
0.37
Test error
0.32
Kompleksitas modelderajat = 2
Sederhana (1)Rumit (11)

Geser slider untuk menemukan sweet spot. Pada derajat 2-3, kurvanya cocok dengan fungsi kuadratik sebenarnya tanpa mengejar noise. Test error paling rendah di derajat 2, tempat model paling baik menggeneralisasi.

Geser slider kompleksitas model dari derajat 1 sampai 11 dan perhatikan kedua kartu error. Derajat terbaik di sini adalah 2, yang cocok dengan fungsi sebenarnya, dengan test MSE sekitar 0,32. Pada proyek sungguhan, fungsi sebenarnya tidak diketahui, jadi derajat atau pengaturan serupa dipilih berdasarkan validation error. Jauhkan test set dari pencarian itu. Kalau kamu menyetel model berdasarkan test set, error-nya tidak lagi menjadi perkiraan yang jujur. Dengan hanya 6 titik test seperti di sini, perkiraannya juga penuh noise.

Langkah 4 dari 6: Bias vs Variance

Dua sumber error, satu tradeoff

Pusat sasaran = nilai sebenarnyaBias Tinggi, Variance Rendah

Bias berarti selalu salah ke arah yang sama (menjauh dari pusat). Variance berarti tidak konsisten (tersebar). Tujuannya bias rendah dan variance rendah: prediksi yang akurat sekaligus konsisten.

Klik setiap tombol dan bandingkan tempat tembakan mendarat. Untuk squared error, expected test error terbagi menjadi tiga bagian: bias², variance, dan noise yang tidak bisa dihilangkan. Bias adalah seberapa jauh rata-rata prediksi, dari banyak kemungkinan training set, dari nilai sebenarnya. Variance adalah seberapa banyak prediksi berubah dari satu training set ke training set lain. Komponen noise adalah batas bawah yang tidak bisa dikalahkan model apa pun. Model sederhana biasanya punya bias tinggi, dan model fleksibel punya variance tinggi. Merata-ratakan banyak model dengan variance tinggi, seperti pada random forest, menurunkan variance.

Langkah 5 dari 6: Kurva Kompleksitas Model

Test error berbentuk U

underfitsweet spotoverfitKompleksitas Model (derajat polinomial)Error (skala log)Overfit
Train errorTest error
Kompleksitasderajat = 5
Train error
0.11
Test error
0.59

Kurva test error berbentuk U yang klasik. Train error terus turun saat derajatnya naik, sementara test error mencapai titik terendah di derajat 2, lalu naik secara tidak merata. Celah di antara kedua kurva adalah generalization gap.

Geser slider kompleksitas dan ikuti kedua kurva pada skala log. Gambaran di buku teks berupa kurva U yang mulus, tetapi dataset kecil menghasilkan kurva yang tidak rata seperti di sini: test error memuncak di derajat 10 dan turun sebagian di derajat 11. Belkin et al. (2019) menjelaskan efek terkait bernama double descent. Setelah melewati titik ketika model bisa mengikuti data training dengan tepat, test error bisa turun lagi seiring bertambahnya kapasitas. Neural network yang sangat besar sering bekerja di wilayah itu.

Langkah 6 dari 6: Cara Mengatasinya

Strategi praktis untuk menemukan keseimbangan

Apakah test error tinggi?YaApakah training error juga tinggi?YaTidakUnderfittingOverfitting
Solusi:
  • Pakai model yang lebih kompleks
  • Tambah feature
  • Kurangi regularization
  • Train lebih lama / tambah epoch
Solusi:
  • Tambah data training
  • Tambah regularization (L1/L2)
  • Pakai dropout / early stopping
  • Sederhanakan model
Prinsip Utama
Pakai validation set untuk mendeteksi masalah lebih awal, lalu terapkan strategi yang tepat dari daftar di atas.

Diagnosis dulu, baru bertindak. Kalau kedua error tinggi, model terlalu sederhana. Kalau hanya test error yang tinggi, model terlalu kompleks. Validation set menangkap kedua masalah itu selama training.

Ikuti pohon keputusan dari pertanyaan paling atas. Dua alat diagnosisnya adalah training error dan validation error. Alat tambahan yang berguna adalah learning curve, yang memplot kedua error terhadap ukuran training set. Kalau kedua kurva sudah bertemu di error yang tinggi, model mengalami underfitting dan menambah data tidak akan membantu. Kalau masih ada celah lebar di antara keduanya, menambah data biasanya membantu. Early stopping, dropout, dan regularization L2 murah untuk dicoba. Mengumpulkan lebih banyak data sering kali menjadi perbaikan paling efektif.

Apa itu overfitting dalam machine learning?

Overfitting terjadi ketika model mengikuti data training terlalu persis, termasuk noise-nya, sehingga kinerjanya justru lebih buruk pada data baru. Kebalikannya, underfitting, terjadi ketika model terlalu sederhana untuk menangkap pola yang sebenarnya, sehingga hasilnya buruk pada data training maupun data baru. Tujuan training adalah model yang bisa menggeneralisasi: error rendah pada contoh yang belum pernah dilihatnya.

Semua model supervised menghadapi tradeoff ini, dari regresi linear sampai neural network besar. Praktisi mendeteksinya dengan menyisihkan validation set, lalu membandingkan training error dan validation error. Cara mengatasinya antara lain menambah data, regularization seperti weight decay dan dropout, early stopping, data augmentation, dan memilih ukuran model yang pas.

Ide utama

  • Underfitting berarti error tinggi pada data training maupun data test.
  • Overfitting berarti training error rendah, tetapi test error jauh lebih tinggi.
  • Model dengan parameter sebanyak jumlah titik data bisa mengikuti training set dengan tepat.
  • Expected test error terbagi menjadi bias², variance, dan noise yang tidak bisa dihilangkan.
  • Pengaturan model sebaiknya dipilih dengan data validation, bukan dengan test set.
  • Menambah data, regularization, dan early stopping adalah cara standar mengatasi overfitting.

Ulasan singkat tentang topik ini

Pertanyaan umum

Bagaimana cara mengetahui model mengalami overfitting?

Bandingkan kinerja training dan validation. Kalau training error terus turun sementara validation error mendatar atau naik, model mengalami overfitting. Celah besar yang terus melebar di antara kedua kurva adalah tanda paling jelas.

Apakah sedikit overfitting masih bisa diterima?

Ya. Training error hampir selalu lebih rendah daripada validation error, dan celah kecil itu wajar. Yang penting adalah kinerja validation. Model dengan celah lebih besar tetapi validation error lebih rendah tetap model yang lebih baik.

Apakah deep neural network bisa overfit?

Bisa, dan dengan parameter yang cukup ia bisa menghafal training set apa pun. Dalam praktiknya, network besar yang dilatih dengan weight decay, data augmentation, dan early stopping sering menggeneralisasi dengan baik walaupun parameternya jauh lebih banyak daripada jumlah contoh. Teori klasik tidak memprediksi hal ini.

Apakah menambah data selalu mengurangi overfitting?

Data tambahan dari distribusi yang sama menurunkan variance, jadi biasanya memperkecil celah antara training error dan validation error. Cara ini tidak mengatasi underfitting, dan tidak membantu kalau data barunya penuh noise, salah label, atau berasal dari distribusi yang berbeda dari data test.

Penjelasan terkait

Referensi

  1. James, Witten, Hastie & Tibshirani, "An Introduction to Statistical Learning", chapter 2
  2. Goodfellow, Bengio & Courville (2016), "Deep Learning", section 5.2: Capacity, Overfitting and Underfitting
  3. Zhang et al. (2016), "Understanding deep learning requires rethinking generalization"
  4. Belkin et al. (2019), "Reconciling modern machine learning practice and the bias-variance trade-off"

Terakhir diperbarui