• No results found

Persoonlijke cadeausuggesties aan de hand van een collaborative-filtering aanbevelingssysteem bij lootjestrekken.nl

N/A
N/A
Protected

Academic year: 2021

Share "Persoonlijke cadeausuggesties aan de hand van een collaborative-filtering aanbevelingssysteem bij lootjestrekken.nl"

Copied!
13
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

Persoonlijke cadeausuggesties aan de hand van een collaborative-filtering

aanbevelingssysteem bij lootjestrekken.nl

Louis de Bruijn S2726327 l.e.d.de.bruijn@student.rug.nl 17-11-2019 Abstract Collaborative-filtering recommenders kunnen aan de hand van machine learn-ing algoritmen en op basis van de voorkeuren van alle gebruikers, per-soonlijke aanbevelingen maken. Dit maakt het mogelijke voor internetretailers zoals Amazon om een gepersonaliseerde winkelervaring voor elke klant te cre¨eren. Dit stageverslag omschrijft het onder-zoek naar en de implementatie van een collaborative-filtering algoritme. Het algoritme is ge¨ımplementeerd in een grafische interface om de effectiviteit ervan te vergelijken met twee andere systemen van lootjestrekken.nl. Deze stage heeft een duidelijke voorkeur voor de uitgewerkte implementatie in het bedrijf teweeg kunnen brengen en een blik gegeven van de mogelijkheden die dit lootjestrekken.nl en haar gebruikers biedt.

1 Inleiding

De afgelopen twee maanden heb ik stage gelopen bij lootjestrekken.nl. In deze maanden heb ik onderzoek gedaan naar de mogelijkheden van persoonlijke cadeausuggesties voor de gebruik-ers van lootjestrekken.nl op basis van de ge-bruikersvoorkeuren van het afgelopen jaar. Hi-ervoor zijn verschillende machine learning algo-ritmen onderzocht: een item-item algoritme, een k-nearest neighbor algoritme en tot slot een al-ternating least squares algoritme, welke ook is ge¨ımplementeerd. De implementatie bestaat uit een grafische interface waarmee de cadeausug-gesties getoond en beoordeeld kunnen worden het personeel van lootjestrekken.nl.

Via een studiegenoot ben ik in aanrekening met dit bedrijf en deze stageopdracht gekomen. Ik heb

contact gehad met ´e´en van de compagnons van het bedrijf, Rob van Breejen. Na een telefoonge-sprek en en later een afspraak in Delft, waar loot-jestrekken.nl is gevestigd, mocht ik hier mijn stage doen. Rob werd mijn stagebegeleider. Ook ben ik met mijn stagebegeleider vanuit de Rijksuniver-siteit Groningen, Gosse Bouma, langs geweest om een indruk te geven van de stage-gevende organ-isatie.

Ik heb gekozen voor deze stageplek, omdat de opdrachtomschrijving en hoeveelheid data mij enorm aansprak. Daarnaast werd mij de vrijheid geboden om zelf technieken te onderzoeken en uit te werken. Tot slot vond ik het belangrijk dat ik opgenomen kon worden in het team en mee kon draaien in het bedrijf.

2 Opdrachtomschrijving

De afstudeerstage is gericht op datamining en ma-chine learning. Je werkt aan een project waarbij cadeau suggesties gepersonaliseerd moeten wor-den. Het uiteindelijke doel is het weergeven van gepersonaliseerde cadeausuggesties aan gebruik-ers. Hiervoor dient lootjestrekken.nl, het gedrag van onze gebruikers uit het verleden te kunnen beschrijven en voorspellingen voor de toekomst te doen. Een deel van de opdracht is onderzoek doen naar welke tools nodig zijn voor de realisatie van de opdracht. Hiermee bieden wij jou de vri-jheid in het gebruiken van, op eigen onderzoek gebaseerde, tools en software tijdens het afstud-eren.

3 Plan van aanpak en leerdoelen

Voorafgaand aan de stage heb ik een aantal leer-doelen opgesteld als onderdeel van mijn plan van aanpak:

(2)

mogelijkheden van persoonlijke aanbevel-ingssystemen.

2. een aanbevelingssysteem ontwikkelen in Python.

3. Implementeren van een collaborative-filtering aanbevelingssysteem met de beschikbare data van lootjestrekken.nl. 4. Kennis maken met en gebruik maken van

ver-schillende data-analyse libraries voor Python, met name Pandas, Numpy en Scipy.

5. Gebruiken van een webframework in Python voor de visualisatie en implementatie van het ontwikkelde systeem.

6. Het aanbevelingsysteem in de huidige in-frastructuur van lootjestrekken.nl imple-menteren.

Ter voorbereiding op deze stageopdracht heb ik een cursus van de universiteit van Michigan, In-troduction to Data Science in Python, succesvol afgerond. Dit gaf mij al enige kennis in de imple-mentatie van Pandas en Numpy in Python. Ook heb ik het boek Python for Data Analysis gebruikt als handboek om mij door de mogelijkheden van deze libraries te nemen.

4 Lootjestrekken.nl

Lootjestrekken.nl is sinds 2001 actief en levert een webservice die haar gebruikers in staat stelt om lootjes te trekken in een groep en verlangli-jstje in te vullen. Gebruikers trekken de lootjes en kunnen vervolgens in de ’cadeauzoeker’ cadeaus zoeken die zij op hun verlanglijstje willen zetten. De gebruiker die hen heeft getrokken kan uit deze cadeaus een keuze maken om te geven.

Achter lootjestrekken.nl staat een hecht team van developers, UX-designers en marketeers dat zich dagelijks bezighoudt met de ontwikkelingen rondom de webservice. Het bedrijf richt zich voor-namelijk op feestdagen zoals Sinterklaas en kerst, maar ook Eid al-Fitr (Suikerfeest) en Thanksgiv-ing. Lootjestrekken.nl is in meerdere Europese landen en de Verenigde Staten actief en verwacht deze feestdagen 10 miljoen getrokken lootjes te verwerken. Ondanks dat bijna de helft van haar gebruikers in Amerika zit, heeft het in Nederland het grootste marktaandeel met bijna 2 miljoen ge-bruikers. Deze stageopdracht richt zich daarom initieel ook op de Nederlandse markt, waarna de implementatie uitgebreid kan worden naar de an-dere markten.

5 Rol van de stagiair/beschrijving van de werkzaamheden

Er is ruimte in het bedrijf voor een stagiair die met technische kennis nieuwe ontwikkelingen kan uitwerken en richting kan geven aan de mogeli-jkheden binnen het bedrijf. Lootjestrekken.nl richt deze stageopdracht op het aanbieden van per-soonlijke cadeausuggesties op basis van gebruik-ersvoorkeuren uit 2018.

6 Literatuur

Aanbevelingssystemen filteren de overweldigende hoeveelheid keuzes door prioriteit te geven aan specifieke keuzes, die zij aan de gebruiker aan-bevelen, op basis van zijn gebruikers-voorkeuren en die van anderen. Hierbij wordt het prob-leem van informatie-overbelasting voorkomen, door de relevantie informatie voor elke specifieke gebruiker uit een grote hoeveelheid gebruikers-voorkeuren te genereren. Aanbevelingssystemen zijn gunstig voor zowel de gebruiker als de dien-stverlener: ze verlagen de transactiekosten van het vinden en selecteren in een online winkelomgev-ing voor de gebruiker, verbeteren de besluitvorm-ingsprocessen en zijn effectieve middelen om meer producten te verkopen [Pu et al., 2011, Hu and Pu, 2009, Pathak et al., 2010].

State-of-the-art systemen onderscheiden zich door twee benaderingen en een hybride com-binatie van de twee. De eerste benadering is op content-based filtering, die de nadruk legde op de analyse van de attributen van producten om voorspellingen te genereren. De tweede be-nadering is collaborative-filtering (CF), welke is gebaseerd op de aanname dat gebruikers die in het verleden vergelijkbare interesses hebben getoond, gemeenschappelijke interesse zullen delen in de toekomst [Goldberg et al., 1992]. Collaborative-filtering identificeert gebruikersgedrag om vergeli-jkbare gebruikers te vinden en producten aan te bevelen op basis van de voorkeur van die vergeli-jkbare gebruikers. Deze techniek wordt onder meer ge¨ımplementeerd door GroupLens, Ringo en Amazon en wordt beschouwd als de meest vol-wassen van zijn soort [Isinkaye et al., 2015].

Collaborative-filtering gebeurt op zijn beurt weer op twee verschillende manieren: model-based en memory-model-based. Model-model-based CF sys-temen zijn gebaseerd op voorspellingsmodellen die zijn getraind op de gebruikers-producten ma-trix. Deze getrainde voorspellingsmodellen

(3)

kun-nen vervolgens worden gebruikt om aanbevelin-gen voor individuele gebruikers te aanbevelin-genereren. Memory-based CF zijn gecategoriseerd in user-based en item-user-based technieken. User-user-based fil-ter technieken voorspellen gebruikers-voorkeuren van een product op basis van de beoordelin-gen die vergelijkbare gebruikers eerder hebben gegeven. Item-based filter technieken doen aan-bevelingen door de vergelijkbaarheid van de pro-ducten en niet de gebruikers te berekenen. Er wordt een model van vergelijkbare producten gecre¨eerd door alle productbeoordelingen op te halen, en producten met vergelijke productbeo-ordelingen aan te bevelen [Isinkaye et al., 2015, Shi et al., 2014]. Memory-based collaborative fil-tering heeft te maken met drie belangrijke kant-tekeningen. Allereerst de popularity bias: pro-ducten populairder zijn, komen vaker voor in combinatie met andere producten en komen dus ook veel vaker terug in de aanbevelingen. Daar-naast het item cold-start probleem: producten die niet voorkomen in gebruikersvoorkeuren of ge-bruikers die geen voorkeur hebben, kunnen niet meegenomen in het model. Tot slot de schaal-baarheid: Dit soort technieken zijn vaak compu-tationeel zwaar, voor zowel het geheugen als de processen.

7 Data

Voor deze stageopdracht is gewerkt met de Neder-landse gebruikers en producten van het jaar 2018. Het gaat in totaal om de impliciete productbeo-ordelingen van 1.116.485 unieke gebruikers van 136.200 producten, welke een user-item matrix van ruim 152 miljard datapunten oplevert. Een productbeoordeling is geen expliciete beoordeling op een schaal, zoals een Likert-schaal van 1 tot 5, maar een impliciete beoordeling. Gebruikers kunnen cadeaus uit de cadeuzoeker op hun ver-langlijstje zetten, en geven hiermee aan dat ze het graag willen ontvangen als cadeau. Deze indi-catie is een vorm van een implicitie beoordeling, zoals bijvoorbeeld een like of aankoop dat ook is. De data is opgehaald uit een SQL database, waar-voor een stored_procedures in SQL wordt aangeroepen. Van de gebruikersprofielen weten we het geslacht (M/V), de leeftijd en de leeftijd-scategorie (8-11, 12-17, 18-21, 22-30, 30-45, 45-55, 55+) en van de producten is er een productID, afbeeldingen en beschrijving aanwezig. Ook is de data welke producten gebruikers op hun

verlan-glijstje hebben, waaruit de user-item matrix opge-bouwd kon worden.

8 Methode

In de eerste twee weken heb ik een literair onder-zoek gedaan naar de verschillende mogelijkheden om persoonlijke cadeausuggesties te realiseren. In de drie daaropvolgende zijn drie verschillende ma-chine learning algoritmen uitgewerkt. De laatste drie weken is gewerkt aan een web-interface om de resultaten van het best presterende algoritme te laten zien aan het team en te vergelijken met een huidige implementatie van een algoritme in de webservice van Lootjestrekken.nl. Deze grafische interface wordt uitvoerig besproken in sectie 9.

Er zijn uiteindelijk drie verschillende algorit-men uitgewerkt die in gradaties steeds complexer worden. Eerst is een item-item recommender uitgewerkt, die aanbevelingen doet op basis van de vergelijkbaarheid van producten. Echter, om-dat gewerkt wordt met een user-item matrix van ruim 152 miljard datapunten, bleek dat de imple-mentatie in Python niet mogelijk was door een MemoryError bij het cre¨eren van de matrix. Ook de k-nearest neighbor recommender had te kampen met effici¨entie problemen: het draaien van het script duurde ruim 6 uur. Er is daarom gezocht naar een collaborative-filtering algoritme dat het mogelijk maakte om veel data, c.q. een grote user-item matrix, te verwerken. Het gevon-den algoritme is het alternating least squares, wat gebaseerd is op het concept matrix factor-ization. Het idee van matrix factorization is om een grote matrix te ontleden tot twee matrices van een kleiner formaat in een lagere dimensie, zoals dat ook gebeurt wanneer we grote getallen in kleinere priemgetallen kunnen factorizeren. In het geval van onze data kunnen we de user-item ma-trix opdelen in een user-mama-trix en een item-mama-trix, waar het product van deze twee kleinere matri-ces ongeveer resulteert in de grotere user-item ma-trix, zoals getoond in afbeelding 1. De implemen-tatie is ge¨evalueerd aan de hand van twee eval-uatiemaatstaven: precision@k en mean-average precision@k. Deze maatstaven kijken bij een k-aantal (10) aanbevelingen hoeveel aanbevelingen er overeenkomen met de cadeaus die al op de lijst van gebruikers staan. Daarnaast is er een kwal-itatieve evaluatie geweest van de werknemers van lootjestrekken.nl, waarin zij naar de aanbevelingen hebben gekeken en vergeleken met een ander

(4)

on-Figure 1: Matrix decomposition als onderdeel van het matrix factorization algoritme met impliciete data. De ingekleurde vakken geven aan dat de gebruiker iets op zijn verlanglijst heeft staan.

twikkeld systeem en een huidig ge¨ımplementeerd systeem in de webservice.

9 Resultaat

Als we het hebben over collaborative-filtering voor aanbevelingssystemen, willen we het prob-leem oplossen van onze oorspronkelijke matrix met miljoenen verschillende dimensies, om aan-bevelingen te kunnen doen. Maar onze ’smaken’ zijn lang niet zo complex. Zelfs als ik honder-den producten heb bekeken, kunnen deze miss-chien in een paar verschillende smaken uitge-drukt worden. Daarom kunnen we matrix fac-torization gebruiken, om de dimensionaliteit van onze oorspronkelijke matrix ”alle gebruikers door alle producten” wiskundig te verkleinen tot iets veel kleiner dat staat voor ”alle producten met bepaalde smaakdimensies” en ”alle gebruikers met bepaalde smaakdimensies”. Deze dimensies worden latent factors of hidden factors. Door deze reductie uit te voeren en met minder dimensies te werken, is het zowel veel effici¨enter voor de cputer en geeft het ons ook betere resultaten, om-dat we kunnen redeneren over producten in deze compactere ”smaakruimte”. Dit geeft ons ook de mogelijkheid om verbindingen te vinden tussen gebruikers die geen specifieke producten gemeen hebben maar gemeenschappelijke smaken delen. Nu moet worden opgemerkt dat we geen idee hebben van wat deze functies of smaken echt zijn. We kunnen ze niet ’sport’ of ’koken’ of ’knutse-len’ noemen. Ze weerspiegelen niet noodzakelijk-erwijs echte metadata.

Er zijn verschillende manieren om een user-item matrix te factorizeren, zoals Singular Value Decomposition (SVD)of Probabilistic Latent Se-mantic Analysis (PLSA) als we te maken hebben met expliciete ratings. Echter, met impliciete rat-ings ligt het verschil in de manier waarop we om-gaan met alle ontbrekende gegevens in onze zeer beperkte matrix. Voor expliciete gegevens behan-delen we ze als onbekende velden waaraan we een voorspelde beoordeling moeten toekennen. Maar voor impliciet kunnen we niet zomaar hetzelfde veronderstellen, omdat er ook informatie in deze onbekende waarden zit. We weten niet of een ontbrekende waarde betekent dat de gebruiker iets niet leuk vond, of dat het betekent dat ze er dol op zijn, maar er gewoon niets van weten. In principe hebben we een manier nodig om van de ontbrek-ende data te leren. Daarom maken we gebruik van het alternating least squares algoritme, een atief optimalisatieproces waarbij we voor elke iter-atie steeds dichter bij een gefactureerde weergave van onze oorspronkelijke data proberen te komen, zoals uitvoerig beschreven in Hu et al. [2008]. 9.1 Implementatie

De implementatie van dit algoritme is mo-gelijk gemaakt via de Python library genaamd implicit, die gebruikt maakt van C++ om de computaties naar een lager niveau te brengen en zo effici¨enter uit te voeren. Deze library geeft de mogelijkheid om de alpha-waarde, iteraties en factorenals parameters mee te geven en de beste waardes zijn bepaald aan de hand van de

(5)

evalu-Figure 2: Vergelijking van de top 250 producten die het meest op verlanglijstje staan en de top 250 meest aanbevolen producten.

atiemaatstaven. De alpha-waarde van het model is de wegingsfactor die wordt gegeven aan gekozen cadeaus om het verschil in weging tussen niet-gekozen cadeaus en w´el-niet-gekozen cadeaus in het model te vergroten. Een alpha waarde van 10 vergroot het verschil in de wegingsfactor tussen gekozen cadeaus op een verlanglijstje en de niet-gekozen cadeaus met factor 10. Voor zowel de factors als de iteraties is er een duidelijke afweging tussen de effici¨entie, schaalbaarheid en de kwaliteit van de aanbevelingen. Een veel hoger aantal iteraties heeft geen verbetering van de scores opgeleverd. Een hoger aantal factoren heeft dat wel, maar de runtime neemt hierdoor aanzien-lijk toe (1 uur bij 150 factors in tegenstelling tot 30 minuten bij 100 factors). Mijn aanbeveling is om de factoren zo hoog mogelijk te laten zijn met een maximum van 150, omdat er geen hogere scores kwamen boven dit getal. Ook is de user-item ma-trix omgezet tot een Scipy sparse mama-trix, om effici¨enter om te gaan met de representatie van de matrix.

Deze implementatie is verwerkt in een grafische interface. Er zijn drie kopjes in de grafische inter-face: Profiel: een selectie van gebruikers, verlan-glijstjes en aanbevelingen, Categorie: vergelijking van de top 250 meest gevraagde cadeaus en meest

aanbevolen producten, Verlanglijstje maken: waar je zelf producten kunt selecteren en de aanbevelin-gen kunt zien die daarbij horen. Zoals te zien op afbeelding 2 is er ook een beschrijving van de pag-ina met wat descriptieve informatie.

9.2 Profiel

Op deze pagina kan een selectie gemaakt van het geslacht, de leeftijd en het aantal producten op zijn of haar verlanglijst. Er worden vervolgens 100 willekeurig geselecteerde profielen getoond met hun verlanglijstje en de tien aanbevelingen, zoals getoond wordt in afbeelding 4. Ook af-beelding 5 en 6 tonen twee andere profielen en de persoonlijke aanbevelingen die het systeem doet op basis van de producten op hun verlanglijstje. Deze grafische interface is ontwikkeld om een in-dicatie en beeld te geven aan de aanbevelingen per profiel aan het team. Verschillende personeelsle-den hebben hun eigen geslacht en leeftijd ingevuld en zo de aanbevelingen doorgenomen om een goed beeld te kunnen krijgen.

9.3 Categorie

Naast een overzicht van de aanbevelingen per profiel was het ook belangrijk om te kijken of het mogelijk was om een vergelijking te maken tussen

(6)

de top 250 meest gevraagde producten binnen een geslacht- en leeftijdsfilter en de meest aangebo-den producten om te kijken of de twee redelijker-wijs overeenkomen. De gedachte hierachter is dat, als een cadeau veel-gevraagd wordt, het ook veel aangeboden moet worden, omdat het populair is. Het is belangrijk om te melden dat een cadeau dat al op een verlanglijst staat nooit opnieuw aange-boden aan diezelfde persoon. Afbeelding 7 toont deze pagina.

9.4 Verlanglijstje maken

Tot slot was het belangrijk om te laten zien hoe de aanbevelingen veranderen, wanneer een gebruiker nieuwe cadeaus op zijn verlanglijstje zet. Dit bleek een moeilijke opgave, omdat de aanbevelin-gen dan on-the-fly gemaakt moesten worden. Af-beelding 8 toont deze pagina. Er kan een geslacht en leeftijdscategorie gekozen worden om de top 250 meest gevraagde cadeaus te tonen. Vervol-gens kan de gebruiker een cadeau aanklikken en selecteren, zoals getoond op 9 en de aanbevelingen zien. In principe cre¨eert de gebruiker van de inter-face zo zijn eigen verlanglijstje, door dynamisch cadeaus uit te kiezen en te selecteren, effectief op zijn ’eigen verlanglijstje’ te zetten. Er is hier een vergelijking gemaakt tussen de aanbevelingen die het ontwikkelde systeem laat zien (Collaborative filtering), het oude systeem (Aanbevelingen) en een systeem ontwikkeld door een collega die ve-rantwoordelijk was voor de implementatie van het collaborative filtering systeem in de software van het bedrijf (Lucas’ recommendations). Afbeeldin-gen 9, 10 en 11 laten zien hoe de aanbevelinAfbeeldin-gen veranderen als er ´e´en of meerdere cadeaus worden geselecteerd.

10 Discussie

Omdat er gewerkt met zoveel data, waren de scores op de precision@k en mean-average preci-sion@k erg laag (tussen de 0.0001 en 0.0005). De scores zijn gebruikt in het kiezen van de parame-ters van het model. Uiteindelijk is er gekozen om een alpha-waarde van 40 met 150 factoren en 20 it-eraties te zetten, welke de hoogste precision@k en mean-average precision@k opleverden. Ik heb het alernating least squares algoritme gekozen, om-dat het erg goed omgaat met popularity bias en item cold start problemen, twee belangrijke ken-merken van collaborative filtering systemen. Pro-ducten die minder vaak voorkomen op een

ver-langlijst, maar wel vaak samengaan met andere cadeaus zijn veel sterker dan algemene populaire producten zoals Rituals doucheschuim die vaak op allerlei soorten lijstjes voorkomen (dit is con-ceptueel erg te vergelijken met TF-IDF). Een voor-beeld van de aanbevelingen op basis van de pro-ducten op een gebruikers zijn verlanglijstje zijn te vinden in afbeelding 3. Daarnaast is dit algoritme specifiek bedoeld om te werken impliciete data. Tot slot is de implementatie in de implicit li-brary erg schaalbaar, doordat de computaties in C++gedaan worden.

De systemen zijn daarnaast vergeleken met een implementatie ontwikkeld door collega Lucas en een huidig ge¨ımplementeerd collaborative filter-ing systeem. Deze grafische interface bleek on-misbaar in het evalueren van het systeem door het team. Het team heeft zo op kwalitatieve wijze de aanbevelingen kunnen bekijken en vergelijken en gekozen om het ontwikkelde systeem te integreren in hun webservice.

Ik heb enorm veel geleerd van de werkza-amheden, voornamelijk op technisch vlak: Ik heb geleerd om dataframes in Pandas te gebruiken, Numpy voor de computaties, Scipy voor het ge-bruik van sparse matrices, SQL voor de dataop-slag, Django als webframework voor de grafische interface, Ubuntu als server voor het hosten van de interface en de connectie maken met de database vanuit de server. Daarnaast heb ik ook veel van het team en bedrijf geleerd, zoals het gebruik van Github, scrum-boards, stand-ups, sprints en user stories. Tot slot heb ik mij verdiept in de liter-atuur en geleerd over collaborative filtering rec-ommender systemen, k-nearest neigbors, matrix factorization en (alternating) least squares. Al-hoewel de stof vaak erg lastig was heb ik er een duidelijker begrip van gekregen. Tot slot heb ik geleerd hoe verschillende recommender systeem ge¨evalueerd kunnen worden met verschillende evaluatie maatstaven, waaronder precision@k en mean-average precisions@k.

Uit mijn studie heb ik kennis van machine learn-ing kunnen gebruiken, met name uit het vak In-formation Retrievalvan Antonio Toral waarbij we onder andere een Twitter recommender hebben ontwikkeld. Mijn stageopdracht is ontwikkeld in Python, een ge¨ınterpreteerde, algemene pro-grammeertaal op hoog niveau en visualisatie er-van in Django, een webframework voor Python. Kennis uit vakken zoals Inleiding Programmeren

(7)

Figure 3: Op de linker-afbeelding heeft een gebruiker met een 500-gerechten boek op zijn verlanglijst en krijgt andere aanbevelingen uit de 500-gerechten serie. Rechts krijgt een man met een hamburger

kookboek veel aanbevelingen met andere hamburger kookboeken.

en Gevorderd Programmeren kwam uiteraard ook van pas. Daarmee zijn alle leerdoelen, behalve dit laatste voltooid. Ook heb ik er zelf enorm veel van geleerd, niet alleen van de techniek, maar ook de omgang in een bedrijf.

De aansluiting van de opleiding met de beroepspraktijk was duidelijk aanwezig door de probleemstelling van lootjestrekken.nl zoals om-schreven in sectie 2. Ik heb geleerd hoe in een klein bedrijf met elkaar samengewerkt wordt om oplossingen te bieden voor technische problemen en gebruikservaringen. De begeleiding bestond uit bijna dagelijks contact met mijn stagebegeleider en de lead-developer van het team voor vragen. Ook nam ik deel aan de lopende sprints en leverde ik elke twee weken een tussentijdse demo op voor terugkoppeling vanuit het team. Ik was echter de enige die aan deze opdracht werkte, waardoor ik soms ge¨ısoleerd aan de slag was. De rest van het team was bezig met het ontwikkelen van het prod-uct, terwijl ik bezig was met het ontwikkelen van nieuwe mogelijkheden op basis van de bestaande data. Deze stage heeft voor mij een duidelijk beeld gegeven van de mogelijkheden als data-scientist bij een klein bedrijf en bijgedragen aan mijn ken-nis over het functioneren van een bedrijf. Ander-som denk ik dat het een relevante bijdrage is ge-weest aan mijn ervaring en curriculum.

11 Conclusie

Voor lootjestrekken.nl heb ik een aanbevelingssys-teem kunnen ontwikkelen dat de grote hoeveelheid data kon verwerken en voor elke gebruiker tien persoonlijke aanbevelingen kunnen doen. Deze aanbevelingen zijn gebaseerd op de voorkeuren van alle gebruikers van het jaar 2018 in Neder-land, ruime 1.1 miljoen gebruikers en 360.000 producten. Hiervan is een grafische inter-face opgeleverd die ook een vergelijking met een huidig ge¨ımplementeerd aanbevelingssysteem

mogelijk maakte. Er is uiteindelijk gekozen om mijn uitwerking in de huidige structuur van de webservice te ontwikkelen.

De leerdoelen die ik van tevoren had vastgesteld zijn bijna allemaal succesvol afgerond en ik ben voornamelijk trots op de implementatie van het al-goritme bovenop het onderzoek naar de mogeli-jkheden ervan. Ook heb ik veel tijd gestoken in het ontwikkelen van de grafische interface, welke enorm belangrijk bleek om mijn werkzaamheden duidelijk te kunnen maken aan het team. Uitein-delijk is het niet gelukt om het algoritme ook te implementeren in de huidige structuur van loot-jestrekken.nl, maar ik heb mijn werk kunnen doc-umenteren en overdragen aan een collega die daar verantwoordelijk voor was.

Echter zijn er ook een aantal kanttekeningen voor de toekomst. Gebruikers die een leeg ver-langlijstje hebben kunnen niet meegenomen in het model en krijgen dus geen aanbevelingen en het-zelfde geldt voor producten die niet op een ver-langlijstje staan. Vooral voor nieuwe gebruikers werd dit als problematisch ondervonden. Ook is het computationeel zwaar en lastig om direct aan-bevelingen te doen voor nieuwe gebruikers zodra ze een nieuw cadeau op hun verlanglijstje zetten. Na onderzoek bleek dat dit met name de im-plementatie in een andere programmeertaal com-pliceert. lootjestrekken.nl werkt exclusief in en deze implementatie is geprogrammeerd in Python, wat niet op elkaar aansluit. Ook is het systeem gebaseerd op een uniek productID. Echter zijn er meerdere productIDs voor hetzelfde product en leek het beter om met EAN (European Article Number), maar dit is vanwege de tijd niet verder uitgewerkt.

(8)

12 Bijlagen

Bijgevoegd in dit zip-bestand zit een Python script genaamd alsrecommender.py, als voorbeeld van de implementatie die uiteindelijk is gebruikt bij lootjestrekken.nl, maar dan met een data-set van 1 miljoen ratings van Movielens. Ook is het mogelijk om een implementatie hiervan te zien op www.louisdebruijn.me/movielens. Vooral recal-culate user() is relevant, waarbij je als gebruiker zelf films kunt toevoegen aan je ’verlanglijstje’ en dynamisch kunt zien hoe de aanbevelingen veranderen. Er is een bijgaand Medium artikel wat ik ook heb geschreven waarin dit algo-ritme en de implementatie ook wordt uitgelegd, te vinden op https://medium.com/analytics-

vidhya/implementation-of-a-movies-

recommender-from-implicit-feedback-6a810de173ac. De implementatie in het script alsrecommender.py en op de website www.louisdebruijn.me/movielens is erg vergeli-jkbaar met die voor lootjestrekken.nl. Hieronder zijn de rest van de afbeeldingen en beschrijvingen van de grafische visualisatie voor lootjestrekken.nl te zien.

References

Pearl Pu, Li Chen, and Rong Hu. A user-centric evaluation framework for recommender sys-tems. In Proceedings of the fifth ACM confer-ence on Recommender systems, pages 157–164. ACM, 2011.

Rong Hu and Pearl Pu. Acceptance issues of personality-based recommender systems. In Proceedings of the third ACM conference on Recommender systems, pages 221–224. ACM, 2009.

Bhavik Pathak, Robert Garfinkel, Ram D Gopal, Rajkumar Venkatesan, and Fang Yin. Empirical analysis of the impact of recommender systems on sales. Journal of Management Information Systems, 27(2):159–188, 2010.

David Goldberg, David Nichols, Brian M Oki, and Douglas Terry. Using collaborative filtering to weave an information tapestry. Communica-tions of the ACM, 35(12):61–71, 1992.

FO Isinkaye, YO Folajimi, and BA Ojokoh. Rec-ommendation systems: Principles, methods and evaluation. Egyptian Informatics Journal, 16 (3):261–273, 2015.

Yue Shi, Martha Larson, and Alan Hanjalic. Col-laborative filtering beyond the user-item matrix: A survey of the state of the art and future chal-lenges. ACM Computing Surveys (CSUR), 47 (1):3, 2014.

Yifan Hu, Yehuda Koren, and Chris Volinsky. Collaborative filtering for implicit feedback datasets. In 2008 Eighth IEEE International Conference on Data Mining, pages 263–272. Ieee, 2008.

(9)

Figure 4: Overzicht van de drie filters die gekozen kunnen worden (geslacht, leeftijd en hoeveelheid cadeaus op verlanglijstje) en een voorbeeld profiel.

(10)

Figure 6: De verlanglijst en aanbevelingen van het profiel van 53-jarige vrouw.

Figure 7: Vergelijking van de top 250 meest gevraagde cadeaus en de top 250 meest aangeboden cadeaus binnen gekozen geslacht en leeftijdscategorie.

(11)

Figure 8: Vergelijking van drie aanbevelingssystemen binnen door een product uit de top 250 meest gevraagde cadeaus binnen een leeftijdscategorie en geslacht te kiezen.

(12)

Figure 10: 10 aanbevelingen op basis van het geselecteerde product: Het ultieme mannenkookboek.

(13)

Figure 12: Grafiek die het verschil in rang van de top 10 meest gevraagde cadeaus en de rang van de aanbeveling toont binnen gekozen geslacht en leeftijdscategorie.

Figure 13: Grafiek die het verschil in rang van de top 60 meest gevraagde producten en de rang van de aanbeveling toont binnen gekozen geslacht en leeftijdscategorie.

Referenties

GERELATEERDE DOCUMENTEN

8 Vierde Richtlijn 78/660/EEG van de Raad van 25 juli 1978 betreffende de jaarrekening van bepaalde vennootschapsvormen, Zevende Richtlijn 83/349/EEG van de Raad van 13 juni

(i) de totale jaarlijkse bruto-inkomsten uit beleggingsdiensten en - activiteiten van de beleggingsonderneming bedragen minder dan 30 miljoen EUR. Voor de toepassing

575/2013 door [Verordening (EU)---/----[VBO]] kan, zodra deze van kracht wordt, beleggingsondernemingen in beeld brengen die al actief zijn op basis van een overeenkomstig Richtlijn

(c) derden, met instemming van de betrokken fuserende vennootschappen. De lidstaten zorgen ervoor dat elke fuserende vennootschap de in lid 1 van dit artikel bedoelde deelnemers in

(b) niet gebonden aan het volume en/of de waarde van de namens de cliënten verrichte transacties. Elke operationele regeling voor de inning van de onderzoeksvergoeding

(b) zij geven de cliënt op een duurzame drager kennis van de uitvoering van de order, en wel zo spoedig mogelijk, maar uiterlijk de eerste werkdag na

Indien de solvabiliteitsratio tussen de solvabiliteitsratio's ligt als vastgesteld in de bovenstaande tabel, wordt de waarde van g i lineair geïnterpoleerd aan de hand van de

(b) de middelen om de identiteit te verifiëren van de personen, of hun vertegenwoordigers, die de bijkantoren registreren.. De lidstaten kunnen, in het kader van