Beoordelingen voorspellen van…bier!
Nu alle kroegen dicht zijn en geen biersommelier mij ter plaatse zal adviseren wil ik zelf een data-gedreven besluit nemen welk speciaalbier ik ga bestellen. In deze blog neem ik je mee hoe ik in Alteryx een voorspellend model ontwikkel om bierscores te voorspellen, gaandeweg modellen selecteer en de nauwkeurigheid van de voorspellingen verhoog.
Een persoonlijke business case
Een vraag waar ik geruime tijd mee rondloop (en nog niet kon beantwoorden vanwege een tekort aan data) is of ik een goed presterend voorspellend model kan bouwen waarmee ik slim prioriteer als het gaat om het bestellen van speciaalbieren. Speciaalbieren zijn vaak prijzig en het aanbod is enorm, dus hier gaat het om een persoonlijke business case. In de aanloop tot dit hobbyproject heb ik mij veelal laten verleiden door de kunstzinnige afbeeldingen op de verpakking, de verhalen van de biersommelier en verder ben ik ook afgegaan op mijn instinct. Deze gevoelsmatige besluitvorming omzetten naar één die gestoeld is op inzichten uit data is iets dat ik in professionele zin al bijna tien jaar doe en nu voor het eerst ook op bierdata kan doen, yes!
Bovenstaande workflow bevat mijn gebruiksgegevens vanuit de applicatie Untappd en bestaat uit bieren die ik reeds heb geproefd (checkins) en bieren die ik op mijn wensenlijst heb staan. Door een voorspellend model te ontwikkelen op basis van mijn huidige beoordelingen, wil ik mijn wensenlijst met bijna 1000 bieren inperken tot een kleine lijst met bieren die ik een hoge beoordeling verwacht te geven en waar ik actie op wil ondernemen.
Vertaalslag naar de business case
Op de werkvloer zijn voorspellingen op een vergelijkbare manier te ontwikkelen door op basis van historische data een voorspellend model op te bouwen en deze te toetsen op data die het model niet eerder gezien heeft. Hierbij kun je denken aan het voorspellen van financieel succes van producten die je verkoopt of nog zult gaan verkopen; of het voorspellen van opzeggingen van donatieovereenkomsten bij nieuwe donateurs; het voorspellen van wel of geen ziekte in het bevolkingsonderzoek op basis van klinische data; enzovoort. De technologie van vandaag biedt veel mogelijkheden, dus het is vooral een kwestie van goede focus en wel op een voorspellingsvraagstuk dat werkelijk waarde zal toevoegen omdat je er succesvol op kunt inspelen. Hiermee bedoel ik dat je je organisatie slim kunt laten meebewegen door voornamelijk producten in te kopen die je financieel succes zullen brengen; door contact op te nemen met donateurs nog voordat ze hun overeenkomst opzeggen; door wel of niet personen door te verwijzen naar een medisch specialist; of in mijn geval door bepaalde bieren wel of niet te bestellen omdat ik voorspel dat ik ze wel of niet zal waarderen.
Een eerste stap in modellen vergelijken
In het eindresultaat maak ik gebruik van slechts 1 tool om een voorspellend model te ontwikkelen. In veel gevallen weet je vooraf niet welk model de beste voorspellingen levert en dus zul je de prestaties van verschillende modellen moeten vergelijken. Een bekende stelling van de statisticus George Box is “All models are wrong; some models are useful” en heeft velen al helpen nuanceren hoe we met voorspellende modellen kunnen omgaan.
In het bovenstaande deel van de workflow wordt 80% van de data gebruikt om drie voorspellende modellen op te ontwikkelen en 20% wordt gebruikt om het model op te valideren. Feitelijk worden de voorspellende modellen op een hoop gelegd en vervolgens worden scores voorspeld op de dataset die het model nog niet gezien heeft. De voorspelde scores en de echte scores worden daarna gevisualiseerd zodat ik inzicht krijg in de bruikbaarheid van de modellen.
De correlatieplot laat zien dat de modellen nog voor verbetering vatbaar zijn aangezien de voorspelde scores en de werkelijke scores nog niet heel strak rondom de diagonaal liggen. In tabelvorm krijg ik ook informatie over belangrijke prestatie-indicatoren (in groen staan de beste waarden gemarkeerd).
Model | Correlation | RMSE | MAE | MPE | MAPE |
---|---|---|---|---|---|
beer_linear | 0.509 | 0.846 | 0.644 | -18.43 | 35.30 |
beer_brain | 0.486 | 0.853 | 0.656 | -18.38 | 36.14 |
beer_boost | 0.497 | 0.839 | 0.632 | -18.39 | 35.63 |
Er is geen duidelijke winnaar aan te wijzen in de tabel, dus moet ik eerst even nadenken hoe we deze modellen nog wat beter voor ons kunnen laten werken. Er zijn modellen die beter presteren als ze met genormaliseerde scores kunnen werken, terwijl andere modellen hier minder last van hebben – meer informatie vind je hier.
Hoe zijn de beoordelingen verdeeld?
De beoordelingen zijn niet normaal verdeeld, dus wellicht moeten we een transformatie van deze scores doorvoeren zodat de voorspellende modellen zich minder sterk richten op de lage beoordelingen – in de volksmond ook wel “gootsteenbier” genoemd – en wat meer gewicht geven aan de hoger beoordeelde exemplaren.
Om de beoordelingen overeen te laten komen met de standaard normale verdeling en zodoende beter te kunnen voorspellen heb ik drie regels R-script geschreven. Gelukkig weet ik dat met de kwantielen functie een vertalingsslag gemaakt kan worden tussen de percentielen van gesorteerde waardes en de standaard normale verdeling.
Het R-script binnen de R-tool ziet er als volgt uit:
Et voilà het eindresultaat van normaliseren:
Normaliseren leidt tot betere voorspellingen
Maar zijn de modellen nauwkeuriger geworden? Ik draai de workflow opnieuw en binnen een minuut zie ik dat de correlaties hoger zijn en de foutmarges lager. Voor nu lijkt het model met de naam beer_boost de meest nauwkeurige en ook geschikt om in gebruik te nemen.
Model | Correlation | RMSE | MAE | MPE | MAPE |
---|---|---|---|---|---|
beer_linear | 0.569 | 0.803 | 0.635 | 69.586 | 126.80 |
beer_brain | 0.538 | 0.828 | 0.657 | 68.653 | 130.70 |
beer_boost | 0.571 | 0.801 | 0.637 | 64.433 | 122.40 |
De wensenlijst opnieuw bekeken
Het beer_boost model bouw ik nogmaals op, maar nu met de gehele dataset. Daarnaast gebruik ik een Score tool om de scores van alle bieren op mijn wensenlijst te voorspellen. Alle genormaliseerde scores die groter zijn dan 0 beschouw ik als bovengemiddeld (663 van de 885) en als ik selecteer op de top 3 per categorie, houd ik 38 bieren over van de 885. Reken maar uit die besparing!
Zo. Nu eerst een… “16:9 Widescreen Anamorphic”?
Nu is het wat mij betreft een goed moment om de doorontwikkeling van het model te stoppen en eerst eens een bestelling te doen van bieren die ik naar alle waarschijnlijkheid het hoogst zal waarderen. Zodoende kan ik de vergelijking maken tussen de voorspelde beoordelingen en de nog te geven beoordelingen.
Stel dat het nog preciezer moet
Natuurlijk kan dit model nog een stuk preciezer gemaakt worden, maar hiervoor heb ik simpelweg meer beschrijvende kolommen nodig. Je kunt met domeinkennis snel iets bedenken om de datasets mee te verrijken om zo wellicht beter te kunnen voorspellen Met feature engineering kun je helemaal los gaan (zie onderstaande voorbeelden). Dit gaat voor deze exercitie veel te ver en heb ik nu dus niet gedaan.
- Met web-scraping extra eigenschappen van Untappd verzamelen zoals:
- smaakprofielomschrijvingen voor alle bieren downloaden en encoderen als dummy variabelen.
- per bier de gemiddelde score ophalen want beoordelen gebeurt niet blind.
- Publieke data ophalen over de normen per bierstijl (BJCP) om te zien in welke mate een bier stijlgetrouw is.
- Alle etiketten van de bieren verzamelen en deze kunstwerken laten beoordelen met deep learning om te zien of ik gevoelig ben voor dit soort kunst.
- Foto’s van checkins analyseren om de kleur van het bier te kunnen uitdrukken in een getal (zie SRM) zodat ik kan testen of ik donkerder bieren meer waardeer.
Je zult je voorstellen dat je met al dit soort features er een dagtaak aan kun hebben om een goed presterend voorspellend model te maken. Om te voorkomen dat we eindeloos het model aan het tweaken en valideren zijn, kunnen we gebruik maken geavanceerde oplossingen zoals DataRobot en zodoende razendsnel een optimaal model ontwikkelen en in productie nemen.
Wil je een begin maken met voorspellende analyses?
Loop jij ook rond met een vraagstuk en wil je een begin maken met voorspellende analyses? Wij helpen je graag op weg om dit op een toegankelijke manier te doen. We kunnen samen een data science project opzetten en uit voeren, of je kunt je laten inspireren op de AI inspiratieworkshop. Stuur ons een bericht en we pakken het op!
Voetnoot : het is nu werktijd dus proost met een glas water
Leuke blog Roland!
Bedankt Siebe!