Académique Documents
Professionnel Documents
Culture Documents
Université de Sousse
Institut Supérieur des Sciences Appliquées et de Technologie de Sousse
Cahier de synthese :
Projet Data Science avec Méthode CRISP : Loan Prediction
Problem Dataset
Module :
Initiation à la data science
Année Universitaire :
2023/2024
I- Présentation du sujet :
1. Science des données :
Le sujet de ce projet tutoré s’inscrit dans le domaine très vaste de la science des données, en anglais data
science. Cette discipline récente s’appuie sur des outils mathématiques, statistiques et informatiques afin
de traiter et d’exploiter au mieux la grande quantité d’informations dont la société moderne est submergée.
Plus précisément nous avons été placés face à des problèmes d’analyse de données, d’apprentissage
automatique et de prédiction, le tout avec l’aide de l’outil informatique. Nous allons détailler dans ce rapport
comment nous avons fait face à ces défis et quelles méthodes nous avons employées
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.
• Compétitions de science des données : Kaggle propose des compétitions où les participants peuvent
relever des défis en résolvant des problèmes complexes en utilisant des techniques de science des
données et de machine learning. Ces compétitions peuvent couvrir divers domaines tels que la
classification, la régression, la détection d'objets, etc.
• Ensembles de données : Kaggle met à disposition une vaste collection d'ensembles de données
provenant de divers domaines. Les utilisateurs peuvent explorer, télécharger et utiliser ces
ensembles de données pour leurs propres projets.
• Notebooks : Kaggle propose des notebooks interactifs basés sur Jupyter, permettant aux utilisateurs
d'écrire, d'exécuter et de partager du code Python et R. Cela facilite la collaboration et la
visualisation des résultats.
• Forums et communauté : Kaggle héberge des forums où les membres peuvent poser des questions,
partager des idées, discuter de problèmes techniques et collaborer sur des projets.
• Cours et tutoriels : Kaggle propose également des cours en ligne et des tutoriels pour aider les
utilisateurs à développer leurs compétences en science des données et en apprentissage
automatique.
3. Sujet choisi:
Le projet de Data Science 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.
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
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.
https://www.kaggle.com/datasets/altruistdelhite04/loan-prediction-problem-dataset
Voici notre base de données aprés le téléchargement :
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 2 figures suivantes nous avons importé les packages nécessaires comme :
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.
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.
Fonctionnalité : Elle permet la création d'une grande variété de visualisations statiques, animées et
interactives en Python.
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.
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.
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.
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.
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.
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.
Objectif : Les arbres de décision sont un algorithme populaire d'apprentissage automatique pour la
classification et la régression.
Fonctionnalité : Ils prennent des décisions en posant une série de questions et en apprenant des réponses
pour classer les points de données.
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.
Fonctionnalité : Il permet de sauvegarder et de charger des objets Python, ce qui est utile pour sauvegarder
des modèles d'apprentissage automatique entraînés. Dans votre code, il est probablement utilisé pour
sauvegarder le modèle entraîné en vue d'une utilisation future.
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
• 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 manquantes 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 :
Ce deux lignes de code vise à remplacer les valeurs manquantes dans les variables catégoriques par les
valeurs les plus fréquentes (mode) de chaque variable catégorique et puis vérifie s'il y a encore des valeurs
manquantes dans la DataFrame cat_data après le remplacement.
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.
- 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 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) :
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.
• Fonction accu(y_true, y_pred, retu=False) : Une fonction qui calcule et imprime la précision du
modèle en comparant les vraies valeurs (y_true) avec les valeurs prédites (y_pred). L'argument
retu permet de retourner la précision si nécessaire.
• Fonction train_test_eval(models, X_train, y_train, X_test, y_test) : Une fonction qui itère sur les
modèles du dictionnaire models, entraîne chaque modèle sur l'ensemble d'entraînement, évalue sa
précision sur l'ensemble de test, et imprime les résultats.
• train_test_eval(models, X_train, y_train, X_test, y_test) : Appelle la fonction train_test_eval en
lui passant les modèles et les ensembles d'entraînement et de test
Ce code crée un nouveau DataFrame « X_2 » en sélectionnant trois colonnes spécifiques ('Credit_History',
'Married', 'CoapplicantIncome') à partir du DataFrame d'origine X. Ensuite, il divise cette nouvelle
DataFrame ainsi que la variable cible y en ensembles d'entraînement (X_train, y_train) et de test (X_test,
y_test) en utilisant la méthode de division stratifiée « StratifiedShuffleSplit ».
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 :
Nous avons choisi le framework Flask pour mettre en production notre modèle. Flask nous a permis de
créer une interface utilisateur conviviale permettant à la banque d'effectuer des prédictions en temps réel
sur la solvabilité des clients. Le déploiement a été réalisé de manière à assurer la stabilité, la sécurité et la
scalabilité de l'application.