-
Notifications
You must be signed in to change notification settings - Fork 0
Validation automatique des données #5
Comments
Une validation totalement automatique ça se discute. Je pense par contre que le sujet est un bon candidat à l'intelligence artificielle. Et plus il y aura de donnée plus le réseau de neurones sera pertinent. Ce qui milite pour une API basée sur l'ensemble des données du SINP auxquelles il serait pertinent d'ajouter tout ce qui peut provenir de l'expertise de l'UMS Patrinat. A ma connaissance, les librairies python sur le sujet permettent de coder ça en qq lignes. Mais je me trompe peut-être. |
Clairement, il ne s'agit pas de valider les données automatiquement. Et en effet, des alertes dès la saisie, avaient été évoqués/demandés par certains. |
Est ce que quelqu’un dispose d’un gros jeux de données avce des données annotées comme normale et d’autre comme anormale ? On doit pouvoir faire un poc si c’est le cas ? Merci |
On peut déjà commencer avec des choses simples en se basant sur les données du PNE (1 million de données dans la Synthèse sur le territoire) en identifiant :
Et si une observation rentre dans un des ces 3 cas, alors on attire l'attention sur ces données "exceptionnelles" pour les valider en priorité. |
Olivier |
Si on veut juste "taxon n'a jamais été vu dans la commune" ont n'a pas besoin de réseau de neurone, une simple requette SQL peut faire le job. Ca reste hyper interessant d'entainer un reseau sur les "validees / non validees" scientifiquement mais en terme de finesse du diagnostic. |
Si je t'exporte les champs cd_nom et Insee sur les 1 million de données que l'on a dans notre GeoNature est-ce que ça le fait ? |
il faudrait avoir toute l'observation (qui, quand, ou, quoi) et l'annotation valide ou non valide. |
Oui je baserai ça directement sur les données de la Synthèse où on a les obs avec date, localisation, insee, altitude et meme Validation à terme. Je ferai deja 3 vues matérialisées basées sur la Synthese calculant pour chaque taxon l'altitude min et max, les communes de présence et les dates min et max. Chacun pourrait adapter ces VM pour ne prendre que les donnees validées par exemple. |
Le "qui" n'apporte pas grand chose il me semble pour le moment et c'est rgpd sensible ;). Je ne le mettrais pas. Voici une requête vite fait qu'on peut mettre en vue matérialisée si besoin. Elle compile toutes les infos dans une seule vue. GeoNature2
GeoNature1 (test sur 1 million de données, les perfs sont assez bonnes : 5s dans pgadmin pour 6658 taxons).
|
OK super. |
Oui bonne idée. J'affine ça et je teste sur les données de la V1. |
A terme il faudra intégrer ça dans le schéma Synthese et l'intégrer à l'API pour pouvoir l'utiliser dans différents modules. |
Voici une function pour la V1 qui permet de travailler taxon par taxon avec de très bonnes perfs.
La fonction retourne une table avec une seule ligne (= un record) qu'on peut utiliser dans le FROM ou le JOIN d'une requête.
Si ça vous convient, je l'adapte pour la V2. |
Si tu commites avant de sauvegarder les dernières modifs, forcement ... |
Salut salut! Top de bosser sur les données de la base, niveau robustesse et contexte local on est pas mal! (surtout pour les phénologies, qui changent selon les territoires). Par contre sur la bbox... ça fait beaucoup baisser la performance de se baser plutôt sur une distance? Dans le style 'attention, l'espèce n'a jamais été vue dans un rayon de 50km". Je prends le cas d'une espèce typique des vallées, à l'échelle nationale, où montpellier se retrouve dans la bbox entre alpes et pyrénées ;) Et sur cette distance, définir un seuil en fonction du groupe2 inpn? Sur le fait de fonctionner sur une vue pour permettre à chacun de l'adapter, forcement c'est top. Taxhub pourrait pas intervenir également pour préciser des variables à utiliser dans les calculs? La c'est pour chipoter mais j'aime bien, par exemple pour les papillons on met un seuil de 50km par defaut (groupe2), mais pour telle espèce très localisée je peux choisir de mettre un seuil à 3km? Ou pour un reptile puisqu'une tortue marine aura pas la capacité de déplacement de la couleuvre d'esculape. C'est pas des souhaits c'est surtout pour envisager les meilleures possibilités ;) |
En effet la bbox n'est pas idéale mais c'est un début. Sinon, comme tu évoques, on pourrait faire des buffers autour des points et les fusionner. Ça éviterait de prendre des vallées quand il s'agit d'une espèce d'altitude. Mais sur ce point, le contrôle d'altitude permet de contrôler cette aspect. Merci pour les pistes intéressantes. Même si pour le moment, on ne va pas trop compliqué avec des distances par espèce gérées dans TaxHub. |
Bonjour à tous, belle discussion qui s'amorce. Pour ma part, Stocker et faire évoluer le résultat de ces critères pour chaque espèce dans une table est économe. On ne calcule les critères pour le taxon que si une nouvelle donnée est validée. Ajouter à cela une possibilité de "tchat" entre validateurs et observateur serait top pour faciliter les discussions et dynamiser encourager les observateurs. Super projet ! |
Petit ajout sur les dates : ne pas se limiter je pense à un cas simple d'une fourchette "date min-date max", mais prévoir quelque chose basé sur la densité des observations à telle date (en restant simple). Pour couvrir les cas de plusieurs générations annuelles, ou les migrations avec un passage printanier et automnale etc. Question encore plus "pénilble" ou complexe .. quid des stades? Saisir un juvénile à une période où il n'y a normalement que des adultes? Ca se complexifie vite et je me doute qu'on pourra pas tout gérer de manière automatique mais juste pour savoir ce que vous aviez en tête sur ce point ;) |
Ce qu'on en tête? Merci pour ces pistes d'évolution. |
Pour les dates c bien multiannee car c pas date min et date max mais jour min et jour max. Mais là notre problématique avant d'aller plus loin c'est comment gérer les données pourries sans date precise qui peuplent 80% des BDD naturalistes. Idem pour les autres champs comme les géométries imprécises etc... |
I serait pas souhaitable de mettre des seuils? Une date ou on a que l'année, on la rentre pas dans le processus. On date ou on a 2 semaines (données de piégeage ou autre) on prend la période, ou la médiane? Pour géographie, pareil, on a le département ou plus de 100km2 ou je ne sais quoi, la donnée n'est pas prise en compte. On a une commune, on prend toute la commune. Donc le tampon se fait autour de la commune... ? |
Oui on réfléchit comment ne pas prendre en compte les données imprécises qui pourraient perturber les calculs. |
Bonjour à tous, Je trouve l'idée mise en avant par ce forum intéressante, à savoir de valider automatiquement une observation en vérifiant que celle-ci ne soit pas absurde ou que celle-ci suit une logique cohérente en comparaison avec d'autres observations de cette même espèce. Afin de garder une plage de validité juste il faudrait avoir une marge la plus précise possible et faire attention au observation qui serait ni fausse ni juste, c'est à dire qu'une observation qui est enregistrée avec une mauvaise altitude par exemple (erreur de l'observateur et donc observation fausse) mais qui est validée comme étant juste (car l'altitude enregistrer est cohérente, elle peut être par exemple à la limite haute de la marge de validation) va tout de même contribuer à la mise à jour de la nouvelle marge de validité de cette espèce et donc si ce phénomène ce reproduit plusieurs fois la marge de validité risque de se décaler de plus en plus jusqu'à détecter de bonnes observations comme étant fausses. Les réseaux de neurones (ou une regresion) ici pourraient être intéressants si vous souhaitez prendre en compte des relations plus complexes et plus nombreuse entre les différentes observations, mais pour ce début les requêtes SQL semblent une solutions efficaces et simple. Concernant le problèmes des données imprécises, je ne comprend pas bien quel est le problème ? |
Merci pour ce retour. En effet, pour les données imprécises, les données à venir ne posent pas vraiment de problème, puisque la saisie est contrôlée et avec pas mal de choses calculées automatiquement pour éviter les erreurs. On verra comment les mettre de côté dans les calculs. Et c'est aussi pour ça que l'on se base sur une vue. Cela laisse la liberté à chacun d'ajuster les données sur lesquels se base ces calculs, en fonction de son contexte et de son historique de données. |
Merci pour votre réponse, je m'interresse à cette discution car en dehors du faite que je trouve cela intéressant, je suis stagiaire en deep learning chez Natural Solutions. Effectivement concernant les données historiques et/ou bibliographiques si l'information est manquante ou imcomplète cela est problématique, comme vous le dite vaut mieux les ignorer. |
OK super, si il y a matière à aller plus loin, ou faire des tests, on est partant ! |
Pour le cas des données a la marge, il y a moyen de faire des choses relativement simples niveau stats. Ça doit pouvoir se traduire pour le calculer dans les bases, de manière à utiliser une gamme qui englobe 95% des données. Les 5% sur un jeu conséquent c'est des données un peu originales. La aussi chacun ajusté son seuil... |
Pour le moment le trigger |
Bonjour, comme discuté avec Camille. Je commence pour ma part à travailler sur la validation semi-automatique des données dans le cadre de la mise en place du pôle sinp invertébrés pour la région/dreal AURA. Le processus sera exclusivement en SQL pour ma part et a pour but d'être générique et utilisable/personnalisable le plus facilement possible par d'autres. Le fonctionnement global :
Pour faire simple :
Dans son fonctionnement par défaut on donc peut imaginer que pour chaque espèce, la fonction calcule un unique zonage de type multipolygone, avec ses effectifs validés par pas de temps. Après discussion avec notre groupe de travail,on laisse tomber la notion de stade, qui n'est pas applicable à tous les taxons et qui éclate et complexifie trop les règles. On part donc du principe que si j'ai 23 données d'une espèce validée en janvier, quelque soit son stade, ca veut dire qu'on est en mesure de produire des données valides sur cette période de l'année. Ca évite aussi de gérer les stades non renseignés etc qui nous parviendront au pôle dans notre contexte agglomérateur. Cependant le MCD suivant (et la fonction peut-être dans un second temps) permettront de faire des choses un peu plus poussées (sans partir trop loin), en calculant plusieurs géométries pour une espèce, ayant chacune leurs périodes valides. On peut par exemple intégrer un id_type_area en paramètre, de manière à calculer des règles différentes pour chaque aire de ce type (région, zone biogéographique, parc national ou autre...) ce qui laisse pas mal de souplesse à l'utilisateur pour adapter les règles à ses besoins Coté BDD On aurait une table avec les cd_ref et leurs geom+altitudes min/max réelles jugés valides Tout ça serait alors exploitable par le dashboard, ou par un module de saisie par exemple, pour alerter sur les données qui ne rentreraient pas dans ces cas connus et validés. Enfin je prévois une table méta pour stocker dans mon cas les dates de mises à jour des règles de validation automatique, par la fonction. (une seconde fonction permettrait biensur d'attribuer le statut 'probable - automatique' aux données qui rentrent dans les clous, soit en trigger au moment de l'insertion dans la synthèse, soit via une fonction déclenchée par un cron. Tout ce qui ne rentre pas dans les règles reste en attente de validation (peut être paramétrable?) en vue d'une validation manuelle ) (mcd à venir ;)) |
Bonjour à tous, pour le calcul de l'aire de répartition, les fonctions ST_ClusterDBSCAN et ST_ClusterKMeans utilisées ci-dessous sont intéressantes car paramétrables et déjà existantes : http://si.cenlr.org/12-04-2018/postgis-listes-rouges-aire-d-occupation |
Sans rentrer dans le détail technique des critères d'analyse et des calculs, je serais favorable à un dev aboutissant à une API publique prenant en entrée le cd_ref, la dateobs, le geom, l'altitude, etc... et renvoyant une note de fiabilité générale accompagnée d'info concernant le ou les critères analysés. A noter qu'Elsa Guilley travaille actuellement chez nous à débroussailler le sujet (touffu !) |
Une étude des solutions existantes de validation automatique dans plusieurs outils (INPN, CEN LR, SILENE, Tela Botanica, Picardie Nature, SINP La Réunion) est disponible page 21 du rapport de stage https://geonature.fr/documents/2019-09-rapport-stage-Elsa-Guilley-Dashboard-Validation.pdf |
Voici les scripts SQL, fortement inspirés du travail réalisé par Mathieu au CEN LR : Création de la table des profils types :
Il manque la condition dans le WHERE qui sélectionne seulement les données validées. Création fonction validation :
Création fonction de calcul du score :
Il manque le trigger qui se déclenche à chaque insertion/modification de donnée et qui lance la fonction de validation. Il est présent dans mon mémoire. |
Merci @camillemonchicourt , Elsa. Est-ce que c'est implémenté en l'état dans la prochaine release? Est-ce que c'est activable/désactivable, ou est-ce qu'il faut désactiver le trigger simplement, si on utilise une autre méthode? |
Non ce n'est pas du tout implémenté actuellement. |
Ca roule. Pour certains, GN a tout intérêt à avoir une validation automatique dont les règles sont calculées 'en live' au fil des saisies. Dans notre cadre agglomérateur, ce n'est pas souhaitable que les règles de validation changent de facon "incontrolée". Il faut donc que les développements permettent un calcul des règles à un pas de temps configurable. |
Finalement pris dans un cadre plus large que la seule validation, les profils d'espèces ont été créés de manière générique, ils seront rafraichis par un cron avec une fréquence qui sera donc configurable par chacun. Une fonction, basée sur le travail d'Elsa, permettra de faire une validation automatique à partir de ces profils. |
Un des enjeux évoqués du module Validation est le fait de pouvoir valider automatiquement les données banales. Ou du moins de pouvoir mettre en avant les données exceptionnelles.
Pour faire cela, à voir comment mettre en place des règles dans la BDD, générique et adaptables à chaque contexte.
Un exemple : http://si.cenlr.org/validation_automatique_de_donnee
The text was updated successfully, but these errors were encountered: