data-analyse: hoe gelukkig is een land?

-

Bij Incentro sturen we op geluk. De happiness van medewerker en klant staan centraal. Maar geluk zit ‘m voor de medewerkers natuurlijk niet alleen in de 9 tot 5 uurtjes. Algemene factoren kunnen ook een rol spelen. Hoe gelukkig is de mens op schaal van 1 tot 10, en valt dit te voorspellen per land?

In dit blog laten we je zien hoe je zelf aan de slag kunt gaan met een korte data analyse en hoe je een kort machine learning experiment kunt opzetten. Wil je onze analyse repliceren, of gewoon even kijken hoe het in z’n werk gaat, dan kan je onze code hier terugvinden.

dataontsluiting & databewerking

De data is open data die we hebben vergaard uit de World Database of Happiness [1] en het World Happiness Report [2]. De data bestaat uit predictors (ook wel features, of x-variabelen) die verbanden kunnen hebben met hetgeen wat we willen voorspellen (de y-variabele). In deze situatie is onze y-variabele het gemiddelde geluk per land. Wanneer we kijken naar de happiness data van 2015, kunnen we waarnemen dat er heel wat missing values zijn:

niet alle landen zijn compleet voor wat betreft de invulling van de x-variabelen. Zo kennen enkele landen bijvoorbeeld geen ‘generosity’ score, of mist de mate van ‘confidence in national government’ in de data. Omdat we aan de slag willen met een zo groot en compleet mogelijke dataset kunnen we de data, waar nodig, aanvullen met happiness data van voorgaande jaren 2007 tot 2014. Uiteindelijk kent de dataset 118 observaties (rijen) met 14 variabelen. Aan de slag!

verkennende data analyse

Voordat we aan ons machine learning experiment beginnen, kunnen we een korte verkennende data analyse (exploratory data analysis) toepassen op de data om eerste inzichten te vergaren. We kunnen enkele eerste verbanden in de data visualiseren en een eerste suggestie doen welke variabelen goede voorspellers zijn.

Wil je gaan voor een quick fix? Zet dan je een aantal voorspellers af tegen je y-variabele in scatter plots. In een oogopslag kun je globaal zien hoe de verhoudingen liggen! Zo zien wij dat de variabelen ‘Life Ladder’, ‘Log GDP per capita’ en ‘Social support’ vrij in lijn liggen met onze y-variabele en dat ‘Confidence in national government’ wellicht weinig te maken heeft met het gemiddelde geluk in een land.

 

Als we kijken naar correlaties binnen de data, worden onze vermoedens bevestigd. ‘Life Ladder’, ‘Log GDP per capita’ en ‘Social support’ scoren allen een correlatie boven de 0.75 met het gemiddelde geluk. ‘Confidence in government’ kent een correlatie met geluk van ongeveer -0.10. Hoogstwaarschijnlijk kan een voorspelmodel weinig met deze predictor.

machine learning experiment

Een machine learning experiment begint met het opdelen van de data. Een training set en een test set worden gecreëerd. De training set wordt gebruikt om voorspelmodellen mee te bouwen. Doordat we een deel van de data reserveren voor een test set, kunnen we later onze modellen evalueren op dit deel van de data dat ongezien bleef voor het model. In onze training set zitten 60 observaties en onze test set blijft over met 54 observaties.

Next is: verschillende modellen tunen en trainen op de training set. De regressie-taak die we onze machine opgeven is het voorspellen van het gemiddelde geluk op basis van 13 kenmerken. We kiezen vijf verschillende technieken voor deze regressie-taak: een simpele lineaire regressie, stochastic gradient boosting, support vector machine met lineaire kernel, support vector machine met een radial basis kernel en een lasso regressie. Het tunen – het kiezen van de juiste instellingen van de modellen – doen we handmatig en waar mogelijk met een grid. In een grid kan je meerdere instellingen voor parameters van model kiezen. Vervolgens probeert het model al deze instellingen uit en kiest de instellingen die ervoor zorgen dat het model het beste presteert.

Uit de resultaten blijkt dat de support vector machines (svm) het beste presteren en dat deze technieken relatief veel beter scoren dan een simpele lineaire regressie. Deze techniek maakt lineaire scheidingen tussen verschillende klassen, daarom presteert deze techniek vaak goed bij een classificatie-taak. Echter, dat wil niet zeggen dat het minder zou presteren op onze regressie-taak. De verschillende kernels voeren een transformatie uit, deze transformatie kan lineair zijn (de lineaire kernel) of non-lineaire (zoals de radial kernel).

Vaak presteert de non-lineair kernel beter op data met veel dimensies (veel kenmerken), maar kost dit ook veel meer computerkracht. Op onze data scoort de svm met de lineaire kernel een hogere R² dan onze andere modellen. Dit wil zeggen dat het model met de lineaire kernel de meeste variantie in de voorspelde data weet te verklaren in vergelijking met de andere de voorspelmodellen. Dat is positief!

Echter, de R² is een relatieve maatstaf om de accuraatheid van onze modellen te toetsen. Een ander veelgebruikte maatstaf in regressie-taken is de RMSE (Root Mean Squared Error), welke een absolute maatstaf is en kijkt naar de wortel van de standaarddeviatie die in het verschil tussen de werkelijke waarden en de voorspelde waarden gevonden kan worden. De waarde in deze maatstaf wil je minimaliseren. De RMSE berekend over het model met de lineaire kernel is wederom lager dan de RMSE berekend over de andere modellen.

conclusie geluksanalyse

Onze beste machine learning voorspelmodellen kunnen ongeveer 70% van de variantie in de data verklaren. Dat is al aardig wat beter dan onze simpele lineaire regressie die tot 60% van de variantie in de data verklaart. Mochten er nieuwe landen zonder een eindoordeel van geluk aan de Happiness Open data toegevoegd worden, dan kan ons model al ergens komen.

Wil je meer leren over voorspelmodellen in R? Of wil je meer weten over onze happiness cultuur? Neem dan contact met ons op via datascience@incentro.com.

bronvermelding

[1] Veenhoven, R., World Database of Happiness, Erasmus University Rotterdam, The Netherlands. Assessed on (21-11-2016) at: http://worlddatabaseofhappiness.eur.nl
[2] World Happiness Report at: http://worldhappiness.report/