Une plateforme MLOps complète pour la prédiction du churn client avec entraînement automatisé, suivi d'expérimentations et monitoring en temps réel.
graph TB
A[Airflow Orchestrator] --> B[Data Processing]
B --> C[Model Training]
C --> D[MLflow Tracking]
D --> E[MinIO Artifact Store]
D --> F[Streamlit Dashboard]
G[PostgreSQL] --> D
G --> A
H[MinIO Storage] --> E
I[Streamlit UI] --> F
| Composant | Utilisation | Technologie |
|---|---|---|
| Orchestration | Automatisation des workflows | Apache Airflow 2.7 |
| Suivi d'expériences | Versioning des modèles ML | MLflow 2.8 |
| Stockage d'artefacts | Stockage des modèles | MinIO (compatible S3) |
| Visualisation | Dashboard temps réel | Streamlit |
| Stockage métadonnées | Métadonnées des expériences | PostgreSQL 13 |
| Conteneurisation | Isolation des services | Docker Compose |
- Docker 20.10+ et Docker Compose 2.0+
- Git
- 8GB+ RAM recommandés
# Cloner le dépôt
git clone https://github.com/YOUSSEF-BT/customer-mlops-pipeline.git
cd customer-mlops-pipeline
# Démarrer tous les services
docker-compose up -d
# Attendre le démarrage des services (environ 45 secondes)
sleep 45
# Initialiser la base de données Airflow et créer l'utilisateur admin
docker-compose exec airflow-webserver airflow db init
docker-compose exec airflow-webserver airflow users create \
--username admin \
--password admin \
--firstname Admin \
--lastname User \
--role Admin \
--email admin@example.com
customer-mlops-pipeline/
├── airflow/ # Configuration Airflow
│ ├── dags/ # DAGs du pipeline
│ ├── Dockerfile # Conteneur Airflow
│ └── requirements.txt # Dépendances Python
├── mlflow/ # Serveur de tracking MLflow
│ └── Dockerfile # Conteneur MLflow
├── streamlit/ # Dashboard Streamlit
│ ├── Dockerfile # Conteneur Streamlit
│ ├── requirements.txt # Dépendances Python
│ └── streamlit_app.py # Application dashboard
├── training_pipeline/ # Scripts d'entraînement
│ ├── config.yaml # Fichier de configuration
│ └── src/train_model.py # Pipeline d'entraînement
├── data/ # Données d'exemple (gitignored)
├── models/ # Modèles entraînés (gitignored)
├── docker-compose.yml # Orchestration complète
├── .gitignore # Fichier d'exclusion Git
├── LICENSE # Licence MIT
└── README.md # Ce fichier
| Service | Port | Identifiants par défaut | Utilisation |
|---|---|---|---|
| Airflow Webserver | 8080 | admin/admin | Interface d'orchestration |
| Airflow Scheduler | - | - | Planification des tâches |
| MLflow | 5001 | - | Interface de tracking |
| MinIO | 9000 | minioadmin/minioadmin | API de stockage |
| MinIO Console | 9001 | minioadmin/minioadmin | Interface de gestion |
| Streamlit | 8502 | - | Dashboard temps réel |
| Adminer | 8081 | - | Interface de gestion DB |
| PostgreSQL (Airflow) | 5432 | airflow/airflow | Métadonnées Airflow |
| PostgreSQL (MLflow) | 5432 | mlflow/mlflow | Métadonnées MLflow |
- Traitement automatisé des données : Ingestion, nettoyage et feature engineering
- Entraînement de modèles : Algorithmes multiples avec tuning d'hyperparamètres
- Suivi d'expériences : Intégration complète MLflow pour la reproductibilité
- Versioning d'artefacts : Stockage des modèles dans MinIO avec contrôle de version
- Monitoring temps réel : Dashboard live avec Streamlit
- Microservices : Chaque composant s'exécute dans des conteneurs isolés
- Stockage persistant : PostgreSQL pour les métadonnées, MinIO pour les artefacts
- Isolation réseau : Réseau interne sécurisé entre services
- Health checks : Monitoring automatique et redémarrage des services
- Dashboard Streamlit : Analytics clients interactifs et prédictions
- Interface MLflow : Comparaison d'expériences et registre de modèles
- Interface Airflow : Monitoring des pipelines et déclenchement manuel
- Console MinIO : Gestion du stockage d'artefacts
# Démarrer tous les services
docker-compose up -d
# Vérifier l'état des services
docker-compose ps
# Consulter les logs
docker-compose logs -f
- Airflow UI : http://localhost:8080 (admin/admin)
- MLflow UI : http://localhost:5001
- Dashboard Streamlit : http://localhost:8502
- Console MinIO : http://localhost:9001 (minioadmin/minioadmin)
# Configurer le bucket MinIO pour MLflow
docker-compose exec minio mc alias set myminio http://localhost:9000 minioadmin minioadmin
docker-compose exec minio mc mb myminio/mlflow-artifacts
- Accéder à l'interface Airflow (http://localhost:8080)
- Trouver le DAG :
churn_mlops_pipeline - Activer le DAG (bouton ON)
- Cliquer sur le bouton de déclenchement
- Surveiller l'exécution dans la vue Graph
- MLflow : Suivre les expériences, comparer les modèles, consulter les métriques
- Streamlit : Visualiser les prédictions, segments clients et performances
- MinIO : Parcourir les modèles et artefacts stockés
- Modifier
training_pipeline/src/train_model.py - Mettre à jour
training_pipeline/config.yaml - Tester localement :
python train_model.py - Committer et pousser les modifications
- Éditer
streamlit/streamlit_app.py - Mettre à jour
streamlit/requirements.txt - Rebuilder :
docker-compose build streamlit-app - Redémarrer :
docker-compose up -d streamlit-app
- Ajouter un fichier Python dans
airflow/dags/ - Suivre les bonnes pratiques Airflow
- Tester dans l'interface Airflow
MLflow ne démarre pas :
# Vérifier la connexion PostgreSQL
docker-compose exec postgres-mlflow psql -U mlflow -d mlflowdb -c "SELECT 1;"
# Rebuilder le service MLflow
docker-compose build --no-cache mlflow
docker-compose up -d mlflow
Erreurs de base de données Airflow :
# Initialiser la base de données Airflow
docker-compose exec airflow-webserver airflow db init
# Créer l'utilisateur admin (si inexistant)
docker-compose exec airflow-webserver airflow users create \
--username admin \
--password admin \
--firstname Admin \
--lastname User \
--role Admin \
--email admin@example.com
Permissions du bucket MinIO :
# Rendre le bucket public (développement uniquement)
docker-compose exec minio mc anonymous set public myminio/mlflow-artifacts
# Consulter les logs d'un service spécifique
docker-compose logs mlflow
docker-compose logs airflow-webserver
docker-compose logs streamlit-app
# Suivre les logs en temps réel
docker-compose logs -f mlflow
# Vérifier l'utilisation des ressources
docker stats
# Arrêter tous les services
docker-compose down
# Supprimer les volumes (ATTENTION : supprime toutes les données)
docker-compose down -v
- Forker le dépôt
- Créer une branche feature (
git checkout -b feature/NouvelleFonctionnalite) - Committer les modifications (
git commit -m 'Ajout NouvelleFonctionnalite') - Pousser vers la branche (
git push origin feature/NouvelleFonctionnalite) - Ouvrir une Pull Request
- Suivre PEP 8 pour le code Python
- Ajouter des docstrings pour les fonctions et classes
- Mettre à jour la documentation lors de modifications
- Tester localement avant de soumettre une PR
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
YOUSSEF-BT
- GitHub : @YOUSSEF-BT
- Projet : Customer MLOps Pipeline
- L'équipe Apache Airflow pour l'orchestration des workflows
- L'équipe MLflow pour le suivi d'expériences
- L'équipe Streamlit pour le développement rapide de dashboards
- L'équipe MinIO pour le stockage compatible S3
- La communauté Docker pour la conteneurisation
- Documentation Airflow
- Documentation MLflow
- Documentation Streamlit
- Documentation MinIO
- Documentation Docker Compose
| Métrique | Valeur | Description |
|---|---|---|
| Temps de démarrage | ~2 minutes | Temps pour que tous les services soient prêts |
| Entraînement modèle | ~5-10 minutes | Exécution complète du pipeline |
| Stockage | 2GB+ | Estimé pour 1000+ expériences |
| Utilisateurs simultanés | 10+ | Dashboard et monitoring |
Cette plateforme inclut :
- Docker Compose pour le développement local
- PostgreSQL pour les métadonnées persistantes
- MinIO pour le stockage scalable d'artefacts
- Health checks pour tous les services
⭐️ Donnez une étoile si ce projet vous a aidé !
Développé avec ❤️ par YOUSSEF-BT