Search

Hoe wij Machine Learning inzetten om de Webshop Conversie van Productaanbevelingen te verhogen

Naar blogoverzicht
17 February 2017

Wat is er nou leuker dan bezig zijn met je favoriete hobby? Juist... Twee van je favoriete hobby's combineren in één project. In mijn geval zijn dat Machine Learning en nopCommerce. Machine Learning is momenteel een hot topic. Heb je dit "buzzword" wel al voorbij zien komen, maar weet je niet precies wat het inhoudt? Lees dan hier mijn Machine Learning introductie zodat je in één keer weet waar de Machine Learning klepel hangt. Mocht je daar nu geen tijd voor hebben, dan zou je Machine Learning in één zin kunnen samenvatten als:

Computerprogramma's die in staat zijn te leren, zonder dat dit expliciet geprogrammeerd is

 nopCommerce is het open source .Net E-commerce framework dat we bij DotControl gebruiken als basis voor onze next level E-commerce oplossingen. In deze blog post zal ik kort uileggen hoe wij onze klanten laten groeien met behulp van Machine Learning.

Aanbevelingen, er is geen ontkomen meer aan!

Productaanbevelingen; Je kunt er tegenwoordig niet meer omheen. Netlfix biedt op basis van je kijkgedrag films en series aan die je waarschijnlijk ook leuk zult vinden, Facebook suggereert vrienden voor je en LinkedIn is in staat je zakelijke contacten voor te stellen. Dit zijn voorbeelden van zogenaamde Recommendation Engines. Recommendation Engines maken het mogelijk om op basis van data suggesties te doen voor vergelijkbare producten/diensten die waarschijnlijk voor jou geschikt zijn. Misschien wel het bekendste en meest succesvolle voorbeeld zijn de productaanbevelingen van Amazon. Met behulp van dit "Klanten die Product A kochten, kochten ook... " algoritme was Amazon in staat een omzetgroei van maar liefst 29% te realiseren. Voorheen waren dit soort systemen voorbehouden aan internetgiganten als Amazon, maar door recente ontwikkelingen in cloud technologie, zoals bijvoorbeeld Microsoft Azure, zijn deze systemen nu voor iedereen binnen handbereik.

Hoe werk dat nou, zo'n Aanbevelingssysteem?

Alhoewel het lijkt alsof dit soort aanbevelingssystemen iets van de laatste paar jaar is, wordt "Market Basket Analysis" al decennia toegepast door "traditionele" supermarkt ketens. Machine Learning zelf is ook minder nieuw dan het misschien op het eerste oog lijkt. De eerste Machine Learning algoritmes dateren uit de jaren 50 van de vorige eeuw. Aanbevelingsalgoritmen zijn vaak gebaseerd op collaborative filtering. Dit stelt ons in staat om op basis van het gebruikersprofielen en productbeoordelingen (of bv. orderhistorie gegevens) een voorspelling te doen welke producten geschikt zouden zijn voor de huidige gebruiker. Op basis van al deze gegevens wordt een grote matrix (soort tabel) opgebouwd. De kolommen worden gevormd door alle Producten (= Items) in het productaanbod van de webshop. De Gebruikers (=Users) vormen de rijen van deze tabel. Wanneer een gebruiker een productaanbeveling gedaan heeft, komt dat overeen met een waarde in cel in de "excel sheet" bij het respectievelijke rij- en kolomnummer. In onderstaande afbeelding is bijvoorbeeld te zien dat User "A" een product rating heeft gegeven voor Item "2" met 1 ster. User "A" heeft Item "3" een rating gegeven van 5 sterren. Deze tabel zal uiteindelijk, afhankelijk van het aantal gebruikers en producten, een heel groot aantal kolommen en rijen bevatten. Aangezien gebruikers over het algemeen maar een klein deel van het totale productaanbod zullen raten/kopen, zal het aantal cellen dat een rating waarde heeft relatief klein zijn. De tabel is dus waarschijnlijk "groot", maar relatief "leeg".

Als je naar bovenstaande voorbeeld afbeelding kijkt, zou je op het eerst oog kunnen afleiden dat aangezien User "A" en "B"  beiden Item "3" een hoge rating geven, en User "B" ook Item "1" een hoge rating heeft gegeven, het waarschijnlijk is dat Gebruiker "A" ook een hoge aanbeveling zou geven aan Item "1". Dit is uiteraard een wel erg simplistische voorstelling van het daadwerkelijke algoritme, maar demonstreert hopelijk wel hoe een collaborative filtering ongeveer werkt.

Het Matchbox Recommender Algortitme

Het algoritme dat we gebruiken voor onze recommendation engine is het zogenaamde Matchbox recommender algoritme. Dit algoritme is een stuk complexer dan het hierboven gegeven voorbeeld. Zo wordt hier niet alleen naar het aantal sterren van de productbeoordeling gekeken, maar wordt in de cel een zogenaamde "feature vector" opgeslagen. Deze feature vector bestaat niet alleen uit de productrating maar uit een verzameling van Gebruikers- en producteigenschappen. Hierbij kun je denken aan leeftijd, geslacht, etc. maar ook aan productcategorie, prijs en wat voor gebruikers en/of product  data je ook maar beschikbaar hebt. Al deze eigenschappen worden meegenomen in het bepalen van de waarschijnlijkheid dat een product geschikt is voor een bepaalde gebruiker. Hierdoor ontstaat vanuit de twee-dimensionale tabel een multi-dimensionale " trait space". Als een User een Item positief beoordeelt, wijzen hun "feature vectors" in dezelfde richting. Op deze manier kunnen Users en Items bij elkaar gezocht worden en wordt, met behulp van het theorema van Bayes, de (voorwaardelijke) kans bepaald dat User X Product Y interessant vindt. De Matchbox recommender is ook in staat om "andersom" voorspellingen te doen. Dus stel ik heb Product "123", welke klanten hebben hier dan potentieel interesse in? Het is zelfs mogelijk voorspellingen te doen voor gebruikers die niet in de Product/Item matrix voorkomen. Dit is bijvoorbeeld handig voor nieuwe gebruikers of niet geregistreerde bezoekers. De voorspelling wordt dan gedaan op basis van de beschikbare gebruikersgevens.

Training, Scoring, Prediction en Retraining in Azure ML Studio

Om het Matchbox algoritme in staat te stellen om te leren voorspellen, moeten we het data voeren. Deze data bestaat uit de (geanonimiseerde) Gebruikersgevens, de tabel met Product data en een koppeltabel net Productaanbevelingen die de gebruikers gedaan hebben. Uit deze verzameling van gegevens maken we een willekeurige selectie. In onderstaande afbeelding kun je zien hoe je een recommendation experiment in zou kunnen richten in Azure ML studio. Inputs van het experiment zijn de hierboven genoemde users, items en user-items-ratings data sets. Azure ML Studio stelt je in staat om eerst nog selecties en/of bewerkingen op je ruwe data te doen alvorens de data aan het algoritme aan te bieden. De totale dataset moet worden opgesplitst in een zogenaamde "trainings"- en een "test"-set . De data in de trainingsset gaan we gebruiken om het algoritme "trainen" binnen een experiment.  De resterende gegevens gebruiker we om de kwaliteit van de voorspellingen van het getrainde experiment te testen. Deze subset van de data noemen we de "test"-set.

Doordat we de uitkomst van de test-set weten (oftewel de ratings van de gebruikers in de test set), kunnen we deze test data gebruiken om het algoritme voorspellingen te laten doen en zo de mate  waarin de voorspellingen kloppen te bepalen. Dit heet ook wel scoring. Naast het valideren van de correctheid, hebben we de test/validatie stap ook nodig om te voorkomen dat het algoritme "te slim" wordt. Machine Learning algoritmes kunnen de neiging hebben zichzelf te specifiek op de data in de trainingsset te trainen. De scoring op de trainingsset is dan relatief  hoog, maar de daadwerkelijke voorspellingen op nieuwe data kunnen dan in de praktijk tegenvallen. Dit verschijnsel heet over-fitting en is dus te voorkomen door te werken met een losstaande test set. In de praktijk wordt er vaal een zogenaamde tenfold cross validation toegepast. De data wordt dan opgesplitst in 10 willekeurige subsets waarmee het algoritmen getraind en gevalideerd wordt. Dit proces wordt dan ook nog eens 10x herhaald, soms zelfs met een combinatie van verschillende Machine Learning algoritmes. Dit is uiteraard alleen maar mogelijk als je genoeg data beschikbaar hebt maar is wel een belangrijke stap om de waarde van je (toekomstige) voorspellingen te kunnen bepalen.

Wanneer we tevreden zijn over onze voorspellingen kunnen we het predictive experiment publiceren als een web service. Door deze webservice aan te roepen vanuit onze applicatie, kunnen we de product aanbevelingen ophalen en tonen aan de huidige gebruiker.

De gebruikers-, product- en aanbevelingsgevens is natuurlijk geen statische dataset. Iedere dag verzamelen we waarschijnlijk een grote hoeveelheid aan nieuwe data. We willen natuurlijk dat onze aanbevelingen iedere dag beter worden en dus iedere dag bijleren op basis van de meest recente data. Dit heet retraining. Het liefste zouden we nieuwe gebruikers en productaanbevelingen real time doorsturen naar ons algoritme. Alhoewel het Matchbox algoritme in theorie wel in staat zou zijn om incrementeel te leren van nieuwe input data op het moment dat deze beschikbaar komt, is dat op dit moment helaas (nog) niet mogelijk in Azure ML studio. Het is wel mogelijk om periodiek ons hele algoritme  te hertrainen met een export van onze meest recente data. Dit periodiek hertrainen willen we natuurlijk niet 's nachts handmatig uitvoeren. Dankzij de API en SDKs van Azure kunnen we dit hele proces zelfs automatiseren!

The proof of the pudding is in the eating!

Tot nu toe hebben we het vooral gehad over Machine Learning, dus is het nu de hoogste tijd voor mijn andere liefde; nopCommerce! Theoretische Machine Learning kennis uit literatuur en blogs is natuurlijk leuk, maar we willen graag laten zien dat het in de praktijk toepasbaar is. Om die reden hebben we een nopCommerce plugin ontwikkeld die, op basis van het hierboven gepresenteerde Matchbox algoritme, de bestaande nopCommerce "Klanten die dit kochten ook..." functionaliteit vervangt door een op Machine Learning geabseerde product recommendation engine. Naast het tonen van de product recommendations aan de gebruiker is deze plugin ook in staat om automatisch periodiek het algoritme te hertrainen met de nieuw beschikbaar gekomen data. Wanneer de performance van het hertrainde algoritme voldoet aan onze eisen, wordt het nieuwe geleerde model automatisch gepubliceerd op de live predictive webservice.

Next Steps

Bij DotControl en RockBoost hebben wij altijd een onverzadigbare honger naar data! Beschik je over een berg aan data en ben je benieuwd wat je Machine Learning zou kunnen laten leren uit deze data? En hoe je je klanten hiermee een beter product, dienst en/of ervaring kunt bieden? Neem dan contact met ons op voor een Rotterdamsch bakje koffie!

Rutger Buijzen
DotControl & RockBoost
https://www.linkedin.com/in/rutgerbuijzen
follow me on: @rutgerbuijzen

Over Rutger

Als een van de oprichters van next level digital Agency DotControl en het eerste growth hacking agency van Nederland houdt Rutger zich dagelijks bezig met zijn passies web/mobile development, machine learning en growth hacking voor onze klanten en startups. DotControl is een Microsoft Registered Partner en een nopCommerce Gold Solution Provider.

Deel deze post op social media

Van Nelleweg 1, 3044 BC Rotterdam
+31 (0)10 71 44 646 info@dotcontrol.nl