All articlesMachine Learning

Prédiction de l'approbation d'une demande de carte de crédit dans SmartPredict

1-Introduction

La création d'une plate-forme comme SmartPredict, avec laquelle il est possible de mener des projets d'intelligence artificielle de A à Z SANS CODER, est une idée ingénieuse pour les Data scientist et pour ceux qui font de l'IA. Maintenant qu'il est disponible gratuitement en version beta, il vaut le coup de l'essayer. Ainsi dans ce blog, je vous rapporte un projet de machine learning: "Prédiction de l'approbation d'une demande de carte de crédit" effectué dans ce plateforme. Alors faisons-le ensemble et vous verrez à quel point c'est facile. Prêt!!Commençons.

2- Présentation du projet

De nombreuses informations doivent être analysées par une banque commerciale afin d'approuver ou non une demande de carte de crédit. Lorsque ces demandes sont nombreuses, leur analyse manuelle est fastidieuse et chronophage. Grâce au "machine learning", cette tâche peut être automatisée. En ce sens, nous allons construire un modèle de Machine learning qui prédit si la demande d'une carte de crédit doit être approuvée ou non selon certains détails fournis par l'utilisateur. Il s'agit donc d'un problème de classification.

Pour ce projet, on va utiliser le Credit Card Approval dataset disponible dans l'UCI Machine Learning Repository.
Réalisons ce projet en quatre étapes dans SmartPredict:
Première étape: Exploration et analyse des données avec l'application Dataset Processor et avec le notebook intégrés dans SmartPredict.
Deuxième étape: Prétraitement des données avec le Processing Pipeline.
Troisième étape: Construction et entraînement de notre machine learning dans l'onglet Build.
Dernière étape: déployement et test du modèle dans l'onglet Déploy et l'onglet Test.

3- Réalisation de l'ensemble du projet dans SmartPredict

Tout d'abord, on doit créer un compte et un projet dans SmartPredict.
Comme le fichier contenant nos données est de type ".data", saisissons l'extrait de code suivant dans le notebook de SmartPredict pour le télécharger directement depuis le Web et pour lui assigner des noms de colonnes.

import pandas as pd
df = pd.read_csv ("https://archive.ics.uci.edu/ml/machine-learning-databases/credit-screening/crx.data", header = None)
df.columns = ['A1','A2','A3','A4','A5','A6','A7','A8','A9','A10','A11','A12','A13','A14','A15','LABEL']

Ensuite, utilisons le "snippet de code: Dataset save" déjà existant dans le notebook de SmartPredict pour enregistrer les données au format CSV sous le nom de "DATA".

from smartpredict import api

dataset = api.dataset_save(dataset=df, name='DATA',
                           dataset_type='csv')

Desormais, nos données nommées "DATA" sont disponibles dans SmartPredict comme l'indique l'image suivante.

Étape 1: Analyse exploratoire des données dans l'application Dataset Processor et avec le notebook de SmartPredict

Une application nommée Dataset Processor est disponible dans SmartPredict par laquelle on peut explorer et analyser nos données sans coder.
Voyons d'abord nos données dans l'onglet Processing.

Une vue d'ensemble de nos données dans l'onglet Processing


Il est mentionné dans le fichier "crx.name" que tous les noms d'attributs et les valeurs ont été changés en symboles sans signification pour protéger la confidentialité des données. Comme on peut le constater, le tableau qui représente nos données est composé de 16 colonnes, dont 15 colonnes d'attributs (que nous avons nommées A1, A2, A3, etc.) et l'une (nommé "LABEL") indiquant si la demande du client est approuvée (+) ou non (-); et de 690 lignes (ou instances) représentant 690 personnes sollicitant une carte de crédit.
Comme le montre la figure ci-dessus et avec certaines recherches, nous avons les informations suivantes sur les attributs:

A1: type String, à valeur nominale (b, a) représente le sexe du client,

A2: type String, à valeur continu, représente l'âge, (que nous devrions convertir en type float plus tard dans le processing pipeline),

A3: type Float, à valeur continu, représente la dette,

A4: type String, à valeur nominale (u, y, l, t ), représente l'état matrimonial du client,

A5: type String, à valeur nominale (p, gg), représente si le client est un client de la Banque,

A6: type String, à valeur nominale (c, d, cc, i, j, k, m , r, q, w, x, e, aa, ff), représente le niveau d'éducation du client,

A7: type String, à valeur nominale (v, h, bb, j, n, z, dd, ff, o), représente l' Ethnicité,

A8: type Float, à valeur continue, représente les années de durée de travail,

A9: type String, à valeur nominale (t, f), représente le "PriorDefault",

A10: type String, à valeur nominale (t, f), représente si le client est un employé,

A11: type Integer, continu, représente le niveau de crédit,

A12: type String, nominal (t, f), représente permis de conduire,

A13: type String, nominal (g, p, s), représente le citoyenneté,

A14: type String, continue, représente le CodePostal (que nous devons convertir en float plus tard),

A15: type Entier, continu, représente le Revenu,

LABEL: type String, nominal (+, -), représente l'approbation de la demande de carte crédit.

Décrivons statistiquement le contenu des colonnes à valeurs numériques et nominal en entrant ce code dans notre notebook.

dataset.describe(include=[np.number], percentiles=[.5]) \
    .transpose().drop("count", axis=1)

dataset.describe(include=[np.object]).transpose() \
    .drop("count", axis=1)

Dans le tableau ci-dessus, la colonne "unique" indique le nombre total de symboles utilisés dans chaque colonne, et la colonne "top" représente le symbole fréquemment utilisé. La fréquence de son apparition est indiqué dans la colonne "freq".

Analysons l'ensemble de données avec l'onglet Visualisation, dans lequel on peut visualiser nos données avec une diagramme circulaire, un histogramme, un nuage de points, un graphique linéaire sans coder. Pour plus d'extensibilité, vous pouvez également utiliser le notebook de SmartPredict.

Voyons alors la distribution du contenu de la colonne "LABEL" avec un histogramme.

Comme nous pouvons le voir, la colonne "LABEL" est composé de 44,5% de "+" (307 lignes) et 55,5% de "-" (383 lignes).
Vous pouvez approfondir l'exploration selon votre guise, mais passons à l'étape suivante.

Étape 2: Prétraitement des données avec le Processing pipeline

Le prétraitement des données est une étape cruciale pour que ces dernières soient adaptées au modèle de Machine Learning. En fonction de notre ensemble de données, de nombreux processus peuvent être effectués tels que le formatage, le nettoyage, l'échantillonnage, la normalisation, le "feature engineering", etc. Grâce à SmartPredict, beaucoup de ces processus peuvent être effectués sans coder, comme le montre le gif ci-dessous.

Comme prévu, on doit changer en type "float" les valeurs dans les colonnes A2 (âge) et A14 (code postal).

Le fichier descritptive "crx.name" de notre Credit Card Approval dataset nous informe que des colonnes ont des valeurs manquantes représentées par "?". Nettoyons-les!
Il existe différentes façons de gérer les valeurs manquantes, comme:
- supprimer les lignes qui ont des valeurs manquantes,
- imputer avec la moyenne ou la médiane de l'attribut toutes les valeurs manquantes si les variables sont continues
- imputer avec la valeur la plus courante de l'attribut si les variables sont de type catégoriques
Comme nous avons un ensemble de données avec seulement 690 instances, au lieu de supprimer les lignes à valeurs manquantes on remplace ces dernières. Ainsi, dans A1, A4, A5, A6 et A7 (catégoriques),elles seront remplacées par la valeur la plus courante et dans A2 et A14 (continu), elles seront remplacées respectivement par la valeur moyenne et la valeur médiane.

Ces quatre processing pipeline sont disponibles dans le volet droit et peuvent être exportés en tant que module que nous allons nommer "data_preprocess" comme l' indique le gif ci-dessous.

Le prétraitement des données peut être également effectué avec les modules "Data Preprocessing" dans Core Module, nous pouvons alors procéder à l'encodage des valeurs catégorique dans l'étape suivante.

Étape 3: Construction et entraînement de notre modèle Machine Learning dans l'onglet Build

Si vous ne le savez pas encore, créer et entraîner un modèle d'apprentissage automatique en SmartPredict consiste à glisser-déposer (drag and drop) et interconnecter des modules disponibles dans le volet droit et de les configurer dans le workspace "Build". Ainsi, la figure ci-dessous vous montre le FLOWCHART (organigramme) qu'on va construire pour ce projet.

Expliquons l'idée conceptuelle de ce flowchart.

Tous flowchart dans l'onglet "Build" doit commencer par le module de données avec lequel notre modèle sera entraîner et qui est disponible dans le menu "Dataset". Glissons et déposons alors "DATA".
Ensuite, glissons-déposons et interconnectons le module "data_process" que nous avons créé précédement depuis le menu "Processing Pipeline". Pour nous assurer qu'il n'y a plus de valeur manquante dans notre ensemble de données, interconnectons un autre "Processing Pipeline" nommé "Missing_value_handling" que j'ai également créé.

Puis, le module Feature Selector nous permet de sélectionner les colonnes "features" et la colonne "label", donc ce module présente deux sorties et sa configuration est la suivante :

Puisque le modèle de machine learning n'accepte que des valeurs numériques, il se doit d'encoder les colonnes "features" à valeurs catégoriques par le module One Hot Encoder et la colonne "LABEL" par le module Ordinal Encoder . Puisque le module Feature Selector renvoie des données de type "array", les colonnes sont indiquées avec leur index (numéro de colonne) comme le montre la figure ci-dessous.

À ce stade, nous avons un ensemble de données qui peut former notre modèle. Divisons-les avec le module "Labeled Data Splitter" en deux sous ensembles: l'un (80% de données) pour entraîner le modèle et l'autre (20%) pour le tester..

Comme vous pouvez l'imaginer, tout organigramme dans l'onglet Build se termine par les trois modules suivants:
- le module représentant notre modèle de machine learning qu' on peut choisir dans la liste déroulante Machine Learning Algorithms. Pour ce projet, nous choisissons le modèle Support Vector Classifier,
- le module Trainer ML models qui entraîne notre modèle. Il reçoit en son entrée les données d'entraînement,
- le module Evaluator for ML models qui évalue le modèle par les données de test avec une métrique au choix, ici on a choisit "metric accuracy".

Les figures ci-dessous vous montrent leurs configurations.

Quand on lance notre flowchart, une info-bulle indique l'accuracy, nous obtenons alors une accuracy de 0,86.


Remarque:

Comme vous pouvez le constater à la sortie du module One Hot Encoder et celle du module Trainer ML models, se présente un module Item Saver. Ce module (dans la liste déroulante Basics Opérations) a pour fonction d'enregistrer un modèle qui sera disponible dans la liste déroulante Trained Models.
Nous avons donc enregistré le module One Hot Encoder sous le nom de One_Hot_Card et notre modèle de Machine Learning entraîné sous le nom de SVM_card, comme le montrent les figures ci-dessous.

En effet, ces modèles entraînés seront utilisés dans l'étape de déploiement. Passons à la prochaine et dernière étape.

Étape 4 ( la dernière) : Déployer et tester notre modèle dans les onglets Deploy et Test

Déployer un modèle dans SmartPredict consiste à créer et lancer un flowchart dans l'onglet "Déploy", tous les modules disponible dans le volet à droite peuvent être utilisés. Une fois déployé, notre modèle est accessible dans un Web Service auquel un jeton d'accès est généré pour vous dans l'onglet Monitor.

La figure ci-dessous vous montre le flowchart qu'on va construire pour déployer notre modèle pour ce projet.

Web Service IN et Web Service OUT sont les modules en entrée et sortie pour un flowchart dans "Deploy".

Le Web Service reçoit en entrée une instance de données au format JSON et la renvoie sous forme de dictionnaire.

Nous devons donc convertir l'instance de données en type doctinnaire avec le module DataFrame loader/converter.

Ensuite, nous devons employer le module Feature Selector pour sélectionner les features utilisés dans l'instance de données.

Les features avec des valeurs catégoriques doivent être encodées, nous devons donc utiliser un module One Hot Encoder qui reçoit en entrée la One_Hot_Card que nous avons enregistrée auparavant, sur ce , nul besoin de le configurer.

Enfin, notre modèle de Machine Learning disponible en Web Service est destiné à prédire la sortie de l'instance. Il nous incombe alors d'utiliser le module Predictor ML model qui reçoit en entrée notre modèle SVM_model entraîné, sauvegradé précédemment.


Les figures ci-dessous vous montrent les configurations de certains modules tandis que les autres retiennent leur configuration par défaut.

Une fois les modules interconnectés, il suffit de cliquer sur la fusée et de se rendre dans l'onglet Test.

Dans cet onglet, une instance de données est déjà présente dont les attributs doivent être organisés dans l'ordre lors de l' entraînement de notre modèle. Lorsque nous cliquons sur la flèche, notre modèle déployé prédit si la sollicitation du client est approuvé ou non.

Comme le montre la figure ci-dessous, la valeur prédite par notre modèle est "0", ce qui indique que la demande en carte de crédit du client sera acceptée.

4-Conclusion

En tout, on peut donc effectuer sur un seul plateforme, SmartPredict, l'ensemble de notre projet d'Intelligence Artificiel en partant de 0 jusqu'au test.

J'espère que par ce blog, j'ai pu clarifier la manière de réaliser un projet d'IA en utilisant le plateforme SmartPredict tout en vous montrant que c'est désormais facile au point que l'IA est réalisable par tout le monde.
Merci d'avoir lu, à très bientôt dans un autre blog pour d'autres projets avec SmartPredict.


Subject categories

SmartPredict