Ketidakseimbangan kelas pada data pinjaman

Pemodelan Risiko Kredit dengan Python

Michael Crabtree

Data Scientist, Ford Motor Company

Gagal bayar terlalu sedikit dalam data

  • Nilai loan_status adalah kelas
    • Non-gagal bayar: 0
    • Gagal bayar: 1
y_train['loan_status'].value_counts()
loan_status Jumlah Data Latih Persentase dari Total
0 13,798 78%
1 3,877 22%
Pemodelan Risiko Kredit dengan Python

Fungsi rugi model

  • Gradient Boosted Trees di xgboost memakai fungsi rugi log-loss
    • Tujuannya meminimalkan nilai ini

Rumus log loss

Status pinjaman benar Probabilitas prediksi Log Loss
1 0.1 2.3
0 0.9 2.3
  • Prediksi gagal bayar yang keliru berdampak finansial lebih besar
Pemodelan Risiko Kredit dengan Python

Biaya ketidakseimbangan

  • False negative (gagal bayar diprediksi tidak gagal bayar) jauh lebih mahal
Orang Jumlah Pinjaman Potensi Laba Status Prediksi Status Aktual Kerugian
A $1,000 $10 Gagal Bayar Tidak Gagal Bayar -$10
B $1,000 $10 Tidak Gagal Bayar Gagal Bayar -$1,000
  • Log-loss model sama untuk keduanya, namun kerugian nyata tidak sama
Pemodelan Risiko Kredit dengan Python

Penyebab ketidakseimbangan

  • Masalah data
    • Data kredit tidak disampling dengan benar
    • Masalah penyimpanan data
  • Proses bisnis:
    • Sudah ada langkah untuk menolak yang kemungkinan gagal bayar
    • Pinjaman berisiko cepat dijual ke pihak lain
  • Faktor perilaku:
    • Umumnya orang tidak gagal bayar
      • Semakin jarang gagal bayar, skor kredit makin tinggi
Pemodelan Risiko Kredit dengan Python

Menangani ketidakseimbangan kelas

  • Beberapa cara menangani ketidakseimbangan kelas
Metode Kelebihan Kekurangan
Kumpulkan lebih banyak data Menambah jumlah gagal bayar Persentase gagal bayar bisa tidak berubah
Penalti pada model Meningkatkan recall untuk gagal bayar Perlu tuning dan pemeliharaan lebih
Sampling data berbeda Penyesuaian paling sederhana Lebih sedikit gagal bayar dalam data
Pemodelan Risiko Kredit dengan Python

Strategi undersampling

  • Gabungkan sampel acak kecil non-gagal bayar dengan gagal bayar

Diagram strategi undersampling

Pemodelan Risiko Kredit dengan Python

Menggabungkan set data yang terpisah

  • Set uji dan latih harus digabung kembali
  • Buat dua set baru berdasarkan loan_status aktual
# Concat the training sets
X_y_train = pd.concat([X_train.reset_index(drop = True),
                       y_train.reset_index(drop = True)], axis = 1)
# Get the counts of defaults and non-defaults
count_nondefault, count_default = X_y_train['loan_status'].value_counts()
# Separate nondefaults and defaults
nondefaults = X_y_train[X_y_train['loan_status'] == 0]
defaults = X_y_train[X_y_train['loan_status'] == 1]
Pemodelan Risiko Kredit dengan Python

Undersampling pada non-gagal bayar

  • Ambil sampel acak dari data non-gagal bayar
  • Gabungkan dengan data gagal bayar
# Undersample non-defaults menggunakan sample() di pandas
nondefaults_under = nondefaults.sample(count_default)
# Concat non-default yang di-undersample dengan default
X_y_train_under = pd.concat([nondefaults_under.reset_index(drop = True),
                             defaults.reset_index(drop = True)], axis=0)
Pemodelan Risiko Kredit dengan Python

Ayo berlatih!

Pemodelan Risiko Kredit dengan Python

Preparing Video For Download...