Wij stellen een nieuwe methode voor om categorische kenmerken te coderen, die specifiek is afgestemd op voorspellingsdoeleinden. In essentie coderen we bij deze aanpak categorische kenmerken door de trend te modelleren van de grootheden die bij elke categorie horen. Uit onze experimenten blijkt dat deze aanpak aanzienlijke prestatievoordelen oplevert – zowel wat betreft voorspellingsnauwkeurigheid als wat betreft vertekening – aangezien boomgebaseerde ensemblemodellen hierdoor trends beter kunnen modelleren en extrapoleren.

Lees ons artikel over

class="lazyload

.

Inleiding

De aanleiding voor dit onderzoek kwam voort uit talrijke prognoseprojecten voor klanten bij Artefact onze boosting-modellen op het moment van de voorspelling een sterke vertekening vertoonden. Tijdens een diagnostische fase hebben we vastgesteld dat een van de belangrijkste oorzaken van vertekening in ensemble-leermodellen voortkwam uit de moeilijkheid om trends en schommelingen nauwkeurig te modelleren.

Hieronder zullen we uitleggenwaaromenhoewe een nieuwe methode hebben toegepast voor het coderen van categorische kenmerken. Op basis van onze experimenten met een prognoseproject voor een retailklant en diverse openbare datasets tonen we aan dat deze techniek vooroordelen effectief kan verminderen en de nauwkeurigheid kan verbeteren.

Boosting en trends: waarom is het zo ingewikkeld?

Boosting-algoritmen hebben moeite met extrapoleren

Boosting-algoritmen hebben moeite met het modelleren en extrapoleren van trends, omdat ze geen nieuwe waarden kunnen voorspellen die niet in de trainingsset voorkomen of in de bladeren ontbreken.„Linear Tree“-modellen proberen dit probleem te verhelpen, maar onze tests leverden met deze methode geen eenduidige resultaten op.

Klassieke coderingen neigen naar statische voorspellingen

De meest gangbare coderingsmethoden die bij boosting worden gebruikt, bevorderen statische relaties tussen onafhankelijke en afhankelijke variabelen, wat op zijn beurt leidt tot een grotere vertekening wanneer er trends aanwezig zijn. Het onderstaande diagram illustreert dit fenomeen:

Klassieke coderingen neigen naar statische voorspellingen

Vereenvoudigde visuele weergave die de statische aard van de codering van categorische kenmerken benadrukt, zoals die wordt toegepast in boosting-algoritmen

We erkennen dat bovenstaande voorstelling een te grote vereenvoudiging is, aangezien beslissingsbomen complexer zijn en in staat zijn om op basis van meerdere factoren niet-lineaire verbanden te leggen. De voorwaarde „de kleur is zwart“ zou immers gekoppeld kunnen zijn aan „de maand is juni“. In dat geval zou de kleur zwart niet altijd dezelfde impact hebben. Maar laten we eens naar het grotere geheel kijken:

  • Het toekennen van één enkele impact aan de kleur zwart in juni is nog steeds niet ideaal, aangezien de impact in juni 2021 kan verschillen van die in juni 2022. Zelfs als we het jaar meenemen, zou de beslissingsgrens niet alleen te complex worden om te bouwen en te identificeren, maar wat zou er bovendien gebeuren als de data in 2022 en er voorspellingen moeten worden gedaan voor 2023?

  • Feature engineering is bedoeld om het model te helpen relaties gemakkelijker te herkennen. Als we het model kunnen helpen de invloed van de kleur zwart op elk willekeurig moment te herkennen zonder dat daarvoor complexe relaties hoeven te worden vastgesteld, zou dat een groot voordeel zijn voor het model. Daarom …

Onze vernieuwende aanpak: dynamische codering van categorische kenmerken

Basis van dynamische codering (v1 zonder itemniveau)

In één zin zou onze methode voor het coderen van categorische kenmerken als volgt kunnen worden omschreven:we modelleren de trendcomponent van elke categorie en gebruiken deze trendwaarden om dat categorische kenmerk te coderen.

Het onderstaande diagram laat het verschil zien tussen een statische gemiddelde-codering en een op trends gebaseerde codering voor twee kleurcategorieën: zwart en goud.

class="lazyload

Illustratie die het principe van dynamische codering weergeeft, waarbij voor elke categorie een trendmodel wordt toegepast

In onze experimenten hebben we ervoor gekozen om Prophet te gebruiken voor het extraheren van de trendcomponent. Uiteraard kunnen ook andere modellen voor tijdreeksvoorspelling in overweging worden genomen.

Merk op dat de statische codering inhoudt dat de verkoop van zwarte artikelen op elk moment gemiddeld 100 stuks per maand bedraagt. De dynamische codering houdt daarentegen rekening met de stijgende trend bij zwarte artikelen en kan deze trend naar de toekomst extrapoleren. Hetzelfde geldt voor gouden artikelen. Onze aanpak zal dus vooral nuttig zijn bij datasets waarin de te voorspellen doelvariabele sterke trends vertoont in de verschillende beschikbare categorieën.

Onze primaire focus ligt op het vergemakkelijken van de aanpassing van het model aan de veranderende relaties tussen onafhankelijke variabelen en de te voorspellen afhankelijke variabele. Daarom zou deze dynamische coderingsmethode ook kunnen worden toegepast op numerieke kenmerken. Neem bijvoorbeeld de prijs. Hoewel de prijs numeriek is en het model daar direct regels op kan baseren, kunnen de voorkeuren van mensen voor goedkope of dure artikelen in de loop van de tijd nog steeds veranderen en een specifieke verkooptrend volgen. In de context van een economische crisis kunnen betaalbare producten bijvoorbeeld een stijgende verkooptrend volgen, terwijl dure producten een dalende trend kunnen vertonen. Door 'betaalbaar' als de ene categorie en 'duur' als de andere te beschouwen, zouden we een dynamische codering voor de prijskenmerk kunnen voorstellen, net zoals we dat voor kleuren hebben gedaan.

Het is belangrijk om op te merken dat voor numerieke kenmerken zowel de basisvariabelen als de dynamisch gecodeerde variabelen in het model kunnen worden gebruikt, aangezien ze verschillende soorten informatie opleveren.

Meer nadruk op dynamische functies (v2 met itemniveau)

Hoewel deze nieuwe coderingsmethode een verbetering is, is het belang van categorische kenmerken vaak niet groot genoeg om een significante invloed te hebben op de voorspellingen wanneer we de belangrijkheid van kenmerken onderzoeken. Om de dynamische kenmerken meer gewicht te geven en zo een betere modellering en extrapolatie van trends te bevorderen, passen we de coderingswaarden afzonderlijk aan voor elke tijdreeks of elk item.

class="lazyload

Formule die de twee componenten van dynamische codering weergeeft: categorieniveau en itemniveau

Om terug te komen op ons kleurvoorbeeld: als we twee verschillende zwarte artikelen hebben, maakt dit het mogelijk om de categorie „zwart“ voor elk artikel dynamisch te coderen, waarbij de codering verschilt op basis van de individuele verkoopcijfers uit het verleden.

Tabel die de berekening van dynamische codering aan de hand van een eenvoudig voorbeeld illustreert

Tabel die de berekening van dynamische codering aan de hand van een eenvoudig voorbeeld illustreert

Experimenten en resultaten

Klantendatabase

We hebben onze aanpak gebruikt om de omzet te voorspellen voor een van onze klanten in de detailhandel. We hebben onze methode grondig getoetst in een breed scala aan scenario’s om de effectiviteit ervan te waarborgen. Hier volgen enkele data over de context van het experiment:

  • Er werden experimenten uitgevoerd voor 9 verschillende productcategorieën, met voor elke categorie één boostingmodel (LightGBM).
  • Voor elk onderzoeksgebied werd een k-voudige kruisvalidatie met een zich uitbreidend venster uitgevoerd (k=5).

  • Prognosehorizon: dag +1 tot dag +180.

  • De prestaties werden beoordeeld aan de hand van twee maatstaven:

class="lazyload

Over het geheel genomen bleek de methode zeer efficiënt te zijn:deze leidde tot een gemiddelde absolute afname van de afwijking met 9,82% en een gemiddelde absolute toename van de voorspellingsnauwkeurigheid met 6,29%voor de 9 productdomeinen en de 5 kruisvalidatiegroepen.

In het volgende hoofdstuk wordt de relevantie van onze methode aangetoond door deze te testen op een openbare dataset.

Databestand met verkoopcijfers van winkels

In deze vereenvoudigde casestudy maken we gebruik van de Kaggle-dataset‘Store Sales — Time Series Forecasting’. Deze dataset vertoont een steile trend wanneer we de tijdreeks van de gemiddelde omzet bekijken, waardoor onze methode bijzonder relevant is. Bovendien is de gekozen voorspellingshorizon drie maanden, wat ver genoeg is om te profiteren van de extra extrapolatiemogelijkheden van de dynamische codering. Ter illustratie beperken we de dataset tot 31 maart 2016, vlak voordat er een aardbeving plaatsvond, waardoor de verkoopcurve afvlakte.

Vóór de codering bestaat onze oorspronkelijke dataset voor ongeveer 75% uit numerieke kenmerken, waaronder vertragingen, voortschrijdende gemiddelden, kalenderkenmerken en feestdagen. De overige 25% bestaat uit categorische kenmerken, zoals productfamilie, winkelnummer, stad en andere.

Er worden twee verschillende modellen getraind: het ene maakt gebruik van de categorische kenmerken die dynamisch zijn gecodeerd met behulp van onze eigen methode, terwijl het andere gebruikmaakt van de standaardverwerking van categorische kenmerken door LightGBM.

Bij een vergelijking van hun prestaties zien we een aanzienlijke verbetering bij de dynamische coderingsmethode. De volgende tabel geeft een overzicht van de resultaten:

Vergelijking van RMSE, FA en %Bias tussen de LightGBM-codering en dynamische codering

Vergelijking van RMSE, FA en %Bias tussen de LightGBM-codering en dynamische codering

class="lazyload

Gemiddelde wekelijkse omzet + prognoses voor de komende 3 maanden (dynamische codering versus LightGBM-codering)

Zoals uit bovenstaande grafiek blijkt,weet het model met dynamische coderingende trend goed weer te geven en te extrapoleren, terwijl het alternatieve model hier moeite mee heeft.

Gebruik en beperkingen

Onze methode blijkt vooral waardevol te zijn in scenario’s waarin de tijdreeksuitgesproken trendsvertoont en devoorspellingshorizon ver genoeg in de toekomst ligt om te kunnen profiteren van trend-extrapolatie. Bovendienneemt het effect van onze aanpak op de voorspellingen toe naarmate we dynamischmeer categorische kenmerkenmet eenaanzienlijke voorspellende waardein het model coderen en opnemen. Het is echter belangrijk te erkennen dat andere coderingsmethoden hun eigen voordelen hebben en in andere contexten wellicht voordeliger zijn. Bovendien bestaat de mogelijkheid om beide coderingstypen te combineren voor mogelijk betere resultaten.

Conclusie

  • Traditionele coderingstechnieken voor categorische kenmerken zijn niet ideaal voor prognoses, vooral wanneer tijdreeksen sterke trends vertonen en de prognosehorizon ver in de toekomst ligt.
  • Onze methode is een variant op modelstacking, aangezien we een Prophet-model gebruiken – dat uitblinkt in het modelleren en extrapoleren van trends – om de codering van de categorische kenmerken op te bouwen.

  • Onze experimenten hebben aangetoond dat dit de voordelen biedt van het verminderen van vertekening en het verbeteren van de voorspellingsnauwkeurigheid.

We zijn van plan om in de komende maanden een artikel te publiceren met alle details over onze aanpak en de uitvoering ervan. Houd ons in de gaten voor meer nieuws!

class="lazyload

Medium-blog van Artefact.

Dit artikel is oorspronkelijk gepubliceerd op Medium.com.
Volg ons op onze Medium-blog!