Ontwikkeling van en door R&D.

Onderzoek: hoe geodemografie kan helpen om data ‘eerlijker’ weer te geven

De afgelopen elf maanden ben ik ondergedompeld in de wereld van data. Via de ‘track’ Data Science als onderdeel van Information Studies aan de UvA kwam ik in contact met allerlei toffe algoritmes en maakte ik kennis met de problematiek achter de technische hoogstandjes. Een van deze problemen was gericht op ondermijning in Amsterdam en bij het zoeken naar vergelijkbare projecten kom je dan al snel uit bij Shintō Labs.

Met zwetende handjes heb ik een voorzichtig mailtje gestuurd naar het ‘Shinteam’ of ik ‘heel misschien’ en ‘alleen als het uitkomt’  langs mocht komen om de mogelijkheid tot een afstudeerstage te bespreken. Wat ik niet verwachtte is dat de daaropvolgende uitnodiging zo relaxed en soepel verliep dat ik direct verkocht was.  Daar wil ik graag mijn thesis schrijven! Inmiddels zijn we vijf maanden verder en is het papiertje op zak en ik kan wel stellen dat ik geen spijt heb van deze keuze. Natuurlijk was het hard buffelen, maar het waren ook enorm leerzame maanden waarbij ik vanaf dag één door het team ben opgenomen. Ook nam ik deel aan de Design Sprint met het RIEC Rotterdam en Bureau Beke op het thema Risico Radar Ondermijning, waarbij we op basis van open bronnen de mogelijke hotspots inzichtelijk maken. In deze sprint kon ik mijn onderzoek mooi toepassen.

In deze blog beschrijf ik mijn onderzoeksopzet en de eerste resultaten. In de onderstaande video kun je ook de presentatie zelf zien.


 

De casus

De core business van Shintō Labs bestaat uit het maken van datagedreven applicaties voor overheidsinstellingen. Vaak bevat een applicatie een dashboard met een kaart waarop dan data is geplot. In verband met privacy wordt die data vaak gepresenteerd per postcode, buurt of wijk (en dus niet per huis of gebouw).

De keuze voor het type gebiedsindeling kan echter een vertekenend beeld geven van de werkelijkheid. In figuur 1 zie je bijvoorbeeld drie representaties van exact dezelfde data, maar met verschillende gebiedsindelingen. Dit probleem staat in de boeken bekend als MAUP – The Modifiable Area Unit Problem. Dit fenomeen doet zich ook voor wanneer we data presenteren per postcode, buurt of wijk: hoe meer variatie er in zo een gebied plaats vindt, hoe meer informatie wordt weggegooid wanneer de data wordt geaggregeerd.

Figuur 1 Voorbeeld van ‘The Modifiable Area Unit Problem’

Een manier om dit probleem aan te pakken is door gebiedsindelingen datagestuurd te maken. Als we de bestaande wijken/buurten loslaten en kijken naar de achterliggende data, dan kunnen we gebieden creëren die de mensen in het gebied zo veel mogelijk vertegenwoordigen.  Dit doen we door middel van geodemografie;  ‘The study of people by where they live’ (Harris, 2005).

Geodemografie

Zoals de naam al prijs geeft is dit vakgebied een combinatie van geografie en demografie, waarmee de data ook direct complex wordt. In geodemografie word er gezocht naar betekenisvolle bundels om de mensen in een gebied te kunnen beschrijven. Deze bundels worden in de literatuur ook wel micro-communes of urban neighbourhoods genoemd. Door middel van algoritmen worden mensen ingedeeld in clusters, die vervolgens worden geplot op een kaart. In principe volgt iedere geodemografische clustering ruwweg hetzelfde proces van datapreparatie, algoritmeselectie en parameterselectie, maar het probleem ontstaat bij de evaluatie. Want wat zijn betekenisvolle clusters? Dat is een bijna filosofische vraag, die niet zomaar beantwoord kan worden. Voor de fijnproevers raad ik het paper van ‘What are true clusters’ aan van Christian Hennig.

Figuur 2. Voorbeeld van een geodemografische clustering van Eindhoven. Bron: CBS

Geodemografische cluster-evaluatie

In tegenstelling tot standaard ‘gesuperviseerde methoden’ is het valideren van een geodemografische clustering een schemerig gebied tussen kunst en wetenschap, het kwantitatieve en het kwalitatieve, objectiviteit en subjectiviteit (Harris, 2005). Zoals mijn docent het noemt, is cluster-evaluatie in feite een vorm van zwarte magie. 

Binnen de geodemografie is er wel een idee van enkele eigenschappen die een clustering betekenisvol maken, waarvan de belangrijkste eigenschap is, dat de clustering aansluit bij het doel en de context van het clusterprobleem. Om dat doel meetbaar te maken gebruiken we interne en/of externe criteria die helpen bij het maken van de keuze van het algoritme en de parameter instellingen.

De externe criteria bestaan soms uit vergelijkingen met referentieclassificaties of een zogenoemde ground truth. Veel vaker worden subjectieve criteria opgelegd met behulp van experts of de eindgebruikers. De interne evaluatie van een clustering bestaat uit het meten van een bepaalde regel die de data beschrijft zoals ‘hoe compact zijn de clusters?’ of ‘wat is de ratio tussen de gemiddelde inter en intra clusterafstand?’. Hoewel deze regels objectief zijn, is het wel de vraag hoeveel waarde je moet hechten aan de resulterende waarden en hebben deze regels zeker niet altijd toegevoegd nut. Over het algemeen wordt interne evaluatie daarom vooral gebruikt om het cluster proces te sturen en niet te leiden (Alexiou, 2017).

De interne evaluatie regels hebben nog een extra uitdaging, want deze methoden zijn over het algemeen niet aangepast aan geodemografische clustering. De meest gebruikelijke metrieken (zoals de Within-cluster sum-of-squares en de Silhouette index) worden alleen toegepast op de demografische data en niet op de geografische data. Dit terwijl ´echte’ microcommunes samenhang lijken te vertonen in zowel de geografische als demografische ruimte (Wolf et al., 2019).

De kern

In mijn onderzoek heb ik geprobeerd een regel op te stellen die speciaal geadapteerd is voor geodemografische data. Deze regel is gebaseerd op de Silhouette score, maar met een speciale functie die afstand kwantificeert als combinatie van geo- en demografische data. Er zitten aan een dergelijke functie nog flink wat haken en ogen: hoe verhoudt bijvoorbeeld geografie zich tot demografie? Uiteindelijk hebben we als ‘proof of concept’ de aanpak van Wolf et al. overgenomen (inmiddels liep de onderzoeksperiode al tegen het einde).

Uit een kleinschalig experiment komt naar voren dat de geodemografische score wel degelijk wat interessante patronen vertoont. Zeker ten opzichte van de conventionele (non-geografische) Silhouette score lijkt de nieuwe regel een stuk minder triviale patronen weer te geven. Dit bleek ook uit de validatie (feedback van gebruikers) van het prototype van de Risico Radar Ondermijning zoals ik die heb gerealiseerd voor het RIEC Rotterdam.

Lessons learned

Het voorgaande stuk ging vrij snel de diepte in en eindigt tamelijk theoretisch. Maar wat zijn nu de take home wijsheden die we tijdens het onderzoek zijn tegengekomen?

Een van de belangrijkste redenen om interne evaluatie regels te zoeken is om subjectiviteit in geodemografie te verminderen. We willen graag goed gefundeerde keuzes maken tijdens het clusterproces en idealiter is geodemografie zo transparant mogelijk. In de praktijk blijven de objectieve evaluatie technieken slechts een onderdeel van het clusterproces, waar de keuzes voor het algoritme en de parameter instellingen uiteindelijk worden gemaakt door mensen. Het maken van een geodemografische clustering is niet moeilijk, maar een goede geodemografische clustering maken is een flinke uitdaging, die ook afhangt van de context.

Hoe nu verder?

Tot nu toe hebben we een paar keer genoemd dat interne validatie regels vooral ‘betekenis’ krijgen in het kader van een context en met een expert/gebruiker om de context te interpreteren. Hoewel mijn thesis vooral de theorie van geodemografische evaluatie beslaat, zijn we natuurlijk erg benieuwd of de interne regels ook echt hulp bieden tijdens het clusteren. Daarom ben ik met het Shintō Labs team begonnen aan een interactieve module waarmee je je eigen (geodemografische) data kan clusteren. De module geeft adviezen op basis van de interne evaluatie regels, maar uiteindelijk is het aan de gebruiker om de waarde van de clustering in te schatten. Voor nu blijft het dashboard bij een prototype, maar mocht je interesse hebben in deze applicatie, neem dan contact op met het Shintō Labs.

Figuur 3. Prototype van het dashboard

Referenties

  • Alexiou, A. (2017). Putting ’Geo’ into Geodemographics: evaluating the performance of national classification systems within regional contexts. PhD thesis, University of Liverpool.
  • Harris, R., Sleight, P., and Webber, R. Geodemographics, GIS and Neighbourhood Targeting. Wiley, London, UK, 2005
  • Hennig, C. (2015). What are the true clusters?. Pattern Recognition Letters64, 53-62.
  • Wolf, L., Knaap, E., and Rey, S. J. (2019). Geosilhouettes: geographical measures of cluster fit.

Relevante links

Webinars

Casebeschrijving

Blog

Research

CSI: Crime Script Investigation – Netwerkanalyse met hulp van G-CORE

Ik was er helemaal klaar voor. Het vooronderzoek was gedaan en in mijn hoofd zat goed en duidelijk wat ik over zes maanden van toen, in augustus, zou presenteren om mijn ingenieur-titel te bemachtigen ter afronding van mijn afstudeeronderzoek bij Shintō Labs en mijn studie Data Science aan de TU/e. Enfin, we zijn nu 3 maanden verder, en in mijn hoofd is een hoop veranderd over wat ik over drie maanden van nu (nog steeds in augustus, dat is niet veranderd) zal gaan presenteren om mijn ingenieur-titel te bemachtigen. Een kleine tijd terug ben ik naar Den Haag afgereisd, om op uitnodiging van het Nederlands Forensisch Instituut op een maandelijks colloquium te presenteren over mijn onderzoek dusver. Een mooi moment om een blog te schrijven over deze ervaring, en daarmee ook over de huidige status van het onderzoek. Tijd voor een update!

Een mede-student van me, Frans, die bij het Nederlands Forensisch Instituut – NFI – zijn stage in mei begint, was ook mee om zijn vooronderzoek te presenteren en stond als eerste op het programma. Zijn afstudeeronderzoek zal voornamelijk gaan over het onderzoeken van het temporale aspect van criminele netwerken. Aangezien criminele netwerken continu veranderen, is een temporaal aspect in het netwerk van significant belang. Bij huidig onderzoek in netwerken wordt dit aspect vaak genegeerd; er wordt als het ware een snapshot van het netwerk onderzocht. Dit betekent dat onderzoek in deze netwerken mogelijk niet meer relevant is. In mijn eigen thesis staat bij de laatste hoofdstukken “Threats to validity” en “Future Research” de aantekening dat het temporale aspect mist, en ook in literatuur die ik tot dusver heb gelezen wordt gepleit voor een mogelijkheid om netwerken “live” te onderzoeken. Interessant werk dus, en heel veel betrekking op mijn eigen project.

CSI: Crime Script Investigation

Na de presentatie van Frans was het mijn beurt. In deze blog zal ik een uiteenzetting geven van mijn presentatie, en daarmee dus ook een update van mijn onderzoek. Mijn standaardtitel en ondertitel zijn inmiddels “CSI: Crime Script Investigation – Using graph databases to fight crime”. Dit was al zo tijdens het onderzoek, en dit is zo gebleven. De vraag die ik wil beantwoorden is dan ook niet veranderd; kan ik als ik een samenleving weergeef in een graaf doormiddel van slimme queries uitvoeren een crimineel netwerk eruit distilleren? De queries schrijf ik aan de hand van een crime script. Een crime script is een recept of een blauwdruk van hoe een misdaad werkt, het laat zien wat er moet gebeuren door wie, wat hier voor nodig is en waar dit moet gebeuren op welk moment. Het laat de gehele situatie zien van de misdaad, ofwel de gehele modus operandi. In literatuur wordt dit daarom ook een Situational Crime Prevention Approach genoemd. Crime scripts zijn opgebouwd in scenes, en in elke scene zit een set aan rollen die nodig is om de scene te voltooien. Dit is zeer vergelijkbaar met een script in het theater.

Figuur 1 – Cannabis-handel netwerk (Duijn, P. A. C. (2016). Detecting and disrupting criminal networks (Doctoral dissertation, PhD thesis.).

Het crime script is ook nog heel flexibel. Aangezien een crime script op meerdere manieren kan worden uitgevoerd, is dit een handige eigenschap. Morselli en Roy beschrijven in hun onderzoek naar criminele netwerken die auto’s stelen en de onderdelen doorverkopen dat de verkoop vaak naar het buitenland gebeurd. Ze beschrijven hoe de netwerken de auto-onderdelen laten verdwijnen in verschillende landen; Rusland, Egypte, Canada, Italië, etc. Elk zo’n optie heet een facet, en elke rol in een crime script kan meerdere facetten hebben. Hoe meer facetten, hoe moeilijker het is om het netwerk te breken. Bijvoorbeeld, als een crimineel netwerk bestaat uit 7 rollen en elke rol heeft 3 manieren om te voltooien (dus 3 facetten), dan zijn er in totaal 3^7 = 2187 verschillende permutaties waarin dit script kan worden voltooid.

Elk type misdaad zijn eigen crime script

Crime scripts kunnen op verschillende niveaus en voor verschillende soorten misdaad worden gemaakt. Elk type misdaad heeft zijn eigen crime script, en aangezien modus operandi verschillen kan er per crime script heel erg worden ingezoomd op een specifieke misdaad. Maar men kan ook de andere kant op en zo generaliseren, een crime script dat kan wordt gebruikt voor alle misdaden. Dit script is het universele script van Cornish, en is sinds 1994 al vaak gebruikt als begin punt voor het opstellen van een crime script.

Figuur 2 – Universeel script van Cornish (Cornish, D. B. (1994). The procedural analysis of offending and its relevance for situational prevention. Crime prevention studies, 3, 151-196).

Crime scripts verschillen ook per methode. Een misdaad die op een individueel niveau afspeelt is meestal een stappenplan; de scenes zijn in volgorde geschreven van uitvoer. In zulke scripts kunnen rollen in meerdere scenes voorkomen, maar met net iets andere vereisten. Dit betekent dat er net iets andere queries moeten worden gebruikt voor dezelfde rol, en dat er dus verschillende mogelijke nodes uit het netwerk rollen die deze rol kunnen vervullen. Welke van deze nodes geschikt is kunnen we oplossen door de rollen in een conjunctive normal form te zetten. De oplossing van deze CNF zijn de nodes die echt interessant zijn.

Crime script en netwerken

Voor netwerken werken crime scripts weer net iets anders. Hierin zijn de scenes niet op volgorde. De scenes spelen zich simultaan af, omdat de hele operatie meerdere taken heeft die niet een voor een worden uitgevoerd maar tegelijkertijd om zo de operatie efficiënt te maken. Een scene is hier dus een deeloperatie; in een crime script voor drugsnetwerken zijn er dus bijvoorbeeld scenes voor de deeloperatie van productie, een voor verkoop, een voor management etc. Elke scene heeft nog steeds rollen gekoppeld, maar naast de wie, wat waar en wanneer in de standaard crime scripts zijn nu ook de connecties belangrijk zodat kan worden gezien hoe dit netwerk wordt gevormd. De topologie wordt is impliciet opgenomen in het script.

Tijdens mijn vooronderzoek wilde ik me concentreren op crime scripts in het algemeen. Echter, aan de hand van verder onderzoek en feedback heb ik besloten me voornamelijk te focussen op netwerk crime scripts. Deze zijn interessanter, en misdaden op individueel niveau worden weliswaar vaak met meerdere personen uitgevoerd, maar hiervan is een netwerk nog steeds niet echt sprake.

Crime scripts zijn een mooi uitgangspunt om dus queries op te stellen. Maar waarop worden de queries überhaupt op losgelaten? We beginnen met een graaf die een deel van de maatschappij toont. Dit kan bijvoorbeeld, in het straatje van Shintō Labs, een graaf van een gemeente zijn. Het kan ook een graaf zijn die uit is gekomen na aanleiding van uitgebreid politieonderzoek. In mijn vooronderzoek had ik beredeneerd dat ik, omdat ik de queries declaratief wilde hebben, ik deze graaf in het property graph model zou zetten en met zou werken. Een property graph is een graaf waarin de nodes en de edges die de nodes verbinden labels en property key-value pairs hebben. Dus een node kan als label Persoon hebben, en als properties leeftijd en geslacht, met een geassocieerde waarde. Cypher is de taal waarmee je deze grafen kan queryen. Hiermee kon je al interessante patronen herkennen in de graaf.

G-CORE: een nieuwe generatie netwerk analyse

Echter, een heel nieuw netwerk opbouwen vanuit het originele netwerk dat een crimineel netwerk representeert , dat gaat niet met Cypher. Tijdens het vooronderzoek werd door mijn begeleider vanuit de TU/e G-CORE aangeraden. Dit zou een oplossing kunnen bieden voor dit probleem, en dit heb ik dus onderzocht. G-CORE is een Graph Query Language (GQL) die werkt volgens het “Graph In, Graph Out” principe. Met als input een graaf, geven de queries dus een nieuwe graaf terug, en dat is inderdaad precies wat we nodig hebben. G-CORE werkt met het Path Property Graph model. Dit is hetzelfde als het property graph model, maar in plaats van alleen nodes en edges die labels en property key-value pairs kunnen hebben, kunnen paden in dit model dat ook. Daarmee kun je dus paden tussen verschillende dingen creëren en zoeken, om zo het gehele netwerk bij elkaar te krijgen. Ook stelt G-CORE je in staat om data te aggregeren, om zo de facetten van het crime script of de verschillende scenes in het netwerk te visualiseren.

Ter illustratie: G-CORE werkt met een “Graph In, Graph” out principe. De query die je gebruikt wordt dus losgelaten op een graaf, en er komt een nieuwe graaf uit die de query beantwoord. Een voorbeeld is te vinden in de afbeeldingen. In de eerste afbeelding is een kleine graaf te zien na aanleiding van de boeken en films van Harry Potter. De graaf toont gedeeltelijk wie een vloek heeft losgelaten op wie. Elke node is een tovenaar of heks, en de edge geeft aan wie een vloek heeft losgelaten op wie. Elke edge heeft een property key-value pair dat laat zien welke vloek er is gebruikt, de values zijn afgebeeld op de edge.

Figuur 3: G-CORE voorbeeld uitgewerkt in de wereld van Harry Potter

Door middel van G-CORE kunnen we een nieuw netwerk maken, dat alle vloeken als node gebruikt, alle tovenaars en heksen als node, en pijlen die laten zien hoe een tovenaar of heks in aanraking is geweest met de vloek. Een groene pijl betekent dat hij of zijn de vloek heeft gebruikt, een zwarte pijl betekent dat hij of zij slachtoffer is geweest van de vloek. Met dit nieuwe overzicht kunnen we dus in een opslag zien wie door de meeste vloeken is geraakt en wie de meeste vloeken kent, iets wat uit de eerste graaf niet direct via een query kon worden opgevraagd.

 

Figuur 4: Detaillering van de vloeken

Dit alles zou in een tool moeten komen, waarin een gebruiker een graaf en een crime script als input geeft, en op verschillende niveaus mogelijke criminele netwerken eruit vist, samen met enkele statistieken die heel handig zijn om dit netwerk snel te analyseren. Deze statistieken zijn eenvoudig via ingebouwde algoritmen met Cypher te verkrijgen. Ook krijgt de gebruiker een visualisatie te zien van het netwerk en een verdeling hoe de rollen in het netwerk zijn verdeeld. Het ontwikkelen van deze tool staat op een lager pitje op dit moment, daar de haalbaarheid van deze tool niet meer zo hoog is als aan het begin van het afstudeerproject. De connectie maken tussen alle verschillende mechanieken die de tool moet kunnen is zacht gezegd te hoog gegrepen om te voltooien in zes maanden, zeker als we bedenken dat G-CORE nog in de kinderschoenen staat en veel zaken nog niet geïmplementeerd zijn die wel nodig zijn voor deze toepassing. Deze gebreken in G-CORE oplossen zijn op het moment de grootste hindernis, en een groot deel van de bezigheden de laatste komende maanden. Voor nu test ik dit op een kleine graaf die ik zelf heb gemaakt met zelf verzonnen data, en een crime script dat lichtelijk is gebaseerd op het crime script over cannabis-netwerken van Duijn. De graaf heb ik gemaakt in Neo4j met Cypher. Echter, G-CORE kan helaas niet rechtreeks zijn graaf inlezen vanuit Cypher, dit moet eerst worden herschreven. Dit houdt in dat ik de afgelopen week alles heb gexporteerd naar een JSON-file, en met een Python script deze JSON file heb omgeschreven naar de bestanden die de G-CORE interpreter die de TU/e heeft gemaakt kan lezen. Dit had een paar pogingen nodig, maar inmiddels is mijn property graph omgezet naar een path property graph. De G-CORE queries die ik al heb gemaakt kunnen nu dus getest worden. Als alles werkt, zal de volgende stap zijn dit toe te passen op “echte” data, data vanuit gemeenten en openbare data, om te zien of daar interessante zaken uitgehaald kunnen worden. De komende maanden zal er op dat gebied dus data worden geworven en een crime script worden ontwikkeld. Qua tool wordt er waarschijnlijk een klein prototype gemaakt zodat er een algemeen beeld is van hoe de tool eruit kan zien en hoe hij gebruikt kan worden. In het vooronderzoek had ik daar al wat schetsen gemaakt, deze moeten lichtelijk veranderd worden en natuurlijk moet er een clickable prototype van worden gemaakt.

Dit sloot mijn presentatie bij het NFI. De aanwezigen waren onder de indruk, en gaven nuttige feedback. Zo waren ze er nog niet helemaal zeker van hoe precies ik het crime script kon toepassen; veel data die ik in mijn voorbeeld had gebruikt was niet zomaar aanwezig. Natuurlijk was mijn voorbeeld ook niet realistisch, maar gebruik ik het enkel om G-CORE queries mee te testen, maar het geeft wel aanzet tot denken dat in echte cases het crime script dus goed moet worden uitgedacht om kans van slagen te hebben. Ondanks dat men bij het NFI niet veel met graph technology doet, vonden ze de toepassing van G-CORE zeer veelbelovend. Het colloquium werd beëindigd door een presentatie van een vrouw die onderzoek doet in criminele organisaties voor de nationale politie. De precieze inhoud was vertrouwelijk, maar de conclusie was dat als men wetenschappelijk onderzoek hard wil maken in rapporten of de rechtbank, dat alle stappen moesten kloppen en duidelijk waren. Er mogen geen shortcuts gebruikt worden, want dan maken advocaten gehakt van je, vertelde ze. Deze boodschap heb ik ook ter harte genomen; de queries die ik had opgeschreven heb ik opgesplitst in delen, zodat bij elke stap duidelijk is wat er gebeurt en waarom.

Van uitwerken naar implementatie

We zitten op de helft, en er is al een hoop gedaan en veranderd. Waarschijnlijk gaat er nog wel wat meer veranderen. Het doel is echter nog steeds hetzelfde, en ik hoop dat in de blog die ik over drie maanden schrijf er ook het nieuws in staat dat ik ben afgestudeerd met dit onderzoek. Waar ik mij op ga richten is het uitwerken van deze concepten in Apache Spark met hulp van Scala. Dat gaan we vervolgens toetsen bij een van de gemeentes om het netwerk daar inzichtelijk te maken. Ondertussen zal ik kleine updates blijven geven over interessante gebeurtenissen tijdens mijn afstuderen.

Bronnen

– Cornish, D. B. (1994). The procedural analysis of offending and its relevance for situational prevention. Crime prevention studies3, 151-196. Bekijk PDF
– Duijn, P. A. C. (2016). Detecting and disrupting criminal networks (Doctoral dissertation, PhD thesis. Retrieved from https://dare. uva. nl/search). Bekijk PDF
– Morselli, C., & Roy, J. (2008). Brokerage qualifications in ringing operations. Criminology46(1), 71-98. Bron
– Angles, R., Arenas, M., Barceló, P., Boncz, P., Fletcher, G., Gutierrez, C., … & van Rest, O. (2018, May). G-CORE: A core for future graph query languages. In Proceedings of the 2018 International Conference on Management of Data (pp. 1421-1432). ACM. Bron

Relevante links

Webinars

Casebeschrijving

Blog

Research