Kredi verilerinde sınıf dengesizliği

Python ile Kredi Riski Modellemesi

Michael Crabtree

Data Scientist, Ford Motor Company

Veride yeterli temerrüt yok

  • loan_status değerleri sınıflardır
    • Temerrüt dışı: 0
    • Temerrüt: 1
y_train['loan_status'].value_counts()
loan_status Eğitim Veri Sayısı Toplamın Yüzdesi
0 13,798 78%
1 3,877 22%
Python ile Kredi Riski Modellemesi

Model kayıp fonksiyonu

  • xgboost’taki Artırılmış Karar Ağaçları log-kayıp kayıp fonksiyonu kullanır
    • Amaç bu değeri en aza indirmektir

Log-kayıp formülü

Gerçek kredi durumu Tahmin olasılığı Log Kayıp
1 0.1 2.3
0 0.9 2.3
  • Hatalı tahmin edilen bir temerrüt daha büyük finansal etki yaratır
Python ile Kredi Riski Modellemesi

Dengesizliğin maliyeti

  • Yanlış negatif (temerrüdün temerrüt dışı tahmin edilmesi) çok daha maliyetlidir
Kişi Kredi Tutarı Olası Kâr Tahmin Durumu Gerçek Durum Kayıplar
A $1,000 $10 Temerrüt Temerrüt Dışı -$10
B $1,000 $10 Temerrüt Dışı Temerrüt -$1,000
  • Modelin log-kaybı ikisi için de aynı, gerçek kayıplarımız ise değil
Python ile Kredi Riski Modellemesi

Dengesizliğin nedenleri

  • Veri sorunları
    • Kredi verisi doğru örneklenmedi
    • Veri depolama sorunları
  • İş süreçleri:
    • Olası temerrütleri reddetmek için önlemler var
    • Olası temerrütler hızla diğer firmalara satılır
  • Davranışsal etkenler:
    • Normalde insanlar kredilerini temerrüde düşürmez
      • Temerrüt azaldıkça kredi notu yükselir
Python ile Kredi Riski Modellemesi

Sınıf dengesizliğiyle başa çıkma

  • Veri dengesizliğiyle başa çıkmanın birkaç yolu
Yöntem Artıları Eksileri
Daha fazla veri topla Temerrüt sayısını artırır Temerrüt yüzdesi değişmeyebilir
Modelleri cezalandır Temerrüt için duyarlılığı artırır Daha fazla ayar ve bakım gerekir
Veriyi farklı örnekle En az teknik ayar Veride daha az temerrüt
Python ile Kredi Riski Modellemesi

Az örnekleme stratejisi

  • Temerrüt dışı küçük bir rastgele örneklemi temerrütlerle birleştirin

Az örnekleme stratejisi diyagramı

Python ile Kredi Riski Modellemesi

Bölünmüş veri setlerini birleştirme

  • Test ve eğitim setleri yeniden birleştirilmelidir
  • Gerçek loan_status temelli iki yeni set oluşturun
# 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]
Python ile Kredi Riski Modellemesi

Temerrüt dışıların az örneklenmesi

  • Temerrüt dışı veri setinden rastgele örnekleyin
  • Temerrüt veri setiyle birleştirin
# Undersample the non-defaults using sample() in pandas
nondefaults_under = nondefaults.sample(count_default)
# Concat the undersampled non-defaults with the defaults
X_y_train_under = pd.concat([nondefaults_under.reset_index(drop = True),
                             defaults.reset_index(drop = True)], axis=0)
Python ile Kredi Riski Modellemesi

Ayo berlatih!

Python ile Kredi Riski Modellemesi

Preparing Video For Download...