Lensa ML

Class Imbalance & Resampling

Langkah 1 dari 6: Apa Itu Class Imbalance?

Saat satu kelas mendominasi

% kelas minoritas10%
rasio9.0:1mayoritasminoritas
Mayoritas
90
Minoritas
10
Rasio
9.0:1

Cukup tidak seimbang: kelas minoritas kurang terwakili, dan training biasa akan condong ke mayoritas.

Geser slider kelas minoritas dari 1% ke 50% dan lihat rasio di grafik donat. Ketidakseimbangan memengaruhi training sekaligus evaluasi. Dengan pembagian 99:1, cross-entropy loss didominasi contoh mayoritas, jadi gradient descent bisa memangkas loss dengan tajam hanya dengan mendorong semua prediksi ke mayoritas. Dataset sungguhan sering lebih timpang daripada batas slider ini: penipuan, klik iklan, dan penyakit langka umumnya berada di bawah 1% positif. Model yang dilatih dengan data yang sudah diseimbangkan juga melebih-lebihkan probabilitas minoritas saat dipakai pada base rate sungguhan.

Langkah 2 dari 6: Paradoks Akurasi

Akurat 99%, berguna 0%

% kelas minoritas5%
Classifier "prediksi semua mayoritas"Pred: mayoritasPred: minoritasAktual mayoritasAktual minoritasTN190FP0FN10TP0Akurasi: 95.0%Tetapi recall untuk minoritas = 0%: semua kasus terlewat!
Akurasi
95.0%
Precision
N/A
Recall
0%
F1 score
N/A

Model yang selalu memprediksi kelas mayoritas mendapat akurasi 95,0%, tetapi recall untuk minoritas nol: penipuan, penyakit, atau kejadian langka tidak pernah tertangkap. Akurasi saja menyesatkan ketika kelas tidak seimbang.

Geser slider minoritas dari 1% ke 20% dan lihat akurasi turun dari 99% ke 80%, sementara recall tetap 0%. Precision dan F1 menampilkan N/A karena model tidak pernah memprediksi kelas minoritas, jadi precision bernilai 0/0. Bandingkan setiap model sungguhan dengan baseline yang tidak melakukan apa-apa ini sebelum memercayai akurasinya. Metrik yang mengoreksi kecocokan karena kebetulan langsung membongkarnya. Cohen's kappa memberi baseline ini skor tepat 0, sedangkan Matthews correlation coefficient (MCC) tidak terdefinisi dan lazimnya dilaporkan sebagai 0.

Langkah 3 dari 6: Random Oversampling

Gandakan kelas minoritas

Rasio oversampling1x
mayoritas (n=50)minoritas asliduplikat
Min asli
10
Setelah oversampling
10
Ukuran dataset
60
Rasio baru
5.0:1

Belum ada oversampling: kelas minoritas masih kurang terwakili.

Geser rasio oversampling dari 1x ke 5x. Sebanyak 10 titik minoritas bertambah sampai 50, menyamai 50 titik mayoritas pada 5x. Oversampling harus dilakukan setelah pembagian train/validasi dan hanya pada bagian training. Kalau duplikat dibuat lebih dulu, salinan satu titik bisa masuk ke kedua bagian, dan skor validasi menghargai hafalan. Random undersampling adalah opsi kebalikannya: yang dibuang titik mayoritas. Cara ini cepat pada dataset besar, tetapi membuang informasi.

Langkah 4 dari 6: SMOTE

Sampel minoritas sintetis

Titik sintetis0
minoritas aslisintetis (SMOTE)mayoritas
Asli
8
Sintetis
0
Total minoritas
8
Rata-rata jarak NN
—

Belum ada titik sintetis. Geser slider untuk membuat sampel SMOTE di antara pasangan nearest neighbor.

Geser slider titik sintetis dari 0 ke 30. SMOTE (Chawla dkk., 2002) memilih satu titik minoritas, memilih satu dari k tetangga minoritas terdekatnya (default k = 5), lalu menempatkan titik baru pada posisi acak di antara keduanya. Demo ini selalu memakai satu tetangga terdekat. SMOTE berasumsi ruang di antara dua titik minoritas juga wilayah minoritas, dan asumsi ini gagal ketika ada klaster mayoritas di antara keduanya. Varian seperti Borderline-SMOTE dan ADASYN justru membuat titik di dekat batas kelas.

Langkah 5 dari 6: Class Weight

Kesalahan mayoritas dihukum lebih ringan

Weight kelas minoritas1x
boundary← pred. mayoritaspred. minoritas →
Weight
1x
Boundary
200
Precision
67%
Recall
67%

Weight sama. Kedua kelas tumpang tindih, jadi boundary melewatkan 4 dari 12 titik minoritas. Naikkan weight agar kesalahan itu lebih mahal.

Geser weight kelas minoritas dari 1x ke 10x. Weight w mengalikan loss tiap contoh minoritas, jadi satu titik minoritas yang salah klasifikasi sama mahalnya dengan w titik mayoritas. Kedua kelas di sini tumpang tindih, jadi pada 1x boundary melewatkan 4 dari 12 titik minoritas, dengan recall 67%. Pada 6x recall mencapai 100%, sementara precision turun dari 67% ke 38%. Default yang umum adalah inverse frequency, n_samples / (n_classes × n_c). Untuk 45 titik mayoritas dan 12 titik minoritas ini, hasilnya sekitar 2,4 untuk kelas minoritas dan 0,63 untuk mayoritas. Weighting tidak butuh data baru dan tersedia di sebagian besar library lewat pengaturan class_weight, termasuk untuk logistic regression, SVM, tree ensemble, dan loss neural network.

Langkah 6 dari 6: Metrik yang Lebih Baik

Lebih dari sekadar akurasi

Threshold klasifikasi0.50
RecallPrecision0.250.250.500.500.750.751.001.00Kurva precision-recall
Threshold
0.50
Precision
70%
Recall
51%
F1 score
59%

Threshold mendekati optimal: F1 terbaik sebesar 59% menyeimbangkan precision dan recall.

Geser threshold klasifikasi dari 0 ke 1 dan ikuti titik di sepanjang kurva precision-recall. Pada threshold 0 semua contoh ditandai, jadi precision turun ke positive rate, yaitu 15% pada kurva ini, sama dengan skor classifier acak. F1 memuncak di sekitar 59% dekat threshold 0,43. Menggeser threshold sering menjadi solusi termurah untuk ketidakseimbangan: lakukan training pada data asli, lalu pilih threshold pada data validasi untuk mencapai precision atau recall yang dibutuhkan aplikasi.

Apa itu class imbalance dalam machine learning?

Class imbalance terjadi ketika satu kelas dalam dataset klasifikasi punya contoh jauh lebih banyak daripada kelas lain, misalnya 990 transaksi normal untuk setiap 10 transaksi penipuan. Model yang dilatih dengan data seperti ini bisa mencapai akurasi tinggi hanya dengan selalu memprediksi kelas yang umum, sementara kelas langka yang seharusnya ia temukan terlewat.

Ketidakseimbangan adalah kondisi normal di banyak masalah terapan: deteksi penipuan, skrining penyakit langka, deteksi cacat manufaktur, prediksi churn, dan prediksi click-through semuanya punya porsi kelas minoritas beberapa persen atau kurang. Cara standar mengatasinya terbagi tiga: resample data training (oversampling, SMOTE, undersampling), ubah loss (class weight, focal loss), dan evaluasi dengan metrik yang mengabaikan ukuran kelas mayoritas, seperti precision, recall, dan kurva precision-recall.

Ide utama

  • Class imbalance berarti jumlah satu kelas jauh melebihi kelas lain di data training.
  • Akurasi menghargai model yang selalu memprediksi mayoritas, jadi kegagalan pada kelas minoritas tersembunyi.
  • Oversampling dan SMOTE menambah contoh minoritas; undersampling membuang contoh mayoritas.
  • Resampling hanya boleh diterapkan pada bagian training, setelah data dibagi.
  • Class weight menaikkan biaya kesalahan minoritas tanpa mengubah data.
  • Precision, recall, F1, dan kurva precision-recall mengukur hal yang penting pada data tidak seimbang.

Ulasan singkat tentang topik ini

Pertanyaan umum

Sebaiknya pakai SMOTE atau class weight?

Mulai dengan class weight atau threshold tuning, karena keduanya sederhana, tidak butuh data sintetis, dan bisa dipakai di sebagian besar model. SMOTE bisa membantu weak learner pada dataset tabular kecil, tetapi studi dengan model kuat seperti gradient-boosted tree sering hanya menemukan sedikit keuntungan dibanding weighting. Bandingkan opsinya dengan cross-validation memakai metrik yang sesuai dengan tugasnya.

Bagaimana deep learning menangani class imbalance?

Alat yang umum adalah weighted cross-entropy, oversampling kelas langka di tiap batch, dan focal loss. Focal loss, yang diperkenalkan untuk object detection, mengalikan loss tiap contoh dengan (1 − p_t)^γ, sehingga contoh mudah yang diklasifikasikan dengan yakin hanya sedikit berkontribusi dan training berfokus pada contoh sulit. Data augmentation untuk kelas minoritas adalah opsi lain pada gambar dan audio.

Rasio berapa yang sebaiknya dipakai saat menyeimbangkan kelas?

Keseimbangan penuh 50/50 tidak wajib dan sering berlebihan. Rasio seperti 1:2 sampai 1:5 adalah titik awal yang umum, dan yang terbaik dipilih seperti hyperparameter lain, pada data validasi. Test set harus mempertahankan rasio kelas sebenarnya supaya skornya sesuai dengan kondisi produksi.

Bagaimana memperbaiki probabilitas prediksi setelah resampling?

Model yang dilatih dengan data yang sudah diseimbangkan mempelajari prior data training, bukan prior sebenarnya. Kalikan odds prediksinya p/(1 − p) dengan odds kelas sebenarnya dibagi odds kelas training, lalu ubah kembali menjadi probabilitas. Kalibrasi ulang pada data validasi dengan rasio kelas sebenarnya, misalnya dengan Platt scaling atau isotonic regression, juga bisa.

Penjelasan terkait

Referensi

  1. Chawla, Bowyer, Hall & Kegelmeyer (2002), "SMOTE: Synthetic Minority Over-sampling Technique", JAIR
  2. He & Garcia (2009), "Learning from Imbalanced Data", IEEE TKDE
  3. Lin, Goyal, Girshick, He & Dollár (2017), "Focal Loss for Dense Object Detection"
  4. Saito & Rehmsmeier (2015), "The Precision-Recall Plot Is More Informative than the ROC Plot When Evaluating Binary Classifiers on Imbalanced Datasets", PLoS ONE

Terakhir diperbarui