Internship report: K-Means clustering EWS data

Als student Toegepaste Informatica (specialisatie Business IT) kreeg ik de kans om mijn interesse en ervaring in AI te verdiepen tijdens een stage bij Arinti. Ik had wat ‘background’ in programmeren en wist hoe ik met een computer en verschillende programmeertalen moest omgaan, maar had weinig ervaring met Python. Mijn opdracht was om aan de slag te gaan met een geanonimiseerde dataset van Early Warning Score (EWS) metingen van verschillende patiënten. De EWS score is een optelsom van verschillende waardes van meting van vitale parameters (hartslag, bloeddruk, lichaamstemperatuur, …).  Dit wil zeggen dat wanneer één van de waardes van de patient stijgt of daalt, deze zal bijdragen tot de totale EWS score. Deze score geeft een indicatie of er iets mis is met de patiënt en hoe deze er globaal gezien aan toe is.

‘Every start is difficult’

Tijdens de eerste weken van mijn stage bij arinti werd ik ondergedompeld in de wereld van ‘Data Exploration’. Mijn dataset bevatte meer dan 170 000 lijnen en 16 kolommen die allerlei informatie bevatten met betrekking tot monitorgegevens van bepaalde lichaamswaardes tijdens metingen van patiënten. De bedoeling was om deze gegevens zo goed mogelijk uiteen te zetten met behulp van Python zodat ik meer inzicht kreeg in de verdeling van de data in de dataset.

‘Way of work’

Op school was ik slechts enkele keren in aanraking gekomen met de programmeertaal Python, waardoor het voor mij in het begin moeilijk was om op een efficiënte manier te kunnen coderen. Het was de bedoeling om na de eerste week van de stage een beter beeld te hebben over de distributie van de dataset.

Hier ziet men op de Y-as het aantal patiënten die een bepaalde Heart Rate (HR) hadden tijdens een bepaalde meting. Deze data representeert alle metingen van de dataset waarover ik beschikte. Nu, dit was zeker en vast niet voldoende. Om meer inzicht te verwerven moest ik de ‘Healthy data’ uit mijn dataset filteren om te bekijken hoe het zat met de ‘Unhealthy data’. Dat toont onderstaande grafiek aan.

De verticale lijnen zijn de ‘Boundaries’ of grenslijnen. Tussen de groene lijnen is de hartslag van de patiënt binnen een gezonde toestand gevisualiseerd, geel is voor waarschuwing en rood is de gevarenzone. Indien de hartslag van de patiënt zich in de rode of gele zone bevindt, wil dit zeggen dat er iets mis is met de patiënt waardoor zijn EWS Score zal stijgen.

Nadat ik meer inzicht had verkregen in de data was het tijd om mij te wagen aan het ‘echte’ werk. Namelijk het A.I. gedeelte van de stageopdracht. Ikzelf had weinig ervaring met A.I. maar het concept ‘coderen’ had ik wel onder de knie als student Toegepaste Informatica. Na een week analyseren, brainstormen en bespreken van ‘Proof Of Concepts’ en ideeën ontstond het idee om een dashboard te maken waar de resultaten van de EWS metingen overzichtelijk getoond konden worden, en een Clustering Algoritme werd toegepast om het dashboard te ‘personaliseren’ per patiënt. In een volgende stap kunnen we dan voorspellingen doen met betrekking tot de evolutie van de gezondheidstoestand van de types patiënten.

Angular for dummies

Natuurlijk moest het dashboard ook beschikbaar zijn op een webpagina die ik zelf wou ontwikkelen. Als taal koos ik hier voor Angular. Ik creeërde een dynamische user interface met verschillende functionaliteiten. Figuur 3 is de Homepagina en indien men doorklikte op een bepaalde patiënt kreeg men het scherm van figuur 4 te zien.

Clustering, The Real Deal

Na het opvullen van de schermen met data uit de database en dynamische aanpassingen te doen met betrekking tot de monitorwaardes (indien deze in een bepaalde gevaarlijke range viel werd de kleur van het getal rood bijvoorbeeld), was het tijd om mij toe te spitsen op het clusteren van de dataset om hierop voorspellingen te gaan doen. Ik werd hierbij sterk bijgestaan door Ali & Armando van Arinti, met behulp van hun kennis over A.I. modellen en Machine Learning algoritmes, bekwam ik snel een werkende oplossing voor mijn dataset. De manier waarop mijn K-Means Clustering algoritme werkte was als volgt; Het algoritme neemt een dataset van alle patiënten die reeds meer dan 100 metingen hebben gehad, deze wordt omgevormd naar een dataset waarbij elke patiënt beschikt over zijn 87 meest recente metingen met de EWS waarde per meting op een bepaald tijdstip. Daarna berekenen we met behulp van het K-means Algoritme verschillende labels waartoe elke patiënt zal behoren. Elke patiënt vertoont namelijk een bepaalde ‘trend’ doorheen deze 87 metingen. In de front-end applicatie wordt er voor een patiënt op het monitoring detail dashboard zijn laatste 87 metingen opgehaald via de API. Deze worden voorgesteld aan ons Python script. Hierna voorspelt het algoritme tot welke cluster deze patiënt behoort en geeft deze ons een bepaalde categorie weer. Dit is ook de categorie die u dan op het scherm te zien krijgt met de passende uitleg voor deze categorie. Onderaan in het dashboard kreeg men dan na een korte berekening van de data te zien tot welke categorie de patiënt behoorde. Dit kan in de toekomst de dokters en het verplegend personeel een indicatie geven van hoe de patiënt er aan toe is en wat zijn vooruitzichten zijn.

Wrapping things up

Als algemene terugblik kan ik zeggen dat mijn stage bij Arinti een zeer stijle leercurve op vlak van A.I. had. Gaandeweg ben ik hier wegwijs in geworden, met de hulp van de collega’s uit het team. Het was een zeer leuke, uitdagende en leerrijke ervaring waarbij ik zeer veel inzicht heb gekregen in het bedrijfsleven en de uitdagingen die gepaard gaan met A.I. projecten. Hartelijk bedankt aan Wouter en Sammy voor deze kans en de leuke stage!

-Senne, Erasmushogeschool Brussel

Blog

Stay tuned.