5 minuten leestijd

Valideren in de Spheer App: de Confusion Matrix uitgelegd

What is it, and how should it be used?

De Confusion Matrix 

Een confusion matrix is een tabel die laat zien hoe goed een model presteert, door te vergelijken wat het model voorspelde met wat volgens de ground truth daadwerkelijk waar is. Het geeft je een indicatie van de kwaliteit van het model, en een aantal harde statistieken over hoe goed je zijn voorspellingen kunt vertrouwen.

De confusion matrix ordent elke voorspelling in een eenvoudig raster:

  • de rijen vertegenwoordigen de werkelijke klassen (wat je weet dat waar is op de grond), terwijl
  • de kolommen de voorspelde klassen vertegenwoordigen (wat het model heeft geproduceerd).

Voor een probleem met twee klassen, bijvoorbeeld het onderscheid tussen "bos" en "geen bos", levert dit vier cellen op: 

  • True Positives (het model voorspelde bos en het was ook echt bos),
  • True Negatives (voorspelde geen bos, en terecht),
  • False Positives (voorspelde bos waar geen bos was), en
  • False Negatives (miste daadwerkelijk bos door het als iets anders te bestempelen).
An example of forest and not forest classification confusion matrix

Om dit concreet te maken: stel dat je je kaart valideert aan de hand van 100 bekende pixellocaties. De matrix laat dan misschien 40 True Positives, 45 True Negatives, 5 False Positives en 10 False Negatives zien. Uit deze vier getallen alleen al leidt Spheer de accuratesse van het model af, die je het algehele trefpercentage vertelt en als volgt wordt berekend:

  • (True Positives + True Negatives) / totaal aantal voorspellingen, hier (40 + 45) / 100 = 85%.

Accuratesse geeft een indicatie van hoe vaak het model in totaal correct is: het aandeel van alle voorspellingen over alle klassen heen dat overeenkomt met de ground truth, oftewel wat je weet dat er op de grond aanwezig is, onafhankelijk van enige voorspelling. Het beantwoordt de breedst mogelijke vraag: van alles wat het model voorspelde, hoeveel had het goed? In het bovenstaande voorbeeld, met 40 True Positives en 45 True Negatives op 100 locaties, is de accuracy 85%, wat betekent dat het model in 85 van elke 100 gevallen overeenkwam met de werkelijkheid. 

Het gebruik van alleen accuratesse kan echter misleidend zijn wanneer de klassen ongelijk verdeeld zijn. Denk aan het in kaart brengen van een zeldzaam landbedekkingstype dat slechts een klein deel van je gebied beslaat: een model dat overal simpelweg "al het andere" voorspelt, zou een zeer hoge accuratesse kunnen scoren terwijl het niets oppikt van de klasse die je daadwerkelijk belangrijk vindt. Precies daarom is de confusion matrix zo waardevol: het dwingt je om verder te kijken dan één enkel kerncijfer.

Hoe je een confusion matrix moet gebruiken, hangt volledig af van wat een fout je kost in jouw specifieke context. Als je zeldzame vegetatiesoorten in kaart brengt, kan een False Negative, een potentieel habitat als niet mogelijk bestempelen, veel zwaardere gevolgen hebben dan een False Positive. 

De confusion matrix is daarom niet alleen een rapportcijfer, maar een hulpmiddel om beslissingen te nemen: het laat zien waar en hoe je model faalt, stelt je in staat de gevolgen van elk type fout in de echte wereld af te wegen, en helpt je naar een betere plaatsing van observaties en de afwegingen die bij jouw probleem passen. Het goed kunnen lezen ervan is het verschil tussen een Spheer-kaart blindelings vertrouwen en precies begrijpen waarvoor je hem vertrouwt.

How to use it

De Confusion Matrix in de Spheer-app 

In de Spheer-app is de confusion matrix opgebouwd rond een duidelijke scheiding tussen de data die je gebruikt om je model te trainen en de data die je gebruikt om het te valideren. In de train-lagen voeg je observaties toe die worden gebruikt om het model te trainen. Om te meten hoe goed die voorspellingen werkelijk zijn, kun je in Spheer validatie-lagen aanmaken. De observaties binnen deze lagen noemen we "validatie observaties", en daarmee geef je Spheer je ground-truth-observaties. Ground truth is simpelweg het juiste antwoord op een locatie, onafhankelijk van het model vastgesteld: data die je hebt verzameld of die je van dat gebied hebt gekregen. In tegenstelling tot train observaties leren validatie observaties het model nooit iets aan;

ze beschrijven wat het antwoord zou moeten zijn op een reeks locaties die je opzij hebt gezet om te controleren.

Spheer neemt de voorspelling die op basis van de observaties in je train-laag is gegenereerd en vergelijkt deze, locatie voor locatie, met de validatie observaties die je hebt getekend. Elke vergelijking valt in een van de cellen van de confusion matrix, en uit het volledige geheel van vergelijkingen wordt de accuratesse berekend. Omdat de validatie observaties nooit voor de training zijn gebruikt, geeft dit je een eerlijk, onafhankelijk beeld van hoe het model presteert op data die het niet heeft gezien. Het is dus heel belangrijk dat deze validatie observaties correct worden getekend, want anders geeft dit een onjuiste indicatie van de modelprestaties.

Spheer produceert één confusion matrix per validation-laag. Door je validatie observaties in verschillende lagen te organiseren, kun je je model vanuit verschillende perspectieven evalueren. De ene validatie-laag beslaat misschien een bepaalde regio of een bepaald jaar, terwijl een andere zich richt op een specifieke klasse of een lastigere reeks randgevallen. Zo kun je niet alleen vaststellen of het model in het algemeen goed presteert, maar ook waar en onder welke omstandigheden het slaagt of moeite heeft.

Bij een classificatiemodel komt elke klasse terug als een klasse in de confusion matrix. Bij een regressiemodel, waarbij de uitvoer een continue regressiewaarde is in plaats van een discrete klasse, geldt dezelfde logica van het vergelijken van voorspelling met werkelijkheid, maar worden de waarden gegroepeerd in hokken. Een hok van 0%-10% bevat bijvoorbeeld alle waarden die tussen 0% en 10% vallen.

De praktische workflow is, zoals altijd, iteratief:

  1. teken je observaties in een train laag,
  2. zet ground-truth-voorbeelden opzij in een of meer validation-lagen,
  3. lees de confusion matrix die elke validatie-laag produceert, en
  4. gebruik wat deze onthult om je observaties te verfijnen, train observaties toevoegen, verplaatsen of aanpassen, totdat de matrix je vertelt dat de kaart te vertrouwen is.

Buiten de app: Precision en Recall 

Voor de eenvoud rapporteert Spheer alleen de accuratesse. Maar met diezelfde vier getallen uit de matrix kun je twee gerichtere metrieken berekenen, mocht je ooit over één enkele klasse in meer detail willen nadenken:

  • Precision: van alles wat als een klasse werd voorspeld, hoeveel daarvan klopte: True Positives / (True Positives + False Positives), hier 40 / (40 + 5) = 89%, en
  • Recall: van alle werkelijke gevallen van die klasse, hoeveel ving het model er op: True Positives / (True Positives + False Negatives), hier 40 / (40 + 10) = 80%.

Waar accuratesse het model over alle klassen tegelijk beoordeelt, zoomen precision en recall in op één. 
Precision vraagt hoe betrouwbaar een positieve voorspelling is: als het model "bos" zegt, hoe vaak heeft het dan gelijk? 
Recall vraagt hoe volledig het model is: van al het echte bos dat er is, hoeveel heeft het daar daadwerkelijk van gevonden? 

De twee gaan meestal ten koste van elkaar: het model aansporen om elk laatste geval op te pikken (hoge recall) zorgt doorgaans voor meer vals alarm (lagere precision), terwijl het strenger afstellen om fouten te vermijden (hoge precision) er doorgaans toe leidt dat het meer echte gevallen mist (lagere recall). Welke van de twee je voorrang geeft, komt terug op wat een fout je kost: precies de afweging van het potentiële habitat die eerder is beschreven.

Hulp bij confusion matrices 

Heb je hulp nodig bij het begrijpen van de confusion matrices, wil je dat iemand je door het opzetten ervan begeleidt, of heb je vragen over een ander onderwerp in Spheer? Neem dan contact op met ons supportteam via support@spheer.ai.