| kernelshap | R Documentation |
Efficient implementation of Kernel SHAP, see Lundberg and Lee (2017), and Covert and Lee (2021), abbreviated by CL21. By default, for up to p=8 features, exact SHAP values are returned (with respect to the selected background data). Otherwise, a partly exact hybrid algorithm combining exact calculations and iterative paired sampling is used, see Details.
kernelshap(object, ...)
## Default S3 method:
kernelshap(
object,
X,
bg_X = NULL,
pred_fun = stats::predict,
feature_names = colnames(X),
bg_w = NULL,
bg_n = 200L,
exact = length(feature_names) <= 8L,
hybrid_degree = 1L + length(feature_names) %in% 4:16,
m = 2L * length(feature_names) * (1L + 3L * (hybrid_degree == 0L)),
tol = 0.005,
max_iter = 100L,
parallel = FALSE,
parallel_args = NULL,
verbose = TRUE,
seed = NULL,
...
)
## S3 method for class 'ranger'
kernelshap(
object,
X,
bg_X = NULL,
pred_fun = NULL,
feature_names = colnames(X),
bg_w = NULL,
bg_n = 200L,
exact = length(feature_names) <= 8L,
hybrid_degree = 1L + length(feature_names) %in% 4:16,
m = 2L * length(feature_names) * (1L + 3L * (hybrid_degree == 0L)),
tol = 0.005,
max_iter = 100L,
parallel = FALSE,
parallel_args = NULL,
verbose = TRUE,
seed = NULL,
survival = c("chf", "prob"),
...
)
object |
Fitted model object. |
... |
Additional arguments passed to |
X |
|
bg_X |
Background data used to integrate out "switched off" features,
often a subset of the training data (typically 50 to 500 rows).
In cases with a natural "off" value (like MNIST digits),
this can also be a single row with all values set to the off value.
If no |
pred_fun |
Prediction function of the form |
feature_names |
Optional vector of column names in |
bg_w |
Optional vector of case weights for each row of |
bg_n |
If |
exact |
If |
hybrid_degree |
Integer controlling the exactness of the hybrid strategy. For
|
m |
Even number of on-off vectors sampled during one iteration.
The default is |
tol |
Tolerance determining when to stop. As in CL21, the algorithm keeps
iterating until |
max_iter |
If the stopping criterion (see |
parallel |
If |
parallel_args |
Named list of arguments passed to
|
verbose |
Set to |
seed |
Optional integer random seed. Note that it changes the global seed. |
survival |
Should cumulative hazards ("chf", default) or survival
probabilities ("prob") per time be predicted? Only in |
The pure iterative Kernel SHAP sampling as in Covert and Lee (2021) works like this:
A binary "on-off" vector z is drawn from \{0, 1\}^p according to
a special weighting logic.
For each j with z_j = 1, the j-th column of the
original background data is replaced by the corresponding feature value x_j
of the observation to be explained.
The average prediction v_z on the data of Step 2 is calculated, and the
average prediction v_0 on the background data is subtracted.
Steps 1 to 3 are repeated m times. This produces a binary m \times p
matrix Z (each row equals one of the z) and a vector v of
shifted predictions.
v is regressed onto Z under the constraint that the sum of the
coefficients equals v_1 - v_0, where v_1 is the prediction of the
observation to be explained. The resulting coefficients are the Kernel SHAP values.
This is repeated multiple times until convergence, see CL21 for details.
To avoid the re-evaluation of identical coalition vectors, we have implemented a hybrid strategy, combining exact calculations with sampling.
The hybrid algorithm has two steps:
Step 1 (exact part): There are 2p different on-off vectors z with
\sum z \in \{1, p-1\}.
The degree 1 hybrid will list those vectors and use them according
to their weights in the upcoming calculations. Depending on p, we can also go
a step further to a degree 2 hybrid by adding all p(p-1) vectors with
\sum z \in \{2, p-2\} to the process etc. The necessary predictions are
obtained along with other calculations similar to those described in CL21.
Step 2 (sampling part): The remaining weight is filled by sampling vectors z according to Kernel SHAP weights normalized to the values not yet covered by Step 1. Together with the results from Step 1 - correctly weighted - this now forms a complete iteration as in CL21. The difference is that a significant part of the mass is covered by exact calculations. Afterwards, the algorithm iterates until convergence. The output of Step 1 is reused in every iteration.
If p is sufficiently small, all possible 2^p-2 on-off vectors z can be
evaluated. In this case, no sampling is required and the algorithm returns exact
Kernel SHAP values with respect to the given background data.
Since kernelshap() calculates predictions on data with MN rows
(N is the background data size and M the number of z vectors), p
should not be higher than 10 for exact calculations.
For similar reasons, degree 2 hybrids should not use p larger than 40.
An object of class "kernelshap" with the following components:
S: (n \times p) matrix with SHAP values or, if the model output has
dimension K > 1, a list of K such matrices.
X: Same as input argument X.
baseline: Vector of length K representing the average prediction on the
background data.
bg_X: The background data.
bg_w: The background case weights.
m_exact: Number of on-off vectors evaluated for exact calculations.
prop_exact: Proportion of the Kernel SHAP weight distribution covered by
exact calculations.
exact: Logical flag indicating whether calculations are exact or not.
txt: Summary text.
predictions: (n \times K) matrix with predictions of X.
algorithm: "kernelshap".
m: Number of sampled on-off vectors evaluated per iteration (if not exact).
SE: Standard errors corresponding to S (if not exact).
n_iter: Integer vector of length n providing the number of iterations
per row of X (if not exact).
converged: Logical vector of length n indicating convergence per row of X
(if not exact).
kernelshap(default): Default Kernel SHAP method.
kernelshap(ranger): Kernel SHAP method for "ranger" models, see Readme for an example.
Scott M. Lundberg and Su-In Lee. A unified approach to interpreting model predictions. Proceedings of the 31st International Conference on Neural Information Processing Systems, 2017.
Ian Covert and Su-In Lee. Improving KernelSHAP: Practical Shapley Value Estimation Using Linear Regression. Proceedings of The 24th International Conference on Artificial Intelligence and Statistics, PMLR 130:3457-3465, 2021.
# MODEL ONE: Linear regression
fit <- lm(Sepal.Length ~ ., data = iris)
# Select rows to explain (only feature columns)
X_explain <- iris[-1]
# Calculate SHAP values
s <- kernelshap(fit, X_explain)
s
# MODEL TWO: Multi-response linear regression
fit <- lm(as.matrix(iris[, 1:2]) ~ Petal.Length + Petal.Width + Species, data = iris)
s <- kernelshap(fit, iris[3:5])
s
# Note 1: Feature columns can also be selected 'feature_names'
# Note 2: Especially when X is small, pass a sufficiently large background data bg_X
s <- kernelshap(
fit,
iris[1:4, ],
bg_X = iris,
feature_names = c("Petal.Length", "Petal.Width", "Species")
)
s
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.