Pas in het jaar 2015 is er een definitie voor ‘Data Scientist’ opgesteld welke luidt als volgt: “A Data Scientist is a practitioner who has sufficient knowledge in the overlapping regimes of expertise in business needs, domain knowledge, analytical skills, and programming and systems engineering expertise to manage the end-to-end scientific method process through each stage in the big data lifecycle.” aldus het Amerikaanse instituut voor wetenschappelijke standaardisatie NIST1. Een erg brede professie dus, waarvoor je van vele markten thuis moet zijn om succesvol te worden. In de volksmond wordt er vaak gerefereerd naar een uitspraak van Josh Wills, voormalig directeur Data Engineering bij Slack: “Data Scientist (n.): Person who is better at statistics than any software engineer and better at software engineering than any statistician” 2. Maar betekent dit dan ook dat een Data Scientist minder goed is in statistiek dan statistici en minder goed in programmeren dan een software engineer? Ik denk het niet! Maar er zijn wel een aantal vuilkuilen die dan vermeden moeten worden… Houd ze in de smiezen!
1. Het niet volledig begrijpen van de ‘objective function’
De objective function staat voor de waarde die je probeert te optimaliseren, en geeft een indicatie van hoe goed het optimalisatieproces heeft gewerkt. Probeer je bijvoorbeeld een zo groot mogelijk vierkant te creëren, dan is de oppervlakte van dat vierkant je objective function. In het bedrijfsleven zou het bijvoorbeeld het minimaliseren van de projectkosten kunnen zijn, of het maximaliseren van de behaalde winst. Welke objective function wordt gekozen is afhankelijk van welke doelen worden nagestreefd. Heb je het doel en de objective function in kaart gebracht? En weet je hoe jouw data daaraan relateert (zie #2)? Dan kun je beginnen aan het bouwen van een succesvol model!3
2. Beginnen met bouwen zonder een hypothese
Wij Data Scientists willen graag data gedreven modellen bouwen. Maar voordat je daaraan begint, moet je toch echt eerst je data bekijken. Het verkennen van je data en data-eigenschappen wordt ook wel Exploratory Data Analysis (EDA) genoemd4. Hierin wordt de structuur van de data bekeken; worden duplicaten en missende waardes geïdentificeerd en worden variabelen en de associatie tussen die variabelen eenvoudig gevisualiseerd. Heb je de eigenschappen van je data in kaart gebracht? Heb je een hypothese gevormd die bij je onderzoeksvraag past? En heb je een model kunnen vinden die het beste jouw data kan beschrijven en jouw onderzoeksvraag kan beantwoorden? Dan kun je aan de slag met de bouw van je model!3
3. Data is niet toegankelijk voor anderen
Als Data Scientist deel je je code of je data vaak met anderen, bijvoorbeeld je opdrachtgever of een medewerker. Echter wordt er dan vaak vergeten dat wanneer je de code deelt, de data ook toegankelijk moet zijn. Voor de reproduceerbaarheid moet je er dus te allen tijde voor zorgen dat er in jouw code niet gerefereerd wordt naar een locatie op jouw computer of naar een dataset die je collega niet bezit5.
Voorbeeld:
Hier is iets op gevonden! We kunnen onze data heel gemakkelijk delen op d6tpipe waarbij jij beheert wie er bij jouw data kan. Vaak wordt Git hiervoor gebruikt, maar d6tpipe kan grotere bestanden aan, is sneller en ook veiliger dan Git. Check deze link voor een ‘Quickstart’ voor het gebruik van d6tpipe.
4. Geen ‘version control’ uitvoeren
Als een Data Scientist creëer je; sla je je creaties op; je bewerkt ze; waarna je vervolgens je vernieuwde creatie weer opslaat. Version control kan je helpen in kaart te brengen wat je hebt aangepast, wanneer en waarom. Dit is vooral erg handig wanneer je met meerdere collega’s aan meerdere documenten werkt. Git is een gratis, en zeer geschikte tool om version control uit te voeren. Het houdt namelijk bij wie, wat, wanneer, in welk document doet en het heeft de mogelijkheid om alle gemaakte aanpassingen (die al dan niet tegelijk zijn uitgevoerd) samen te voegen in één document. Als je ook graag een dataset toevoegt aan je document, dan kan dat. Dat is een erg goed idee zelfs! Maar doe dit dan met d6tpipe, die is meer geoptimaliseerd voor grote datasets (zie #3)5.
5. Het onnodig gebruik van for-loops
Een van de eerste dingen die je leert wanneer je gaat programmeren zijn for-loops, ze zijn namelijk gemakkelijk te begrijpen. Echter zijn ze ook erg omslachtig en daardoor sloom. Gelukkig zijn er gevectoriseerde functies ingebouwd in de Numpy, Spicy en Pandas packages van Python. De packages gebruiken vooraf gecompileerde codes om wiskundige berekeningen uit te voeren, parallel over een reeks gegevens6. De packages zijn geoptimaliseerd en erg snel, waardoor je jezelf het programmeer-leven heel wat makkelijker kunt maken. Zorg dus dat je er gebruik van maakt!5
Voorbeeld:
6. Het gebruiken van functies in plaats van ‘DAG’
Directed Acyclic Graphs (DAG) is een effectieve en intuïtieve manier om je code te organiseren. In plaats van het gebruik van lineair gekoppelde functies, worden er taken geschreven die afhankelijk van elkaar zijn. Hierdoor is de code makkelijker aan te passen wanneer je complexere taken wil uitvoeren. Bovendien is de code makkelijk te begrijpen voor anderen gezien alle DAGs hetzelfde patroon volgen. Met behulp van d6tflow of airflow kun je gemakkelijk deze DAGs opstellen. Een overzichtelijk voorbeeld van een DAG met betrekking tot machine learning vind je hier.
Tuurlijk zijn er nog een heel aantal andere dingen die je in de gaten moet houden wil je een top Data Scientist worden, maar als je jezelf vertrouwd maakt met deze begrippen en technieken zijn de eerste stappen gezet. Al doende leert men, dus pak er een interessante openbare dataset bij (zie Kaggle) en oefen oefen oefen! Oefening baart kunst!