Projet de Machine Learning pour prédire le taux de désabonnement (churn) des clients bancaires.
Système de prédiction permettant d'identifier les clients à risque de quitter la banque, facilitant ainsi la mise en place d'actions de rétention ciblées.
Cas d'usage : Départements marketing et relation client des banques.
- Prédire les clients susceptibles de quitter la banque (churn)
- Identifier les facteurs clés de désabonnement
- Fournir des insights actionnables via dashboard Power BI
- Optimiser les campagnes de rétention
Source : Kaggle - Bank Customer Churn Dataset
Caractéristiques :
- ~10,000 clients
- 14 features (démographie, produits, comportement)
- Target binaire : Exited (0 = actif, 1 = churné)
src/ : Scripts modulaires (Nettoyage, EDA, Entraînement, Évaluation).
config.py : Centralisation des paramètres (chemins, hyperparamètres, seuils).
models/ : Stockage des modèles sérialisés (.pkl) et du scaler.
- Python 3.8+
- pip
# Cloner le repo
git clone https://github.com/votre-username/bank-churn-prediction.git
cd bank-churn-prediction
# Créer un environnement virtuel
python -m venv venv
source venv/bin/activate
# Installer les dépendances
pip install -r requirements.txtTéléchargement Bank Customer Churn Dataset et placement Churn_Modelling.csv dans data/raw/
python main.pyCela exécute :
- ✅ Nettoyage des données
- ✅ Analyse exploratoire (graphiques sauvegardés)
- ✅ Feature engineering
- ✅ Entraînement de 4 modèles (LR, RF, XGBoost, LightGBM)
- ✅ Évaluation & comparaison
- ✅ Sauvegarde du meilleur modèle
Modèle, Accuracy, Precision, Recall (Churn), F1-Score, AUC-ROC Random Forest, 81.1%, 52.7%, 72.5%, 0.610, 0.856 XGBoost, 71.4%, 40.5%, 86.7%, 0.552, 0.867 LightGBM, 70.3%, 39.5%, 86.5%, 0.542, 0.869 Logistic Regression, 59.3%, 31.7%, 86.2%, 0.463, 0.785
- Age - Le facteur n°1 (les clients matures ont des comportements de churn très marqués)
- NumOfProducts - 1 seul produit = risque élevé
- IsActiveMember - L'absence d'activité récente est le signal d'alerte immédiat.
- Geography - Un taux de churn anormalement plus élevé sur ce segment géographique.
- Python 3.10
- ML : scikit-learn, XGBoost, LightGBM
- Data : pandas, numpy
- Viz : matplotlib, seaborn, plotly
- Exploration : Analyse univariée/bivariée, détection outliers
- Preprocessing : Encodage catégorielles, normalisation, gestion déséquilibre (SMOTE)
- Modeling : 4 algorithmes testés avec validation croisée
- Tuning : GridSearchCV pour hyperparamètres optimaux
- Évaluation : Focus sur recall (détecter un maximum de churn)
Contrairement à une approche standard, ce pipeline intègre :
-
Threshold Tuning (0.35) : Ajustement du seuil de décision pour capturer 86% des churneurs.
-
Gestion du déséquilibre : Utilisation de class_weight='balanced' et scale_pos_weight pour compenser la minorité de clients churnés (~20%).
-
Feature Engineering Robuste : Création de ratios métier (Balance/Salary) et de flags d'inactivité.
Bien que le Random Forest ait un meilleur F1-score, nous recommandons LightGBM pour la production :
Recall de 86.5% : On ne rate que 13% des clients qui partent.
AUC de 0.869 : Excellente capacité du modèle à distinguer un client fidèle d'un client à risque.
-
Installation : pip install -r requirements.txt
-
Pipeline complet : python main.py
-
Évaluation avec seuil personnalisé :
-
Le seuil est configurable dans evaluate.py.
-
Lancement : $env:PYTHONPATH = "."; python src/evaluate.py