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 :

  1. La prédiction statistique du modèle (probabilité de risque).
  2. Des règles métier zootechniques (bornes physiologiques, gain moyen quotidien attendu, seuils d'alerte).
  3. 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

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_mois
  • poids_kg
  • temperature_celsius
  • frequence_cardiaque
  • quantite_aliment_kg
  • frequence_alimentation

Variables catégorielles (encodées en one-hot) :

  • espece
  • race
  • sexe
  • aliment_type
  • gestation_stade
  • source_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 reindex et 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.4
    • imbalanced-learn >= 0.14
    • pandas, 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.
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Evaluation results