Déséquilibre des classes dans les données de prêts

Modélisation du risque de crédit en Python

Michael Crabtree

Data Scientist, Ford Motor Company

Pas assez de défauts dans les données

  • Les valeurs de loan_status sont les classes
    • Non-défaut : 0
    • Défaut : 1
y_train['loan_status'].value_counts()
loan_status Nombre dans l'entraînement Pourcentage du total
0 13,798 78%
1 3,877 22%
Modélisation du risque de crédit en Python

Fonction de perte du modèle

  • Les arbres à suralimentation de gradient dans xgboost utilisent la log-perte
    • L'objectif est de minimiser cette valeur

Formule de la log-perte

Véritable statut de prêt Probabilité prédite Log-perte
1 0.1 2.3
0 0.9 2.3
  • Un défaut mal prédit a un impact financier plus négatif
Modélisation du risque de crédit en Python

Le coût du déséquilibre

  • Un faux négatif (défaut prédit comme non-défaut) coûte beaucoup plus cher
Personne Montant du prêt Profit potentiel Statut prédit Statut réel Pertes
A 1 000 $ 10 $ Défaut Non-défaut -10 $
B 1 000 $ 10 $ Non-défaut Défaut -1 000 $
  • La log-perte du modèle est la même pour les deux, mais nos pertes réelles ne le sont pas
Modélisation du risque de crédit en Python

Causes du déséquilibre

  • Problèmes de données
    • Échantillonnage de crédit inadéquat
    • Problèmes d'entreposage des données
  • Processus d'affaires :
    • Mesures déjà en place pour refuser les défauts probables
    • Les défauts probables sont rapidement vendus à d'autres firmes
  • Facteurs comportementaux :
    • En général, les gens ne font pas défaut sur leurs prêts
      • Moins ils font défaut, meilleure est leur cote de crédit
Modélisation du risque de crédit en Python

Gérer le déséquilibre des classes

  • Plusieurs façons de traiter le déséquilibre des classes
Méthode Avantages Inconvénients
Recueillir plus de données Augmente le nombre de défauts Le pourcentage de défauts peut ne pas changer
Pénaliser les modèles Accroît le rappel des défauts Le modèle exige plus d'ajustements et d'entretien
Échantillonner autrement Ajustement le moins technique Moins de défauts dans les données
Modélisation du risque de crédit en Python

Stratégie de sous-échantillonnage

  • Combiner un petit échantillon aléatoire de non-défauts avec les défauts

Schéma de la stratégie de sous-échantillonnage

Modélisation du risque de crédit en Python

Combiner les ensembles scindés

  • Les ensembles de test et d'entraînement doivent être recombinés
  • Créer deux nouveaux ensembles selon le loan_status réel
# 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]
Modélisation du risque de crédit en Python

Sous-échantillonner les non-défauts

  • Échantillonner aléatoirement l'ensemble des non-défauts
  • Concaténer avec l'ensemble des défauts
# 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)
Modélisation du risque de crédit en Python

Passons à la pratique !

Modélisation du risque de crédit en Python

Preparing Video For Download...