Tools & Stacks

Seaborn HyperOpt Python Pandas SHAP Matplotlib Numpy json Dash Plotly Sklearn Jupyter-Notebook Heroku lightgbm
Live Demo
portfolio thumbnail

Implémentez un modèle de scoring

Détail du projet

Image "Credit Cards" by Sean MacEntee is licensed with CC BY 2.0. To view a copy of this license, visit https://creativecommons.org/licenses/by/2.0/

Problématique :

Une société financière "Prêt à dépenser" propose des crédits à la consommation pour des personnes ayant peu ou pas d'historique de prêt.

 

Elle souhaite développer un modèle de scoring de la probabilité de défaut de paiement du client pour étayer la décision d'accorder ou non un prêt à un client potentiel en s’appuyant sur des sources de données variées.

 

Le projet a donc pour but de :

 

  1. Construire un modèle de scoring qui donnera une prédiction sur la probabilité de faillite d'un client de façon automatique.
  2. Construire un dashboard interactif à destination des gestionnaires de la relation client permettant d'interpréter les prédictions faites par le modèle et d’améliorer la connaissance client des chargés de relation client.

 

Les données sont diponibles ici

 

 

Modélisation :

 

Il s'agit d'un problème de classification binaire déséquilibrée, la majorité des clients repayant leur crédit.

 

 

Les modèles seront donc optimisés et évalués à l'aide du  F2-score qui permet de minimiser les faux-négatifs (défauts de paiements classifiés comme des crédits repayés) sans ignorer totalement les faux positifs (crédits repayés classés comme défauts de paiement).

 

Les modèles sont optimisés avec HyperOpt ce qui permet de tester plus d'hyperparamètres autour de la valeur optimale. Sur l'exemple ci-dessous on voit la distribution des valeurs testées pour le learning rate, en rouge pour un RandomSearch et en vert pour HyperOpt, la ligne bleue indiquant la valeur du modèle retenu.

 

 

Au final on retiendra la LightGBM qui obtient le meilleur score et est suffisamment rapide dans ses prédictions. De plus c'est le modèle qui gagne le plus d'efficacité lorsque l'on augmente la quantité de données d'entraînement.

 

 

Il n'est pas nécessaire d'équilibrer les deux classes manuellement, HyperOpt ayant figé l'hyperparamètre is_unbalance du lightgbm à True. De plus, on n'a pas besoin de choisir un seuil de détection, l'optimisation étant faite directement avec le F2-score, le meilleur modèle est déjà obtenu pour un seuil de 0.5 .

 

 

Explication du modèle

Dans un but de transparence, les décisions du modèle sont expliquées à l'aide de SHAP (SHapley Additive exPlanations).

 

Ici on peut voir l'importance des variables pour toutes les observations :

 

 

On a ensuite cherché à allégé le modèle pré-déploiement en le ré-entraînant sur un nombre limité de variables importantes. On s'est fixé aux 20 variables les plus importantes, le déploiement du premier dashboard se faisant avec la version gratuite d'Heroku, il est nécessaire de limiter la mémoire utilisée.

 

 

Dashboard

Le dashboard est visitable ici

(la limite de mémoire de la version d'heroku peut entraîner des erreurs, dans ce cas il suffit de généralement de rafraîchir la page).

 

Le client ou le chargé de relation clientèle indique l'identifiant client du demandeur de prêt, l'application retrouve les données le concernant et le modèle renvoie la prédiction. Le score est simplement la probabilité de repaiement exprimé en pourcentage. La recommendation est "accepté" si le score est supérieur à 50% et le montant du crédit demandé est affiché à titre informatif (un crédit de 1M$ accepté à 50.01% est plus risqué qu'un crédit de 500$ refusé à 49.99%).

 

SHAP est ensuite utilisé pour obtenir l'importance des variables dans cette prédiction spécifiquement et affiche leur effet dans la décision.

 

Finalement, on peut aussi observer la distribution de chaque variable pour les crédits acceptés et refusés et où notre client se place par rapport à celles-ci.