Votre navigateur ne supporte pas impress.js, cette présentation a donc été simplifiée.

Pour une meilleure expérience, utilisez un navigateur Chrome, Safari ou Firefox à jour.

Thomas Grandjean
Service Information Développement Durable et Évaluation Environnementale
Club de l'IA (02/09/2021)

Intelligence Artificielle, source Fix

Crédits : reproduit avec l'autorisation de FIX, www.fix-dessinateur.com

# Apprentissage automatisé # 🤖 ## Développements exploratoires ### DREAL Hauts-de-France
Intelligence Artificielle, source Fix

Crédits : reproduit avec l'autorisation de FIX, www.fix-dessinateur.com

# Quelques mots sur l'organisation ### Service Information, Développement Durable et Évaluation Environnementale (IDDÉE) * Un service traditionnellement positionné sur la donnée (SIG, stats, SGBDR) et au service des autres * Des compétences en programmation depuis plusieurs années (python, R, php, java, javascript, basic, etc.) * Mais pas de *datascientist* de formation Un agent initié au ML grâce au réseau [SPYRALES 🔗](https://www.spyrales.fr/) piloté par le MEFR Deux stagiaires IMT Nord Europe
* programmation python, y compris applications web métier en django * IMT Nord Europe, ex Institut Mines Télécom Lille Douai, fusion École des Mines de Douai / Lille Télécom
# Des développements ML à quelle échelle ?
Des développement à l'échelle des Hauts-de-France (ou du bassin Artois-Picardie), mais systématiquement compatibles avec un déploiement dans d'autres régions. *(Un des projets présentés dans cette présentation est d'ailleurs en cours de déploiement en Normandie.)* **MAIS ** *(retour d'expérience 😉)* besoin de créer un processus de "nettoyage" des données local **impliquant le service métier**. Notamment, quatres écueils ** *data* ** rencontrés : * moissonnage des données (scraping, maintenance chronophage) * fiabilisation des données (**historique** compris 👿) * latence/complexité des mises à jour (synchro bases métier / sources moissonnables) * exhaustivité des clefs étrangères (SIREN, NAF, etc.) (Avis très personnel 😇 : ML "métier" recquiert un référent "nettoyage des données" désigné dans le service métier ad hoc)
* Moissonnage des données : application GIDAF (cf. description plus loin dans la présentation), "scrapable" localement car droits accordés localement -> maintenance complexe locale, même quand développement applicatif global * Fiabilisation des données : ML nécessite bcp de données pour s'entraîner ; si service métier refuse de remonter 3 ans en arrière pour faire corriger des données (à tort ou à raison), met en péril le processus d'apprentissage automatisé * La latence est particulièrement problématique si données récupérées par scraping (processus d'aspiration doit être parfait !) ; autre possibilité : retraiter les données localement (qui ? comment ? engage responsabilité Etat ?)
#Temporalité ⌛
* L'apprentissage automatisé est un sujet très récent pour nous * Pas d'historique sur le sujet *(des modèles déjà utilisés pour la prévision des crues, mais issus du développement d'organismes de recherche)* * Des besoins émergeants : * algorithmes traditionnels pas assez efficaces pour détecter des anomalies, * comblement de données avec des moyennes trop rudimentaire, * repérage d'articles de presse très chronophage. * Réseau spyrales encore très récent (2020 ?) - formation agent DREAL HdF au ML fin 2020 / début 2021 * Hébergement de deux stagiaires IMT Lille Douai printemps/été 2021 *Retour d'expérience : niveau M1 vraisemblablement un peu juste pour lancer de l'IA, même s'il est certain que les conditions d'encadrement n'ont pas simplifié la tâche à nos stagiaires*
# Les outils (langage python 🐍) ### écosystèmes pandas 🐼 / scikit-learn Mention spéciale à certaines librairies qui démocratisent très largement le machine learning (il y en a bien sûr d'autres, mais celles-ci sont celles qu'on a testées pour l'instant 😉): * analyse exploratoire des données (EDA) : * [**pandas_profiling** 🔗](https://github.com/pandas-profiling/pandas-profiling) [✨](./images/0070.00436/profiling_report_0070.00436_nettoye.html) * auto ML : * [**dabl** 🔗](https://dabl.github.io/dev/) *(en phase de développement très actif)* : un bon compromis temps/résultat 👍 : rapide (focus sur les algo les plus simples et les plus rapides), compatible toutes plateformes 👎 : pour la régression, pas possible de choisir des algorithmes plus complexes *(provisoire ?)* * [**AutoSklearn** 🔗](https://automl.github.io/auto-sklearn/master/) : pour davantage de précision si on a du temps devant soi 👍 : performant (prend la durée d'exécution en argument), complet (notamment sur le pre-processing) 👎 : des blocages intempestifs (liés au multiprocessing ?), **limité à linux**
# Quelles techniques de Machine Learning en DREAL ? (*Spoiler alert* : tous les développements sont encore en test, certains ont échoué...) * **clusterisation** : regrouper les données pour travailler par paquets homogènes * **réduction de dimensions** : pour simplifier les jeux de données * **régression** : pour prédire des valeurs en s'appuyant sur d'autres données * **détection d'anomalies** : pour identifier des erreurs ou des fraudes * **topic-modeling** (NLP, à l'étude) : pour identifier le sujet d'articles (cf. présentation du précédent datadrink 😉)
#Les projets concernés par le ML
Les projets (dépôts GitLab ministériels en liens) : * Système d'information sur les rejets aqueux : * [*passerelle Vers'eau ➡️ Triton/IRE* 🔗](https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-hdf/sen_dbap/autosurveillance-stations) * [**Industries au regard de l'environnement (IRE)** 🔗](https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-hdf/ppc/IRE) - [accès aux livrables en ligne : 📰](http://www.hauts-de-france.developpement-durable.gouv.fr/?Publication-de-l-industrie-au-regard-de-l-environnement) * [*passerelle IRE ➡️ Triton* 🔗](https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-hdf/sen_dbap/alimentation_triton_icpe) * [**Triton** (en développement) 🔗](https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-hdf/sen_dbap/triton) ------ * [**Abaques** (prévision des crues) 🔗](https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-hdf/pr-vision-des-crues/abaques) ------ * [*(ADOC, Application pour la veille DOCumentaire, en projet - NLP)* 🔗](https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-hdf/ppc/ADOC)
# Projet n°1 - rejets aqueux ### *Industries au Regard de l'Environnement, Triton & passerelles associées*

Les enjeux du système


Connaissance

Combler les trous de la raquette 🎾 en croisant les bases

Les établissements ayant "oublié" de déclarer sous GEREP ou dont les émissions sont inférieures aux seuils réglementaires


Fiabiliser

Croiser les données pour fiabiliser la publication de l'IRE


Contrôle

Contrôle des déclarations GEREP

Lesquelles sont remontées à la commission européenne


Bilans SDAGE

Extension de l'IRE à tous polluants pour faciliter et améliorer le rapportage SDAGE

Cerise 🍒 sur le gâteau 🧁, ça n'était pas prévu au départ !


Visualisation

Photographie à l'instant t de l'état des masses d'eau

S'affranchir des considérations statistiques "classiques" (notions de "percentile 90")


Diagnostic

Explicabilité de la dégradation de l'état

Identifier la contribution (en flux) propre à chaque pollueur, prendre en compte l'effet cumulé


Temporalité

Prendre en compte la saisonnalité (des cours d'eau, des rejets)

Descendre à un pas de temps fin pour visualiser les pics au lieu d'une approche (traditionnelle) par bilans annuels


Simuler

Ajouter/adapter des pollueurs

Aide à la décision : instruction de dossier, priorisation des mises en conformité.

IRE & Triton - Schéma actuel simplifié (malheureusement, si 😱...)

flowchart LR GIDAF[("GIDAF")] A1((fas:fa-cogs
Algorithme)) GEREP[("GEREP
IREP")] A2((fas:fa-cogs
Algorithme)) GEREP -- Flux annuels --> A2 A3((fas:fa-cogs
Algorithme)) A2 -- Flux assemblés --> A3 GIDAF -- Mesures
ponctuelles --> A1 -- Flux annuels --> A2 V[("Vers'Eau
(STEP)
(XML multiples)")] A13((fas:fa-cogs
Algorithme)) V -- Mesures
ponctuelles --> A13 N[("Naiades
(concentrations)")] BH[("Banque
hydro
(débits)")] A11((fas:fa-cogs
Algorithme)) A11 -- "Flux ponctuels
milieu
(aux noeuds)" --> A12 -- "Flux propres
milieu
(par tronçon)" --> A14 A12((fas:fa-cogs
Algorithme)) A14((fas:fa-cogs
Algorithme)) A13 -- Flux journaliers
sortant
STEP/DO --> A14 A13 -- Flux annuels
entrant/sortant
STEP --> A3 IRE[\"Livrables IRE
(émissions industrielles)"/] Triton[\"App Triton
(flux journaliers
par tronçon)"/] N & BH --> A11 Meteo[("Données
météo ?")] A3 --> IRE Meteo -.-> A14 A3 -- Flux journaliers
ICPE --> A14 --> Triton

IRE & Triton - Schéma projeté avec un peu d'apprentissage automatisé

flowchart LR GIDAF[("GIDAF")] IA1(( fas:fa-cogs
Clusterisation
Comblement)) A1((fas:fa-cogs
Algorithme)) GEREP[("GEREP
IREP")] A2((fas:fa-cogs
Algorithme)) GEREP -- Flux annuels --> A2 A3((fas:fa-cogs
Algorithme)) A2 -- Flux assemblés --> A3 GIDAF -- Mesures
ponctuelles --> IA1 -- Mesures
ponctuelles
augmentées --> A1 -- Flux annuels --> A2 V[("Vers'Eau
(STEP)
(XML multiples)")] IA2(( fas:fa-cogs
Clusterisation
Comblement)) A13((fas:fa-cogs
Algorithme)) V -- Mesures
ponctuelles--> IA2 -- Mesures
ponctuelles
augmentées --> A13 N[("Naiades
(concentrations)")] BH[("Banque
hydro
(débits)")] A11((fas:fa-cogs
Algorithme)) A11 -- "Flux ponctuels
milieu
(aux noeuds)" --> A12 -- "Flux propres
milieu
(par tronçon)" --> A14 A12((fas:fa-cogs
Algorithme)) A14((fas:fa-cogs
Algorithme)) A13 -- Flux journaliers
sortant
STEP/DO --> A14 A13 -- Flux annuels
entrant/sortant
STEP --> A3 IA3(( fas:fa-cogs
Détection
Anomalies)) IRE[\"Livrables IRE
(émissions industrielles)"/] Triton[\"App Triton
(flux journaliers
par tronçon)"/] N & BH --> A11 Meteo[("Données
météo ?")] A3 --> IA3 --> IRE Meteo -.-> A14 A3 -- Flux journaliers
ICPE --> A14 --> Triton style IA1 fill:#f9f,stroke:#333,stroke-width:4px style IA2 fill:#f9f,stroke:#333,stroke-width:4px style IA3 fill:#f9f,stroke:#333,stroke-width:4px
Désolé pour le reformatage du graphe entre les deux diapos, c'est la librairie (mermaid.js) qui repositionne automatiquement 😳...
# Clusterisation ICPE : retour d'expérience Echec quasi total... Pourquoi ? * Clusterisation par code NAF : champ trop incomplet (dans le temps !) pour clusteriser par ce biais (pas toujours les codes SIREN non plus...) * Clusterisation des émissions journalières : trop de diversité dans les polluants suivis (même entre entreprises du même domaine) * Clusterisation des émissions annuelles : trop de lacunes dans les champs dès lors qu'on prend le problème de manière transversale (rejets aqueux, déchets) Une lueur d'espoir tout de même : les stations d'épuration urbaines. (Leurs émissions étant plus homogènes.)

Crédits : GIPHY

# Régressions ICPE : retour d'expérience
* Bilan du stage mitigé 🤔 (pas de métrique permettant de juger de la performance de l'algorithme produit, par ailleurs assez complexe avec une passerelle vers R). * D'autres tests montrent des résultats encourageants 👍 et qui ont un réel impact sur les données produites‍. **Retour d'expérience :** * intérêt à diversifier les librairies autoML (d'autres librairies sont encore à tester : FLAML, AutoKeras...) : * *dabl* arrive parfois à un résultat correct très vite (alors qu'*AutoSklearn* semble aller systématiquement jusqu'au bout du délai maximum) ; * pour autant, *AutoSklearn* trouve parfois des modèles tout à fait convaincants là où *dabl* échoue complètement. * un point de vigilance : *garbage in, garbage out* (encore...). **Besoin à court terme :** intégrer la validation (manuelle ?) / persistance des modèles utilisés dans un pipeline applicatif. Nota : cet exercice réinterroge la stratégie d'autosurveillance des entreprises
###Régressions - ex d'une ICPE
# Détection d'anomalies : retour d'expérience ###(stage en cours d'évaluation) * Situation pré-ML : un algorithme "classique" basé sur la cote Z pour identifier les années à problème. Approche pas toujours efficace et "mono-substances". * Proposition de la stagiaire 🤔 : algorithme de clusterisation (DBSCAN) qui signale la présence d'un point isolé ou de plusieurs clusters
# Projet n°2 - Abaques pour la prévision des crues

Abaques - schéma du pipeline

SMOTE = Synthetic Minority Over-Sampling TEchnique
flowchart LR INPUT["Input (CSV)"] Algo_Couleurs((fas:fa-cogs
Recalcul des
'couleurs')) Rapport_EDA[\"Analyse exploratoire
(EDA dynamique html)"/] Algo_Couleurs --> Rapport_EDA Scaling((fas:fa-cogs
Suréchantillonnage
SMOTE)) Modelisation(( fas:fa-cogs
Modélisation
dabl)) Predictions_png[\"Abaques PNG"/] Predictions_xlsx[\"Abaques XLSX"/] INPUT --> Algo_Couleurs --> Scaling --> Modelisation --> Predictions_png & Predictions_xlsx
*(L'EDA est une production à part, qui permet notamment d'expliquer les échecs de modélisation sur certaines stations.)* Il y a une bonne part d'aléatoire dans le processus de sélection des modèles (très peu de données, surtout dans les classes minoritaires qui nous intéressent). L'important n'est pas tant d'avoir une bonne précision, qu'une bonne précision **dans les classes minoritaires** : les abaques PNG générées permettent de visualiser ces erreurs facilement, ce qui permet à un humain de reprendre les abaques XLSX reprises dans des modèles ultérieurs.
#Abaques - quelques résultats (pas tous bons !)
#Merci pour votre attention
Contact : [thomas.grandjean@developpement-durable.gouv.fr](mailto:thomas.grandjean@developpement-durable.gouv.fr)