Les banques commerciales reçoivent de nombreuses demandes de cartes de crédit. Nombreux d'entre elles sont rejetées pour de multiples raisons, telles que des soldes de prêts élevés, des niveaux de revenus faibles ou un trop grand nombre d'enquêtes sur le dossier de crédit d'une personne, par exemple.
L'analyse manuelle de ces demandes est une tâche banale, sujette aux erreurs et chronophage (et le temps, c'est de l'argent !). Heureusement, cette tâche peut être automatisée grâce à la puissance de l'apprentissage automatique et pratiquement toutes les banques commerciales le font aujourd'hui.
Dans ce projet, nous allons construire un prédicteur automatique d'approbation de carte de crédit en utilisant des techniques d'apprentissage automatique, comme le font les vraies banques.
Nous utiliserons l'ensemble de données Credit Card Approval du UCI Machine Learning Repository.
Chargement de l'ensemble du jeu de données
Tout d'abord, nous chargeons et visualisons l'ensemble des données. Nous constatons qu'étant donné que ces données sont confidentielles, le contributeur de l'ensemble de données a anonymisé les noms des caractéristiques.
Nous constatons qu'étant donné que ces données sont confidentielles, le contributeur de l'ensemble de données a anonymisé les noms des caractéristiques.
Inspection des demandes
Le résultat peut sembler un peu confus à première vue, mais essayons de déterminer les caractéristiques les plus importantes d'une demande de carte de crédit. Les caractéristiques de cet ensemble de données ont été rendues anonymes pour protéger la vie privée, mais les données nous donne un bon aperçu des caractéristiques probables. Les caractéristiques probables d'une demande de carte de crédit type sont le sexe, l'âge, l'endettement, le fait d'être marié, d'être client d'une banque, le niveau d'éducation, l'origine ethnique, les années de travail, le défaut de paiement antérieur, le fait d'être employé, le score de crédit, le permis de conduire, la nationalité, le code postal, le revenu et enfin l'état d'avancement de la demande (Gender
, Age
, Debt
, Married
, BankCustomer
, EducationLevel
, Ethnicity
, YearsEmployed
, PriorDefault
, Employed
, CreditScore
, DriversLicense
, Citizen
, ZipCode
, Income
and finally the ApprovalStatus)
. Cela nous donne un bon point de départ, et nous pouvons mettre en correspondance ces caractéristiques avec les colonnes de la sortie.
Comme nous pouvons le voir d'après notre premier coup d'œil aux données, l'ensemble de données présente un mélange de caractéristiques numériques et catégorielles. Cela peut être corrigé par un prétraitement, mais avant cela, étudions un peu plus l'ensemble de données pour voir s'il y a d'autres problèmes qui doivent être résolus.
Ensemble d'entrainement et de test
Nous allons maintenant diviser nos données en un ensemble de formation et un ensemble de test afin de préparer nos données à deux phases différentes de la modélisation de l'apprentissage automatique : la formation et le test. Idéalement, aucune information provenant des données de test ne devrait être utilisée pour prétraiter les données de formation ou pour diriger le processus de formation d'un modèle d'apprentissage automatique. C'est pourquoi nous divisons d'abord les données et les traitons ensuite.
En outre, les caractéristiques telles que le permis de conduire DriversLicense
et le code postal ZipCode
ne sont pas aussi importantes que les autres caractéristiques de l'ensemble de données pour prédire les approbations de cartes de crédit. Pour avoir une meilleure idée, nous pouvons mesurer leur corrélation statistique avec les étiquettes de l'ensemble de données. Mais cela n'entre pas dans le cadre de ce projet. Nous devrions les abandonner pour concevoir notre modèle d'apprentissage automatique avec le meilleur ensemble de caractéristiques. Dans la littérature sur la science des données, on parle souvent de sélection des caractéristiques.
Traitement des valeurs manquantes-1
Maintenant que nous avons divisé nos données, nous pouvons traiter certains des problèmes que nous avons identifiés lors de l'inspection du DataFrame, notamment :
Notre ensemble de données contient à la fois des données numériques et catégorielles (en particulier des données de type float64, int64 et objet). Plus précisément, les caractéristiques 2, 7, 10 et 14 contiennent des valeurs numériques (de types float64, float64, int64 et int64 respectivement) et toutes les autres caractéristiques contiennent des valeurs non numériques. L'ensemble de données contient également des valeurs provenant de plusieurs plages. Certaines caractéristiques ont une plage de valeurs comprise entre 0 et 28, d'autres entre 2 et 67, et d'autres encore entre 1017 et 100000. En outre, nous pouvons obtenir des informations statistiques utiles (telles que la moyenne, le maximum et le minimum) sur les caractéristiques qui ont des valeurs numériques. Enfin, l'ensemble de données comporte des valeurs manquantes, dont nous nous occuperons dans cette tâche. Les valeurs manquantes de l'ensemble de données sont étiquetées avec " ?", ce qui peut être vu dans la sortie de la dernière cellule de la deuxième tâche. Remplaçons temporairement ces points d'interrogation sur les valeurs manquantes par NaN.
-
Traitement des valeurs manquantes-2
Nous avons remplacé tous les points d'interrogation par des NaN. Cela va nous aider dans le prochain traitement des valeurs manquantes que nous allons effectuer.
Une question importante se pose ici : pourquoi accordons-nous tant d'importance aux valeurs manquantes ? Ne peut-on pas simplement les ignorer ? Ignorer les valeurs manquantes peut affecter considérablement les performances d'un modèle d'apprentissage automatique. En ignorant les valeurs manquantes, notre modèle d'apprentissage automatique peut passer à côté d'informations sur l'ensemble de données qui pourraient être utiles pour son apprentissage. Il existe de nombreux modèles qui ne peuvent pas gérer les valeurs manquantes de manière implicite, comme l'analyse discriminante linéaire (LDA).
Pour éviter ce problème, nous allons donc imputer les valeurs manquantes à l'aide d'une stratégie appelée imputation moyenne.
Traitement des valeurs manquantes-3
Nous avons réussi à traiter les valeurs manquantes présentes dans les colonnes numériques. Il reste des valeurs manquantes à imputer pour les colonnes 0, 1, 3, 4, 5, 6 et 13. Toutes ces colonnes contiennent des données non numériques et c'est pourquoi la stratégie d'imputation moyenne ne fonctionnerait pas ici. Cela nécessite un traitement différent.
Nous allons imputer ces valeurs manquantes avec les valeurs les plus fréquentes présentes dans les colonnes respectives. Il s'agit d'une bonne pratique lorsqu'il s'agit d'imputer des valeurs manquantes pour des données catégorielles en général.
Prétraitement des données-1
Les valeurs manquantes sont maintenant traitées avec succès.
Il reste encore quelques étapes mineures mais essentielles de prétraitement des données avant de procéder à la construction de notre modèle d'apprentissage automatique. Nous allons diviser ces étapes de prétraitement restantes en deux tâches principales :
Convertir les données catégoriélles en données numériques. Mettre à l'échelle les valeurs des caractéristiques dans une plage uniforme. Tout d'abord, nous allons convertir toutes les valeurs non numériques en valeurs numériques. Nous procédons ainsi non seulement parce que le calcul est plus rapide, mais aussi parce que de nombreux modèles d'apprentissage automatique (comme XGBoost) (et en particulier ceux développés à l'aide de scikit-learn) exigent que les données soient dans un format strictement numérique. Pour ce faire, nous utiliserons la méthode get_dummies() de pandas.
Prétraitement des données-2
Il ne nous reste plus qu'une dernière étape de prétraitement, la mise à l'échelle, avant de pouvoir adapter un modèle d'apprentissage automatique aux données.
Essayons maintenant de comprendre ce que ces valeurs mises à l'échelle signifient dans le monde réel. Prenons l'exemple de CreditScore. Le score de crédit d'une personne correspond à sa solvabilité sur la base de ses antécédents de crédit. Plus ce chiffre est élevé, plus la personne est considérée comme financièrement digne de confiance. Ainsi, un CreditScore de 1 est le plus élevé puisque nous remettons à l'échelle toutes les valeurs dans la fourchette de 0 à 1.
Ajustement d'un modèle de régression logistique à l'ensemble de formation
Essentiellement, prédire si une demande de carte de crédit sera approuvée ou non est une tâche de classification. Selon l'UCI, notre ensemble de données contient plus d'instances correspondant au statut "Refusé" que d'instances correspondant au statut "Approuvé". Plus précisément, sur 690 instances, 383 (55,5 %) demandes ont été refusées et 307 (44,5 %) ont été approuvées.
Cela nous donne un point de repère.
Un bon modèle d'apprentissage automatique devrait être capable de prédire avec précision le statut des demandes en fonction de ces statistiques.
Quel modèle choisir ? Une question à se poser est la suivante : les caractéristiques qui affectent le processus de décision d'approbation de la carte de crédit sont-elles corrélées entre elles ? Bien qu'il soit possible de mesurer la corrélation, cela sort du cadre de ce projet. Nous nous fierons donc à notre intuition qu'elles sont effectivement corrélées pour le moment. En raison de cette corrélation, nous tirerons parti du fait que les modèles linéaires généralisés donnent de bons résultats dans ces cas. Commençons notre modélisation de l'apprentissage automatique par un modèle de régression logistique (un modèle linéaire généralisé).
Prédictions et performances
Mais quelles sont les performances de notre modèle ?
Nous allons maintenant évaluer notre modèle sur l'ensemble de test en ce qui concerne la précision de la classification (classification accuracy). Mais nous allons également examiner la matrice de confusion du modèle (confusion matrix). Dans le cas de la prédiction des demandes de carte de crédit, il est important de voir si notre modèle d'apprentissage automatique est également capable de prédire les statuts approuvé et refusé, conformément à la fréquence de ces étiquettes dans notre ensemble de données original. Si notre modèle n'est pas performant à cet égard, il risque d'approuver la demande qui aurait dû l'être. La matrice de confusion nous permet de visualiser les performances de notre modèle sous ces aspects.
- Amélioration des performances du modèle
Notre modèle était plutôt bon ! En fait, il a obtenu un taux de précision de 100 %.
Pour la matrice de confusion, le premier élément de la première ligne de la matrice de confusion indique les vrais négatifs, c'est-à-dire le nombre d'instances négatives (demandes refusées) prédites correctement par le modèle. Le dernier élément de la deuxième ligne de la matrice de confusion représente les vrais positifs, c'est-à-dire le nombre d'instances positives (demandes approuvées) prédites correctement par le modèle.
Mais si nous n'avons pas obtenu un score parfait, que faire ? Nous pouvons effectuer une recherche sur la grille des paramètres (grid search) du modèle afin d'améliorer la capacité du modèle à prédire les approbations de cartes de crédit.
L'implémentation de la régression logistique par scikit-learn consiste en différents hyperparamètres, mais nous allons effectuer une recherche sur les deux suivants : tol et max_iter.
Trouver le modèle le plus performant
Nous avons défini la grille des valeurs des hyperparamètres et les avons converties dans un format de dictionnaire unique que GridSearchCV() attend comme l'un de ses paramètres. Nous allons maintenant lancer la recherche dans la grille pour voir quelles sont les valeurs les plus performantes.
Nous allons instancier GridSearchCV() avec notre modèle logreg précédent et toutes les données dont nous disposons. Nous allons également demander à GridSearchCV() d'effectuer une validation croisée de cinq plis.
Nous terminerons par stocker le meilleur score obtenu et les meilleurs paramètres respectifs.
Lors de la construction de ce prédicteur de carte de crédit, nous avons abordé certaines des étapes de prétraitement les plus connues telles que la mise à l'échelle, l'encodage des étiquettes et l'imputation des valeurs manquantes. Nous avons terminé par de l'apprentissage automatique pour prédire si la demande de carte de crédit d'une personne serait approuvée ou non, compte tenu de certaines informations sur cette personne.