---
# System prepended metadata

title: oversampling

---

**Tantangan dan Pertimbangan Saat Menghadapi Data yang Tidak Seimbang**

Dalam beberapa kasus, menggunakan data langsung untuk machine learning tanpa menangani ketidakseimbangan dapat menghasilkan hasil yang cukup baik. Namun, pada situasi tertentu, perlu upaya khusus untuk mengelola dampaknya.

Pernyataan bahwa kita harus selalu atau tidak perlu menangani ketidakseimbangan kelas adalah  menyesatkan. Kebutuhan akan penanganan sangat bergantung pada karakteristik data

---

**Kapan Ketidakseimbangan Terjadi dalam Dataset?**

- **Masalah alami**: Deteksi kejadian langka seperti penyakit atau penipuan membuat dataset secara alami tidak seimbang.
- **Biaya tinggi pengumpulan data**: Pengumpulan data untuk kelas tertentu (misalnya pasien COVID-19) mahal dan rumit.
- **Salah memberikan Label kelasa**: Noise dalam proses pelabelan bisa menyebabkan distorsi kelas.

- **Bias sampling**: : Metode pengumpulan data kadang-kadang dapat memperkenalkan bias ke dalam dataset. Misalnya, jika sebuah survei dilakukan di wilayah geografis tertentu atau pada kelompok orang tertentu, dataset yang dihasilkan mungkin tidak mencerminkan seluruh populasi.
- **Pembersihan data**: Proses pembersihan bisa menghapus sampel dari kelas minoritas, memperburuk ketidakseimbangan.

---

**Mengapa Data Tidak Seimbang Menjadi Tantangan?**


 




## 

 **1. Model jadi bias terhadap kelas mayoritas**
- Model lebih sering melihat contoh dari kelas besar.
- Jadi, ia "belajar" bahwa aman jika selalu memilih kelas mayoritas.
- Hasilnya: kelas minoritas diabaikan.



---

**2.Metrik seperti akurasi (accuracy) bisa menipu**
- Akurasi tinggi ≠ model bagus kalau datanya tidak seimbang.
- Kita butuh metrik lain seperti:
  - **Precision, Recall, F1-Score**
  - **ROC-AUC**
  - **Confusion Matrix**

Contoh:
| Metrik | Arti |
|-------|------|
| **Recall** | Seberapa baik model mendeteksi kasus positif (minoritas) |
| **F1-Score** | Rata-rata harmonik antara precision dan recall — cocok untuk data tidak seimbang |

---

**Dampak nyata bisa sangat serius**
Beberapa kasus penting yang melibatkan kelas minoritas:

| Aplikasi | Kelas Minoritas | Risiko jika Diabaikan |
|--------|------------------|------------------------|
| Deteksi kanker | Pasien kanker | Nyawa bisa hilang karena tidak terdeteksi |
| Deteksi penipuan | Transaksi fraud | Kerugian finansial besar |
| Prediksi bencana | Kejadian langka | Tidak ada peringatan dini |
| Moderasi konten | Konten berbahaya | Konten negatif menyebar |

Dalam semua kasus ini, **mendeteksi kelas minoritas adalah prioritas utama**, meski jumlahnya sedikit.

---

**4.Model jadi tidak adil (unfair)**
Jika model dilatih dari data yang tidak seimbang berdasarkan kelompok manusia (misalnya gender, ras), maka:
- Model bisa diskriminatif.
- Misalnya: sistem rekrutmen AI yang lebih jarang memilih wanita karena data pelatihan didominasi pria.

---

#### Bagaimana mengatasinya?

| Teknik | Penjelasan |
|--------|-----------|
| **Resampling** | <ul><li>Oversampling: tambahkan data minoritas (duplikasi atau SMOTE)</li><li>Undersampling: kurangi data mayoritas</li></ul> 
| **Gunakan metrik yang tepat** | Fokus ke recall, F1-score, bukan accuracy 
| **Ensemble methods** | Gunakan teknik seperti BalancedRandomForest atau EasyEnsemble |
| **Data augmentation** | Buat variasi baru dari data minoritas (misalnya gambar, teks) |

---

Ketidakseimbangan data dikategorikan menjadi 3 tingkatan berdasarkan jumlah pengamatan atau proporsi kelas minoritas terhadap kelas mayoritas.

| Tingkat Ketidakseimbangan | Proporsi Kelas Minoritas |
|---------------------------|----------------------------|
| Ringan (Mild)             | 20–40% dari dataset        |
| Sedang (Moderate)         | 1–20% dari dataset         |
| Ekstrem (Extreme)         | <1% dari dataset           |


**Kapan Tidak Perlu Khawatir tentang Ketidakseimbangan?**

- **Ketidakseimbangan kecil**: Rasio seperti 4:5 atau 2:3 umumnya tidak memengaruhi kinerja signifikan.
- **Biaya salah klasifikasi hampir sama**: Misalnya, email spam vs non-spam — jika ada false positive, tidak terlalu berdampak.
- **Dataset sangat besar**: Meski rasio ekstrem (1:100), jumlah absolut kelas minoritas cukup besar untuk model belajar.

---

## **Metode Oversampling**

*Random oversampling* menduplikasi contoh-contoh yang sudah ada dari kelas minoritas dengan pengembalian (*with replacement*). Setiap titik data dalam kelas minoritas memiliki peluang yang sama untuk diduplikasi.

Contoh dataset sintetis dibuat dengan rasio 1:99 antara kelas minoritas dan mayoritas untuk demonstrasi teknik oversampling.





**Random Oversampling** adalah teknik untuk menangani data yang tidak seimbang (*imbalanced data*) dengan cara:

- **Menduplikasi secara acak** data dari **kelas minoritas** (kelas yang jumlahnya sedikit).
- Proses duplikasi dilakukan *dengan pengembalian*, artinya satu data bisa dipilih lebih dari sekali.
- Tujuannya: membuat jumlah data kelas minoritas menjadi lebih banyak, sehingga seimbang dengan kelas mayoritas.

Contoh:
- Kelas minoritas hanya punya 50 data → setelah oversampling, jadi 500 data (dengan duplikasi).
- Model jadi lebih sering melihat contoh kelas minoritas saat belajar.

Random Oversampling memiliki sederhana dan mudah diimplementasikan.Tetapi memiliki kekurangan yaitu menyebabkan **overfitting**, karena model melihat data yang sama berulang kali.
- Tidak menambah informasi baru — hanya menggandakan data yang sudah ada.

Diskripsi Random Oversampling dengan Random
![image](https://hackmd.io/_uploads/BJk4GyCjxx.png)












---

## **SMOTE (Synthetic Minority Over-sampling Technique)**

![image](https://hackmd.io/_uploads/BkPg7yCixl.png)

Menghindari duplikasi dengan interpolasi antar titik kelas minoritas. Membuat sampel sintetis di ruang antar tetangga terdekat.

**Borderline-SMOTE** hanya fokus pada sampel minoritas dekat batas keputusan, sehingga lebih relevan untuk area ambigu.

Namun, bisa mengabaikan informasi dari cluster internal kelas minoritas.


Tahapan dari SMOTE
1. Identifikasi satu titik dari kelas minoritas
![image](https://hackmd.io/_uploads/ByQoH1Aoxx.png)
2. Tentukan k tetangga terdekat
![image](https://hackmd.io/_uploads/HJbI8yRjlg.png)

3. Buat data sintetik diantara titik dan tetangga tersebut

![image](https://hackmd.io/_uploads/Skvi81Cjgl.png)

4. Ulangai 1 sampai 3 untuk seluruh titik titik minoritas 
![image](https://hackmd.io/_uploads/rkYbDk0sxe.png)

---

**ADASYN (Adaptive Synthetic Sampling)**

Fokus pada sampel minoritas yang sulit diklasifikasikan (di daerah rendah kepadatan).

Menggunakan KNN untuk menghitung faktor kesulitan: rasio tetangga mayoritas terhadap total tetangga.

Semakin sulit suatu titik, semakin banyak sampel sintetis yang dihasilkan dari titik tersebut.

# Algoritma ADASYN (Adaptive Synthetic Sampling)

ADASYN adalah teknik *oversampling* yang digunakan untuk menangani ketidakseimbangan kelas dengan cara adaptif menghasilkan sampel sintetis untuk kelas minoritas, terutama pada sampel yang lebih sulit diklasifikasikan.

## Langkah-Langkah Algoritma

1. **Tentukan jumlah total sampel sintetis yang akan dibuat**
   - Hitung selisih antara jumlah sampel kelas mayoritas dan minoritas:
     $$G = m_{\text{maj}} - m_{\text{min}}$$
     di mana:
     - $m_{\text{maj}}$: jumlah sampel kelas mayoritas
     - $m_{\text{min}}$: jumlah sampel kelas minoritas

2. **Pilih nilai K untuk algoritma tetangga terdekat (KNN)**
   - Tetapkan nilai $K$ untuk algoritma K-Nearest Neighbors (KNN).

3. **Gunakan KNN untuk mencari tetangga dari setiap sampel kelas minoritas**
   - Untuk setiap sampel $x_i \in C_{\text{min}}$, cari $K$ tetangga terdekat.

4. **Hitung faktor kesulitan (hardness ratio) $r_i$ untuk setiap $x_i$**
   $$r_i = \frac{\text{jumlah tetangga } K \text{ dari } x_i \text{ yang berasal dari } C_{\text{maj}}}{K}$$
   Interpretasi:
   - $r_i \approx 0$: semua tetangga adalah kelas minoritas → sampel ini mudah diklasifikasikan.
   - $r_i \approx 1$: semua tetangga adalah kelas mayoritas → sampel ini sulit diklasifikasikan.

5. **Normalisasi bobot berdasarkan $r_i$**
   - Hitung bobot normalisasi agar total bobot bernilai 1:
     $$w_i = \frac{r_i}{\sum_{j=1}^{m_{\text{min}}} r_j}$$

6. **Hitung jumlah sampel sintetis untuk setiap $x_i$**
   $$g_i = \text{round}(w_i \times G)$$
   - Semakin tinggi $r_i$, semakin besar $g_i$.
   - Sampel yang lebih sulit diklasifikasikan akan menghasilkan lebih banyak sampel sintetis.

7. **Hasilkan sampel sintetis untuk setiap $x_i$ sebanyak $g_i$ kali**
   Untuk setiap $x_i \in C_{\text{min}}$ dan untuk setiap dari $g_i$ sampel yang harus dibuat:
   a. Pilih satu tetangga acak dari $K$ tetangga terdekat $x_i$, sebut saja $x_{zi}$  
      *(tetangga bisa dari kelas mayoritas atau minoritas)*  
   b. Hitung selisih vektor :
      $$\text{diff} = x_{zi} - x_i$$
   c. Tentukan bilangan acak $\lambda \in [0, 1]$  
   d. Buat sampel sintetis baru:
      $$x_{\text{new}} = x_i + \lambda \cdot \text{diff}$$

8. **Gabungkan semua sampel sintetis ke dataset asli**
   - Tambahkan semua $x_{\text{new}}$ ke dataset pelatihan.
   - Dataset akhir sekarang seimbang atau lebih seimbang.

Tahapannya
1. Menenentukan faktor kesulitan w setiap titik minoritas
![image](https://hackmd.io/_uploads/Sk7ZWeRigl.png)
 .
![image](https://hackmd.io/_uploads/r1xA-xRoxg.png)
 .
![image](https://hackmd.io/_uploads/HJmBMeCixg.png)

2. Untuk n titik data diantara titik tersebut dengan tetangga tetangganya
  .
![image](https://hackmd.io/_uploads/SyscXlRsex.png)


---

**Fitur Kategorikal dan Variasi SMOTE**

- **SMOTE**: Hanya untuk fitur numerik.
- **SMOTE-NC**: Untuk campuran fitur numerik dan kategorikal nominal. Fitur numerik diinterpolasi, fitur kategorikal diambil dari modus tetangga terdekat.
- **SMOTEN**: Hanya untuk fitur kategorikal. Menggunakan Value Distance Metric (VDM) untuk menghitung jarak berdasarkan distribusi kelas.

`RandomOverSampler` juga bisa digunakan untuk data kategorikal.

---

**Perbandingan Kinerja Model**

Evaluasi dilakukan pada dua dataset (sintetis dan dunia nyata) dengan regresi logistik dan random forest.

Temuan utama:
- Oversampling umumnya meningkatkan presisi dibanding tanpa sampling.
- Random forest lebih diuntungkan daripada regresi logistik.
- Kinerja bergantung pada kombinasi model dan data.
- Borderline-SMOTE unggul pada random forest dengan data sintetis.
- Tidak ada satu teknik yang selalu terbaik — perlu eksperimen.

---

**Panduan Penggunaan Teknik Oversampling**

1. Latih model dasar tanpa oversampling sebagai baseline.
2. Coba oversampling acak dulu, tambahkan shrinkage jika perlu.
3. Untuk data kategorikal:
   - Ubah ke numerik (one-hot, label encoding), atau
   - Gunakan SMOTENC/SMOTEN.
4. Uji berbagai teknik: SMOTE, Borderline-SMOTE, ADASYN.
5. Kalibrasi ulang probabilitas dan sesuaikan ambang batas setelah oversampling.

---

**Kapan Harus Menghindari Oversampling?**

- **Biaya komputasi tinggi**: Oversampling memperbesar dataset, memperlambat training.
- **Data minoritas bising**: Akan memperbanyak noise.


---

**Oversampling pada Klasifikasi Multi-Kelas**

`imblearn` mendukung oversampling multi-kelas melalui parameter `sampling_strategy`:

- `'minority'`: Oversample hanya kelas minoritas.
- `'not_minority'`: Oversample semua kecuali kelas minoritas.
- `'not_majority'`: Oversample semua kecuali kelas mayoritas.
- `'all'`: Oversample semua kelas.
- `'auto'`: Sama dengan `'not_majority'`.
- Dictionary: Tentukan jumlah target per kelas.

Strategi fleksibel memungkinkan penanganan kompleksitas ketidakseimbangan multi-label.

---

Referensi : 
1. Abhishek, K., & Abdelaziz, M. (2023). Machine Learning for Imbalanced Data: Tackle imbalanced datasets using machine learning and deep learning techniques. Packt Publishing Ltd.
2. https://medium.com/data-science/class-imbalance-strategies-a-visual-guide-with-code-8bc8fae71e1a
3. https://www.statology.org/how-to-handle-imbalanced-data-pycaret/