Inmiddels alweer een paar weken terug schreef ik over de installatie van de R plugin in MicroStrategy, aan de hand van een voorbeeld met lineaire regressie. Maar met R kun je zoveel meer! En de uitkomsten van R analytics kun je onwijs gaaf visualiseren (in Tableau of MicroStrategy) om een beter inzicht te vergaren. Geïnspireerd door een hele gave data-discovery sessie vanmorgen met een klant waar onze collega Richard Kooijman met een uitstekende presentatie de database marketeers op de banken kreeg met zijn gave analytics voorbeelden en proces mining, bedacht ik mij dat ik ook nog een geinige analyse op de planken heb liggen gemaakt op basis van MicroStrategy voorbeeld tutorial data en de R voorbeelden van MicroStrategy, om de R plugin is te proberen.
Case: Een winkelketen heeft verschillende winkels en wil deze graag met elkaar vergelijken/benchmarken. Maar winkels verschillen nogal bijvoorbeeld qua omzet en grootte waardoor je ze niet op een goede manier met elkaar kunt vergelijken. Een manier om dit eerlijker te maken is bijvoorbeeld door te kijken naar de gemiddelde omzet per m2. En daar kun je dan een rank op zetten en dan weet je de beste/slechtste winkel, toch? Klaar=kees, zie onderstaande plaat.
Of toch niet? Bij een outletcenter hadden we dit principe ooit, daar hadden we ranks voor omzet/m2, conversieratio, aantal bezoekers, hoogte bonbedrag etc etc. Die stonden dan allemaal als lijstjes naast elkaar op 1 rapport. En dan stond jouw winkel op nr 1 in omzet, nr 5 in omzet per m2, nummer 8 in conversieratio etc.. Wie is er dan de beste? En veel belangrijker welke shops kan ik goed met elkaar vergelijken? Naast bovenstaande zaken zijn er potentieel nog veeeeeeeeeel meer variabelen die invloed uitoefenen op de performance van de winkel. Want iedere rayon manager weet dat de nr1 winkel in de Kalverstraat zit,net geopend en superhip is, en heel veel aanloop heeft omdat de doelgroep in de buurt woont, terwijl de nr 50 winkel 15 jaar geleden geopend is in een (inmiddels) verouderd verlaten winkelcentrum in Lutjebroek. Toch zijn deze winkels even groot, en verkopen ze hetzelfde product. Maar deze winkels kun je dus niet zomaar vergelijken.
Maar wellicht kan R analytics je hier een beetje bij helpen. We zijn namelijk op zoek naar clusters van vergelijkbare winkels. Zodat je die tegen elkaar op een eerlijke manier kan benchmarken m.b.v. de hierboven beschreven KPI’s. K-means clustering kan je erbij helpen om de clusters te ontdekken. Zie hier op wiki de uitgebreide omschrijving inclusief alle wiskundige berekeningen. Ik ben geen wiskundige en dat hoeft ook niet, als je de regels maar kan toepassen. De methode heeft zichzelf bewezen, en dat is op zichzelf weer bewezen door allerlei wiskundigen. Wat ik wel kan begrijpen is het principe van clusteren. Bij clusteren probeert een clusterings-algoritme ‘natuurlijke’ groepen/subsets binnen de data te vinden, gebaseerd op een of andere overeenkomst. Elk cluster heeft een centrum. Dit centrum wordt gebruikt om nieuwe datapunten te classificeren. Het nieuwe datapunt behoort bij het cluster waarvan het centrum het dichtstbijzijnde is. Elk punt zit in precies 1 cluster.
Bij k-means clustering werkt dit als volgt:
Je begint met het bepalen hoeveel clusters je wilt hebben. In ons geval 3. De centra van de clusters worden de eerste keer gewoon willekeurig gekozen. Daarna wordt van elk datapunt de afstand tot ieder centrum bepaald, en wordt het datapunt toegewezen aan het cluster waarvan het centrum het dichtst bij is. Nadat alle datapunten aan een cluster zijn toegevoegd, worden de cluster-centra opnieuw berekend. Het nieuwe centrum van een cluster is gewoon het gemiddelde van alle punten in dat cluster. De procedure begint nu weer opnieuw: van alle datapunten wordt weer uitgezocht welk centrum het dichtstbij is, en de clustertoewijzing wordt aangepast. Dit gaat door totdat er niks meer verandert, of totdat er een vooraf gekozen aantal stappen is geweest.
Dit principe wil ik gaan toepassen in het voorbeeld van winkel benchmarking met behulp van k-meanclustering met de R plugin in MicroStrategy. De dataset heeft naast de standaard variabelen als omzet en grootte van de winkel, ook hele gave informatie over het aantal concurrenten, het mediaan inkomen van de populatie in de buurt, leeftijd van de winkel, en de grootte van de populatie in de buurt. Zaken die wij voor een klant bijv. uit Cendris of Experian data zouden kunnen halen. Aan de hand van deze variabelen gaan we de winkels opdelen in clusters die beter te vergelijken zijn. De formule voor de R plugin ziet er als volgt uit:
We gebruiken het kant en klare k-means clustering script wat meegeleverd wordt met MicroStrategy. Je kunt kiezen of we willen dat het algoritme zelf het aantal clusters bepaalt, met maximum (max_k=aantal) of we geven op hoeveel we er willen (Exact_k=aantal). In dit geval stellen we in dat we drie clusters willen (Exact_k=3). Vervolgens draaien we het rapport en krijgen we het volgende terug van de R server. De metriek cluster heeft netjes een nummertje uitgedeeld aan iedere winkel.
Die kunnen we vervolgens gebruiken om de winkel te gaan classiferen, met een simpele color by. Zie onderstaande plaat. De linker scatterplot toont winkels per mediaan inkomen en Polulatie, de rechter scatterplot toont winkels op leeftijd en m2. De grootte van de datapunten op beide graphs worden beïnvloed door het aantal concurrenten.
Uit de linker grafiek kunnen we leren dat de groene winkels in gebieden zitten met een hoger inkomen en de blauwe in gebieden met een hogere populatie. De oranje winkels zitten in de minder dichtbevolkte gebieden met een lager inkomen. De rechter grafiek is minder duidelijk, je zou daar kunnen zeggen dat het blauwe cluster over het hele leeftijd spectrum te vinden is en de oranje winkels wat ouder zijn. Het aantal concurrenten lijkt evenredig verdeeld te zijn over de clusters, de punten zijn qua grootte redelijk gelijk, dat zegt dus niet zoveel. Wellicht dat het afzetten van de clusters tegen andere metrieken nog meer inzicht zal geven. In ieder geval is er op basis van inkomen en populatie een duidelijke clusterverdeling te maken. Daarmee kan dus een beter vergelijk gemaakt worden tussen de winkels, en is het met name interessant om de outliers binnen een cluster te analyseren. K-means clustering kan dus zeker helpen met clusteren en is op zeer simpele wijze in te zetten.
Door Rick Tijsen