Imbalanced

balance

Pada post kali ini saya ingin menjelaskan sedikit teknik-teknik yang biasa dipakai untuk menghadapi dataset yg imbalanced untuk kasus supervised learning, dimana jumlah data dari suatu kelas jauh lebih sedikit dibanding kelas lainnya. Hal ini sering kali muncul di dunia nyata, seperti fraud detection (malah ngeri kalau misalkan jumlah kasus fraud-nya ada banyak, bisa gulung tikar bisnisnya) atau deteksi penyakit langka (cuma 1 dari 1 juta orang yang menderita). Tidak mungkin kita berdoa agar lebih banyak orang menderita sakit biar data training kita bertambah, kan?

1. Biarin aja

Ya, dibiarin aja. Abaikan dan lakukan training seperti biasa. Karena siapa tahu memang kedua kelas tersebut berbeda jauh dan sudah linearly separable. Asal jangan lupa untuk menggunakan metrics yang tepat (bukan akurasi), seperti precision/recall.

2. Downsampling kelas mayoritas

Biar fair ketika dilakukan perhitungan error, jumlah kelas mayoritasnya dikurangi.

3. Upsampling kelas minoritas

Atau sebaliknya, jumlah kelas minoritasnyalah yang ditambah. Upsampling bisa dilakukan dengan cara mengambil data yang sama berulang-ulang (sampling with replacement) atau dengan generate data baru dengan menggunakan algoritma semacam SMOTE.

4. Pakai weighted loss

Atau kita bisa langsung modifikasi loss function-nya agar kelas minoritas mendapat bobot yang lebih tinggi kalau diprediksi salah oleh modelnya. Seberapa besar bobotnya? Paling gampang diset menjadi inversely proportional dengan jumlah data sekarang yang ada. Jadi kalau misalkan perbandingannya 1:2, maka bisa diset minimal bobot kelas positif 2 kali kelas negatif.

Kalau misalkan menggunakan logistic regression di sklearn, ini bisa di set di parameter class_weight di constructor-nya. Atau kalau menggunakan tensorflow, bisa pakai fungsi loss khusus tf.nn.weighted_cross_entropy_with_logits.

Weighted loss ini sendiri bisa dilihat sebagai cara menggunakan sampling secara implisit.

Penutup

Kira2 itu sedikit cara2 untuk meng-handle imbalanced data pada problem classification yang straightforward. Pendekatan yang lebih ekstrem adalah dengan menformulasikan ulang permasalahannya menjadi ranking problem atau novelty/outlier detection. Tapi ini mungkin bahasan di lain hari.

Semoga post singkat ini berguna. Salam.

Iklan