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

Modélisation du risque de crédit en Python

Michael Crabtree

Data Scientist, Ford Motor Company

Trop peu 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 (apprentissage) 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 Boostés de Gradient dans xgboost utilisent la log-perte
    • Objectif : minimiser cette valeur

Formule de la log-perte

Statut réel du 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 identique, nos pertes réelles non
Modélisation du risque de crédit en Python

Causes du déséquilibre

  • Problèmes de données
    • Échantillonnage de crédit incorrect
    • Problèmes de stockage des données
  • Processus métier :
    • Mesures déjà en place pour refuser les défauts probables
    • Les défauts probables sont rapidement cédés à d’autres sociétés
  • Facteurs comportementaux :
    • En général, on ne fait pas défaut sur un prêt
      • Moins il y a de défauts, meilleure est la 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 gérer le déséquilibre des classes
Méthode Avantages Inconvénients
Collecter plus de données Augmente le nombre de défauts Le pourcentage de défauts peut ne pas changer
Penaliser les modèles Augmente le rappel pour les défauts Modèle plus complexe à régler et maintenir
Échantillonner différemment 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 jeux scindés

  • Recombiner jeux de test et d’entraînement
  • Créer deux nouveaux jeux 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 les non-défauts
  • Concaténer avec les 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...