Gepubliceerd op: 29 januari 2020
Deel

In recente columns heb ik mijn mening gegeven over de kwaliteit van de gegevens die veel bedrijven in hun datawarehouses, -meren of -moerassen hebben staan. Mijn ervaring is dat de meeste gegevens die bedrijven zo zorgvuldig hebben opgeslagen nutteloos zijn en nooit enige waarde voor het bedrijf zullen genereren. De gegevens die wel potentieel bruikbaar zijn, vereisen vaak enorme hoeveelheden voorbewerking voordat ze bijvoorbeeld voor machine learning kunnen worden gebruikt. Als gevolg hiervan wordt in de meeste data science teams meer dan 90 procent van alle tijd besteed aan het voorbewerken van de gegevens voordat ze zelfs maar kunnen worden gebruikt voor analytics of machine learning.

In een artikel dat we onlangs hebben ingediend, hebben we dit probleem bestudeerd voor systeemlogs. Vrijwel elk software-intensief systeem genereert gegevens die de toestand en belangrijke gebeurtenissen in het systeem op belangrijke tijdstippen vastleggen. De uitdaging is dat aan de ene kant de gegevens die worden vastgelegd in logs bedoeld zijn voor menselijke consumptie en dus een grote variabiliteit bevatten in de structuur, inhoud en type van de informatie voor elke logboekvermelding. Anderzijds is de hoeveelheid gegevens die is opgeslagen in logs vaak fenomenaal groot. Het is niet ongewoon dat systemen gigabytes aan gegevens genereren voor zelfs maar één enkele operationele dag.

Het voor de hand liggende antwoord op dit raadsel is om machine learning te gebruiken om de relevante informatie uit de systeemlogs af te leiden. Deze aanpak kent een aantal belangrijke uitdagingen vanwege de manier waarop logs worden gegenereerd. Op basis van ons onderzoek in de literatuur en bedrijfscases hebben we verschillende uitdagingen geïdentificeerd.

Door de aard van de gegevensgeneratie vereisen de logbestanden uitgebreide voorbewerking, wat de waarde vermindert. Het komt ook vaak voor dat meerdere systeemprocessen in hetzelfde logbestand schrijven, wat tijdreeksanalyse en andere machine learning technieken die uitgaan van sequentiële data bemoeilijkt. Omgekeerd genereren veel systemen meerdere soorten logbestanden en voor het vaststellen van een betrouwbare grondwaarheid is het nodig om gegevens uit meerdere logbestanden te combineren. Deze logbestanden bevatten vaak gegevens op fundamenteel verschillende abstractieniveaus, wat het trainen van modellen voor machinaal leren bemoeilijkt. Als we eenmaal in staat zijn om machine learning modellen toe te passen op de voorbewerkte gegevens, vereist de interpretatie van de resultaten vaak uitgebreide domeinkennis. Ontwikkelaars zijn vrij om nieuwe code aan het systeem toe te voegen die logboekvermeldingen in ad-hoc formaten genereert. Het veranderende formaat van logbestanden bemoeilijkt het gebruik van meerdere logs voor het trainen van machine-learning modellen, omdat de logs niet noodzakelijkerwijs vergelijkbaar zijn. Tot slot, alle tools die gebouwd zijn om logbestanden te verwerken, zoals geautomatiseerde parsers, falen onvoorspelbaar en zijn erg broos, waardoor constant onderhoud nodig is.

We hebben het probleem specifiek bestudeerd voor systeemlogs, maar mijn ervaring is dat onze bevindingen vrij typerend zijn voor vrijwel elk type geautomatiseerde gegevensgeneratie. Hoewel dit een enorm probleem is voor bijna alle bedrijven waar ik mee werk en er enorme hoeveelheden middelen worden besteed aan het voorbewerken van gegevens om er waarde uit te halen, is het een verloren strijd. De hoeveelheid gegevens die wordt gegenereerd in elk product, door klanten, in het hele bedrijf, enzovoort, zal alleen maar toenemen. Als we dit probleem niet aanpakken, zal elke datawetenschapper, ingenieur en wiskundige binnenkort weinig anders meer doen dan data voorbewerken.

'Data should be generated in such a way that preprocessing isn’t required at all'

De oplossing, zoals we die in het artikel voorstellen, is vrij eenvoudig: in plaats van eerst de gegevens te genereren en ze dan voor te bewerken, moeten we software bouwen om gegevens te genereren in een formaat dat helemaal geen voorbewerking vereist. Alle gegevens moeten zo worden gegenereerd dat ze onmiddellijk en automatisch kunnen worden gebruikt voor machinaal leren. Bij voorkeur zonder menselijke tussenkomst.

Het bereiken van dit doel is iets ingewikkelder dan wat ik in deze post kan schetsen, maar er zijn een aantal belangrijke elementen die volgens mij gemeenschappelijk zijn voor elke benadering die dit doel nastreeft. Ten eerste moeten alle gegevens numeriek zijn. Ten tweede moeten alle gegevens van het nominale type (verschillende elementen hebben geen volgorde of relatie tot elkaar) een-hot gecodeerd zijn, wat betekent dat de elementen worden weergegeven in een binaire tekenreeks die net zo lang is als het aantal elementtypes. Ten derde kunnen gegevens van het ordinale type dezelfde aanpak gebruiken of, in het geval van niet-dichotome gegevens, een verscheidenheid aan coderingen. Ten vierde moeten interval- en ratiogegevens worden genormaliseerd (in kaart gebracht naar een waarde tussen 0 en 1) voor optimaal gebruik door machine- en deep-learningalgoritmen. Ten vijfde moet, waar nodig, de statistische verdeling van de gegevens in kaart worden gebracht naar een standaard Gaussiaanse verdeling voor betere trainingsresultaten.

Om dit te bereiken op het moment dat gegevens worden gegenereerd, moeten ingenieurs en ontwikkelaars mogelijk samenwerken met datawetenschappers. Daarnaast vraagt het om afstemming binnen de hele organisatie, wat tot nu toe niet nodig was. Door dit te doen, kunnen bedrijven echter systemen bouwen die volledig autonoom modellen voor machine learning kunnen verzamelen, trainen en hertrainen en deze kunnen inzetten zonder menselijke tussenkomst (zie de figuur).

Systeemregistratie voor machinaal leren

Concluderend zijn de meeste gegevens in de meeste bedrijven nutteloos omdat ze op de verkeerde manier zijn gegenereerd en zonder de juiste structuur, codering en standaardisatie. Vooral voor het gebruik van deze gegevens in het trainen van modellen voor machinaal leren is dit problematisch, omdat het uitgebreide hoeveelheden gegevensvoorbewerking vereist. In plaats van onze activiteiten op het gebied van gegevensvoorbewerking te verbeteren, moeten we gegevens genereren op een manier die voorbewerking helemaal overbodig maakt. Datawetenschappers en -ingenieurs zouden er baat bij hebben als ze zich zouden richten op hoe gegevens gegenereerd moeten worden. In plaats van achteraf te proberen de rommel op te ruimen, moeten we om te beginnen proberen geen rommel te maken.