# Water Quality Prediction — South Africa
Prédiction de 3 indicateurs de qualité de l'eau pour 200 stations en Afrique du Sud à partir de données satellitaires, climatiques, pédologiques et topographiques.
## Résultats
| Cible | R² (CV 5-fold) | Transformation |
|-------|---------------|----------------|
| Total Alkalinity (TA) | **0.847** | aucune |
| Electrical Conductance (EC) | **0.859** | aucune |
| Dissolved Reactive Phosphorus (DRP) | **0.630** | log1p → expm1 |
| **Moyenne** | **0.779** | |
## Architecture
```
test-ai/
├── component/
│ ├── api.py # FastAPI — /predict, /health, /metrics
│ ├── feature_engineering.py # Pipeline de features partagé train/inférence
│ ├── train_catboost.py # Entraînement CatBoost + Optuna + MLflow
│ ├── model_config.json # run_id MLflow des modèles en production
│ ├── drift_distribution_reference.json # Enveloppes min/max des features d'entraînement
│ └── mlruns/ # Artefacts MLflow (modèles, métriques, SHAP)
├── data/ # Données brutes (non versionnées)
├── notebooks/
│ └── EDA.ipynb # Analyse exploratoire + embeddings ResNet50
├── tests/
│ └── test_api.py # 13 tests d'intégration
├── Dockerfile # Build multi-stage (builder → runtime)
├── docker-compose.yml # Déploiement avec volumes et limites mémoire
├── docker-entrypoint.sh # Gunicorn + UvicornWorker
└── .env.example # Variables d'environnement documentées
```
### Sources de données
| Fichier | Granularité | Description |
|---------|------------|-------------|
| `train.csv` / `test_template.csv` | station | Labels et coordonnées |
| `terraclimate.csv` | station × date | Climat mensuel (précip, temp, PET, humidité sol) |
| `landsat_spectral.csv` | station × date | Bandes spectrales Landsat + indices NDVI/NDWI |
| `elevatio …