Feature engineering is data zo voorbereiden dat een voorspelmodel ervan kan leren: kiezen welke gegevens het model krijgt en die omzetten in getallen waarmee het kan rekenen. Een winkel die zijn dagomzet voorspelt, kan zijn kassabonnen omzetten in "dag van de week", "feestdag" en "omzet op dezelfde dag een week eerder". Goede features bepalen vaak of zo'n model überhaupt werkt.
Waarom doet het ertoe?
Pedro Domingos noemde de gebruikte features in A Few Useful Things to Know About Machine Learning (2012) veruit de belangrijkste factor voor het slagen van een project. Ruwe data moet vaak worden omgevormd voordat een model ervan kan leren, en volgens Domingos gaat in het maken van die features doorgaans de meeste moeite van een project zitten. Het is ook lastiger dan het kiezen van een algoritme, omdat features afhangen van het vakgebied, terwijl leeralgoritmen grotendeels algemeen bruikbaar zijn.
De Machine Learning Crash Course van Google legt uit waarom: een model leest de rijen van je spreadsheet niet rechtstreeks. Het leest een featurevector, een rij kommagetallen, en feature engineering bepaalt hoe de ruwe waarden die getallen worden.
Hoe werkt het?
- Getallen omvormen. Normalisatie brengt features op een vergelijkbare schaal, bijvoorbeeld 0 tot 1. Logaritmisch schalen past bij waarden waarvan een paar heel groot zijn en de meeste klein, zoals het aantal beoordelingen per film. Binning deelt getallen in klassen in, zoals leeftijdsgroepen.
- Categorieën coderen. Een model heeft getallen nodig, dus een waarde zoals een kleur wordt een one-hot vector: één positie per categorie, met een 1 voor de categorie die geldt en verder nullen. Bij gewoon doornummeren behandelt het model de nummers als hoeveelheden: in het voorbeeld van Google zou het "paars" zes keer zo waarschijnlijk vinden als "oranje".
- Features maken. Leid nieuwe waarden af uit bestaande: de weekdag uit een datum, het aantal dagen sinds de laatste bestelling van een klant, of een feature cross die twee features tot één combineert.
- Features selecteren. Laat weg wat niets toevoegt. scikit-learn biedt methoden die features verwijderen die nooit variëren, per feature de samenhang met de uitkomst meten (bijvoorbeeld met mutual information), of een model steeds opnieuw trainen op kleinere sets features (recursive feature elimination).
En deep learning?
Deep learning leert veel features zelf: in het overzichtsartikel van LeCun, Bengio en Hinton staat dat mensen die lagen van kenmerken niet ontwerpen. Dat veranderde het werk aan beelden, spraak en tekst meer dan het werk aan tabellen. Grinsztajn e.a. (2022) vergeleken beide op 45 tabeldatasets en vonden dat boommodellen zoals XGBoost en random forests het bij middelgrote data van ongeveer 10.000 rijen nog steeds beter deden dan deep learning. Voor zakelijke data in spreadsheetvorm blijven features met een klassiek model een verstandig begin.
Waar gaat het mis?
De klassieke fout is data leakage (datalekkage): een feature die informatie gebruikt die je nog niet hebt op het moment dat het model voorspelt. Volgens scikit-learn geeft dat te rooskleurige testresultaten en slechtere prestaties in productie. Het gebeurt ook als een voorbewerkingsstap, zoals normalisatie, leert van de testdata. Feature stores zoals Feast leveren dezelfde featuredefinities voor training en voor live voorspellingen, en bouwen trainingssets die kloppen voor elk tijdstip (point-in-time correct), zodat toekomstige waarden niet in de training lekken.
Voorbeeld
Stel: een bakkerij wil voorspellen hoeveel broden elk van haar winkels morgen verkoopt. De ruwe data zijn de kassabonnen, één regel per verkoop met een tijdstip. Bruikbare features: de dag van de week, of morgen een feestdag is, de weersverwachting, de verkoop op dezelfde weekdag een week eerder en het gemiddelde over de vier weken daarvoor. Het werkelijke weer van morgen kan geen feature zijn, want niemand kent het op het moment van voorspellen; de verwachting wel. Of deze features helpen, test je op voorbije maanden die het model tijdens de training niet heeft gezien.
Bronnen
- Domingos: A Few Useful Things to Know About Machine Learning (Communications of the ACM, 2012)Web
- Google: Machine Learning Crash Course, Numerical data: how a model ingests data using feature vectorsWeb
- scikit-learn: Common pitfalls and recommended practices (data leakage)Web
- scikit-learn: Feature selectionWeb
- Grinsztajn et al.: Why do tree-based models still outperform deep learning on tabular data? (2022)arXiv
- Feast: What is Feast? (documentation)Web
