Model Soutenance Simplon — Prédiction du Risque Sanitaire Animal
Vue d'ensemble
Ce modèle est un classifieur binaire basé sur un Random Forest (scikit-learn) dont l'objectif est de prédire si un animal d'élevage (bovin, ovin, caprin, porcin) présente un risque sanitaire (animal malade ou en convalescence).
Il constitue le moteur d'inférence d'un système de surveillance d'élevage de précision, qui combine :
- La prédiction statistique du modèle (probabilité de risque).
- Des règles métier zootechniques (bornes physiologiques, gain moyen quotidien attendu, seuils d'alerte).
- Un historique temporel de mesures physiologiques (poids, température, fréquence cardiaque).
Le système produit automatiquement des alertes et des recommandations exploitables par l'éleveur.
- Auteur : D4rkN3st
- Type de tâche : Classification tabulaire binaire
- Langue : Français, Anglais
- Licence : MIT
Table des matières
- Détails du modèle
- Usages prévus
- Biais, risques et limitations
- Métriques d'évaluation
- Données d'entraînement
- Procédure d'utilisation
- Considérations éthiques
- Reproductibilité
- Citation
- Contact
Détails du modèle
Architecture
| Composant | Valeur |
|---|---|
| Algorithme | RandomForestClassifier (scikit-learn) |
| Nombre d'arbres | 100 |
| Critère de split | Gini impurity |
| random_state | 42 |
| Rééquilibrage de classes | SMOTE (imbalanced-learn) |
| Encodage des variables catégorielles | One-Hot Encoding (drop_first=True) |
| Nombre de features après encodage | 112 |
| Taille du jeu d'entraînement (après SMOTE) | environ 6 000 échantillons équilibrés |
Variable cible
Nom : est_malade (booléen)
df["est_malade"] = df["statut"].isin(["malade", "en convalescence"])
| Valeur | Signification |
|---|---|
| True | Animal malade ou en convalescence |
| False | Animal sain |
Features d'entrée
Variables numériques :
age_moispoids_kgtemperature_celsiusfrequence_cardiaquequantite_aliment_kgfrequence_alimentation
Variables catégorielles (encodées en one-hot) :
especeracesexealiment_typegestation_stadesource_donnee
Variables exclues pour éviter la fuite de données :
animal_id, date_entree, date_velage_prevue, symptomes, diagnostic, traitement, alerte_description, statut, alerte_type, ainsi que toutes les colonnes dérivées (*_anormal, *_impossible, anomalie_physiologique, nb_signaux_anormaux, score_completude).
Sortie du modèle
| Méthode | Retour |
|---|---|
predict(X) |
True / False |
predict_proba(X) |
Probabilité d'appartenance à chaque classe |
La probabilité est exposée à l'utilisateur final sous la forme d'un pourcentage de risque (par exemple : « Risque de maladie : 12 % »).
Usages prévus
Cas d'usage directs
- Détection précoce d'animaux présentant un risque sanitaire dans un élevage.
- Aide à la décision pour l'éleveur : isolement préventif, consultation vétérinaire, ajustement de la ration alimentaire.
- Intégration dans un tableau de bord de surveillance couplant ML et règles métier.
Cas d'usage hors périmètre
- Ce modèle ne remplace pas un diagnostic vétérinaire.
- Il ne doit pas être utilisé comme unique source de décision médicale.
- Il ne doit pas être appliqué à des espèces autres que bovins, ovins, caprins et porcins.
- Il ne doit pas être utilisé sur des données dont la distribution diffère fortement de celle d'entraînement (autre pays, autre race, autres unités de mesure).
- Il n'est pas destiné à un usage commercial sans validation supplémentaire.
Biais, risques et limitations
- Déséquilibre d'espèces. Le jeu d'entraînement est composé à 97,7 % de bovins. Les prédictions pour ovins, caprins et porcins reposent sur un nombre très faible d'échantillons et sont peu fiables.
- Données partiellement synthétiques. Les colonnes relatives à la gestation et l'historique temporel ont été simulées. Le modèle ne doit pas être considéré comme validé sur des données terrain réelles.
- Faible performance en généralisation. L'accuracy réelle sur un jeu de test séparé est d'environ 0,53, à peine supérieure au hasard sur une tâche binaire équilibrée.
- Encodage fragile à l'inférence. La reconstruction manuelle des features (avec
reindexet remplissage par zéro) peut introduire des désalignements silencieux. - Absence d'analyse d'équité. Aucune analyse d'équité inter-espèces, inter-races ou inter-régions n'a été conduite.
- Taille limitée du jeu de test. 1 039 échantillons seulement, ce qui restreint la significativité statistique des métriques.
Métriques d'évaluation
Performance sur jeu de test séparé (hold-out, 20 %)
| Classe | Precision | Recall | F1-score | Support |
|---|---|---|---|---|
| Sain / Convalescent | 0,57 | 0,64 | 0,60 | 587 |
| Malade | 0,45 | 0,38 | 0,41 | 452 |
| Accuracy globale | 0,53 | 1 039 |
Comparaison des stratégies de rééquilibrage
| Stratégie | Accuracy | Recall (malade) | Precision (malade) |
|---|---|---|---|
RandomForest + class_weight=balanced |
0,51 | 0,41 | 0,43 |
| RandomForest + SMOTE | 0,53 | 0,38 | 0,45 |
Remarque importante. Un score d'accuracy de 0,903 apparaît dans certaines cellules du notebook source. Il correspond à une évaluation en resubstitution (test sur les mêmes données que l'entraînement) et ne reflète pas la performance réelle du modèle en production. Seul le score de 0,53 sur jeu de test séparé doit être considéré comme référence.
Données d'entraînement
Le jeu d'entraînement a été construit par agrégation de plusieurs sources hétérogènes :
| Source | Description | Volume |
|---|---|---|
| GoMask AgriTech Livestock Health Records | Données synthétiques, 4 espèces | 10 lignes |
| Kaggle — Animal Disease Prediction Using Symptoms | Données réelles/déclarées, filtrées sur 4 espèces | environ 250 lignes |
| Kaggle — Global Cattle Disease Detection | Bovins uniquement | 5 000 lignes (échantillon) |
| Kaggle — Global Cattle Milk Yield Prediction | Bovins uniquement | fusionné |
| Hugging Face — harxsan/agriculture-livestock-data | Dictionnaire maladie/symptômes | usage de référence |
Après nettoyage et consolidation : 5 192 lignes × 30 colonnes.
Prétraitements appliqués
- Imputation des valeurs manquantes numériques par la médiane.
- Imputation des valeurs manquantes catégorielles par la valeur
"inconnu". - Détection et suppression des valeurs biologiquement impossibles (bornes zootechniques).
- Suppression des doublons sur
animal_id. - Normalisation de la casse et des espaces sur les colonnes textuelles.
- Encodage One-Hot des variables catégorielles.
Procédure d'utilisation
Chargement du modèle
import joblib
import pandas as pd
model = joblib.load("model_soutenance_simplon.joblib")
Préparation d'un échantillon
for col in ["age_mois", "poids_kg", "temperature_celsius",
"frequence_cardiaque", "quantite_aliment_kg",
"frequence_alimentation"]:
df[col] = df[col].fillna(df[col].median())
X = pd.get_dummies(df, columns=["espece", "race", "sexe",
"aliment_type", "gestation_stade",
"source_donnee"], drop_first=True)
X = X.reindex(columns=model.feature_names_in_, fill_value=0)
Prédiction
prediction = model.predict(X)[0]
probability = model.predict_proba(X)[0][1]
print(f"Animal à risque : {prediction} (probabilité : {probability:.2%})")
Considérations éthiques
- Ce modèle est conçu comme un outil d'aide à la décision, et non comme un dispositif médical vétérinaire autonome. Toute décision sanitaire doit être validée par un professionnel qualifié.
- Aucune donnée personnelle ou sensible n'est utilisée.
- Aucune décision automatisée à impact direct sur l'animal ne doit reposer uniquement sur la sortie du modèle.
- Les biais documentés ci-dessus doivent être pris en compte dans toute utilisation réelle.
Reproductibilité
- Environnement : Python 3.12
- Dépendances principales :
scikit-learn >= 1.4imbalanced-learn >= 0.14pandas,numpy
- Graines aléatoires fixées (
random_state=42) pour toutes les étapes stochastiques. - Le notebook source complet est disponible sur demande.
Compatibilité. Le modèle a été sérialisé avec scikit-learn 1.6.1. Un avertissement de version peut apparaître si vous le chargez avec une version différente. Il est recommandé d'utiliser la même version que celle de l'entraînement.
Citation
@misc{d4rkn3st2025modelsoutenance,
author = {D4rkN3st},
title = {Model Soutenance Simplon — Prédiction du Risque Sanitaire Animal},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/D4rkN3st/model_soutenance_simplon}}
}
Contact
Pour toute question, remarque ou signalement de bug :
- Ouvrir une Discussion sur ce repository Hugging Face.
- Ou soumettre une Issue documentée.
Evaluation results
- Accuracy on animaux_final_cleantest set self-reported0.530
- Precision (positive class) on animaux_final_cleantest set self-reported0.450
- Recall (positive class) on animaux_final_cleantest set self-reported0.380
- F1-score (positive class) on animaux_final_cleantest set self-reported0.410