Un système d'intelligence artificielle basé sur l'apprentissage automatique pour la classification des maladies à partir des symptômes et du profil patient.
- Aperçu
- Architecture
- Installation
- Structure du projet
- Utilisation
- Pipeline de données
- Modèle et performances
- Configuration
- Résultats et visualisations
- Licence
MedTriage AI est une application d'apprentissage automatique conçue pour :
- Prédire les maladies à partir des symptômes et profils patients
- Analyser l'importance des features cliniques
- Évaluer la performance du modèle avec des métriques détaillées
- Expliquer les prédictions du modèle
✅ Pipeline complet : chargement → nettoyage → ingénierie des features → entraînement → évaluation
✅ Modèle robuste : Random Forest Classifier avec validation croisée
✅ Visualisations : matrice de confusion, importance des features, courbe ROC
✅ Interprétabilité : explicabilité des prédictions et statistiques du modèle
✅ Code modulaire : architecture orientée objet, facilement extensible
MedTriage AI/
├── main.py # Point d'entrée principal du pipeline
├── requirements.txt # Dépendances du projet
├── README.md # Cette documentation
│
├── data/
│ ├── raw/ # Données brutes
│ │ └── Disease_symptom_and_patient_profile_dataset.csv
│ └── processed/ # Données nettoyées et prétraitées
│ └── processed_dataset.csv
│
├── src/
│ ├── __pycache__/ # Cache Python
│ ├── config.py # Configuration centralisée
│ ├── dataset.py # Chargement et nettoyage des données
│ ├── features.py # Ingénierie des features
│ ├── trainer.py # Entraînement du modèle
│ ├── evaluate.py # Évaluation et métriques
│ └── explain.py # Interprétabilité du modèle
│
└── results/
├── model.pkl # Modèle entraîné
└── figures/
└── metrics/ # Visualisations et rapports
├── confusion_matrix.png
├── feature_importance.png
├── feature_importance_detailed.png
├── roc_curve.png
└── metrics_report.txt
- Python 3.9+
- pip ou conda
- Git (optionnel)
-
Cloner le dépôt (ou télécharger les fichiers)
git clone <repository-url> cd "MedTriage AI"
-
Créer un environnement virtuel
python -m venv .venv
-
Activer l'environnement virtuel
Windows:
.venv\Scripts\Activate.ps1
macOS/Linux:
source .venv/bin/activate -
Installer les dépendances
pip install -r requirements.txt
Orchestre l'ensemble du flux de travail :
- Charge et prépare les données
- Entraîne le modèle
- Évalue les performances
- Génère les visualisations
- Sauvegarde le modèle
- Chemins des répertoires (données, résultats, modèles)
- Colonnes du dataset
- Hyperparamètres du modèle
- Paramètres d'entraînement
Fonctions principales :
load_raw_data(): charge le CSV brutclean_dataframe(): nettoie et uniformise les donnéessave_processed_data(): enregistre les données traitéesDatasetPreprocessor: classe d'orchestration
Transformations appliquées :
- Suppression des doublons
- Nettoyage des espaces superflus
- Conversion des types numériques
- Gestion des valeurs manquantes
- Validation des colonnes essentielles
Classe FeatureEngineer :
encode_categorical(): encodage des variables catégoriquesscale_features(): normalisation StandardScalercreate_features(): création de nouvelles featuresfit_transform(): pipeline complet
Features créées :
respiratory_issues: combinaison de symptômes respiratoires (Toux, Dyspnée)age_group: catégorisation d'âge (enfant, jeune adulte, adulte, senior, âgé)
Classe ModelTrainer :
prepare_data(): préparation des données d'entraînement/testtrain(): entraînement avec validation croisée (5-fold)predict(): prédictions classiquespredict_proba(): prédictions avec probabilitésget_feature_importance(): importance des featuressave_model()/load_model(): persistance du modèle
Modèle utilisé :
- Random Forest Classifier
- 100 arbres (estimateurs)
- Profondeur max : 10
- Stratification : test/train 80/20
Classe ModelEvaluator :
evaluate(): calcul des métriques (Accuracy, Precision, Recall, F1)plot_confusion_matrix(): visualisation heatmapplot_feature_importance(): top N featuresplot_roc_curve(): courbe ROC pour classification binairesave_metrics_report(): rapport texte des performances
Métriques calculées :
- Accuracy (précision globale)
- Precision (TP / (TP + FP))
- Recall (TP / (TP + FN))
- F1-Score (moyenne harmonique)
- AUC-ROC (pour binaire)
Classe ModelExplainer :
get_feature_importance(): importance des features triéesexplain_prediction(): explication d'une prédiction uniqueplot_feature_importance_detailed(): graphique coloré top Nfeature_importance_summary(): affichage consoleget_decision_path_stats(): statistiques du modèle
python main.pyCela lancera le pipeline complet :
- Chargement et nettoyage des données
- Entraînement du modèle
- Évaluation et génération de visualisations
- Sauvegarde du modèle et rapports
from src.dataset import DatasetPreprocessor
from src.trainer import ModelTrainer
from src.evaluate import ModelEvaluator
from src.explain import ModelExplainer
# Étape 1 : Préparation des données
preproc = DatasetPreprocessor()
df = preproc.run()
# Étape 2 : Entraînement
trainer = ModelTrainer()
X_train, X_test, y_train, y_test = trainer.prepare_data(df)
model = trainer.train()
# Étape 3 : Évaluation
evaluator = ModelEvaluator(model, X_test, y_test)
metrics = evaluator.evaluate()
evaluator.plot_confusion_matrix()
# Étape 4 : Explications
explainer = ModelExplainer(model, X_train, list(X_train.columns))
explainer.feature_importance_summary()from src.trainer import ModelTrainer
trainer = ModelTrainer()
trainer.load_model()
# Faire des prédictions
predictions = trainer.predict(X_new)
probabilities = trainer.predict_proba(X_new)Dataset brut (CSV)
↓
[Chargement]
↓
[Nettoyage]
- Dédoublonnage
- Normalisation texte
- Conversion types
- Gestion NaN
↓
[Ingénierie Features]
- Encodage variables catégoriques
- Création features dérivées
- Normalisation (StandardScaler)
↓
[Train/Test Split 80/20]
↓
[Modèle ML]
↓
[Évaluation + Visualisations]
Features symptomatiques :
- Fever (Fièvre)
- Cough (Toux)
- Fatigue
- Difficulty Breathing (Dyspnée)
Features profil patient :
- Age (Âge)
- Gender (Genre)
- Blood Pressure (Tension artérielle)
- Cholesterol Level (Taux de cholestérol)
Cible :
- Outcome Variable (Résultat : Positive/Negative)
Colonne contextuelle :
- Disease (Maladie diagnostiquée)
Random Forest Classifier
- Pourquoi ? Robustesse, gestion des non-linéarités, interprétabilité des features
- Hyperparamètres :
n_estimators: 100 arbresmax_depth: 10 (limitation de la profondeur)min_samples_split: 5min_samples_leaf: 2random_state: 42 (reproductibilité)
- Stratégies : Train/Test split (80/20) + Cross-validation (5-fold)
- Metriques : Accuracy, Precision, Recall, F1-Score, AUC-ROC
Accuracy: 0.6667
Precision: 0.6714
Recall: 0.6667
F1-Score: 0.6621
Top 3 Features Importance:
1. Age (20.6%)
2. Cholesterol Level (16.8%)
3. Gender (11.4%)
Tous les paramètres centralisés dans src/config.py :
# Hyperparamètres du modèle
MODEL_PARAMS = {
'n_estimators': 100, # Nombre d'arbres
'max_depth': 10, # Profondeur max
'min_samples_split': 5,
'min_samples_leaf': 2,
'random_state': 42,
}
# Paramètres d'entraînement
RANDOM_STATE = 42 # Pour reproductibilité
TEST_SIZE = 0.2 # Proportion ensemble test
TRAIN_SIZE = 0.8 # Proportion ensemble trainPour modifier ces paramètres, éditez src/config.py avant de lancer le pipeline.
Les visualisations sont automatiquement générées dans results/figures/metrics/ :
Heatmap montrant les vrais positifs/négatifs et erreurs de classification
Graphique en barres horizontal des top N features les plus importantes
Graphique coloré avec tous les détails des importances
Courbe de rendement pour problèmes de classification binaire
Rapport texte résumé des performances (Accuracy, Precision, Recall, F1)
pandas>=1.3.0 # Manipulation de données
scikit-learn>=1.0.0 # ML et prétraitement
matplotlib>=3.4.0 # Visualisations
seaborn>=0.11.0 # Visualisations avancées
joblib>=1.0.0 # Persistance de modèles
numpy>=1.21.0 # Calculs numériques
Installer via :
pip install -r requirements.txtValueError: Colonnes manquantes dans le dataset
Solution : Vérifiez que le dataset CSV contient toutes les colonnes attendues définies dans config.py
FileNotFoundError: No such file or directory
Solution : Vérifiez que le fichier Disease_symptom_and_patient_profile_dataset.csv est dans data/raw/
ModuleNotFoundError: No module named 'sklearn'
Solution : Réinstallez les dépendances : pip install -r requirements.txt
- Ajouter support pour d'autres algorithmes (XGBoost, LightGBM, Neural Networks)
- Implémenter SHAP pour explications plus détaillées
- Créer une interface web (Flask/Streamlit)
- Ajouter tests unitaires
- Pipeline de hyperparameter tuning (GridSearch, Bayesian Optimization)
- Support du déploiement Docker
- API REST pour prédictions en temps réel
- Intégration CI/CD
Les contributions sont bienvenues ! Pour contribuer :
- Fork le projet
- Créez une branche feature (
git checkout -b feature/AmazingFeature) - Commit vos changements (
git commit -m 'Add AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrez une Pull Request
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Pour toute question ou suggestion :
- 📧 Email : support@medtriage.ai
- 🐛 Issues : [GitHub Issues]
- 💬 Discussions : [GitHub Discussions]
Dernière mise à jour : Février 2026
Version : 1.0.0
Statut : Production ✅