
Data science: definitie en praktische toepassingen
Data science is een relatief recent maar snelgroeiend en veelzijdig vakgebied dat in veel domeinen wordt gebruikt. Het maakt gebruik van verschillende geavanceerde analysetechnieken en voorspellende modelleeralgoritmen om betekenisvolle inzichten uit data te halen die helpen bij het beantwoorden van strategische zakelijke of wetenschappelijke vragen. Data science combineert een breed scala aan vaardigheden, van technisch (programmeren, lineaire algebra, statistiek en modelleren) tot niet-technisch (effectieve representatie en communicatie van de resultaten). Daarnaast is, afhankelijk van de sector waarin data science wordt toegepast, stevige domeinkennis nodig om de beschikbare informatie en de verkregen inzichten correct te kunnen interpreteren.
Algoritmen uit de data science kunnen succesvol worden toegepast in uiteenlopende omgevingen waar veel data is of kan worden verzameld: financiën, handel, marketing, projectmanagement, verzekeringen, geneeskunde, onderwijs, productie, HR, taalkunde, sociologie, enzovoort. In de praktijk kan vrijwel elke sector of wetenschap aanzienlijk profiteren van het verzamelen, opslaan, analyseren en modelleren van hun data.
Wat is een use-case voor data science?
Een data-science-use-case is een concrete, realistische taak die met de beschikbare data moet worden opgelost. Binnen een specifieke organisatie worden veel variabelen geanalyseerd met data-sciencetechnieken in de context van de sector van dat bedrijf. Data-science-use-cases kunnen een op te lossen probleem zijn, een te toetsen hypothese of een te beantwoorden vraag. In essentie betekent data science doen: echte use-cases oplossen.
Hoewel de inhoud van elke use-case waarschijnlijk sterk verschilt, zijn er een paar gemeenschappelijke zaken om altijd in gedachten te houden:
- Het plannen van een data-science-use-case is: een helder doel en verwachte uitkomsten formuleren, de scope van het werk begrijpen, beschikbare middelen inschatten, vereiste data aanleveren, risico's evalueren en KPI's definiëren als maatstaf voor succes.
- De meest voorkomende aanpakken om data-science-use-cases op te lossen zijn: forecasting, classificatie, patroon- en anomaliedetectie, aanbevelingen en beeldherkenning.
- Sommige data-science-use-cases vertegenwoordigen typische taken in verschillende velden en je kunt op vergelijkbare aanpakken vertrouwen om ze op te lossen, zoals churnvoorspelling, klantsegmentatie, fraudedetectie, aanbevelingssystemen en prijsoptimalisatie.
Hoe los ik een data-science-casestudy op?
Het antwoord op deze vraag is heel casus-specifiek, wordt gedreven door de bedrijfsstrategie en hangt af van de kern van de casestudy zelf. Toch kan het helpen om een algemene routekaart te schetsen die je bij elke data-science-use-case kunt volgen:
- De juiste vraag formuleren. Deze eerste stap is erg belangrijk en omvat het bestuderen van de beschikbare literatuur en bestaande casestudy's, het herzien van best practices, het uitwerken van relevante theorieën en werkhypothesen en het opvullen van eventuele gaten in domeinexpertise. Het resultaat is een duidelijke vraag die in de casestudy van belang moet worden beantwoord.
- Dataverzameling. In deze stap voeren we een data-inventarisatie en verzamelproces uit. In de praktijk hebben we vaak niet-representatieve, onvolledige, foutieve en ongestructureerde data, dus verre van een complete, makkelijk leesbare tabel die klaar is voor analyse. Daarom moeten we alle mogelijke databronnen opsporen en identificeren die nuttig kunnen zijn voor ons onderwerp. De benodigde data is te vinden in de archieven van het bedrijf, via webscraping of afkomstig van een sponsor, enzovoort.
- Data wrangling. Dit is meestal het meest tijd- en middelenintensieve onderdeel van elk data-scienceproject. De kwaliteit en representativiteit van de verzamelde data wordt beoordeeld en er wordt een eerste data-exploratie uitgevoerd. De data wordt opgeschoond, voorbewerkt, getransformeerd, gemanipuleerd en vanuit ruwe vorm omgezet naar een geschikter formaat.
- Data-analyse en modelleren. De opgeschoonde data wordt geanalyseerd in zijn huidige staat en vervolgens passend gemaakt in een geselecteerd voorspellend statistisch model. De modelnauwkeurigheid wordt geëvalueerd en, als die niet bevredigend is, worden andere modelleeraanpakken geprobeerd. Dit wordt herhaald totdat het model is verkregen dat toekomstige scenario's met de hoogste precisie voorspelt. Dit proces kan, net als alle voorgaande, behoorlijk iteratief zijn.
- Resultaten communiceren. Vergeleken met de vorige stappen vergt deze stap meer communicatie- en soft skills dan programmeer- en technische expertise. Dit omvat het delen van de belangrijkste bevindingen en uiteindelijke conclusies met het management, aandeelhouders en andere betrokken partijen. De inzichten worden vaak gepresenteerd in de vorm van rapporten, artikelen en presentaties, met daarin mogelijke vervolgstappen.
Data-science-use-cases per sector
Data-science-use-cases kunnen betrekking hebben op vrijwel elke sector waar veel data wordt of kan worden verzameld. In dit hoofdstuk bespreken we enkele typische data-science-use-cases uit de volgende meest gevraagde velden: logistiek, gezondheidszorg en telecom. Sommige use-cases die we bespreken zijn interdisciplinair en komen in veel andere domeinen voor. Dat maakt ze universeler en toepasbaar, dus het is de moeite waard om een algemene aanpak te kennen om ze op te lossen. Daarnaast schetsen we voor elk van de geselecteerde sectoren nog enkele andere mogelijke onderwerpen die met data-sciencemethoden zijn te modelleren.
Data science in de gezondheidszorg
In de vorige drie hoofdstukken hebben we besproken hoe data-sciencemethoden bedrijven uit verschillende sectoren kunnen helpen hun omzet te verhogen. In de gezondheidszorg kan het correcte gebruik en de juiste interpretatie van beschikbare data niet alleen nuttig zijn voor de marketeers in deze sector, maar ook helpen bij tijdige diagnose van ernstige ziekten en zelfs levens redden.
Geneeskunde en zorgaanbieders verzamelen enorme hoeveelheden data uit tal van bronnen: elektronische patiëntendossiers (EPD/EHR), data van wearables, medisch onderzoek en facturatiegegevens. Het benutten van innovatieve data-science- en data-analysetechnieken is de hele zorgsector geleidelijk aan het hervormen en biedt de meest veelbelovende en impactvolle oplossingen voor de toekomstige ontwikkeling ervan. Met name sterk gespecialiseerde velden zoals genetica, voortplantingsgeneeskunde, oncologie, biotechnologie, radiografie, predictieve diagnostiek en farmacie zijn naar een compleet nieuw niveau getild door het volledige potentieel van hun data te ontsluiten.
Om beter te begrijpen hoe data science waarde kan toevoegen in de geneeskunde, zoomen we in op een van de meest klassieke use-cases.
Use-case in de gezondheidszorg: borstkankervoorspelling
Volgens het World Cancer Research Fund International is borstkanker het meest voorkomende kankertype bij vrouwen en het op één na meest voorkomende type in het algemeen. Tijdige diagnose van een borstpathologie, goedaardig of kwaadaardig, is extreem belangrijk omdat dit de kans op succesvolle behandeling en overleving aanzienlijk vergroot. Hier kan data science helpen.
De vooruitgang in dataminingmethoden in combinatie met machinelearningalgoritmen maakt het mogelijk om het risico op borstkanker te voorspellen, mogelijke afwijkingen in een vroeg stadium te detecteren, de dynamiek ervan in te schatten en zo een optimaal behandelplan te ontwikkelen. In essentie is dit een typische classificatieopgave binnen machine learning. Het goede nieuws is dat, omdat dit type oncologie wereldwijd vrij veel voorkomt, er overal ter wereld grondige onderzoeken zijn uitgevoerd en er dus enorme hoeveelheden data zijn verzameld van patiënten over de hele wereld.
Het grootste probleem bij het gebruik van dergelijke datasets in classifiers is dat ze sterk uit balans kunnen zijn. Bijvoorbeeld, in het geval waar de uitkomst wordt weergegeven als kanker/geen kanker, is de kans op een pathologie (de entries die tot de minderheidsklasse behoren) aanzienlijk kleiner dan de kans op geen pathologie (de entries van de meerderheidsklasse). Als gevolg daarvan heeft het algoritme de neiging om nieuwe gevallen als niet-pathologisch te classificeren. Daarom is het, om de nauwkeurigheid van dergelijke modellen efficiënter te beoordelen, zinvol om de F1-score als evaluatiemetriek te gebruiken, omdat die valse positieven (type I-fout) en valse negatieven (type II-fout) meeweegt in plaats van alleen de gevallen waarin het algoritme correct classificeerde.
Laten we een echte dataset bekijken over borstkanker uit een van de staten van de VS. De features worden uitgebreid beschreven in de documentatie, maar kort samengevat zijn het de gemiddelden, standaardfouten en grootste waarden van de kenmerken uit elke gedigitaliseerde afbeelding die de celkernen toont uit de borstmassa van een vrouw. Elke entry in de dataset correspondeert met een vrouw met een kwaadaardige of goedaardige tumor (dus alle vrouwen in kwestie hebben een soort tumor). De kenmerken omvatten celradius, textuur, gladheid, compactheid, concaviteit, symmetrie, enzovoort.
import pandas as pd
cancer_data = pd.read_csv('data.csv')
pd.options.display.max_columns = len(cancer_data)
print(f'Number of entries: {cancer_data.shape[0]:,}\n'
f'Number of features: {cancer_data.shape[1]:,}\n\n'
f'Number of missing values: {cancer_data.isnull().sum().sum()}\n\n'
f'{cancer_data.head(2)}')
Number of entries: 569
Number of features: 33
Number of missing values: 569
id diagnosis radius_mean texture_mean perimeter_mean area_mean \
0 842302 M 17.99 10.38 122.8 1001.0
1 842517 M 20.57 17.77 132.9 1326.0
smoothness_mean compactness_mean concavity_mean concave points_mean \
0 0.11840 0.27760 0.3001 0.14710
1 0.08474 0.07864 0.0869 0.07017
symmetry_mean fractal_dimension_mean radius_se texture_se perimeter_se \
0 0.2419 0.07871 1.0950 0.9053 8.589
1 0.1812 0.05667 0.5435 0.7339 3.398
area_se smoothness_se compactness_se concavity_se concave points_se \
0 153.40 0.006399 0.04904 0.05373 0.01587
1 74.08 0.005225 0.01308 0.01860 0.01340
symmetry_se fractal_dimension_se radius_worst texture_worst \
0 0.03003 0.006193 25.38 17.33
1 0.01389 0.003532 24.99 23.41
perimeter_worst area_worst smoothness_worst compactness_worst \
0 184.6 2019.0 0.1622 0.6656
1 158.8 1956.0 0.1238 0.1866
concavity_worst concave points_worst symmetry_worst \
0 0.7119 0.2654 0.4601
1 0.2416 0.1860 0.2750
fractal_dimension_worst Unnamed: 32
0 0.11890 NaN
1 0.08902 NaN
Laten we de laatste kolom laten vallen die alleen missende waarden bevat:
cancer_data = cancer_data.drop('Unnamed: 32', axis=1)
Hoeveel vrouwen, in %, hebben bevestigde kanker (een kwaadaardige borsttumor)?
round(cancer_data['diagnosis'].value_counts()*100/len(cancer_data)).convert_dtypes()
B 63
M 37
Name: diagnosis, dtype: Int64
37% van alle respondenten heeft borstkanker, dus de dataset is eigenlijk vrij in balans.
Aangezien de waarden van de variabele diagnosis categorisch zijn, moeten we ze encoden naar numerieke vorm voor verder gebruik in machine learning. Voordat we dat doen, splitsen we de data in de voorspellende features en de doelvariabele diagnosis:
X = cancer_data.iloc[:, 2:32].values
y = cancer_data.iloc[:, 1].values
# Encoding categorical data
from sklearn.preprocessing import LabelEncoder
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)
Nu maken we de train- en testsets en schalen vervolgens de features:
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
Voor het modelleren van onze data passen we de volgende algoritmen met hun standaardparameters toe: k-nearest neighbors (KNN) en logistische regressie:
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
# KNN
knn = KNeighborsClassifier()
knn.fit(X_train, y_train)
knn_predictions = knn.predict(X_test)
# Logistic regression
lr = LogisticRegression()
lr.fit(X_train, y_train)
lr_predictions = lr.predict(X_test)
We zagen eerder dat onze dataset vrij in balans is, dus we kunnen de accuracy score als evaluatiemetriek gebruiken om het nauwkeurigste model te identificeren:
from sklearn.metrics import accuracy_score
print(f'Accuracy scores:\n'
f'KNN model:\t\t {accuracy_score(y_test, knn_predictions):.3f}\n'
f'Logistic regression model: {accuracy_score(y_test, lr_predictions):.3f}')
Accuracy scores:
KNN model: 0.956
Logistic regression model: 0.974
Op basis van onze data presteert het model met logistische regressie het best bij het voorspellen van een kwaadaardige/goedaardige borsttumor voor een vrouw met een vastgestelde borstpathologie van welke aard dan ook.
Als mogelijke vervolgstappen, aangezien het algoritme voor logistische regressie geen kritieke parameters heeft om af te stemmen, kunnen we spelen met verschillende manieren van train/test-splitsen en/of diverse voorspellende modelleertechnieken.
Andere veelvoorkomende data-science-use-cases in de gezondheidszorg:
- monitoring van realtime data van wearables
- predictieve analytics
- analyse van medische beelden
- geneesmiddelenontdekking
- genetisch onderzoek
- virtuele assistenten
- beheer van klantdata
Data science in transport en logistiek
Logistiek is de organisatie van het proces van productlevering van het ene punt naar het andere, terwijl transport het daadwerkelijk vervoeren van klanten of goederen inhoudt. Afhankelijk van het bedrijfsprofiel (bijv. lunchbezorging, postdienst, internationale verzending, luchtvaartmaatschappijen en taxi- of busdiensten) kunnen databronnen bestaan uit roosters, urenstaten, routedetails, magazijnvoorraad, rapporten, contracten, overeenkomsten, juridische documenten en klantfeedback. De data zelf kan gestructureerd of ongestructureerd zijn en informatie bevatten over timing, reisroutes, routes, coördinaten, klantdata, productdetails, kosten en prijzen.
De efficiëntie van bedrijven in supplychain- en transportsectoren is niet altijd eenvoudig te bepalen en hangt af van tal van factoren: onvoorziene verkeersproblemen, kwaliteit van routes, weersomstandigheden, noodgevallen, schommelingen in brandstofprijzen, voorraadtekorten in magazijnen, technische schade, door veiligheidsproblemen veroorzaakte vertragingen bij zendingen, overheidsregels en sancties, en veel meer. Bovendien zijn er de laatste jaren veel nieuwe bedrijven bijgekomen en is de concurrentie in deze sector behoorlijk fel geworden. Om de concurrentie bij te benen en de operationele productiviteit te verhogen, is het daarom een must geworden voor elk logistiek-/transportbedrijf om big data te analyseren en om te zetten in betekenisvolle inzichten.
Hoe kan data science precies helpen in de transport- en logistieke sectoren? Hier is een verre van volledige lijst met mogelijke toepassingen:
- het volledige transportproces end-to-end volgen,
- alle activiteiten volledig automatiseren en transparant maken,
- op tijd leveren,
- route-optimalisatie,
- dynamische prijsstelling,
- voorraadbeheer van supplies,
- bederfelijke waar beschermen,
- de conditie van voertuigen monitoren,
- productienetwerken verbeteren,
- klantenservice verbeteren.
Use-case in transport en logistiek: de optimale positionering van taxivoertuigen bepalen
Uber Technologies Inc., of Uber, is een Amerikaans bedrijf dat diverse logistieke en transportdiensten aanbiedt. In deze casestudy gaan we GPS-data van Uber-ritten clusteren om de optimale positionering van taxivoertuigen te bepalen. Dit kan met name nuttig zijn voor de volgende doeleinden:
- Elke nieuw ritverzoek wordt toegewezen aan de dichtstbijzijnde cluster, zodat Uber de dichtstbijzijnde auto uit die cluster naar de locatie van de klant stuurt.
- Door de geïdentificeerde clusters te analyseren op hun werklast, eventueel per uur of dag van de week, kan Uber de auto's vooraf herverdelen en naar de meest strategische locaties sturen waar de vraag het grootst is.
- Afhankelijk van de vraag-/aanbodverhouding in verschillende clusters kan het bedrijf tarieven dynamisch aanpassen.
We gebruiken een dataset van FiveThirtyEight over Uber-ritten in New York in april 2014:
import pandas as pd
uber_data = pd.read_csv('uber-raw-data-apr14.csv')
print(f'Number of trips: {uber_data.shape[0]:,}\n\n'
f'{uber_data.head()}')
Number of trips: 564,516
Date/Time Lat Lon Base
0 4/1/2014 0:11:00 40.7690 -73.9549 B02512
1 4/1/2014 0:17:00 40.7267 -74.0345 B02512
2 4/1/2014 0:21:00 40.7316 -73.9873 B02512
3 4/1/2014 0:28:00 40.7588 -73.9776 B02512
4 4/1/2014 0:33:00 40.7594 -73.9722 B02512
Laten we alle ophaalpunten schematisch visualiseren, rekening houdend met het feit dat lengtegraad overeenkomt met de x-as en breedtegraad met de y-as:
import matplotlib.pyplot as plt
plt.scatter(uber_data.iloc[:, 2], uber_data.iloc[:, 1])
plt.show()
Om deze data te clusteren, gebruiken we een niet-gesuperviseerd machinelearningalgoritme genaamd k-means clustering. Het idee achter deze aanpak is om alle datapunten te verdelen in meerdere groepen met gelijke variantie. In feite voer je het aantal clusters n_clusters in (standaard 8) en wordt de data overeenkomstig gescheiden. Om het optimale aantal clusters te bepalen, wordt de grafische elbow-methode gebruikt. Die omvat de volgende stappen:
- Meerdere modellen trainen met een verschillend aantal clusters en de waarden van WCSS (Within Cluster Sum of Squares) voor elk verzamelen, oftewel de som van de gekwadrateerde afstanden van de observaties tot hun dichtstbijzijnde clustercentroid.
- De WCSS-waarden uitzetten tegen de corresponderende waarden van het aantal clusters.
- Het laagste aantal clusters selecteren waarbij een significante daling van WCSS optreedt.
from sklearn.cluster import KMeans
wcss = []
for i in range(1, 11):
kmeans = KMeans(n_clusters=i, random_state=1)
kmeans.fit(uber_data[['Lat', 'Lon']])
wcss.append(kmeans.inertia_)
plt.figure(figsize=(12, 5))
plt.plot(range(1, 11), wcss)
plt.title('Elbow Method', fontsize=25)
plt.xlabel('Number of clusters', fontsize=18)
plt.ylabel('WCSS', fontsize=18)
plt.xticks(ticks=list(range(1, 11)),
labels=['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'])
plt.show()

In ons geval lijkt 7 het meest geschikte aantal clusters. Laten we deze waarde gebruiken om een model te fitten en het clusternummer voor elk ophaalpunt te voorspellen. We illustreren de data nogmaals grafisch, dit keer met de locaties van de zeven clustercentroids erbij:
kmeans = KMeans(n_clusters=7, random_state=1)
kmeans.fit_predict(df[['Lat', 'Lon']])
plt.scatter(uber_data.iloc[:, 2], uber_data.iloc[:, 1])
plt.scatter(kmeans.cluster_centers_[:, 1], kmeans.cluster_centers_[:, 0], s=100, c='lime')
plt.show()
Nu halen we de exacte coördinaten op voor alle centroids en tonen die apart, zonder de data zelf:
centroids = pd.DataFrame(kmeans.cluster_centers_)
centroids.columns = ['Lat', 'Lon']
print(centroids)
plt.scatter(centroids['Lon'], centroids['Lat'])
plt.show()
Lat Lon
0 40.688588 -73.965694
1 40.765423 -73.973165
2 40.788001 -73.879858
3 40.656997 -73.780035
4 40.731074 -73.998644
5 40.700541 -74.201673
6 40.971229 -73.611288
Het zou illustratiever zijn om deze centroids op een kaart van New York City te tonen:
import folium
centroids_values = centroids.values.tolist()
nyc_map = folium.Map(location=[40.79659011772687, -73.87341741832425], zoom_start=50000)
for point in range(0, len(centroids_values)):
folium.Marker(centroids_values[point], popup=centroids_values[point]).add_to(nyc_map)
nyc_map

Met ons model kunnen we de dichtstbijzijnde cluster voorspellen voor elke locatie in New York die in geografische coördinaten is uitgedrukt. In de praktijk betekent dit dat Uber een beschikbare taxi vanaf de dichtstbijzijnde locatie stuurt en de klant sneller bedient.
Laten we de dichtstbijzijnde cluster bepalen voor het Lincoln Center for the Performing Arts in het stadsdeel Manhattan:
lincoln_center = [(40.7725, -73.9835)]
kmeans.predict(lincoln_center)
array([1])
En voor Howard Beach in het stadsdeel Queens:
howard_beach = [(40.6571, -73.8430)]
kmeans.predict(howard_beach)
array([3])
Als mogelijke vervolgstappen kunnen we overwegen om andere clusteringalgoritmen voor machine learning toe te passen, verschillende dataslices te analyseren (per uur/dag van de week/maand), de meest en minst belaste clusters te vinden of de relaties te achterhalen tussen de geïdentificeerde clusters en de variabele Base uit de dataframe.
Andere veelvoorkomende data-science-use-cases in transport en logistiek:
- dynamische prijsafstemming tussen vraag en aanbod
- vraagvoorspelling
- automatisering van handmatige processen
- zelfrijdende voertuigen
- zichtbaarheid in de supply chain
- schade-detectie
- magazijnbeheer
- sentimentanalyse van klanten
- chatbots voor klantenservice
Data science in telecom
In de afgelopen decennia zijn telecommunicatietechnologieën in een ongelooflijk tempo gegroeid en een nieuwe fase van hun ontwikkeling ingegaan. Tegenwoordig zijn we omringd door elektronische apparaten van allerlei soorten en veel mensen zijn letterlijk afhankelijk geworden van het internet, vooral van sociale netwerken en messengers. Soms wordt deze apparaatverslaving bekritiseerd omdat het echte face-to-facecommunicatie vervangt. Toch moeten we toegeven dat telecom ons leven aanzienlijk eenvoudiger heeft gemaakt, doordat we in een paar seconden met mensen over de hele wereld kunnen verbinden.
Dit gold des te meer tijdens de COVID-19-pandemie, toen veel bedrijven en scholen op afstand gingen werken of leren. In zo'n snel veranderende realiteit kregen de kwaliteit en soepelheid van digitale connectiviteit een ongekende betekenis in alle domeinen. Tijdens lockdowns moesten mensen veel vaker dan voorheen bellen en berichten sturen naar collega's, familie en vrienden. Al deze nieuwe tendensen leidden tot een enorme toename van het telecommunicatieverkeer, wat op zijn beurt resulteerde in het genereren van enorme hoeveelheden data in deze sector.
Het toepassen van data-sciencemethoden op de verzamelde data kan de telecomindustrie op veel manieren helpen:
- processen stroomlijnen,
- het netwerk optimaliseren,
- spam filteren,
- datatransmissies verbeteren,
- realtime analytics uitvoeren,
- efficiënte bedrijfsstrategieën ontwikkelen,
- succesvolle marketingcampagnes creëren,
- omzet verhogen.
Laten we een veelvoorkomende data-sciencetaak in telecom nader bekijken, namelijk het detecteren en filteren van ongewenste berichten.
Use-case in telecom: een spamfilter bouwen
Spamfiltering is een essentiële functie van alle moderne schriftelijke communicatiekanalen, omdat het ons beschermt tegen de dagelijkse stroom van e-mails die proberen ons geld afhandig te maken. Technisch gezien is het opnieuw een voorbeeld van een classificatieprobleem: op basis van historische data wordt elk nieuw inkomend bericht gelabeld als ham (oftewel een normaal bericht) en komt het direct bij de ontvanger aan, of als spam en wordt het geblokkeerd of naar de spambox gestuurd.
Een populair gesuperviseerd machinelearningalgoritme voor dit doel is de Naive Bayes-classifier. Die is gebaseerd op de gelijknamige stelling uit de kansrekening, terwijl "naive" staat voor de onderliggende aanname dat alle woorden in elk bericht wederzijds onafhankelijk zijn. Deze aanname is niet helemaal correct, omdat die het onvermijdelijk bestaan van natuurlijke woordrelaties en context negeert. Toch blijkt deze aanpak in de meeste tekstclassificatietaken met weinig data goed te werken en nauwkeurige voorspellingen te doen.
Er zijn verschillende varianten van de Naive Bayes-classifier, elk met eigen toepassingsgevallen: multinomiaal, Bernoulli, Gaussisch en flexible Bayes. Het beste type voor onze casus (spamdetectie) is de multinomiale Naive Bayes-classifier. Die is gebaseerd op discrete frequentietellingen van categorische of continue features die woordtellingen per bericht representeren.
Laten we multinomiale Naive Bayes-spamfiltering toepassen op de SMS Spam Collection Data Set van de UCI Machine Learning Repository.
import pandas as pd
sms_data = pd.read_csv('SMSSpamCollection', sep='\t', header=None, names=['Label', 'SMS'])
print(f'Number of messages: {sms_data.shape[0]:,}\n\n'
f'{sms_data.head()}')
Number of messages: 5,572
Label SMS
0 ham Go until jurong point, crazy.. Available only ...
1 ham Ok lar... Joking wif u oni...
2 spam Free entry in 2 a wkly comp to win FA Cup fina...
3 ham U dun say so early hor... U c already then say...
4 ham Nah I don't think he goes to usf, he lives aro...
Er zijn 5.572 door mensen geclassificeerde berichten. Hoeveel daarvan (in %) zijn spam?
round(sms_data['Label'].value_counts()*100/len(sms_data)).convert_dtypes()
ham 87
spam 13
Name: Label, dtype: Int64
13% van de sms'jes is handmatig als spam aangemerkt.
Om de data voor te bereiden op de multinomiale Naive Bayes-classificatie, moeten we eerst de volgende stappen doorlopen:
- Labels van string naar numeriek formaat encoden. In ons geval zijn de labels binair, dus encoden we ze als 0/1.
- De voorspellende en doelvariabelen extraheren.
- De data splitsen in train- en testsets
- Strings uit de SMS-kolom van de voorspellende train- en testsets vectoriseren om CSR-matrices (compressed sparse row) te verkrijgen.
De vierde stap vraagt wat meer toelichting. We maken hier een matrixobject aan, fitten dat met het woordenboek (alle unieke woorden uit alle berichten van de voorspellende trainset met hun frequenties) en transformeren vervolgens de voorspellende train- en testsets naar matrices. Het resultaat zijn twee matrices voor de voorspellende train- en testsets, waarbij de kolommen overeenkomen met elk uniek woord uit alle berichten van de voorspellende trainset, de rijen met de corresponderende berichten zelf en de celwaarden met de woordfrequentie per bericht.
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
# Encoding labels
sms_data = sms_data.replace('ham', 0).replace('spam', 1)
X = sms_data['SMS'].values
y = sms_data['Label'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
# Vectorizing strings from the 'SMS' column
cv = CountVectorizer(max_df=0.95)
cv.fit(X_train)
X_train_csr_matrix = cv.transform(X_train)
X_test_csr_matrix = cv.transform(X_test)
Vervolgens bouwen we een multinomiale Naive Bayes-classifier met de standaardparameters en controleren we de nauwkeurigheid:
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, f1_score
clf = MultinomialNB()
clf.fit(X_train_csr_matrix, y_train)
predictions = clf.predict(X_test_csr_matrix)
print(f'Model accuracy:\n'
f'Accuracy score: {accuracy_score(y_test, predictions):.3f}\n'
f'F1-score: {f1_score(y_test, predictions):.3f}\n')
Model accuracy:
Accuracy score: 0.990
F1-score: 0.962
Het resultaat is een zeer nauwkeurig spamfilter.
Mogelijke vervolgstappen hier zijn het proberen van andere methoden van train/test-splitsen, het verbeteren van het vectorisatieproces door sommige van de vele parameters af te stemmen (bijv. de afkapwaarde voor te frequente woorden in zowel spam- als ham-berichten) en het controleren van de zeer zeldzame gevallen waarin de classifier een bericht verkeerd detecteerde en proberen te begrijpen waarom dat gebeurde. Daarnaast kunnen we de meest voorkomende woorden in spam- en ham-berichten visualiseren met bijvoorbeeld een wordcloud (na voorafgaande datacleaning en het uitsluiten van stopwoorden of weinig informatieve woorden). Tot slot kunnen we andere machine- of deep-learningalgoritmen toepassen (support vector machines, decision trees, neurale netwerken) en de resultaten vergelijken met de Naive Bayes-aanpak.
Andere veelvoorkomende data-science-use-cases in telecom:
- klantsegmentatie
- productontwikkeling
- analyse van belverkeersgegevens (CDR)
- aanbevelingssystemen
- churnvoorspelling
- gerichte marketing
- fraudedetectie
- netwerkbeheer en -optimalisatie
- verhoogde netwerkbeveiliging
- prijsoptimalisatie
- voorspelling van customer lifetime value
Data-science-casestudy's: cursussen
We hebben inmiddels een lange weg afgelegd en tal van toepassingen van data science in verschillende velden in detail verkend. Als je nu zin hebt gekregen om meer data-science-use-cases te leren op basis van real-world datasets en je nieuwe kennis en technische vaardigheden te kunnen toepassen om praktische taken in je eigen domein op te lossen, dan vind je de volgende, beginnersvriendelijke, korte cursussen over diverse data-science-casestudy's misschien nuttig:
- Casestudy: schoolbudgettering met machine learning in Python. In deze cursus, gebaseerd op een casestudy uit een machinelearningcompetitie op DrivenData, verken je een probleem rond budgettering in schooldistricten en hoe je het voor scholen makkelijker en sneller maakt om hun uitgaven met anderen te vergelijken. Met enkele technieken uit natural language processing bereid je de schoolbudgetten voor en bouw je een model dat hun items automatisch classificeert, te beginnen met een eenvoudige versie en geleidelijk naar een geavanceerdere. Bovendien kun je de oplossing van de winnaar van de competitie bekijken en analyseren, evenals de inzendingen van andere deelnemers.
- Marketingcampagnes analyseren met pandas. Pandas is de populairste Python-bibliotheek en stevige skills met deze toolkit zijn een must voor elke data scientist. In deze zeer praktische cursus bouw je voort op Python- en pandas-basisprincipes (nieuwe kolommen toevoegen, datasets mergen/slicen, werken met datumkolommen, resultaten visualiseren in matplotlib) met een fictieve marketingdataset van een online abonnementsdienst. Je oefent met het vertalen van typische marketingvragen naar meetbare waarden. Enkele vragen die je beantwoordt zijn: "Hoe presteerde deze campagne?", "Waarom presteert een bepaald kanaal ondermaats?", "Welk kanaal verwijst de meeste abonnees?", enz.
- US Census-data analyseren in Python. In deze cursus leer je hoe je eenvoudig navigeert door de tienjaarlijkse Census en de jaarlijkse American Community Survey en er diverse demografische en sociaaleconomische data uithaalt, zoals huishoudinkomen, woon-werkverkeer, ras en gezinssamenstelling. Je gebruikt Python om data voor verschillende geografische niveaus op te vragen via de Census API en de pandas-bibliotheek om de verzamelde data te bewerken en er betekenisvolle inzichten uit te halen. Daarnaast oefen je met mapping met de geopandas-bibliotheek.
- Casestudy: verkennende data-analyse in R. Deze korte cursus is ideaal als je al enige basiskennis hebt van datamanipulatie en visualisatie in R. Met het lesmateriaal zet je je vaardigheden in op een echte dataset om het historische stemgedrag in de Algemene Vergadering van de Verenigde Naties te onderzoeken. Je analyseert met name trends in stemgedrag tussen landen, door de tijd en tussen internationale thema's. Deze casestudy stelt je in staat om een verkennende data-analyse van begin tot eind uit te voeren, meer te oefenen met de pakketten dplyr en ggplot2 en nieuwe skills te leren.
- HR-analytics: werknemersdata verkennen in R. R staat bekend als beter geschikt voor statistische analyse dan Python. In deze cursus benut je dat voordeel van R om statistische toetsen uit te voeren en data te manipuleren en te visualiseren aan de hand van een reeks HR-analytics-casestudy's. Data-sciencetechnieken deden relatief recent hun intrede in HR. Tegenwoordig vormen ze echter een veelbelovende richting, omdat veel bedrijven steeds meer op hun HR-afdelingen rekenen voor bruikbare inzichten en aanbevelingen op basis van hun medewerkersdatabase.
- Data-gedreven besluitvorming in SQL. In deze cursus leer je hoe je SQL gebruikt om besluitvorming te ondersteunen en resultaten te rapporteren aan het management. De casestudy richt zich op een online filmbibliotheek met een database over klantgegevens, filmratings, achtergrondinformatie over acteurs, enzovoort. Enkele taken zijn het toepassen van SQL-queries om klantvoorkeuren, klantbetrokkenheid en verkoopontwikkeling te bestuderen. Je leert over SQL-extensies voor online analytische verwerking die helpen om kerninzichten uit complexe multidimensionale data te halen.
Of je nu wilt uitgroeien tot een expert op hoog niveau in data science, of gewoon nuttige codeervaardigheden wilt leren om waardevolle, datagedreven inzichten uit je eigen studiegebied te halen, de bovenstaande bronnen zijn een uitstekend startpunt.
Conclusie
Samenvattend hebben we in dit artikel onderzocht wat data science is vanuit verschillende invalshoeken, hoe het verschilt van data-analyse, in welke domeinen het toepasbaar is, wat een data-science-use-case is en een algemene routekaart om die succesvol op te lossen. We bespraken precies hoe data science nuttig kan zijn voor real-life taken in enkele veelgevraagde sectoren. Terwijl we veel bestaande en potentiële toepassingen schetsten, focusten we op de meest voorkomende use-cases in elk van die populaire velden en lieten we zien hoe je ze oplost met data-science- en data-analytics-algoritmen. Wil je meer lezen over use-cases in andere sectoren, bekijk dan onze artikelen over use-cases in de bankensector, marketing en sales. Tot slot bekeken we enkele nuttige online cursussen om dieper in te gaan op andere data-science-casestudy's.
Nog een laatste, interessante observatie: geen van de sectoren die we in dit stuk hebben besproken is gloednieuw. Sommige ervan, zoals geneeskunde en verkoop, bestaan zelfs al eeuwen. Gedurende hun hele geschiedenis, lang voordat ons nieuwe tijdperk van wereldwijde digitalisering begon, werden in die sectoren ook data in een of andere vorm verzameld; opgeschreven in boeken en documenten en bewaard in archieven en bibliotheken. Wat de laatste jaren met de komst van nieuwe technologieën echt ingrijpend is veranderd, is het fundamentele begrip van het enorme potentieel dat in alle data schuilt, en het cruciale belang van het correct registreren, verzamelen en opslaan ervan. Door die inspanningen te leveren en datasystemen continu te verbeteren, is het mogelijk geworden om in alle sectoren big data te accumuleren voor verdere analyse en forecasting.



