Search

De 10 Beste Machine Learning Tips van 2016...

Naar blogoverzicht
31 December 2015

De tijd van lijstjes en overpeinzingen van het afgelopen jaar is weer aangebroken....  Ow nee, wacht , daar hebben we bij DotControl natuurlijk geen tijd voor! Hoe kun je nou beter de laatste dag van het jaar besteden dan eindelijk eens lekker ongestoord als een echte "Grease Monkey" je handen vuil te maken aan een ouderwets stukje Machine Learning?

Je hebt de term Machine Learning vast al een paar keer voorbij zien komen het afgelopen jaar en ik "voorspel" je dat dat in 2016 alleen maar meer gaat worden. In een eerdere blog post heb ik al eenvoudig proberen uit te leggen wat machine learning nou precies inhoudt, maar nu is het tijd voor het echte werk. Of zoals Jerry Maguire zou zeggen:

Show me the Money!

In deze laatste blog post van 2015 wil ik kort laten zien dat Machine Learning niet per se een academische excercitie is, maar dat het juist ook in de dagelijkse praktijk goed toepasbaar is. En dat kan ik alleen "bewijzen" door een echte dataset te selecteren en te voeden aan een of meerdere machine learning algoritmen.

We beginnen met het selecteren van potentiele data waaruit we iets willen leren. In deze blog post kies ik voor een binair classificatie probleem, oftewel een vraag waarvan de uitkomst maximaal twee mogelijke opties heeft: ja of nee, true of false, etc. Ik ben dus op zoek naar een grote data set met een aantal kolommen waarin de beschrijvende eigenschappen staan en één kolom waarin de uitkomst staat die we gaan proberen te leren te voorspellen. Die uitkomst mag maar twee verschillende waarden bevatten.

Maar hoe kom ik aan zo'n grote dataset? In ons geval is de data van ons zusje Eventler natuurlijk een mooie kandidaat. Eventler is een online bezoekersregistratie tool voor events en bevat o.a. data van personen die zich hebben ingeschreven voor een event. Een van de grootste ergernissen van event managers is de zogenaamde "no show". No show zijn personen die zich wel hebben ingeschreven voor een Event maar uiteindelijk niet komen opdagen. Je kunt je wel voorstellen dat het aardig wat kosten (en verspilling) zou voorkomen als we zouden kunnen voorspellen of iemand tot de groep No Show behoort. Dat is een uitdaging die ons als muziek in de oren klinkt! Je kunt of wel of niet op een event aanwezig zijn, dus dat is een binair classificatie probleem. Laten we bij eventler nou toevallig heel veel gebruikersdata hebben inclusief of iemand wel of niet is ingecheckt. En daarnaast klinkt het best wel plausibel dat je op basis van deze gegevens show/noshow zou kunnen voorspellen, toch? 

Vol goede moed begin ik met het scrhijven van een query tegen de Eventler database. Het eindresultaat van die query moet een dataset worden die voldoet aan bovenstaande beschrijving. Ik wil dus graag een aantal kolommen met beschrijvende eigenschappen als gelacht, bedrijfsgrootte, functie, branche etc. en een laatste kolom met daarin of deze persoon in is gecheckt of niet.

Maar daar lopen we al direct tegen het eerste probleem uitdaging op. Bij Eventler zijn de gebruikersregistratie profiel velden per event in te stellen waardoor de data van verschillende events niet hetzelfde is. We kunnen dus helaas niet alle data van alle events samen analyseren. Maar goed we laten ons niet kisten, dus we kiezen het grootste event met de meeste data als dataset. 

De volgende stap is het selecteren en prepareren van de data. Zo kunnen we b.v. ontbrekende waarden filteren. Bij andere kolommen, die te veel mogelijk opties hebben, kunnen we proberen het aantal klassen te verkleinen door verschillende klassen samen te voegen. Een andere beruchte boosdoener is b.v. een selectielijstje met als laatste optie: "anders, nl: ...." . Dit soort vrije user input dienen we zoveel mogelijk eruit te filteren.

Zodra we onze dataset netjes is, kunnen we ons machine learning experiment gaan opzetten door de dataset op te splitsen in een trainings set en een test set. De trainings set voeren we aan het machine learning algoritme.  Ik kies in eerste instantie voor het two-way boosted decision tree algoritme. Het machine learning algoritme begint de data te crunchen en als het klaar is voeren we de test set aan het algoritme. Met de test set kunnen we kijken hoe goed het algoritme de show/nowshow heeft leren voorspellen.

Dit hele proces is super spannend. Je gooit een hele hoop data in een soort black box die een hele tijd begint te rekenen en uiteindelijk een grafiekje toont waaruit blijkt of het je gelukt is om de toekomst te voorspellen! Hieronder het grafiekje dat ik kreeg uit mijn eerste experiment:

Hmm.... hier gaat dus duidelijk iets mis! Uit de tekstboeken en een eerder experiment dat ik heb gedaan met een voorbeeld dataset weet je dat de grafied er ongeveer zo uit zou moeten zien:

Hoe dichter de grafiek bij de linkerbovenhoek loopt, hoe beter de voorspelling. Er zit dus blijkbaar iets niet goed in de dataset of de configuratie van het algoritme. Op dat moment ga je terug naar het begin, naar de dataset, en probeer je de data nog verder op te schonen en opnieuw in te laden in het algoritme. Dit proces blijf je herhalen totdat je tevreden bent met het eindresultaat.

Na heel veel experimenteren met data van verschillende events en verschillende machine learning algoritmes was dit het beste grafiekje wat eruit rolde:

Met deze uitkomst kunnen we dus helaas niet met enige significantie voorspellen of iemand op een evenement zal komen opdagen of niet. Het komt er ongeveer op neer dat je net zo goed de WKavia had kunnen laten voorspellen in plaats van het machine learning algoritme.

Maar waarom leid ik jullie naar deze anti-climax? Machine Learning wordt vaak gepresenteerd als een of ander zelflerend wondermiddel. Maar zelfs Machine Learning kan niet iets eruit halen wat er niet in zit. Met andere woorden, hetgeen je wilt leren moet wel in de data opgesloten zitten. Ik ben dus bang dat we moeten concluderen dat we in het geval van show/noshow niets kunnen leren uit de beschikbare data. Machine Learning is dus helaas geen glazen bol, maar het is wel "the next best thing" ;-) 

Maar ook door deze tegenslag laten we ons niet kisten. We nemen ons verlies en gaan vrolijk verder met de zoektocht  naar de volgende potentiele kandidaat. Gelukkig beschikken we bij DotControl over veel data bronnen. Uiteindelijk kwam ik uit bij een van onze andere startups Addiscount. Addiscount is een online platform waarbij je door het kijken van commercials korting kunt verdienen bij webshops. Ik had toevallig nog een backup bij de hand van een oude database met veel winkelmandjes van klanten. Je kunt een winkelmandje wel of niet afronden, dus we hebben weer een binaire uitdaging! 

We beginnen weer vol goede moed met het schrijven van de query en het prepareren van de data. Als dat klaar is voeren we data aan het algoritme en drukken we op de "Run" knop. De spanning bouwt weer langzaam op en dan verschijnt het groene vinkje. Voorzichtig klik ik op het "View Result" knopt en ik zie de grafiek langzaam opbouwen... BAM!!!

Dat lijkt er meer op!  De grafiek klimt al aardig richting linkerbovenhoek en dat is wat we willen bereiken! We voeren nog een aantal iteraties uit om de dataset te verbeteren en ter verificatie voer ik de dataset ook aan een aantal andere two-class machine learning algoritmes:  Two Class Support Vector Machine en Tow-Class Neural Network. Ook hier zien we vergelijkbare resultaten en weten we de grafiek zelfs nog iets meer naar de linkerbovenhoek te krijgen.

OK, leuk zo'n grafiek, maar wat betekent dat nou voor mijn business? Met de verkregen resultaten kunnen we obv gebruikersprofiel voorspellen of iemand zijn winkelmandje gaat afronden of niet. Deze informatie kunnen we gebruiken om b.v. aan mensen waarvan je verwacht dat ze hun winkelmandje niet gaan afronden een extra korting aan te bieden om twijfelaars over de streep te trekken. Of misschien kunnen we deze mensen live support aanbieden om te assisteren. Op deze manier kunnen we dus onze conversie verhogen door extra aandacht te geven aan mensen die dat nodig hebben (En geen onnodige kosten maken voor mensen die uit zichzelf ook wel zouden converteren.)

Ik hoop dat deze blog post je iets meer inzicht heeft gegeven in de praktische toepassing van Machine Learning.  Mijn goede voornemen voor 2016 is dan ook een grafiekje te produceren dat nadert tot het grafiekje van de voorbeeld dataset! Mocht je data hebben waar je iets uit zou willen leren en waaruit ik mijn goede voornemen zou kunnen waarmaken, aarzel dan niet om mij een PM te sturen!

Het is nu na vijven, ik zit hier in het donker op een verlaten Van Nelle Fabriek en ik had allang oliebollen moeten gaan halen... De spell check stel ik dus even uit tot het nieuwe jaar ;-) Rest mij niets anders meer dan iedereen alvast een spetterend uiteinde te wensen en tot in 2016!

Rutger
Lees de originele blogpost hier of volg mij op twitter

* = Belangrijk om hierbij te vermelden is dat we bij machine learning gebruik maken van geanonimiseerde gegevens om de privacy te waarborgen. We maken dus geen gebruik van data als achternaam en e-mail, maar alleen eigenschappen als bv. bedrijfsgrootte, functie, branche etc. die niet te herleiden zijn tot de achterliggende persoon.

Deel deze post op social media

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