Dezechilibrul claselor în datele de creditare

Modelarea Riscului de Credit în Python

Michael Crabtree

Data Scientist, Ford Motor Company

Prea puține default-uri în date

  • Valorile lui loan_status reprezintă clasele
    • Non-default: 0
    • Default: 1
y_train['loan_status'].value_counts()
loan_status Număr în datele de antrenare Procent din total
0 13.798 78%
1 3.877 22%
Modelarea Riscului de Credit în Python

Funcția de pierdere a modelului

  • Gradient Boosted Trees în xgboost utilizează log-loss ca funcție de pierdere
    • Obiectivul este minimizarea acestei valori

Formula log-loss

Statut real al creditului Probabilitate prezisă Log Loss
1 0.1 2.3
0 0.9 2.3
  • Un default prezis incorect are un impact financiar negativ mai mare
Modelarea Riscului de Credit în Python

Costul dezechilibrului

  • Un fals negativ (default prezis ca non-default) este mult mai costisitor
Persoană Suma creditului Profit potențial Statut prezis Statut real Pierderi
A 1.000 $ 10 $ Default Non-Default -10 $
B 1.000 $ 10 $ Non-Default Default -1.000 $
  • Log-loss-ul modelului este identic pentru ambele cazuri; pierderile reale diferă
Modelarea Riscului de Credit în Python

Cauzele dezechilibrului

  • Probleme de date:
    • Datele de creditare nu au fost eșantionate corect
    • Probleme de stocare a datelor
  • Procese de afaceri:
    • Există măsuri pentru a nu accepta probable default-uri
    • Probable default-urile sunt vândute rapid altor firme
  • Factori comportamentali:
    • În general, oamenii nu intră în default
      • Cu cât intră mai rar în default, cu atât rating-ul de credit este mai mare
Modelarea Riscului de Credit în Python

Gestionarea dezechilibrului claselor

  • Există mai multe metode de gestionare a dezechilibrului claselor
Metodă Avantaje Dezavantaje
Colectare de date suplimentare Crește numărul de default-uri Procentul poate rămâne neschimbat
Penalizarea modelelor Crește recall-ul pentru default-uri Necesită ajustare și întreținere suplimentară
Eșantionare diferită Ajustare tehnică minimă Mai puține default-uri în date
Modelarea Riscului de Credit în Python

Strategie de undersampling

  • Combinați un eșantion aleatoriu mai mic de non-default-uri cu default-urile

Diagrama strategiei de undersampling

Modelarea Riscului de Credit în Python

Reunirea seturilor de date divizate

  • Seturile de testare și antrenare trebuie reunite
  • Creați două seturi noi bazate pe loan_status actual
# 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]
Modelarea Riscului de Credit în Python

Undersampling pentru non-default-uri

  • Eșantionați aleatoriu setul de non-default-uri
  • Concatenați cu setul de default-uri
# 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)
Modelarea Riscului de Credit în Python

Să exersăm!

Modelarea Riscului de Credit în Python

Preparing Video For Download...