Leerpad
Veel sectoren en organisaties gebruiken artificial intelligence en machinelearningmodellen om onderbouwde beslissingen te nemen. Maar naarmate deze technologieën verder evolueren en complexer worden, wordt het voor mensen moeilijker om het beslisproces van die AI-oplossingen te begrijpen en te reconstrueren. Zo’n uitdaging kun je aanpakken met explainable AI (afgekort XAI).
Hier verkennen we wat explainable AI is, lichten we het belang ervan uit en illustreren we de doelstellingen en voordelen. In het tweede deel geven we een overzicht en de Python-implementatie van twee populaire surrogaatmodellen, LIME en SHAP, die kunnen helpen bij het interpreteren van machinelearningmodellen.
Wat is Explainable AI (XAI)?
Explainable AI verwijst naar een set processen en methoden die tot doel hebben een duidelijke, voor mensen begrijpelijke uitleg te geven voor de beslissingen die door AI- en machinelearningmodellen worden gegenereerd.
Door een uitlegbaarheidslaag in deze modellen te integreren, kunnen Data Scientists en machinelearningpraktijkmensen betrouwbaardere en transparantere systemen bouwen die een breed scala aan stakeholders ondersteunen, zoals ontwikkelaars, toezichthouders en eindgebruikers.
Vertrouwen opbouwen met Explainable AI
Hier zijn enkele XAI-principes die kunnen bijdragen aan het opbouwen van vertrouwen:
- Transparantie. Zorgen dat stakeholders het beslisproces van de modellen begrijpen.
- Eerlijkheid. Zorgen dat de beslissingen van de modellen voor iedereen eerlijk zijn, inclusief mensen in beschermde groepen (ras, religie, gender, beperking, etniciteit).
- Vertrouwen. Het vertrouwen van menselijke gebruikers in het AI-systeem beoordelen.
- Robuustheid. Bestand zijn tegen veranderingen in inputdata of modelparameters en consistente, betrouwbare prestaties behouden, zelfs bij onzekerheid of onverwachte situaties.
- Privacy. De bescherming van gevoelige gebruikersinformatie garanderen.
- Interpretabiliteit. Menselijk begrijpelijke verklaringen geven voor hun voorspellingen en uitkomsten.

Het implementeren van explainable AI heeft verschillende voordelen. Voor besluitvormers en andere stakeholders biedt het een helder inzicht in de redenering achter door AI aangestuurde beslissingen, waardoor ze beter geïnformeerde keuzes kunnen maken. Het helpt ook om mogelijke biases of fouten in de modellen te identificeren, wat leidt tot nauwkeurigere en eerlijkere uitkomsten.
Voorbeelden van Explainable AI
Er zijn grofweg twee categorieën modeluitlegbaarheid: modelspecifieke methoden en model-agnostische methoden. In deze sectie bespreken we het verschil tussen beide, met specifieke focus op de model-agnostische methoden.
Beide technieken kunnen waardevolle inzichten bieden in het interne functioneren van machinelearningmodellen, terwijl ze ervoor zorgen dat de modellen effectief en verantwoord zijn.
Om deze tools beter te illustreren, gebruiken we de diabetesdataset van Kaggle. Eerst bouwen we een eenvoudige classifier en vervolgens implementeren we de uitlegbaarheid. De volledige broncode is beschikbaar in deze DataLab-workbook.
Classifier bouwen
Er wordt een Random Forest-classifier gebouwd om diabetesuitkomsten te voorspellen met de diabetesdataset. De code is opgedeeld in meerdere stappen: (1) relevante libraries importeren, (2) trainings- en testdatasets maken, (3) het model bouwen en (4) de prestatiestatistieken rapporteren via het classificatierapport.
# Load useful libraries
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from sklearn.metrics import classification_report
# Separate Features and Target Variables
X = diabetes_data.drop(columns='Outcome')
y = diabetes_data['Outcome']
# Create Train & Test Data
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.3,
stratify =y,
random_state = 13)
# Build the model
rf_clf = RandomForestClassifier(max_features=2, n_estimators =100 ,bootstrap = True)
rf_clf.fit(X_train, y_train)
# Make prediction on the testing data
y_pred = rf_clf.predict(X_test)
# Classification Report
print(classification_report(y_pred, y_test))
De laatste print-opdracht genereert het volgende rapport:

De random forest-classifier levert een behoorlijke prestatie bij het voorspellen van diabetesuitkomsten, met duidelijk ruimte voor verbetering met andere modellen.
Nu kunnen we de uitlegbaarheidslaag in dit model integreren om meer inzicht te geven in de voorspellingen. De volgende sectie richt zich op de twee brede categorieën van modeluitlegbaarheid: modelspecifieke methoden en model-agnostische methoden.
Ons artikel Classificatie in machine learning: een introductie helpt je meer te leren over classificatie in machine learning: wat het is, hoe het wordt gebruikt en enkele voorbeelden van classificatie-algoritmen.
Model-agnostische methoden
Deze methoden zijn toepasbaar op elk machinelearningmodel, ongeacht de structuur of het type. Ze richten zich op het analyseren van de input-outputkoppeling van features. In deze sectie introduceren en bespreken we LIME en SHAP, twee veelgebruikte surrogaatmodellen.
SHAP
Dit staat voor SHapley Additive exPlanations. Deze methode wil de voorspelling van een instantie/observatie uitleggen door de bijdrage van elke feature aan de voorspelling te berekenen. Je kunt het installeren met de volgende pip-opdracht.
!pip install shap
Na de installatie:
- Wordt de hoofdmodule shap geïmporteerd.
- Wordt de TreeExplainer-klasse gebruikt om boomgebaseerde modellen uit te leggen, samen met initjs.
- De functie shape.initjs() initialiseert de JavaScript-code die nodig is om SHAP-visualisaties in een jupyter-notebookomgeving weer te geven.
- Tot slot, na het instantiëren van de TreeExplainer-klasse met de random forest-classifier, worden de shap-waarden berekend voor elke feature van elke instantie in de testdataset.
import shap
import matplotlib.pyplot as plt
# load JS visualization code to notebook
shap.initjs()
# Create the explainer
explainer = shap.TreeExplainer(rf_clf)
shap_values = explainer.shap_values(X_test)
SHAP biedt een reeks visualisatietools om de uitlegbaarheid van modellen te vergroten. In de volgende sectie bespreken we er drie: (1) variabelebelang met de summary-plot, (2) summary-plot voor een specifiek target en (3) de afhankelijkheidsplot.
Variabelebelang met summary-plot
In deze plot worden features gerangschikt op hun gemiddelde SHAP-waarden: de belangrijkste bovenaan en de minst belangrijke onderaan, met behulp van de functie summary_plot(). Dit helpt om de impact van elke feature op de voorspellingen van het model te begrijpen.
print("Variable Importance Plot - Global Interpretation")
figure = plt.figure()
shap.summary_plot(shap_values, X_test)

Dit kun je uit de bovenstaande grafiek afleiden:
- We zien dat rood en blauw elk ongeveer de helft van de horizontale rechthoeken per klasse innemen. Dit betekent dat elke feature een vergelijkbare impact heeft op de classificatie van zowel diabetesgevallen (label=1) als niet-diabetesgevallen (label=0).
- Glucose, Age en BMI zijn echter de drie features met de meeste voorspellende kracht.
- Aan de andere kant dragen Pregnancies, SkinThicknes, Insulin en BloodPressure minder bij dan de eerste drie.
Summary-plot voor een specifiek label
Met deze aanpak krijg je een meer gedetailleerd beeld van de impact van elke feature op een specifieke uitkomst (label).
In het onderstaande voorbeeld wordt shap_values[1] gebruikt om de SHAP-waarden te tonen voor instanties die als label 1 (diabetes) zijn geclassificeerd.
shap.summary_plot(shap_values[1], X_test)

Uit de bovenstaande grafiek:
- De y-as toont de features, gerangschikt op hun gemiddelde absolute SHAP-waarden, vergelijkbaar met de grafiek in afbeelding 2.
- De x-as toont SHAP-waarden. Positieve waarden voor een bepaalde feature duwen de voorspelling van het model richting het onderzochte label (label=1). Negatieve waarden duwen richting de tegenovergestelde klasse (label=0).
- Iemand met een hoge glucosewaarde (rode punten) heeft waarschijnlijk diabetes (positieve uitkomst), terwijl een lage glucosewaarde juist niet tot een diabetesdiagnose leidt.
- Evenzo hebben oudere patiënten vaker kans op een diabetesdiagnose. Het model lijkt echter onzekerder over de diagnose bij jongere patiënten.
Een manier om met deze ambiguïteit voor de feature Age om te gaan, is de afhankelijkheidsplot te gebruiken voor meer inzicht.
Afhankelijkheidsplot
In tegenstelling tot summary-plots laten afhankelijkheidsplots de relatie zien tussen een specifieke feature en de voorspelde uitkomst voor elke instantie in de data. Deze analyse wordt om meerdere redenen uitgevoerd en is niet beperkt tot het verkrijgen van meer detail; ze helpt ook het belang van de geanalyseerde feature te valideren door de bevindingen uit de summary-plots of andere globale feature-importance-maatstaven te bevestigen of te betwisten.

De afhankelijkheidsplot laat zien dat patiënten jonger dan 30 een lager risico hebben op een diabetesdiagnose. Daarentegen hebben mensen ouder dan 30 een grotere kans op een diabetesdiagnose.
LIME
Local Interpretable Model-agnostic Explanations (kortweg LIME). In plaats van een globaal begrip van het model op de volledige dataset te geven, richt LIME zich op het uitleggen van de voorspelling van het model voor individuele instanties.
De LIME-explainer kun je in twee hoofdstappen opzetten: (1) de lime-module importeren en (2) de explainer fitten met de trainingsdata en de targets. In deze fase wordt de modus ingesteld op classification, wat overeenkomt met de uitgevoerde taak.
# Import the LimeTabularExplainer module
from lime.lime_tabular import LimeTabularExplainer
# Get the class names
class_names = ['Has diabetes', 'No diabetes']
# Get the feature names
feature_names = list(X_train.columns)
# Fit the Explainer on the training data set using the LimeTabularExplainer
explainer = LimeTabularExplainer(X_train.values, feature_names =
feature_names,
class_names = class_names,
mode = 'classification')
De onderstaande code genereert en toont een LIME-uitleg voor de 8e instantie in de testdata met behulp van de random forest-classifier, waarbij de uiteindelijke featurebijdrage in tabelvorm wordt gepresenteerd.

Het resultaat bevat van links naar rechts drie hoofdonderdelen: (1) de voorspellingen van het model, (2) de bijdragen van features en (3) de werkelijke waarde per feature.
We zien dat voor de achtste patiënt wordt voorspeld dat hij/zij diabetes heeft, met 72% zekerheid. De redenen die het model tot deze beslissing brachten, zijn:
- Het glucosegehalte van de patiënt is hoger dan 99.
- De bloeddruk is hoger dan 70.
Die waarden zijn te verifiëren in de tabel rechts.
Modelspecifieke methoden
In tegenstelling tot model-agnostische methoden zijn deze alleen toepasbaar op een beperkte categorie modellen. Enkele daarvan zijn lineaire regressie, beslissingsbomen en uitlegbaarheid voor neurale netwerken. Verschillende technieken, zoals DeepLIFT, Grad-CAM of Integrated Gradients, kunnen worden gebruikt om deep-learningmodellen uit te leggen.
Bij gebruik van een beslissingsboommodel kan met de functie plot_tree uit scikit-learn een grafische boom worden gegenereerd om het beslisproces van het model van boven naar beneden uit te leggen; hieronder staat een illustratie.
Het artikel Deep Learning - A Tutorial for Data Scientists beantwoordt de meest gestelde vragen over deep learning en verkent verschillende aspecten met praktijkvoorbeelden.
Laten we een decision tree-classifier trainen met specifieke hyperparameters zoals max_depth en min_samples_leaf voordat we de grafische boom genereren.
from sklearn.tree import DecisionTreeClassifier, plot_tree
dt_clf = DecisionTreeClassifier(max_depth = 3, min_samples_leaf = 2)
dt_clf.fit(X_train, y_train)
# Predict on the test data and evaluate the model
y_pred = dt_clf.predict(X_test)
print(classification_report(y_pred, y_test))
De vorige print-opdracht genereert het volgende classificatierapport van het model.

En het beslisproces van het model kan met onderstaande code worden gevisualiseerd:
fig = plt.figure(figsize=(25,20))
_ = plot_tree(dt_clf,
feature_names = feature_names,
class_names = class_names,
filled=True)

Door de boomstructuur te bekijken, kun je het beslisproces voor elke sample volgen, wat inzicht geeft in het gedrag en de uitlegbaarheid van het model.
In de bovenstaande plot staat elk knooppunt voor een beslissing of splitsing op basis van een specifieke featurewaarde. Voor elk intern knooppunt toont de plot de gebruikte feature voor de splitsing, de grenswaarde, de Gini-onzuiverheid en het aantal samples dat dat knooppunt bereikt.
In de bladknooppunten worden de meerderheidsklasse en het aantal samples weergegeven. Ook geven de kleuren in de knooppunten de meerderheidsklasse aan, waarbij de kleurintensiteit de proportie van de dominante klasse binnen dat knooppunt weergeeft. Zo komen de oranje knooppunten op de linker tak overeen met het diabeteslabel, terwijl de blauwe knooppunten overeenkomen met geen diabetes.
Uitdagingen van XAI en toekomstige perspectieven
Naarmate AI-technologie blijft vooruitgaan en verfijnder wordt, wordt het steeds uitdagender om de algoritmen te begrijpen en te interpreteren om te achterhalen hoe ze uitkomsten produceren. Daardoor blijven onderzoekers nieuwe benaderingen verkennen en bestaande verbeteren.
Veel explainable-AI-modellen vereisen vereenvoudiging van het onderliggende model, wat leidt tot verlies aan voorspellende prestaties. Daarnaast dekken huidige uitlegbaarheidsmethoden mogelijk niet alle aspecten van het beslisproces, wat het nut van de uitleg kan beperken, vooral bij complexere modellen.
Nieuw onderzoek richt zich op het verbeteren van XAI-technieken door effectievere algoritmen te ontwikkelen die ethische kwesties aanpakken en tegelijkertijd gebruiksvriendelijke uitleg bieden.
Tot slot is de kans groot dat we dankzij lopend onderzoek meer geavanceerde methoden zullen krijgen die transparantie, betrouwbaarheid en eerlijkheid bevorderen.
Conclusie
Dit artikel gaf een goed overzicht van wat explainable AI is en enkele principes die bijdragen aan het opbouwen van vertrouwen en Data Scientists en andere stakeholders relevante vaardigheden kunnen bieden om betrouwbare modellen te bouwen die helpen bij actiegerichte beslissingen.
We behandelden ook model-agnostische en modelspecifieke methoden, met speciale focus op de eerste, met LIME en SHAP. Bovendien zijn de uitdagingen, beperkingen en enkele onderzoeksgebieden rond explainable AI belicht.
Wil je meer weten over de ethiek achter dit soort technologie? Bekijk dan onze cursus Introduction to Data Ethics, die de principes van data-ethiek behandelt, de relatie met AI-ethiek en de kenmerken in de verschillende fasen van de datalevenscyclus.
Een veelzijdige data scientist die graag zijn kennis deelt en iets terugdoet voor anderen. Zoumana is YouTube-contentmaker en een toonaangevende techschrijver op Medium. Hij haalt plezier uit spreken, coderen en lesgeven. Zoumana heeft twee masterdiploma’s: het eerste in informatica met een focus op machine learning uit Parijs, Frankrijk, en het tweede in data science van Texas Tech University in de VS. Zijn loopbaan begon als softwareontwikkelaar bij Groupe OPEN in Frankrijk. Daarna stapte hij over naar IBM als machine learning-consultant, waar hij end-to-end AI-oplossingen ontwikkelde voor verzekeringsmaatschappijen. Zoumana sloot zich aan bij Axionable, de eerste Sustainable AI-startup met vestigingen in Parijs en Montreal. Daar werkte hij als data scientist en bouwde hij AI-producten—voornamelijk NLP-usecases—voor klanten in Frankrijk, Montreal, Singapore en Zwitserland. Daarnaast wijdde hij 5% van zijn tijd aan research & development. Momenteel werkt hij als senior data scientist bij IFC – the World Bank Group.

