Package: corr-shap
Shapley values for correlated featuresThis package contains an extension of theshap packagebased on the paper'Explaining individual predictions when features are dependent: More accurate
approximations to Shapley values'that describes methods to more accurately approximate shapley values when features in the dataset are correlated.InstallationTo install the package with pip, simply runpip install corr-shapAlternatively, you can download thecorr_shap repositoryand
create a conda environment withconda env create -f environment.ymlBackgroundSHAPSHAP (SHapley Additive exPlanations) is a method to explain the output of a machine learning model.
It uses Shapley values from game theory to compute the contribution of each input feature to the output of the model.
Therefore, it can help users understand the factors influencing a model's decision-making process.
Since the computational effort to calculate Shapley values grows exponentially, approximation methods such as Kernel SHAP are needed.
See the paper'A Unified Approach to Interpreting Model Predictions'by Scott M. Lundberg and Su-In Lee for more details on Kernel SHAP or theirSHAP git repofor the implementation.Correlated ExplainerOne disadvantage of Kernel SHAP is the fact that it assumes that all features are independent.
If there is a high correlation between the features, the results of Kernel SHAP can be inaccurate.
Therefore, Kjersti Aas, Martin Jullum and Anders Løland propose an extension of Kernel SHAP in their paper'Explaining individual predictions when features are dependent: More accurate
approximations to Shapley values'.
Instead of assuming feature independence, they use either a Gaussian distribution,
a Gaussian copula distribution, an empirical conditional distribution,
or a combination of the empirical distribution with one of the other two.
This can produce more accurate results in case of dependent features.Their proposed method is implemented in the 'CorrExplainer' class. Based on the chosen sampling strategy, the CorrExplainer
uses one of the distributions mentioned above or returns the same result as the Kernel Explainer (while having a faster runtime)
in case the 'default' sampling strategy is chosen.
In our comparisons (withdata sets 'adult', 'linear independent 60' and
'diabetes')
the CorrExplainer was between 6 to 19 times faster than the Kernel Explainer.
However, in its current implementation it is only suitable for the explanation of tabular data.ExamplesExplaining a single instanceBelow is a code example that shows how to use the CorrExplainer to explain a single instance
of the 'adult' dataset and display the result in a bar plot.fromsklearnimportlinear_modelfromsklearn.model_selectionimporttrain_test_splitimportshapfromcorr_shap.CorrExplainerimportCorrExplainer# load datax,y=shap.datasets.adult()# train modelx_training_data,x_test_data,y_training_data,y_test_data\=train_test_split(x,y,test_size=0.2,random_state=0)model=linear_model.LinearRegression()model.fit(x_training_data,y_training_data)# create explanation object with CorrExplainerexplainer=CorrExplainer(model.predict,x_training_data,sampling="default")explanation=explainer(x_test_data[:1])shap.plots.bar(explanation)Explaining full 'adult' datasetTo get a sense, which features are most important in the whole dataset and not just a single instance, the shap values
for each feature and each sample can be visualized in the same plot.
See example codehere.Credit default dataAnother example with a credit default dataset from therivapy packagewith high correlation between the features 'income' and 'savings'
and a model that ignores the 'savings' feature can be foundhere.Bar plot explaining a single instance:Summary plot explaining multiple samples:Further examples can be found in theexamplesfolder.References'A Unified Approach to Interpreting Model Predictions'Scott M. Lundberg, Su-In Lee'Explaining individual predictions when features are dependent: More accurate approximations to Shapley values'Kjersti Aas, Martin Jullum and Anders Lølandshap packagerivapy package