Machine learning-modellen zijn hongerig naar gelabelde data. In computer vision betekent labelen het tekenen van bounding boxes rondom objecten. In NLP betekent het taggen van entiteiten in tekst. Maar in de wereld van sensordata — accelerometers, temperatuursensoren, trillingsmonitors, stroommetingen — is annotatie een heel ander verhaal. De data is continu, hoogdimensionaal, en vereist vaak domeinexpertise om correct te interpreteren.
Ik heb aanzienlijke tijd besteed aan het bouwen en verfijnen van annotatiepipelines voor sensordata in productontwikkelingsprojecten. De les die steeds terugkomt: volledig handmatige annotatie schaalt niet, maar volledig geautomatiseerde annotatie is niet betrouwbaar genoeg voor de meeste toepassingen. De sweet spot ligt bij hybride strategieën die menselijke expertise combineren met algoritmische ondersteuning. Dit artikel is een deep dive in die strategieën.
Het annotatie-knelpunt
Stel je een typisch scenario voor: je bouwt een machine learning-model om apparatuurstoringen te detecteren op basis van trillingsdata. Je hebt een sensor die op 1 kHz opneemt op een motor die 24/7 draait. Na één week heb je meer dan 600 miljoen datapunten. Ergens in die data zitten een handvol storingsgebeurtenissen — en je model moet precies weten waar ze beginnen en eindigen.
Handmatige annotatie van deze data betekent dat een domeinexpert uren aan golfvormen doorscrolt, gebeurtenissen identificeert, start- en eindtijdstempels markeert en elk ervan classificeert. In het beste geval kan een ervaren annotator ongeveer 2-4 uur sensordata labelen per uur werk. Voor een dataset die weken of maanden beslaat, wordt dit onbetaalbaar duur. En in tegenstelling tot beeldlabeling kun je het niet eenvoudig crowdsourcen — het interpreteren van trillingsspectren vereist gespecialiseerde kennis.
De kostenberekening is hard. Een supervised learning-model heeft misschien duizenden gelabelde voorbeelden nodig om goed te generaliseren. Als elk voorbeeld 5 minuten duurt om te labelen, kijk je naar honderden uren experttijd voordat je zelfs maar een eerste model kunt trainen. Dit is waar automatisering niet alleen nuttig wordt, maar essentieel.
Typen sensordata en hun annotatie-uitdagingen
Niet alle sensordata is gelijk. De annotatie-aanpak die voor het ene type werkt, kan compleet verkeerd zijn voor het andere. Het begrijpen van de kenmerken van je data is de eerste stap naar het kiezen van de juiste strategie.
Gebeurtenisgebaseerde data
Accelerometer-impacts, machine start/stop-events, deuropeningen. Discrete gebeurtenissen met duidelijke grenzen. Relatief eenvoudig te annoteren omdat events duidelijk afgebakend zijn — de uitdaging is ze vinden in lange opnames.
Toestandsgebaseerde data
Temperatuurregimes, operationele modi, degradatiefasen. De data schakelt tussen toestanden die minuten tot uren kunnen duren. Grenzen zijn vaak geleidelijk in plaats van scherp, waardoor precies labelen subjectief wordt.
Anomaliedata
Lagerslijtage, sensordrift, ongebruikelijke trillingspatronen. Per definitie zeldzaam en divers. Je hebt misschien duizenden uren normale werking maar slechts een handvol anomalieën — en elke anomalie kan er anders uitzien.
Multi-channel data
Meerdere sensoren die gelijktijdig meten (3-assige accelerometer, meerpunts temperatuur, gecombineerde trillings- + stroommetingen). Het label kan afhangen van patronen over kanalen heen, niet binnen één enkel signaal.
Waarom sensordata moeilijker te annoteren is dan afbeeldingen
Beeldannotatie heeft volwassen tools (LabelImg, CVAT, Label Studio) en eenvoudige workflows: kijk naar de afbeelding, teken een box, wijs een klasse toe. Sensordata is fundamenteel anders op manieren die standaard annotatietools ontoereikend maken:
Temporele context is belangrijk. Een enkel datapunt betekent op zichzelf niets. Om te bepalen of een trillingsmeting "normaal" of "defect" is, moet je minuten of uren aan omringende data zien, de bedrijfsomstandigheden kennen en de geschiedenis van de machine begrijpen. Dit maakt labelen traag omdat de annotator context moet behouden terwijl hij door lange tijdreeksen scrollt.
Grenzen zijn vaag. Wanneer "begint" een storing? Is het wanneer de trillingsamplitude voor het eerst een drempel overschrijdt? Wanneer het frequentiespectrum verschuift? Wanneer een menselijke operator iets verkeerds zou opmerken? Verschillende annotators plaatsen grenzen op verschillende punten, en er is vaak geen objectief correct antwoord.
Klasse-onbalans is extreem. Bij predictive maintenance is 99,9% van de data "normaal". Het vinden en labelen van de 0,1% die ertoe doet, vereist het doorzoeken van enorme hoeveelheden oninteressante data. Dit is uitputtend voor menselijke annotators en leidt tot gemiste events.
Domeinexpertise is essentieel. In tegenstelling tot het labelen van katten versus honden op afbeeldingen, vereist het labelen van "binnenring lagerfout" in een trillingsspectrum jarenlange ervaring. De pool van gekwalificeerde annotators is klein, duur en heeft betere dingen te doen.
Strategie 1: Rule-based pre-labeling
De eenvoudigste vorm van automatisering is het toepassen van deterministische regels om kandidaat-labels te genereren. Dit werkt het beste voor gebeurtenisgebaseerde data waar events duidelijke signaalkenmerken hebben.
Bijvoorbeeld: "Als de versnelling meer dan 5g bedraagt gedurende meer dan 10 milliseconden, label het als een impact-event." Of: "Als de temperatuur boven 80°C stijgt en daar meer dan 5 minuten blijft, label het als een oververhittingsepisode." Deze regels vertalen basale domeinkennis naar eenvoudige drempellogica.
De regels hoeven niet perfect te zijn. Hun taak is om de werkdruk van de annotator te verminderen van "alles vinden en labelen" naar "controleren en corrigeren wat de regels gevonden hebben." In de praktijk kan een set goed afgestelde regels 60-80% van de events correct labelen, waarbij de annotator de resterende 20-40% corrigeert. Dat is een 3-5x versnelling in annotatietijd.
Wanneer het werkt: Duidelijke signaaldrempels, goed begrepen fysica, gebeurtenisgebaseerde data. Wanneer het faalt: Geleidelijke degradatie, contextafhankelijke labels, patronen die frequentiedomeinanalyse vereisen.
Strategie 2: Model-assisted labeling
Zodra je een kleine gelabelde dataset hebt (zelfs een paar honderd voorbeelden), kun je een voorlopig model trainen en de voorspellingen gebruiken als pre-annotaties voor nieuwe, ongelabelde data. De annotator beoordeelt en corrigeert vervolgens de suggesties van het model in plaats van vanaf nul te labelen.
Dit creëert een positieve cyclus: gelabelde data traint het model, het model pre-labelt nieuwe data, de annotator corrigeert de pre-labels (wat sneller is dan labelen vanaf nul), de gecorrigeerde labels gaan terug in de training, en het model verbetert. Elke ronde worden de voorspellingen van het model beter en de correcties van de annotator minder.
De sleutel om dit te laten werken is de annotator de betrouwbaarheidsscore van het model te tonen bij elke voorspelling. Voorspellingen met hoge betrouwbaarheid kunnen met een snelle blik geaccepteerd worden. Voorspellingen met lage betrouwbaarheid krijgen zorgvuldige aandacht. Dit focust de menselijke inspanning precies waar die het meest nodig is.
Strategie 3: Active learning
Active learning gaat een stap verder dan model-assisted labeling. In plaats van alle ongelabelde data ter beoordeling aan te bieden, selecteert een active learning-systeem de meest informatieve samples om aan de annotator te tonen. "Meest informatief" betekent doorgaans de samples waar het model het meest onzeker is — de datapunten op de beslissingsgrens waar een menselijk label het model het meest zou leren.
De wiskunde achter sampleselectie varieert. Uncertainty sampling kiest de samples waar de voorspelde waarschijnlijkheid van het model het dichtst bij 50% ligt (voor binaire classificatie). Query-by-committee traint meerdere modellen en kiest de samples waar ze het meest van mening verschillen. Expected model change selecteert samples die de grootste update van de modelparameters zouden veroorzaken.
In de praktijk is uncertainty sampling het eenvoudigst te implementeren en werkt goed voor de meeste sensordataproblemen. De verbetering kan dramatisch zijn: onderzoek toont consistent aan dat active learning dezelfde modelprestaties kan bereiken met 30-70% minder gelabelde samples vergeleken met willekeurige selectie.
Praktische overweging: Active learning veronderstelt dat je data in kleine batches kunt labelen en het model tussen batches kunt hertrainen. Voor sensordata betekent dit dat je annotatietool, modeltrainingspipeline en sampleselectielogica geïntegreerd moeten zijn in één workflow. Het bouwen van deze infrastructuur kost vooraf inspanning, maar verdient zich snel terug wanneer je grote datasets te annoteren hebt.
Strategie 4: Weak supervision
Weak supervision, gepopulariseerd door Stanford's Snorkel-project, draait het annotatieparadigma om. In plaats van individuele datapunten te labelen, schrijf je labeling functions — kleine programma's die elk één heuristiek uitdrukken over hoe de data gelabeld moet worden. Elke functie kan ruis bevatten (soms fout), maar door veel ruizige functies te combineren, kun je verrassend nauwkeurige labels genereren.
Drempelfuncties
"Als de piektrilling meer dan X bedraagt, label als storing." Eenvoudig, snel, maar grof. Werkt goed als één signaal onder velen.
Patroonfuncties
"Als het frequentiespectrum een piek heeft bij de lagerfoutfrequentie, label als lagerprobleem." Codeert domeinkennis over specifieke faalmodi.
Contextfuncties
"Als de machine gepland stond voor onderhoud binnen 24 uur en de trillingen verhoogd zijn, label als gedegradeerd." Combineert sensordata met externe informatie.
Modelgebaseerde functies
"Als een voorgetraind anomaliedetectiemodel dit segment markert, label als anomaal." Maakt gebruik van bestaande modellen als ruizige labelers naast rule-based functies.
Een label model (de kern van het Snorkel-framework) leert vervolgens de nauwkeurigheid en correlatie van elke labeling function en combineert ze tot probabilistische labels. Het mooie van deze aanpak is dat het schrijven van een labeling function minuten duurt, terwijl het labelen van individuele datapunten uren kost. Je kunt snel itereren op je labelstrategie zonder individuele samples aan te raken.
Wanneer weak supervision schittert: Als je sterke domeinkennis hebt die uitgedrukt kan worden als regels, maar de regels alleen te ruizig zijn. Als je meerdere signalen of databronnen hebt die elk deelbewijs leveren. Als het datavolume zo groot is dat zelfs active learning te lang zou duren.
Strategie 5: Semi-supervised en self-supervised benaderingen
Deze benaderingen verminderen de annotatiebehoefte door de structuur van ongelabelde data zelf te benutten. Semi-supervised learning gebruikt een kleine gelabelde set naast een grote ongelabelde set, ervan uitgaande dat datapunten die dicht bij elkaar liggen in de featureruimte waarschijnlijk hetzelfde label hebben. Self-supervised learning creëert pretexttaken (zoals het voorspellen van de volgende sensormeting, of detecteren welk segment kunstmatig beschadigd is) die het model nuttige representaties leren zonder enig label.
Voor sensordata heeft contrastive learning bijzonder veelbelovende resultaten laten zien. Door een model te trainen om te herkennen dat twee datavensters uit dezelfde operationele toestand "vergelijkbaar" zijn terwijl vensters uit verschillende toestanden "verschillend" zijn, kun je krachtige featurerepresentaties leren. Deze features maken de downstream classificatietaak veel eenvoudiger, vaak met slechts een fractie van de gelabelde data die een model dat vanaf nul getraind wordt nodig zou hebben.
In de praktijk gebruik ik self-supervised pre-training als aanvulling op de andere strategieën. Train een feature extractor op al je ongelabelde data (daar heb je genoeg van), en fine-tune vervolgens een classifier op de gelabelde subset (die je zorgvuldig hebt samengesteld met active learning of weak supervision). Deze combinatie levert vaak de beste resultaten met de minste annotatie-inspanning.
Een praktische annotatiepipeline bouwen
Theorie is nuttig, maar hoe ziet een daadwerkelijke annotatiepipeline er in de praktijk uit? Hier is de workflow waar ik op uitgekomen ben over meerdere projecten:
Data-exploratie en regeldefinitie
Besteed tijd met de domeinexpert aan het bekijken van ruwe data. Identificeer voor de hand liggende patronen en codeer ze als rule-based pre-labels. Dit genereert een ruizige maar grote initiële dataset en bouwt gedeeld begrip op van wat de labels betekenen.
Handmatige correctie van een seed set
Laat de expert handmatig 200-500 pre-gelabelde samples verifiëren en corrigeren. Dit creëert een schone seed set voor modeltraining en verfijnt de annotatirichtlijnen. Documenteer dubbelzinnige gevallen en randgevallen expliciet.
Eerste model trainen en active learning loop starten
Train een model op de seed set. Gebruik uncertainty sampling om de volgende batch samples te selecteren voor menselijke review. Hertrain na elke batch en herhaal. Ga door tot de modelprestaties een plateau bereiken of het annotatiebudget is uitgeput.
Weak supervision voor opschaling
Als de gelabelde set nog te klein is, schrijf labeling functions die de kennis coderen die in de voorgaande stappen is opgebouwd. Gebruik een label model om probabilistische labels te genereren voor de resterende ongelabelde data. Train het uiteindelijke model op de combinatie van menselijke labels en weak labels.
Kwaliteitsborging en iteratie
Evalueer het model op een apart gehouden testset met geverifieerde labels. Analyseer faalmodi — waar faalt het model? Zijn er patronen? Gebruik deze inzichten om labeling functions te verfijnen, meer gerichte annotaties te verzamelen en het model iteratief te verbeteren.
Kwaliteitsborging: wanneer is een label goed genoeg?
Geautomatiseerde en semi-geautomatiseerde annotatie introduceert een fundamentele vraag: hoe weet je of de labels correct zijn? In tegenstelling tot een zorgvuldig handgelabelde gouden standaard zullen automatisch gegenereerde labels altijd enige ruis bevatten. De vraag is of die ruis acceptabel is voor jouw toepassing.
Labelkwaliteit meten
- Inter-annotator agreement: Laat twee experts dezelfde data onafhankelijk labelen en meet de overeenstemming (Cohen's kappa). Dit stelt het plafond voor modelprestaties vast.
- Steekproefcontroles: Neem willekeurig 5-10% van de automatisch gegenereerde labels en laat een expert ze verifiëren. Volg de nauwkeurigheid in de tijd.
- Modelprestaties op schone testset: Onderhoud een kleine, zorgvuldig geverifieerde testset. Als de modelprestaties op deze set acceptabel zijn, is de labelruis in de trainingsset waarschijnlijk beheersbaar.
- Verwarringanalyse: Kijk naar wat het model verwart. Als labelruis systematische verwarring tussen twee klassen veroorzaakt, is gerichte her-annotatie van die klassen efficiënter dan alles opnieuw labelen.
Acceptabele ruisniveaus
- Veiligheidskritische toepassingen: Labelruis onder 2%. Menselijke verificatie van alle randgevallen. Beschouw dit als verplicht voor medische, automotive of industriële veiligheidstoepassingen.
- Kwaliteitsbewaking: Labelruis onder 5%. Geautomatiseerde labels met periodieke expertreview. Geschikt voor de meeste industriële analysetoepassingen.
- Verkennende analyse: Labelruis onder 15%. Weak supervision-labels zijn vaak voldoende. Goed genoeg voor trenddetectie en initiële modelontwikkeling.
- Pre-training: Hogere ruis is toelaatbaar. Self-supervised of weakly supervised labels werken goed voor feature learning, zelfs met significante ruis.
Wanneer automatiseren en wanneer handmatig blijven
Automatisering is niet altijd het antwoord. Hier is een eenvoudig beslissingsraamwerk:
Blijf handmatig wanneer je dataset klein is (minder dan 500 samples), wanneer de taak diep contextueel begrip vereist dat moeilijk in regels te vatten is, wanneer je nog aan het definiëren bent wat de labels moeten zijn (de annotatierichtlijnen zijn niet stabiel), of wanneer de kosten van een fout label zeer hoog zijn (veiligheidskritische toepassingen).
Automatiseer wanneer je dataset groot is (duizenden tot miljoenen samples), wanneer er duidelijke patronen of drempels bestaan in de data, wanneer je een werkend model hebt dat verbeterd kan worden met meer data, wanneer annotatiekosten of -tijd het primaire knelpunt vormen, of wanneer dezelfde annotatietaak terugkeert als nieuwe data binnenkomt.
De meeste echte projecten beginnen handmatig en schakelen over naar automatisering naarmate het begrip van de data volwassener wordt. De initiële handmatige inspanning is nooit verspild — het bouwt de domeinkennis en seed datasets op waar automatiseringsstrategieën van afhankelijk zijn.
Lessen uit echte projecten
Over meerdere sensordata ML-projecten heen zijn dit de lessen die steeds terugkomen:
Definieer het labelschema zorgvuldig
Besteed meer tijd aan wat de labels betekenen dan aan hoe je ze toepast. Dubbelzinnige definities creëren inconsistente labels die geen enkele automatisering kan repareren. Schrijf definities, voorbeelden en tegenvoorbeelden op voor elke klasse.
Investeer vroeg in tooling
Een goede annotatie-interface voor tijdreeksdata bespaart uren per week. Bouw of configureer een tool waarmee annotators kunnen zoomen, pannen, meerdere kanalen overlappen en labels bewerken met sneltoetsen. De ROI is direct.
Versiebeheer voor je labels
Labels evolueren naarmate het begrip verdiept. Registreer elke wijziging: wie heeft wat gelabeld, wanneer en volgens welke versie van de richtlijnen. Dit is essentieel voor reproduceerbaarheid en het debuggen van modelregressies.
Begin met het model, niet met de data
Train eerst een eenvoudig model op een kleine gelabelde set. Kijk waar het faalt. Annoteer vervolgens specifiek om die fouten aan te pakken. Deze gerichte aanpak is 5-10x efficiënter dan willekeurig data labelen.
Conclusie: annotatie als engineeringdiscipline
Data-annotatie is geen saaie taak om uit te besteden en te vergeten — het is een engineeringdiscipline die direct de kwaliteit van je machine learning-model bepaalt. Voor sensordata zijn de uitdagingen uniek: temporele afhankelijkheden, vage grenzen, extreme klasse-onbalans en de noodzaak van domeinexpertise. Maar de strategieën zijn goed gevestigd: rule-based pre-labeling, model-assisted annotatie, active learning, weak supervision en self-supervised pre-training.
De meest succesvolle aanpak combineert deze strategieën in een pipeline die meegroeit met je project. Begin handmatig, codeer kennis in regels, laat modellen de annotators assisteren en schaal op met weak supervision. In elke fase: meet de labelkwaliteit en investeer menselijke inspanning waar het het meest telt.
De opbrengst is aanzienlijk. Een goed ontworpen annotatiepipeline kan de labeltijd met 5-10x verminderen, de labelconsistentie verbeteren en het praktisch maken om ML-modellen te bouwen op sensordata die anders te duur zou zijn om te annoteren. In een wereld waar de modelarchitectuur steeds meer een commodity wordt, is de kwaliteit van je data je echte concurrentievoordeel.
Werk je aan een machine learning-project met sensordata? Ik bouw end-to-end ML-pipelines voor productontwikkeling, van dataverzameling en annotatie tot modeltraining en deployment op embedded hardware. Neem contact op om je data-uitdaging te bespreken.