bePelias, een lokale geocoder gebaseerd op BeSt Address

Version en français

Geocodering is de bewerking waarbij een tekstueel postadres (‘Fonsnyln 20, 1060 Brussel’) omgevormd wordt tot een in componenten opgesplitste en gestandaardiseerde versie, gelinkt aan een geografische locatie11 :

{"street":  "Fonslylaan", 
 "number":  20, 
 "zipcode": 1060,  
 "city":    "Sint-Gillis",
 "lat":     50.8358216, 
 "lon":     4.3386884}

In een vorig artikel hebben we aangetoond dat er een aantal tools bestaan om deze bewerking uit te voeren en dat het, onder bepaalde omstandigheden, nodig is om over een on-site (on-premise) of lokale tool te beschikken. We zetten eerder al NominatimWrapper in de kijker, een oplossing die we ontwikkeld hebben op basis van OpenStreetMap.

In België beheert de federale overheidsdienst “Strategie en Ondersteuning” (BOSA) BeSt Address, de authentieke bron voor Belgische adressen. Ze zijn beschikbaar als open data in verschillende formaten. In dit artikel stellen gaan we dieper in op de volgende vraag: is het mogelijk om een lokale geocoder op te stellen gebaseerd op deze gegevens? Het antwoord vergt zekere nuance: Ja, maar…

Ten eerste stelt BOSA een aantal webservices ter beschikking maar met twee beperkingen:

  • Deze zijn enkel beschikbaar voor overheidsdiensten, niet voor bedrijven of burgers.
  • Ze bieden geen ‘standaardisatie’: je moet de juiste schrijfwijze van een straat of (deel)gemeente kennen om het te gebruiken.

Pelias

Met het opensourceproject Pelias kan een geocoder opgezet worden op basis van je eigen gegevens. In combinatie met OpenAddresses.io, een project dat open adresgegevens samenbrengt, is het mogelijk om Pelias in te zetten voor een reeks landen of steden, waaronder België met BeSt Address (in combinatie met OpenStreetMap).

Hoewel het eenvoudig is om een geocoder op te zetten die Pelias en BeSt Address combineert en die goed lijkt te werken wanneer je hem test op een paar adressen, raak je al snel teleurgesteld wanneer je probeert naar een hogere versnelling te schakelen en hem datasets stuurt van de (Belgische) Kruispuntbank van Ondernemingen, het werkgeversrepertorium (RSZ) of het rijksregister.

Met Pelias zijn er twee vraagmodi: gestructureerd ({“address”: “Fonsnylaan 20”, “postalcode”: 1060, “locality”: “Sint-Gillis”}) of ongestructureerd ({“query”: “Fonsnylaan 20, 1060 Sint-Gillis”}). Van de gegevens die we gestructureerd (cfr. “pelias_struct” in de grafiek hieronder) getest hebben (10 000 adressen afkomstig van verschillende bronnen in onderstaande legende), was Pelias slechts in staat om 55 % van de adressen exact te lokaliseren. Enkele percentages (1-2) zijn gelokaliseerd wat betreft de straat en in +/- 35% van de gevallen vond Pelias enkel de stad… met andere woorden niks bruikbaars. En in 7-10 % krijgen we zelfs geen enkel resultaat.   

Pelias doet iets beter ‘ongestructureerd’ (pelias), aangezien hij bijna altijd in staat is om een resultaat te verschaffen, en 11 % bijkomende adressen worden exact gelokaliseerd.

Het is interessant om een paar zaken op te merken:

  • Wanneer het resultaat niet exact is, bevat het resultaat geen gegevens van BeSt Address, maar van OpenStreetMap (niveau ‘street’) of WhosOnFirst (niveau ‘city’);
  • Soms geeft een adres geen resultaat in ‘gestructureerde’ modus, maar wel in ‘ongestructureerde’ modus, en omgekeerd;
  • In gestructureerde modus lijkt Pelias vaak in de war te raken door de aanwezigheid van de parameter ‘locality’ naast de ‘postalcode’. Vaak geeft een adres een resultaat op niveau ‘city’ wanneer deze parameter wordt opgegeven, maar een resultaat op niveau ‘building’ wanneer alleen de postcode wordt opgegeven (naast de straat en het nummer). Je kunt het verschil zien in de grafiek op de regel “pelias_struc_noloc”, waar het precies gelokaliseerde deel (‘building’, in groen) met bijna 25% toeneemt. Aan de andere kant verdwijnt het deel gelokaliseerd op stadsniveau, dat grotendeels gebaseerd is op dit ‘locality’-argument, zo goed als;
  • Het door Pelias geleverde resultaat bevat geen ‘BeSt id’ die het mogelijk zou maken om de unieke en authentieke identificatie van een adres te verkrijgen;
  • Noch de Franstalige adressen van de Vlaamse faciliteitengemeenten (en vice-versa), noch de Duitstalige adressen van de Oostkantons worden geïmporteerd.

Maar op het moment van schrijven is er een nog groter probleem: de gegevens die Pelias gebruikt, dateren van midden 2021, om twee redenen: 

  • Het door OpenAddresses erkende formaat veranderde rond oktober 2021 en is niet langer compatibel met de door Bosa beschikbaar gestelde bestanden;
  • OpenAddresses veranderde zijn ‘dataflow’ midden 2021: de voorbereide gegevens werden eerst ter beschikking gesteld op het adres https://results.openaddresses.io/ dat nog steeds beschikbaar is maar waarvan de gegevens niet meer up-to-date zijn; ze zijn wel up-to-date op https://batch.openaddresses.io/data. Pelias werd echter niet aangepast en blijft de gegevens van het oude systeem downloaden.

bePelias

Het lijkt dus duidelijk dat Pelias in zijn huidige vorm geen serieuze kandidaat is voor een toepassing die geocodering van adressen in België vereist. Zowel de geïmporteerde gegevens (te oud, geen ID, geen gegevens op straatniveau als een nummer niet geïdentificeerd is) als de robuustheid ontbreken. Maar het leek ons dat het potentieel aanwezig was en we gingen aan de slag om het te verbeteren. Er waren twee mogelijkheden: 

  • Een ‘kloon’ van Pelias maken door de code aan te passen. Met het risico om wijzigingen aan te brengen die niet compatibel zouden zijn met de toekomstige ontwikkelingen van Pelias, en een grote inspanning op het vlak van begrip en ontwikkeling;
  • Een ‘extra laag’ toevoegen, zoals we al met succes hebben gedaan met NominatimWrapper, om de tekortkomingen van Pelias te compenseren. Het is deze tweede optie die we hebben gekozen.

Deze tool die we ‘bePelias’ hebben genoemd en die we open source ter beschikking stellen (https://github.com/SmalsResearch/bePelias) doet hoofdzakelijk twee dingen:

  • Een meer volledige voorbereiding van de ‘BeSt Address-’gegevens, inclusief een reeks aanvullende gegevens (adres- en straatidentificatienummers, NIS-codes voor gemeenten, enz.), die het meertalige aspect vervolledigen en identificatie op straatniveau mogelijk maken wanneer het nummer niet bekend is. We hebben Pelias ook geconfigureerd om interpolatie mogelijk te maken (ervan uitgaande dat de ‘8’ van een straat, indien niet bekend, tussen de ‘6’ en de ’10’ ligt).
  • Een tussenlaag tussen Pelias en de client, in de vorm van een REST API, om een reeks varianten van een adres uit te proberen. Een reeks combinaties van de volgende varianten wordt getest, totdat er één een bevredigend resultaat geeft:
    • Gestructureerde of ongestructureerde versie van de oproep tot Pelias;
    • Met de lokaliteit (plaats), of alleen de postcode;
    • Met een reeks reguliere expressies om de straat- of plaatsnaam op te schonen. Meestal zullen we alle tekst tussen haakjes verwijderen, wat heel gebruikelijk is in straatnamen om een opmerking of de naam van de deelgemeente te specificeren;
    • Door het huisnummer op te schonen, dat heel vaak ook een busnummer bevat, wat in de meeste gevallen de locatie niet verandert.

In de praktijk zien we dat de ‘basis’ gestructureerde versie (zonder opschoning of selectie) een resultaat geeft voor +/- 53 % van de adressen (voor KBO-gegevens, zie bijgevoegde figuur). Dit wordt gevolgd door 20 % na verwijdering van de lokaliteit, nog steeds in gestructureerde vorm, dan 11% in ongestructureerde vorm, 8% na opschoning in gestructureerde vorm, en dan een reeks andere combinaties voor een klein aantal adressen. Bijna alle combinaties zijn op een bepaald moment bruikbaar.

Resultaten

Het resultaat is zichtbaar in onderstaande grafieken. De bePelias-oplossing is bijna net zo efficiënt als Here WeGo (here in de grafieken) of Microsofts Bing Maps (bing); beter dan Google Maps (google), dat vrij gevoelig is voor ruis in adressen, zoals tekst tussen haakjes, en NominatimWrapper, dat enkel de straten lokaliseert voor een groot deel van de adressen.

We hebben ook de nauwkeurigheid van de bePelias-resultaten getest met behulp van een ‘majority voting’-methodologie door dezelfde dataset naar verschillende geocoders te sturen. We presenteerden de resultaten in een recent webinar, waaruit bleek dat de prestaties zeer vergelijkbaar zijn met die van Here WeGo of Bing Maps, en opnieuw aanzienlijk beter dan Google Maps, dat naast het feit dat het vaak alleen de straat lokaliseert, een vervelende neiging heeft om te hallucineren en resultaten biedt die duizenden kilometers verwijderd zijn van het juiste antwoord.

Wat snelheid betreft, geeft het feit dat de oplossing lokaal draait een aanzienlijk voordeel, namelijk twee keer zo snel als Google Maps of 5 keer zo snel als Bing Maps. Hiervoor moet de geocoder natuurlijk zo dicht mogelijk bij de toepassing die hem nodig heeft worden geïnstalleerd.

Conclusies: tool bePelias

Op basis van bovenstaande stellen wij een werkende oplossing, bePelias, ter beschikking, die je in staat stelt om lokaal een geocoder te instantiëren, met behulp van Docker, uitsluitend gebaseerd op open source code (Pelias) en open data (voornamelijk BeSt Address), met nauwelijks een paar duizend regels extra code in Python of Bash.

Onze oplossing heeft natuurlijk niet alleen maar voordelen:

  • bePelias werkt alleen voor België;
  • bePelias werkt alleen voor adressen. Je krijgt geen antwoord op ‘Smals, Sint-Gillis’ of ‘Bakker, Namen’;
  • bePelias vereist de installatie, het beheer en het onderhoud (updaten van de server, bePelias en ‘BeSt Address’-gegevens) van een server met ongeveer 15 GB schijfruimte en minstens 8 GB RAM geheugen, wat, afhankelijk van het project, een hogere kost kan betekenen dan het gebruik van een commerciële cloud-oplossing;
  • In dit stadium is dit nog een onderzoeksproject dat zich moet bewijzen in een industriële omgeving.

Daar staat tegenover dat:

  • bePelias vergelijkbare prestaties biedt met de grote commerciële spelers in de sector;
  • bePelias on-premise werkt, wat de problemen van vertrouwelijkheid en GDPR oplost;
  • bePelias gebaseerd is op BeSt Address, de (recente) authentieke bron van adressen in België. Het verkrijgen van een ‘BeSt id’ maakt het gemakkelijker om te communiceren met een reeks webservices die deze bron hebben geïntegreerd.

Feedback is zeer welkom en zal helpen om deze tool, die klaar staat om gebruikt te worden, te verbeteren!


  1. Dit is een vereenvoudigd illustratief voorbeeld, waarvan de syntaxis niet overeenkomt met een bekende tool. ↩︎
This entry was posted in [NL], Open Source and tagged , by Vandy Berten. Bookmark the permalink.
avatar

About Vandy Berten

Consultant Recherche chez Smals depuis mai 2013. Vandy était auparavant Professeur Assistant à l'ULB, où il enseignait les langages de programmation. Il a obtenu une thèse de doctorat dans la même institution en 2007. Depuis quelques années, il s'est spécialisé dans les techniques de Data Science, incluant le "(social) network analytics", le "data quality", le "GIS analytics", le "machine learning", en particulier dans le domaine de la détection de la fraude.

Leave a Reply

Your email address will not be published. Required fields are marked *