De grote schoonmaak van bol.com met Data Science – blog Ernst Kuiper

 

Data Science en Machine Learning zijn een steeds belangrijkere rol gaan spelen binnen bestaande organisaties en business modellen. Vooral in e-commerce kunnen voorspellende modellen enorme meerwaarde hebben. Logisch dus dat bol.com fors aan het investeren is in het uitbreiden van zijn Data Science activiteiten. Het effect van deze investeringen gaan we in de nabije toekomst zien, maar ook nu al lopen er diverse interessante Data Science projecten. In deze post zoomen we in op één van deze projecten waar ik, samen met collega Data Scientist Joep Janssen, aan heb gewerkt: het chunk project.

Let’s get chunky

Misschien vraag je je nu af wat een ‘chunk’ is? Het antwoord is eigenlijk best simpel: chunks zijn niets meer of minder dan productcategorieën die speciaal voor bol.com bedacht zijn. Elk artikel in onze productcatalogus is toegewezen aan een bepaalde chunk. Tot nu toe werden die chunks handmatig door leveranciers en zakelijke verkooppartners toegekend. En zoals bij alle manuele processen, kunnen en zullen er soms fouten worden gemaakt. Dit betekent dat je af en toe een artikel in onze winkel aantreft waar het eigenlijk niet thuishoort. Omdat dit de klantervaring negatief beïnvloedt, willen we dat graag voorkomen. En dat is waar Data Science om de hoek komt kijken. Kunnen we een model ontwikkelen dat automatisch de juiste chunk toewijst op basis van de productdata?

Het woeste chunk landschap

Om dit project tot een succes te maken, moeten een aantal problemen worden getackeld. Zoals bij alle Data Science projecten, is het essentieel dat we over goede data beschikken. Alleen dan kunnen zinvolle resultaten worden geboekt. Hoewel de datakwaliteit over het algemeen in orde is, geldt dat uiteraard niet voor alle artikelen.

Daar komt bij dat we onze strijd voeren op een groot en woest chunk landschap. Op dit moment is er sprake van een slordige 6.000 chunks en we willen al deze chunks goed kunnen voorspellen. Een flinke uitdaging! Het wordt echter nog beduidend complexer, want een groot aantal chunks zijn ambigu en dus onduidelijk. Zo onduidelijk zelfs dat het voor mensen lastig is de verschillen te duiden. Een voorbeeld? We maken binnen bol.com onderscheid tussen maar liefst 15 verschillende typen lepels. Bovendien zijn er een groot aantal chunks die tien of zelfs nog minder artikelen bevatten. Met zo weinig producten wordt het vrijwel onmogelijk om een model te trainen dat toch goed presteert voor deze chunks én algemeen genoeg is.

Omdat het chunk landschap zo rommelig en vervuild is, houdt een groot deel van het projectteam zich bezig met het opschonen hiervan. Oftewel: met het samenvoegen van vergelijkbare chunks en met het verwijderen van chunks die niet of nauwelijks worden gebruikt. Zo ontstaat een chunk landschap dat beter beheersbaar en minder complex is. Een ‘schonere’ collectie chunks maakt ons leven ook een stuk makkelijker omdat het zonder twijfel positief bij gaat dragen aan de prestaties van ons model.

De waarheid en niets dan de waarheid

Een fundamenteler probleem dat we niet zo ‘eenvoudig’ op kunnen lossen, is het feit dat onze labels die we gebruiken om het model te leren wat waar bij hoort, per definitie tekortschieten. Ja, we weten dat sommige artikelen niet aan de juiste chunk zijn toegewezen, maar welke dat zijn is onbekend, laat staan dat we weten om hoeveel artikelen het überhaupt gaat. Gaat het om 1% of 5%? Meer of juist minder? Het enige dat we zeker weten is dat een onbekend deel van onze productcatalogus vervuild is. Dit levert niet alleen extra ‘ruis’ voor ons model op, maar het maakt het ook een stuk lastiger om het model te valideren.

Die validatie is uiteraard cruciaal. In de meeste machine learning toepassingen is dit een redelijk eenvoudig proces. Kies een validatie (of test) set en laat daar het model op los. Vervolgens is het ‘slechts’ een kwestie van checken in hoeverre de voorspellingen overeenkomen met de werkelijkheid. Als dat 100% recall en precision oplevert, ben je de meest tevreden Data Scientist die er op aarde rondloopt. Toch? Maar wat als je niet zozeer geïnteresseerd bent in het reproduceren van de labels, maar wilt vaststellen welke artikelen van een totaal ander label moeten worden voorzien? Hoe valideer je die voorspellingen dan? Omdat we in deze gevallen niet weten wat het antwoord is, zal je, al is het nog zo schoorvoetend, over moeten gaan tot handmatige validatie.

De catalogus van Bol.com telt miljoenen artikelen. Dus zelfs als er ‘maar’ 1% aangepast hoeft te worden, dan praat je al over tienduizenden artikelen die van chunk veranderen. Niemand wordt enthousiast van het checken van duizenden voorspellingen om te valideren of je model de juiste resultaten ophoest. Geestdodend monnikenwerk! Dus wat doe je dan? Je verdeelt de last over je collega’s.

De Polish Night

Dat de feestdagen voor zo’n beetje iedereen in retail belangrijk zijn, is een open deur. Bol.com vormt daar geen uitzondering op, want ook bij ons stijgt het ordervolume in die periode explosief. Het is dan ook essentieel dat we juist dan zoveel mogelijk klanten trekken en dat we al die klanten optimaal bedienen. Om te waarborgen dat we ‘klaar’ zijn voor de feestdagen organiseren we begin november de Polish Night. Tijdens die avond spannen honderden medewerkers zich in om de winkel klaar te maken voor de feestdagen. Om de eventuele pijn wat te verzachten, serveren we daar een biertje en live muziek bij.

Wat ons betreft was de Polish Night hét ideale moment om ons model te testen. Daarom hebben we de handen ineengeslagen met één van onze Product Owners en Machine Learning enthousiasteling Pim Nauts. Hij heeft een eenvoudige user interface ontwikkeld voor ons model: Chunk Norris. Chunk Norris presenteert artikelen aan gebruikers waarvan het model denkt dat ze op dit moment in de verkeerde chunk staan. De gebruiker kan vervolgens aangeven of de voorspelling juist of onjuist is, of dat ze geen idee hebben. Zo’n 25 collega’s zijn drie uur lang met Chunk Norris in de weer geweest en ze hebben in die tijd zoveel mogelijk artikelen gevalideerd. Uiteindelijk kwamen we uit op 26.000 validaties, waaruit bleek dat meer dan 12.000 voorspellingen als juist werden beoordeeld. Dit leverde niet alleen essentiële informatie op over de prestaties van het model, maar het is ook een fantastisch voorbeeld van hoe, relatief vroeg in het ontwikkeltraject, Data Science meerwaarde kan bieden.

Hoe nu verder?

De Polish Night was een groot succes voor het chunking project, maar zeker niet de finishlijn. We werken nog steeds hard aan het opschonen van de chunk collectie, wat een impuls voor de kwaliteit van ons model zal betekenen. Uiteraard willen we ook de Chunk Norris interface blijven inzetten. We ontwikkelen momenteel een service waarbij op gezette tijden voorspellingen voor alle artikelen in de catalogus worden gegenereerd. Onze Product Specialisten kunnen vervolgens Chunk Norris gebruiken om die voorspellingen te beoordelen, de catalogus efficiënt op te schonen en daardoor ook het model continu te verbeteren. Als het even meezit, is de kans dat je een bluetooth speaker tussen de broodmessen aantreft (of andersom) binnenkort dus tot nul gereduceerd!

 

Meer lezen over Data Science bij bol.com? Klik hier