SHAP-waarden: globale en lokale feature importance
U berekent SHAP-waarden voor een gradient-boostingmodel, maakt beeswarm- en staafdiagrammen met samenvattingen en legt één voorspelling uit aan een niet-technische belanghebbende.
SHAP-waarden: globale en lokale feature importance is een gratis Machine Learning Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Machine Learning Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Machine Learning Academy bevat in totaal 4 lessen.
Waarom uitlegbaarheid van modellen belangrijk is
Uitlegbaarheid is het vermogen om te begrijpen waarom een model een specifieke voorspelling heeft gedaan. In domeinen met grote gevolgen, zoals kredietverlening, gezondheidszorg en werving, eisen toezichthouders en gebruikers uitleg — niet alleen nauwkeurige voorspellingen. SHAP (SHapley Additive exPlanations) biedt een wiskundig gefundeerd raamwerk dat gebaseerd is op de coöperatieve speltheorie en deze uitleg voor elk model kan leveren.
Shapley-waarden: de oorsprong in de speltheorie
SHAP-waarden zijn ontleend aan Shapley-waarden uit de coöperatieve speltheorie, waarin spelers (kenmerken) samenwerken om een uitkomst (voorspelling) te produceren. Elk kenmerk krijgt een eerlijk deel van de erkenning door de marginale bijdrage ervan over alle mogelijke volgordes van kenmerken te middelen. Daarmee is SHAP de enige additieve toeschrijvingsmethode die voldoet aan de axioma's van efficiëntie, symmetrie, dummy en additiviteit.
SHAP installeren en importeren
De bibliotheek shap ondersteunt boommodellen, neurale netwerken en elk black-boxmodel. Installeer de bibliotheek met pip install shap en importeer haar naast uw getrainde model. De uitleggers van SHAP houden rekening met het modeltype: TreeExplainer voor gradient boosting en random forests geeft exacte waarden in O(T·D²)-tijd, veel sneller dan de naïeve berekening van Shapley-waarden met exponentiële tijdscomplexiteit.
import shap
import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
data = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
data.data, data.target, test_size=0.2, random_state=42
)
model = xgb.XGBClassifier(n_estimators=100, use_label_encoder=False, eval_metric='logloss')
model.fit(X_train, y_train)
explainer = shap.TreeExplainer(model)SHAP-waarden voor de testset berekenen
Roep explainer.shap_values(X_test) aan om een matrix te produceren waarin elke rij een voorbeeld is en elke kolom een kenmerk. De SHAP-waarde voor kenmerk j in voorbeeld i staat voor de bijdrage van kenmerk j aan het wegduwen van de voorspelling van de verwachte basiswaarde af. Positieve waarden duwen de voorspelling richting de positieve klasse; negatieve waarden duwen haar richting de negatieve klasse.
shap_values = explainer.shap_values(X_test)
print('SHAP values shape:', shap_values.shape) # (n_samples, n_features)
print('Base value (expected prediction):', explainer.expected_value)
print('First sample SHAP values:', shap_values[0])Globale belangrijkheid: staafdiagram
Globale kenmerkbelangrijkheid vat samen welke kenmerken het belangrijkst zijn voor alle voorspellingen samen. De SHAP-summary_plot in de staafmodus toont de gemiddelde absolute SHAP-waarde per kenmerk en rangschikt ze van belangrijk naar minder belangrijk. Dit vervangt de naïeve ingebouwde kenmerkbelangrijkheid, die alleen het aantal splitsingen telt en daardoor bevooroordeeld is ten gunste van kenmerken met veel mogelijke waarden.
import matplotlib.pyplot as plt
# Bar plot: mean |SHAP| per feature
shap.summary_plot(shap_values, X_test,
feature_names=data.feature_names,
plot_type='bar')
plt.tight_layout()
plt.savefig('shap_bar.png', dpi=150)Globale belangrijkheid: zwermdiagram
Het zwermdiagram (de standaardmodus van summary_plot) is rijker dan een staafdiagram: elke stip staat voor één voorbeeld en krijgt een kleur op basis van de kenmerkwaarde (rood = hoog, blauw = laag). De x-as toont de SHAP-waarde, zodat je niet alleen ziet welke kenmerken belangrijk zijn, maar ook in welke richting een hoge of lage kenmerkwaarde de voorspellingen duwt. Zo worden niet-lineaire effecten en interactie-effecten in één oogopslag zichtbaar.
shap.summary_plot(shap_values, X_test,
feature_names=data.feature_names)
# Dots to the right = positive contribution to predicted class
# Red dots far right = high feature value strongly increases predictionLokale uitleg: krachtendiagram
Een krachtendiagram legt één voorspelling uit. Het toont de basiswaarde links en de uiteindelijke voorspelling rechts, met kenmerken als pijlen die de uitvoer omhoog (rood) of omlaag (blauw) duwen. De breedte van elke pijl is evenredig aan de SHAP-waarde van het kenmerk. Dit is de uitleg die je zou laten zien aan een kredietmedewerker die vraagt: 'waarom is deze aanvraag afgewezen?'
# Explain the first test sample
i = 0
shap.force_plot(
explainer.expected_value,
shap_values[i],
X_test[i],
feature_names=data.feature_names,
matplotlib=True
)Lokale uitleg: watervaldiagram
Het watervaldiagram is een overzichtelijker alternatief voor het krachtendiagram voor één voorbeeld. Het stapelt SHAP-bijdragen verticaal vanaf de basiswaarde en toont de bijdrage van elk kenmerk als een deel van een balk. Positieve bijdragen zijn rood en duwen de waarde omhoog; negatieve bijdragen zijn blauw en trekken haar omlaag. Het totaal van de uiteindelijke stapel is gelijk aan de onbewerkte uitvoer van het model voor dat voorbeeld.
import shap
explanation = shap.Explanation(
values=shap_values[0],
base_values=explainer.expected_value,
data=X_test[0],
feature_names=list(data.feature_names)
)
shap.waterfall_plot(explanation)Afhankelijkheidsdiagram: kenmerkinteracties
Een SHAP-afhankelijkheidsdiagram toont hoe de SHAP-waarde van één kenmerk verandert wanneer de onbewerkte waarde ervan verandert. De punten krijgen een kleur op basis van een tweede kenmerk om interacties zichtbaar te maken. Als je bijvoorbeeld 'worst radius' uitzet met een kleur voor 'mean texture', zie je of het effect van radius afhangt van texture. Dit gaat verder dan gewone partiële-afhankelijkheidsdiagrammen, doordat het vanzelf rekening houdt met alle kenmerkinteracties.
shap.dependence_plot(
'worst radius', # feature to plot on x-axis
shap_values,
X_test,
feature_names=list(data.feature_names),
interaction_index='mean texture' # colour by this feature
)SHAP met elk model: KernelExplainer
Wanneer het model een black box is (SVM, neuraal netwerk of een willekeurige sklearn-estimator), gebruik je shap.KernelExplainer. Deze benadert Shapley-waarden door coalities te bemonsteren en lokaal een gewogen lineair model te fitten. De methode is modelonafhankelijk, maar trager dan TreeExplainer. Geef een samenvatting van een achtergrondgegevensset op (bijvoorbeeld K-Means-centroiden) om berekeningen op grote gegevenssets te versnellen.
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
import shap
import numpy as np
pipeline = Pipeline([('scaler', StandardScaler()), ('svm', SVC(probability=True))])
pipeline.fit(X_train, y_train)
# Use 50 background samples for speed
background = shap.kmeans(X_train, 50)
explainer_k = shap.KernelExplainer(pipeline.predict_proba, background)
shap_vals_k = explainer_k.shap_values(X_test[:10]) # Explain 10 samplesValidatie: de som van SHAP-waarden is de voorspelling
Een belangrijke eigenschap van SHAP is efficiëntie: de som van alle SHAP-waarden voor een voorbeeld plus de basiswaarde moet gelijk zijn aan de onbewerkte uitvoer van het model. Door deze controle uit te voeren, bevestig je dat de uitlegger correct werkt. Elke afwijking wijst op een verschil tussen het type uitlegger en het model, of op onjuiste achtergrondgegevens.
import numpy as np
# For tree models, verify SHAP values sum to log-odds output
base = explainer.expected_value
for i in range(5):
shap_sum = shap_values[i].sum() + base
raw_pred = model.predict(X_test[i:i+1], output_margin=True)[0]
print(f'Sample {i}: SHAP sum={shap_sum:.4f}, model output={raw_pred:.4f}, match={abs(shap_sum-raw_pred)<1e-4}')Snelle controle
Test je begrip van de concepten uit deze les over Machine Learning met Python.
Samenvatting van de les
In deze les heb je geleerd dat SHAP-waarden de bijdrage van elk kenmerk aan een voorspelling kwantificeren met Shapley-waarden uit de speltheorie, dat globale samenvattingen (staaf- en zwermdiagrammen) de algemene kenmerkbelangrijkheid en richting laten zien en dat lokale uitleg (krachtendiagrammen en watervaldiagrammen) individuele voorspellingen onderbouwt. Hierna bekijken we LIME als een alternatieve modelonafhankelijke methode voor uitleg.
Leer Python met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “SHAP-waarden: globale en lokale feature importance” gratis?
Ja — de volledige tekst van “SHAP-waarden: globale en lokale feature importance” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Machine Learning Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Machine Learning Academy bevat in totaal 4 lessen.
Wat leer ik in “SHAP-waarden: globale en lokale feature importance”?
U berekent SHAP-waarden voor een gradient-boostingmodel, maakt beeswarm- en staafdiagrammen met samenvattingen en legt één voorspelling uit aan een niet-technische belanghebbende. Je oefent met Machine Learning Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Machine Learning Academy te beginnen?
Ervaring vooraf is niet nodig. Machine Learning Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “SHAP-waarden: globale en lokale feature importance”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Machine Learning Academy?
Ja. Elke les over Machine Learning Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- SHAP-waarden: globale en lokale feature importance
- LIME: lokale, interpreteerbare modelagnostische verklaringen
- Fairness-metrics: demographic parity en equal opportunity
- Strategieën voor biasbeperking: pre-processing, in-processing en post-processing