Vous êtes sur la page 1sur 29

Ministère de l’enseignement supérieur et de la recherche scientifique

Université de Tunis el Manar

Faculté de Sciences de Tunis

CAHIER DE SYNTHESE :
Projet Intelligence Artificielle avec Mé thode CRISP : Loan
Prediction Problem Dataset

MODULE :
Intelligence Artificelle

Elaborée par :

TRABELSI NOUHA
ZAYANI Farah

Année Universitaire :

2023/2024
I- Présentation du sujet :
1. Machine learning :
Le Machine Learning (ML) est une discipline de l'intelligence artificielle qui
permet aux ordinateurs d'apprendre à partir de données et d'améliorer leurs
performances sans être explicitement programmés. En utilisant des
algorithmes, le ML identifie des modèles dans les données, permettant aux
machines de prendre des décisions autonomes et de résoudre des problèmes.
Il existe différents types d'apprentissage, dont supervisé, non supervisé et par
renforcement, adaptés à diverses applications. Le ML joue un rôle crucial dans
des domaines tels que la prédiction, la classification et la reconnaissance de
motifs.
2. Kaggle :

Kaggle est une plateforme en ligne dédiée à la science des données, à


l'apprentissage automatique et à l'analyse prédictive. Elle offre un
environnement où les scientifiques des données, les chercheurs et les
passionnés peuvent accéder à des ensembles de données, participer à des
compétitions, collaborer sur des projets, et développer et partager des
modèles d'apprentissage automatique.
3. Sujet choisi:
Le projet de Machine Learning basé sur la méthodologie CRISP a pour
objectif d'adresser une problématique bancaire cruciale : évaluer l'éligibilité
d'une personne à un crédit en analysant son profil. À travers six phases
distinctes, le projet a débuté par l'évaluation des besoins, suivi de la collecte
de données à partir du système d'information interne de la banque et de
bases de données disponibles sur Kaggle. La propreté des données a été
assurée par des procédures de data cleaning, et une exploration approfondie
a été effectuée pour comprendre les nuances de la base de données. La
modélisation a ensuite été entreprise avec des algorithmes de machine
learning, et le modèle résultant a été déployé en production à l'aide du
framework Flask, offrant à la banque une interface intuitive pour des
prédictions en temps réel sur la solvabilité des clients. Ce processus rigoureux,
aligné sur la méthodologie CRISP, garantit une approche systématique et
efficace pour résoudre la problématique posée par la banque.
II- Travail réalisé :
1. Environnement de travail :
 Python : Python est un langage de programmation interprété, de haut niveau, généraliste et
polyvalent. Créé par Guido van Rossum et publié pour la première fois en 1991, Python s'est
rapidement imposé comme l'un des langages de programmation les plus populaires.
2. Modélisation du problème :

La méthode CRISP-DM (Cross-Industry Standard Process for Data Mining) est un modèle de processus
standardisé qui guide les professionnels de la data science à travers les différentes étapes d'un projet de
data mining, depuis la compréhension du problème jusqu'à la mise en production des résultats

 Phase 1 : évaluer les besoins et les traduire en problématique Data :

Dans notre projet, nous avons abordé une problématique soulevée par les banques : déterminer si une
personne présentant un profil x est éligible à l'obtention d'un crédit. L'objectif est d'évaluer la solvabilité
de la personne et sa capacité à rembourser le prêt accordé par la banque.

 Phase 2 : Collecte de la donnée :


 La banque dispose d'un système d'information qui enregistre les données des clients précédents.
Dans notre cas, nous avons opté pour l'utilisation de bases de données disponibles sur Kaggle
pour constituer notre jeu de données.

https://www.kaggle.com/datasets/altruistdelhite04/loan-prediction-problem-dataset


Au cours de cette phase, nous avons procédé au nettoyage de la base de données (data Cleaning) afin
d'assurer sa qualité et sa cohérence. Cela inclut la gestion des valeurs manquantes, la détection et la
correction d'éventuelles anomalies, ainsi que la normalisation des données.

Dans la figure suivante nous avons importé les packages nécessaires :

 Pandas (import pandas as pd):

Objectif : Pandas est une bibliothèque puissante de manipulation et d'analyse de données pour Python.

Fonctionnalité : Elle offre des structures de données telles que les DataFrames qui permettent de
manipuler et d'analyser facilement des données structurées.

 NumPy (import numpy as np):

Objectif : NumPy est une bibliothèque de calcul numérique pour Python.

Fonctionnalité : Elle prend en charge les tableaux et matrices de grande dimension, ainsi que des
fonctions mathématiques pour effectuer des opérations sur ces tableaux.

 Matplotlib (import matplotlib .pyplot as plt) :


Objectif : Matplotlib est une bibliothèque de création de graphiques en 2D pour Python.

Fonctionnalité : Elle permet la création d'une grande variété de visualisations statiques, animées et
interactives en Python.

 Seaborn (import seaborn as sns):

Objectif : Seaborn est une bibliothèque de visualisation de données statistiques basée sur Matplotlib.

Fonctionnalité : Elle offre une interface de haut niveau pour créer des graphiques statistiques attrayants et
informatifs.

 Scikit-learn (from sklearn...):

Objectif : Scikit-learn est une bibliothèque d'apprentissage automatique pour Python.


Fonctionnalité : Elle fournit des outils simples et efficaces pour l'exploration de données et l'analyse de
données, construits sur NumPy, SciPy et Matplotlib. Elle inclut divers algorithmes pour la classification,
la régression, le regroupement, etc.

 LabelEncoder (from sklearn.preprocessing import LabelEncoder):

Objectif : LabelEncoder est une classe utilitaire dans scikit-learn pour encoder les étiquettes catégorielles
avec des valeurs numériques.

Fonctionnalité : Elle transforme les étiquettes catégorielles en format numérique, ce qui est souvent
nécessaire pour les algorithmes d'apprentissage automatique.

 StratifiedShuffleSplit (from sklearn.model_selection import StratifiedShuffleSplit):

Objectif : StratifiedShuffleSplit est un validateur croisé qui fournit des indices d'entraînement/test pour
diviser les données en ensembles d'entraînement/test tout en maintenant la distribution des classes de la
variable cible.

Fonctionnalité : Elle aide à garantir que chaque classe est représentée de manière proportionnelle dans les
ensembles d'entraînement et de test.

 LogisticRegression (from sklearn.linear_model import LogisticRegression):

Objectif : La régression logistique est un algorithme de classification pour les problèmes de


classification binaire et multiclasse.

Fonctionnalité : Elle modélise la probabilité de la classe par défaut et prédit la classe avec la probabilité la
plus élevée.

 KNeighborsClassifier (from sklearn.neighbors import KNeighborsClassifier):

Objectif : Les k-plus proches voisins sont un algorithme simple et efficace de classification.

Fonctionnalité : Il classe un nouveau point de données en fonction de la classe majoritaire de ses k voisins
les plus proches dans l'espace des caractéristiques.

 Accuracy Score (from sklearn.metrics import accuracy_score):

Objectif : Le score d'exactitude est une métrique utilisée pour évaluer les performances d'un modèle de
classification.

Fonctionnalité : Il mesure l'exactitude du modèle en comparant les étiquettes prédites aux étiquettes
réelles.
.
Puis nous avons utilisé la fonction read_csv de Pandas pour lire les données à partir du fichier CSV
spécifié ('train_u6lujuX_CVtuZ9i.csv') et les charge dans un DataFrame (df)

Dans cette capture nous avons utilisé la méthode info () en Pandas pour afficher les informations concises

sur notre DataFrame, y compris le nombre total de lignes et de colonnes, le nombre de valeurs non nulles,
le type de données de chaque colonne, et la consommation totale de mémoire
La ligne de « code df.isnull().sum().sort_values(ascending=False) » permet de compter le nombre de
valeurs manquantes (nulles) dans chaque colonne du DataFrame, puis de les trier par ordre
décroissant du nombre de valeurs manquantes. Cela peut vous donner un aperçu rapide des
colonnes qui ont le plus de données manquantes. En effet :

 df.isnull(): Cette expression renvoie un DataFrame de la même taille que df, mais avec
des valeurs booléennes (True si la valeur est nulle, False sinon).
 .sum(): Calcule la somme des valeurs True le long des colonnes, car True est équivalent à 1
et False à 0.
 .sort_values(ascending=False): Trie les résultats par ordre décroissant, de sorte que les colonnes
avec le plus grand nombre de valeurs manqu antes apparaissent en premier.

 
La méthode « describe » en Pandas est utilisée pour générer des statistiques descriptives d'un DataFrame.
Lorsque vous utilisez « include='O' », cela signifie que vous demandez uniquement des statistiques
descriptives pour les colonnes de type objet (c'est-à-dire, des colonnes contenant des données textuelles
ou catégorielles).

La sortie de cette ligne de code inclura des statistiques descriptives pour les colonnes de type objet, telles
que :

 count : Le nombre total d'observations non nulles dans la colonne.


 unique : Le nombre de valeurs uniques dans la colonne.
 top : La valeur la plus fréquemment observée.
 freq : Le nombre de fois que la valeur la plus fréquente apparaît.
Le code suivant vise à diviser le DataFrame en deux parties : une contenant les variables catégoriques et
l'autre contenant les variables numériques

Ce code traite les valeurs manquantes dans les variables numériques en utilisant la méthode de
remplissage par la valeur précédente de la même colonne (backward fill) puis érifie s'il reste des valeurs
manquantes dans la DataFrame num_data après le remplissage.
Ce code effectue des transformations sur la colonne cible (Loan_Status) pour préparer les données à
l'analyse.

Transformation de la colonne cible (Loan_Status) :

- target_value = {'Y': 1, 'N': 0} : Crée un dictionnaire qui mappe les valeurs 'Y' à 1 et 'N' à 0.
- target = cat_data['Loan_Status'] : Sélectionne la colonne 'Loan_Status' de la DataFrame
cat_data et la stocke dans la variable target.
- cat_data.drop('Loan_Status', axis=1, inplace=True) : Supprime la colonne 'Loan_Status' de
la DataFrame cat_data car elle sera traitée séparément.
- target = target.map(target_value) : Utilise la méthode map pour remplacer les valeurs 'Y' et 'N'
dans la colonne target par 1 et 0, respectivement.

- Ce code utilise la classe LabelEncoder de scikit-learn pour convertir les valeurs


catégoriques dans la DataFrame cat_data en valeurs numériques

Dans la figure suivante :

- La ligne de code cat_data.drop('Loan_ID', axis=1, inplace=True) supprime la colonne 'Loan_ID'


de la DataFrame cat_data
- La ligne de code X = pd.concat([cat_data, num_data], axis=1) crée une nouvelle DataFrame X en
concaténant horizontalement (axis=1) les DataFrames cat_data (contenant les variables
catégoriques transformées en valeurs numériques) et num_data (contenant les variables
numériques). La variable cible y est également créée en utilisant la variable transformée target.
 Phase 3 : Exploration de la donnée :

Dans cette étape, nous avons entrepris une exploration approfondie de la base de données. Nous avons
utilisé des techniques de visualisation pour mieux comprendre la distribution des données, identifier des
tendances et repérer d'éventuelles corrélations entre les différentes variables.

Le code dans la figure suivante nous avons fourni réalise deux tâches liées à l'analyse exploratoire des
données (EDA) :

 Affichage du décompte des valeurs de la variable cible (Loan_Status)


 Concatèner horizontalement les DataFrames cat_data, num_data, et target

Visualisation de la variable « Credit_History » en fonction de la variable cible


Visualisation de la variable « Gender » en fonction de la variable cible

Visualisation de la variable « Married » en fonction de la variable cible

Visualisation de la variable « Education » en fonction de la variable cible


Le code que nous avons fourni utilise la fonction « scatter » de « Matplotlib » pour créer un nuage de
points (scatter plot) représentant la relation entre le revenu du demandeur (ApplicantIncome) et le statut
du prêt (Loan_Status).

Le code que nous avons fourni utilise la fonction « scatter » de « Matplotlib » pour créer un nuage de
points (scatter plot) représentant la relation entre le revenu du conjoint de demandeur
(CoapplicantIncome) et le statut du prêt (Loan_Status).

La ligne de code « df.groupby('Loan_Status').median() » utilise la fonction « groupby » de Pandas pour


regrouper les données en fonction de la variable cible « Loan_Status » (crédit accepté ou refusé) et
calcule ensuite la médiane des valeurs pour chaque groupe
 Phase 4 et 5 : Exploitation de la donnée :

Au cours de cette phase, nous avons développé un modèle basé sur des algorithmes de machine Learning
pour prédire la solvabilité des clients. Nous avons entraîné le modèle en utilisant les données disponibles,
ajusté ses paramètres pour optimiser ses performances, et évalué sa précision à l'aide de métriques
appropriées.

Ce code utilise la stratégie de « shuffle » et de split stratifié pour diviser les données en ensembles
d'entraînement et de test de manière équilibrée par rapport à la variable cible (Loan_Status). Cela garantit
que les proportions d'acceptation et de refus de prêt sont similaires dans les ensembles d'entraînement et
de test.

Ce code met en œuvre l'entraînement et l'évaluation de deux modèles d'apprentissage automatique


(Logistic Regression, K-Nearest Neighbors) sur des ensembles d'entraînement et de test.

 models : Un dictionnaire contenant deux modèles d'apprentissage automatique avec


leurs instances :
Logistic Regression (LogisticRegression).
K-Nearest Neighbors (KNeighborsClassifier).

1 er modèle : Logistic Regression :


2 ème modèle : KNeighborsClassifier
Maintenant nous avons choisi la régression logistique parce qu’elle admet la précision le plus
grande.

Ce code applique la régression logistique sur la base de données X_2 et la variable cible y.
Voici une explication brève du code :

 Classifier = LogisticRegression() : Crée une instance du modèle de régression


logistique en utilisant la classe LogisticRegression de scikit-learn.
 Classifier.fit(X_2, y) : Entraîne le modèle de régression logistique sur les données
X_2 et la variable cible y. La méthode fit ajustée les paramètres du modèle pour
minimiser la perte et rendre le modèle capable de prédire la variable cible.
 La comparaison entre les 2 modèles et l’interprétation :
 Le taux de précision est plus élevé pour la régression logistique et cela indique que ce modèle a mieux
réussi à classer correctement les instances de notre ensemble de test par rapport au
KNeighborsClassifier
 Le ROC AUC mesure la capacité du modèle à discriminer entre les classes. Un score plus élevé indique
une meilleure capacité à distinguer les instances positives des instances négatives.
 - Une valeur plus élevée suggère que la régression logistique a une meilleure performance globale en
termes de sensibilité et spécificité par rapport au KNeighborsClassifier.

Vous aimerez peut-être aussi