Skip to content

Prédiction de rendement de tomates sous serre - ML (ElasticNet) & Modèle Physiologique (TOMSIM) | Hackathon Agreen CTIFL

Notifications You must be signed in to change notification settings

Gael926/hackaton-sival-agreen-ctifl

Repository files navigation

🍅 Prédiction de Rendement de Tomates sous Serre

Hackathon Agreen - CTIFL Carquefou
Application ML & Physiologique pour prédire le rendement hebdomadaire à S+2 et S+4

Python Streamlit scikit-learn


Le Projet

Projet réalisé dans le cadre du Hackathon Agreen en collaboration avec le CTIFL de Carquefou (Centre Technique Interprofessionnel des Fruits et Légumes).

Objectif : Prédire le rendement de tomates sous serre à S+2 et S+4 semaines en combinant deux approches :

  • Machine Learning (ElasticNet) : prédiction statistique basée sur les données historiques
  • Modèle Physiologique (TOMSIM) : simulation de la photosynthèse et croissance des fruits

Dashboard

🌐 Accéder au Dashboard en ligne

L'application Streamlit offre une interface intuitive pour comparer ML et TOMSIM :

Page d'accueil

Home

Prédictions ML vs TOMSIM

Predictions Demo

Scénarios Climatiques & Calibration

Scenarios Demo

Page Description
Prédictions Vue côte-à-côte ML vs TOMSIM avec métriques R², RMSE
Scénarios Simulations : +2°C, +200ppm CO2, calibration auto

Cheminement du Projet

1️⃣ EDA Complexe : Le Défi des Données

Le problème initial : Les données brutes du CTIFL étaient réparties dans une multitude de fichiers Excel, avec des formats très hétérogènes.

Complexité Détail
Multi-années 4 saisons : 2022, 2023, 2024, 2025
Multi-serres Données sur 2 serres différentes (S1, S2)
Multi-fréquences Journalier (climat), hebdo (notations), bi-hebdo (rendements)
Multi-features Parfois >50 colonnes, parfois <10 selon les fichiers
Données métier Variables très spécifiques (LAI, stade floraison, température jour/nuit...)

2️⃣ Feature Engineering

Le rendement d'une semaine dépend fortement des 6-8 semaines précédentes (inertie biologique). Nous avons donc créé :

  • 49 features finales :
    • 8 variables climatiques × 6 lags temporels = 48 features
    • 1 variable Days_Since_Plantation
  • 2 targets : Rendement_kg_per_m2_S2 et Rendement_kg_per_m2_S4

3️⃣ Modélisation ML

Comparaison de 8 modèles avec optimisation Optuna :

Modèle R² (S+2) Résultat
ElasticNet 0.57 ✅ Retenu
Ridge 0.52
XGBoost 0.48 Overfitting
LightGBM 0.45 Overfitting

4️⃣ Modèle Physiologique TOMSIM

Développement parallèle d'un modèle mécaniste simulant :

  • Photosynthèse (Pgmax, réponse au CO2)
  • Partitionnement des assimilats
  • Croissance et maturation des fruits

Le Plafond de Verre : Le Manque de Données

Le défi majeur : Malgré 4 ans de données, notre approche ML était limitée.

4 ans × 52 semaines = ~208 lignes théoriques
- Périodes hors-saison (plantation/récolte)
= ~170 lignes exploitables pour le ML

Ce volume de données est insuffisant pour des modèles complexes (XGBoost, réseaux de neurones), ce qui explique :

  • L'overfitting des modèles "lourds"
  • Le choix d'ElasticNet (régularisation L1+L2)
  • Un R² plafonné autour de 0.57

💡 Solution future : Accumulation de plus d'années / plus de serres ou approche hybride ML+Physiologique


Structure

Sival_AGreen/
├── app/                        # Dashboard Streamlit
│   ├── Home.py                 # Page d'accueil avec KPIs
│   └── pages/
│       ├── 1_Predictions.py    # Vue ML vs TOMSIM côte-à-côte
│       └── 2_Scenarios.py      # Scénarios climatiques + Calibration
│
├── notebooks/                  # EDA et expérimentations
│   ├── 01_EDA_Pred_nbfruit_poidmoyen.ipynb
│   └── 02_EDA_Pred_rendement.ipynb
│
├── physio/                     # Modèle physiologique
│   ├── TOMSIMfinal2.py         # Implémentation TOMSIM
│   └── climat_avec_rendement.csv
│
├── models/                     # Modèles ML entraînés
│   ├── model_S2.pkl            # ElasticNet horizon +2 semaines
│   ├── model_S4.pkl            # ElasticNet horizon +4 semaines
│   └── feature_info.json       # 49 features + split index
│
├── data/                       # Données traitées
│   └── df_model_yield_final.csv  # Dataset ML final (169 semaines)
│
├── src/                        # Scripts d'entraînement
│   ├── train_models.py
│   └── script_modeles.py
│
├── reports/                    # Rapports et métriques
│   ├── RAPPORT_FINAL_ML_TOMATES.md
│   └── metrics.json
│
├── 000_AgreenDefi/             # Données brutes CTIFL (non versionnées)
│   ├── S1/                     # Serre 1 (2021-2025)
│   └── S2/                     # Serre 2 (2022-2025)
│
├── docs/images/                # Captures d'écran dashboard
├── requirements.txt
└── README.md

Technologies

  • ML : scikit-learn (ElasticNet), Optuna
  • Physiologie : scipy (optimisation)
  • Visualisation : Plotly
  • Interface : Streamlit

Installation

git clone https://github.com/Gael926/hackaton-sival-agreen-ctifl.git
cd hackaton-sival-agreen-ctifl
pip install -r requirements.txt
python -m streamlit run app/Home.py

Équipe

Projet réalisé dans le cadre du Hackathon Agreen - CTIFL Carquefou