{"id":10713,"date":"2016-06-17T17:26:18","date_gmt":"2016-06-17T15:26:18","guid":{"rendered":"https:\/\/www.etalab.gouv.fr\/?p=10713"},"modified":"2019-06-18T10:34:28","modified_gmt":"2019-06-18T08:34:28","slug":"opensolarmap-cote-data-sciences-03","status":"publish","type":"post","link":"https:\/\/preprod.etalab.gouv.fr\/opensolarmap-cote-data-sciences-03","title":{"rendered":"OpenSolarMap c\u00f4t\u00e9 data-sciences (0\/3)"},"content":{"rendered":"\n

Le projet OpenSolarMap<\/a>\nd\u00e9montre comment il est possible d\u2019am\u00e9liorer la connaissance du\nterritoire fran\u00e7ais en utilisant astucieusement les ressources de la\nmultitude et des data-sciences. Son objectif concret est de classifier\nles toitures en quatre cat\u00e9gories : orientation nord\/sud; orientation\nest\/ouest ; toit plat ; autre ou ind\u00e9termin\u00e9. Cela permet, par\nexemple, d\u2019\u00e9valuer le potentiel d\u2019installation de panneaux solaires ou\nla possibilit\u00e9 de v\u00e9g\u00e9taliser. Quelques milliers d\u2019exemples ont \u00e9t\u00e9\nrecueillis gr\u00e2ce \u00e0 une plateforme\nde crowdsourcing<\/a>. Puis, des algorithmes ont \u00e9t\u00e9 utilis\u00e9s pour\ncouvrir l\u2019ensemble du territoire. Une pr\u00e9sentation g\u00e9n\u00e9rale\ndu projet<\/a> est accessible sur le blog d\u2019Etalab.<\/strong><\/p>\n\n\n\n

Cet article est le premier d\u2019une s\u00e9rie qui pr\u00e9sente la partie\ndata-science du projet. C\u2019est l\u2019occasion de brosser \u00e0 grands traits la\nd\u00e9marche du data-scientist et de faire le tour de quelques techniques\nfr\u00e9quemment utilis\u00e9es. La s\u00e9rie vise avant tout un public technique\nmais non sp\u00e9cialiste. Des r\u00e9f\u00e9rences permettent d\u2019approfondir les\nnotions survol\u00e9es.<\/strong><\/p>\n\n\n\n

Le code source \u00e9crit pour le projet OpenSolarMap est accessible sur la\nplateforme GitHub<\/a>. La\npartie data-sciences est contenue dans le repository solml<\/a>.<\/p>\n\n\n\n

Analyse des contributions<\/h1>\n\n\n\n

Nous avons voulu tout d\u2019abord proc\u00e9der \u00e0 une analyse des contributions\nfaites sur l\u2019interface opensolarmap.org<\/a>. Au 21 d\u00e9cembre\n2014, nous disposions de 130.374 contributions, sur 38.553 b\u00e2timents,\npermettant de classifier avec confiance 10.771 b\u00e2timents par un\nsyst\u00e8me de vote. Ces contributions<\/a>\nsont accessibles sur la plateforme data.gouv.fr<\/a>.<\/p>\n\n\n\n

L\u2019interface de contribution ne conna\u00eet le contributeur que par son\nadresse IP. Cette adresse IP est ensuite hash\u00e9e pour pr\u00e9server\nl\u2019anonymat. Les contributions proviennent de 1081 utilisateurs.<\/p>\n\n\n\n

Mauvaises contributions<\/h2>\n\n\n\n

Certaines contributions portent sur des b\u00e2timents dont on ne connait\npas encore avec certitude la vraie classe. Pour faire une analyse des\nerreurs, il ne faut garder que les pr\u00e9dictions qui portent sur les\nb\u00e2timents d\u00e9j\u00e0 classifi\u00e9s. Ces contributions, dont on peut dire si\nelles sont justes ou fausses, sont au nombre de 60.436.<\/p>\n\n\n\n

\"scatterplot_users\"<\/figure>\n\n\n\n

Figure 1<\/p>\n\n\n\n

Parmi ces contributions, il y a 1.998 erreurs. Cela repr\u00e9sente 3.3%\ndes contributions. Il faut cependant noter que les b\u00e2timents\nclassifi\u00e9s avec certitude sont en moyenne plus faciles \u00e0 classifier\nque les autres. Les contributions sur ces b\u00e2timents sont donc moins\nsusceptibles d\u2019\u00e8tre erron\u00e9es. Le taux d\u2019erreurs r\u00e9el est donc sans\ndoute plus \u00e9lev\u00e9 que cette valeur observ\u00e9e.<\/p>\n\n\n\n

La figure 1 montre la r\u00e9partition des utilisateurs suivant leur\n nombre de contributions et leur taux de contributions correctes. On\n ranger les contributeurs en plusieurs cat\u00e9gories :\n\n\n des contributeurs ayant un nombre de contributions \u00e9lev\u00e9 et un un taux\n de contributions correctes proche de 1. Dans cette cat\u00e9gorie, on \nremarque un contributeur ayant environ 8.000 contributions \u00e0 lui seul : \nc’est Christian Quest !\n\n\n des contributeurs ayant un nombre faible de contributions et un taux \nde contributions correctes faible. On peut faire l’hypoth\u00e8se que ce sont\n des contributeurs n’ayant pas compris comment utiliser l’interface de \ncontribution.\n\n\n un contributeur a quelques centaines de contributions et un taux \nfaible, proche de 55%. L’analyse de ses contributions montrent qu’il \ns’agit sans doute d’un comportement malveillant. On peut \u00e8tre \u00e9tonn\u00e9 de \nrencontrer ici un comportement malveillant, mais comme on va le voir \ntout de suite, il est tr\u00e8s facile de s’en pr\u00e9venir.\n\n\n<\/p>\n\n\n\n

En ignorant les contributions des utilisateurs ayant un taux observ\u00e9 \nde contributions correctes de 70%, on peut \u00e9liminer 191 contributeurs \npour 725 erreurs, c\u2019est-\u00e0-dire plus d\u2019un tiers des erreurs.<\/p>\n\n\n\n

Influences sur le taux de contributions correctes<\/h2>\n\n\n\n
\"fatigue\"<\/a><\/figure>\n\n\n\n

\n Figure 2\n <\/p>\n\n\n\n

On peut se demander s\u2019il existe des facteurs qui influencent le taux de contributions correctes.<\/p>\n\n\n\n

Existe-t-il un effet de fatigue avec un taux de contributions \ncorrectes qui baisserait d\u2019autant que le contributeur a contribu\u00e9 au \ncours de 20 derni\u00e8res minutes ? La figure 2 indiquerait plut\u00e8t le \ncontraire.<\/p>\n\n\n\n

Quelle est l\u2019influence du temps de r\u00e9ponse sur le taux de \ncontributions correctes ? La figure 3 montre que ce taux est optimal \nentre 1 et 3 secondes environ. En dessous d\u2019une seconde, il chute \nrapidement \u00e0 93% pour un temps d\u2019environ 0.5 seconde. Dans ces cas, le \ncontributeur n\u2019a peut-\u00e8tre pas pris assez de temps pour r\u00e9pondre \npr\u00e9cis\u00e9ment. Au del\u00e0 de 3 secondes il chute aussi. Le contributeur a \npeut-\u00e8tre h\u00e9sit\u00e9 face \u00e0 un b\u00e8timent plus difficile \u00e0 classifier que la \nmoyenne.<\/p>\n\n\n\n

\"response_time\"<\/a><\/figure>\n\n\n\n

\n Figure 3\n <\/p>\n\n\n\n

Entra\u00e9ner un classifieur automatique<\/h1>\n\n\n\n

L\u2019ensemble des b\u00e2timents dont on conna\u00e9t l\u2019orientation gr\u00e8ce aux\ncontributeurs est bien plus petit que le nombre total de b\u00e2timents\nconstruits sur le territoire fran\u00e9ais. Mais il est possible\nd\u2019automatiser une tache de classification, \u00e0 la condition d\u2019avoir un\nnombre suffisant d\u2019exemples pr\u00e9alablement classifi\u00e9s.<\/p>\n\n\n\n

Pour simplifier le probl\u00e8me, on ne va s\u2019attaquer dans un premier temps\nqu\u2019aux deux premi\u00e8res classes :\n\n\n les toitures orient\u00e9es au nord et au sud\n\n\n les toitures orient\u00e9es \u00e0 l’est et \u00e0 l’ouest\n\n\n<\/p>\n\n\n\n

De plus, ces deux classes seront de tailles \u00e9gales, ce qui ne\ncorrespond pas \u00e0 la r\u00e9alit\u00e9.<\/p>\n\n\n\n

On verra dans plus tard\u00e9comment g\u00e9n\u00e9raliser une solution \u00e0 deux\nclasses pour distinguer quatre classes de tailles in\u00e9gales.<\/p>\n\n\n\n

Flux de donn\u00e9es<\/h1>\n\n\n\n

Voici la description du flux des donn\u00e9es trait\u00e9es, depuis les\ninformations requ\u00e8t\u00e9es depuis l\u2019ext\u00e9rieur vers le r\u00e9sultat de la\nclassification :\n\n\n Le cadastre est consult\u00e9 via la base de donn\u00e9e d’OpenStreetMap. Le \ncadastre contient le contour des murs ext\u00e9rieurs. Ce contour est \nsimplifi\u00e9 en un rectangle. Le b\u00e8timent n’est pas examin\u00e9 davantage si la\n toiture n’est pas susceptible d’\u00e8tre orient\u00e9e au sud, c’est-\u00e9-dire si \nl’orientation du rectangle s’\u00e9carte trop des directions cardinales.\n\n\n L’image satellite des toits est requ\u00e8t\u00e9e avec GDAL<\/a>\u00e9sur l’API de Mapbox<\/a>.\n GDAL est une excellente librairie de traitement d’images g\u00e9ospaciales. \nDans ce projet, toutes les conversions entre r\u00e9f\u00e9rentiels g\u00e9ographiques \net r\u00e9f\u00e9rentiels cartographiques sont g\u00e9r\u00e9es par GDAL. GDAL permet \n\u00e9galement d’aller chercher les images satellite des toits \u00e0 partir des \ncoordonn\u00e9es voulues, et g\u00e8re de mani\u00e8re transparente le requ\u00e8tage par \ninternet, le d\u00e9coupage par\u00e9tuiles et le cache.\n\n\n Apr\u00e8s cette \u00e9tape de t\u00e9l\u00e9chargement, les images satellites des toits \nsont stock\u00e9es localement au format jpg. Une image est une grille de \npixels de taille\u00e9variable\u00e9souvent proche de 100 par 100. Chaque pixel \nest compos\u00e9e de 3 valeurs enti\u00e8res comprises entre 0 et 255 pour coder \nl’intensit\u00e9 des couleurs rouge, vert et bleu.\n\n\n Les images subissent une r\u00e9duction de la taille et\/ou un passage en \nnoir et blanc suivant les besoins du classifieur. A l’issue de ce \npr\u00e9traitement, les images ont toutes la m\u00e8me taille et le classifieur \npourra traiter l’image comme un tableau num\u00e9rique de taille fix\u00e9e. Une \nimage pourra \u00e8tre vue selon les cas comme un tableau \u00e0 deux dimensions \nauquel cas la g\u00e9om\u00e9trie de l’image est pr\u00e9serv\u00e9e, ou comme un tableau \u00e0 \nune dimension (un vecteur). Dans ce cas les valeurs de chaque pixel sont\n d\u00e9pli\u00e9es sur une seule dimension. On parle de \u00ab features \u00bb pour \nd\u00e9signer ces valeurs num\u00e9riques caract\u00e9risant une image.\n\n\n Un classifieur automatique intervient ici pour produire\u00e9un avis pour \nchaque toit. Cet avis se compose de l’indice de la classe jug\u00e9e la plus \nprobable et d’un indice de confiance.\n\n\n Ce score peut ensuite \u00e8tre revers\u00e9 dans la base OpenStreetMap.\n\n\n<\/p>\n\n\n\n

Un premier algorithme tr\u00e8s simple<\/h1>\n\n\n\n

Par principe, nous commen\u00e7ons toujours nos analyses par un algorithme\nextr\u00e8mement simple. Cette \u00e9tape est tr\u00e8s importante pour ces raisons :\n\n\n Si ce premier algorithme, aussi simple qu’il soit, r\u00e9pond compl\u00e8tement\n au besoin initial, il n’y a pas de temps perdu \u00e0 d\u00e9velopper un autre \nmod\u00e8le plus complexe. De mani\u00e8re g\u00e9n\u00e9rale, un algorithme est d’autant \nmieux accept\u00e9, rapide d’impl\u00e9mentation et d’ex\u00e9cution, maintenable et \nrobuste qu’il est simple.\n\n\n Sinon, il fournit une base de comparaison pour d’autres algorithmes plus sophistiqu\u00e9s.\n\n\n En cas de calendrier serr\u00e9 ou de d\u00e9lai non anticip\u00e9 durant le \nd\u00e9veloppement d’un algorithme mieux adapt\u00e9, il constitue une solution de\n substitution imm\u00e9diatement utilisable.\n\n\n<\/p>\n\n\n\n

OpenSolarMap ne d\u00e9roge pas \u00e0 la r\u00e8gle. Une image de toit est divis\u00e9e\nen 4 parties \u00e9gales comme repr\u00e9sent\u00e9 sur le figure 4. Pour chacune de\nces zones, on somme la valeur de chaque couleur de chaque pixel. On va\nnoter ces sommes S1, S2, S3 et S4.<\/p>\n\n\n\n

\"dummy\"<\/a><\/figure>\n\n\n\n

\n Figure 4\n <\/p>\n\n\n\n

Puis \u00e0 partir de ces sommes on calcule la diff\u00e9rence entre la partie\ndroite et la partie gauche de l\u2019image, puis entre la partie haute et\nla partie base de l\u2019image.<\/p>\n\n\n\n

\n I\ufffdNS = |(S1+S2) ‘ (S3+S4)|
I\ufffdEW = |(S1+S3) ‘ (S2+S4)|\n<\/p>\n\n\n\n

On peut s\u2019attendre \u00e0 ce que la premi\u00e8re diff\u00e9rence soit plus\nimportante pour les toitures orient\u00e9es est-ouest alors que la seconde\ndiff\u00e9rence soit plus importante pour les toitures orient\u00e9es\nnord-sud. Calculons donc la diff\u00e9rence entre ces deux diff\u00e9rences :<\/p>\n\n\n\n

\n Y = I\ufffdNS \u2013 I\ufffdEW + c\n<\/p>\n\n\n\n

La constante c est introduite pour prendre en compte l\u2019asym\u00e9trie\ncaus\u00e9e par la position du soleil, toujours au sud, et de l\u2019ombre,\ntoujours au nord. Sa valeur est fix\u00e9e pour maximiser la performance du\nmod\u00e8le.<\/p>\n\n\n\n

Le r\u00e9sultat de l\u2019algorithme est le signe de Y. Si Y est positif,\nl\u2019algorithme pr\u00e9dit une orientation nord-sud, si le signe est n\u00e9gatif\nil pr\u00e9dit une orientation est-ouest. Avec une valeur de\u00e9c optimale, le\ntaux d\u2019erreur est de 38%. C\u2019est mieux que le classifieur al\u00e9atoire,\nqui r\u00e9pond 0 ou 1 avec une probabilit\u00e9 \u00e9gale et qui a donc un taux\nd\u2019erreur de 50%. Mais ce n\u2019est pas satisfaisant. Il faut donc\nchercher un algorithme plus compliqu\u00e9.<\/p>\n","protected":false},"excerpt":{"rendered":"

Le projet OpenSolarMap d\u00e9montre comment il est possible d\u2019am\u00e9liorer la connaissance du territoire fran\u00e7ais en utilisant astucieusement les ressources de la multitude et des data-sciences. Son objectif concret est de classifier les toitures en quatre cat\u00e9gories : orientation nord\/sud; orientation est\/ouest ; toit plat ; autre ou ind\u00e9termin\u00e9. Cela permet, par exemple, d\u2019\u00e9valuer le potentiel d\u2019installation de …<\/p>\n

OpenSolarMap c\u00f4t\u00e9 data-sciences (0\/3)<\/span> Lire la suite\u00a0\u00bb<\/a><\/p>\n","protected":false},"author":27,"featured_media":10714,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":""},"categories":[271],"tags":[96,215,275],"uagb_featured_image_src":{"full":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd18.png",768,480,false],"thumbnail":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd18-150x150.png",150,150,true],"medium":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd18-300x188.png",300,188,true],"medium_large":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd18-768x480.png",768,480,true],"large":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd18.png",768,480,false],"1536x1536":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd18.png",768,480,false],"2048x2048":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd18.png",768,480,false],"rpwe-thumbnail":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd18-45x45.png",45,45,true]},"uagb_author_info":{"display_name":"Michel Blancard","author_link":"https:\/\/preprod.etalab.gouv.fr\/author\/michel"},"uagb_comment_info":0,"uagb_excerpt":"Le projet OpenSolarMap d\u00e9montre comment il est possible d\u2019am\u00e9liorer la connaissance du territoire fran\u00e7ais en utilisant astucieusement les ressources de la multitude et des data-sciences. Son objectif concret est de classifier les toitures en quatre cat\u00e9gories : orientation nord\/sud; orientation est\/ouest ; toit plat ; autre ou ind\u00e9termin\u00e9. Cela permet, par exemple, d\u2019\u00e9valuer le potentiel d\u2019installation de\u2026","_links":{"self":[{"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/posts\/10713"}],"collection":[{"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/comments?post=10713"}],"version-history":[{"count":2,"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/posts\/10713\/revisions"}],"predecessor-version":[{"id":10716,"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/posts\/10713\/revisions\/10716"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/media\/10714"}],"wp:attachment":[{"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/media?parent=10713"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/categories?post=10713"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/tags?post=10713"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}