Note
Go to the end to download the full example code.
ShaRP for classification on large datasets with mixed data types¶
This example showcases a more complex setting, where we will develop and interpret a classification model using a larger dataset with both categorical and continuous features.
sharp
is designed to operate over the unprocessed input space, to ensure every
“Frankenstein” point generated to compute feature contributions are plausible. This means
that the function producing the scores (or class predictions) should take as input the
raw dataset, and every preprocessing step leading to the black box predictions/scores
should be included within it.
We will start by downloading the German Credit dataset.
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder, MinMaxScaler
from sklearn.compose import ColumnTransformer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sharp import ShaRP
Let’s get the data first. We will use the dataset that classifies people described by a set of attributes as good or bad credit risks.
df = fetch_openml(data_id=31, parser="auto")["frame"]
df.head(5)
Split X and y (input and target) from df and split train and test:
X = df.drop(columns="class")
y = df["class"]
categorical_features = X.dtypes.apply(
lambda dtype: isinstance(dtype, pd.CategoricalDtype)
).values
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.1, random_state=42
)
Now we will set up model. Here, we will use a pipeline to combine all the preprocessing
steps. However, to use sharp
, it is also sufficient to pass any function
(containing all the preprocessing steps) that takes a numpy array as input and outputs
the model’s predictions.
transformer = ColumnTransformer(
transformers=[
("onehot", OneHotEncoder(sparse_output=False), categorical_features),
("minmax", MinMaxScaler(), ~categorical_features),
],
remainder="passthrough",
n_jobs=-1,
)
classifier = LogisticRegression(random_state=42)
model = make_pipeline(transformer, classifier)
model.fit(X_train.values, y_train.values)
We can now use sharp
to explain our model’s predictions! If we consider the dataset
to be too large, we have a few options to reduce computational complexity, such as
configuring the n_jobs
parameter, setting a value on sample_size
, or setting
measure=unary
.
xai = ShaRP(
qoi="flip",
target_function=model.predict,
measure="unary",
sample_size=None,
random_state=42,
n_jobs=-1,
verbose=1,
)
xai.fit(X_test)
unary_values = pd.DataFrame(xai.all(X_test), columns=X.columns)
unary_values
0%| | 0/2000 [00:00<?, ?it/s]
0%| | 1/2000 [00:00<06:38, 5.01it/s]
0%| | 3/2000 [00:00<03:07, 10.63it/s]
0%| | 5/2000 [00:00<02:50, 11.73it/s]
0%| | 7/2000 [00:00<02:33, 12.99it/s]
0%| | 9/2000 [00:00<02:30, 13.25it/s]
1%| | 12/2000 [00:01<03:12, 10.32it/s]
1%| | 14/2000 [00:01<02:44, 12.04it/s]
1%| | 21/2000 [00:01<01:51, 17.81it/s]
1%| | 24/2000 [00:01<01:44, 18.98it/s]
2%|▏ | 30/2000 [00:01<01:17, 25.34it/s]
2%|▏ | 34/2000 [00:01<01:10, 27.74it/s]
2%|▏ | 38/2000 [00:02<01:23, 23.39it/s]
2%|▏ | 42/2000 [00:02<01:15, 26.02it/s]
2%|▏ | 46/2000 [00:02<01:10, 27.70it/s]
2%|▎ | 50/2000 [00:02<01:24, 23.18it/s]
3%|▎ | 54/2000 [00:02<01:20, 24.28it/s]
3%|▎ | 58/2000 [00:02<01:18, 24.64it/s]
3%|▎ | 62/2000 [00:03<01:26, 22.40it/s]
3%|▎ | 66/2000 [00:03<01:17, 24.87it/s]
4%|▎ | 70/2000 [00:03<01:16, 25.21it/s]
4%|▎ | 74/2000 [00:03<01:14, 25.84it/s]
4%|▍ | 78/2000 [00:03<01:26, 22.26it/s]
4%|▍ | 82/2000 [00:03<01:22, 23.38it/s]
4%|▍ | 86/2000 [00:04<01:14, 25.64it/s]
4%|▍ | 90/2000 [00:04<01:14, 25.63it/s]
5%|▍ | 94/2000 [00:04<01:08, 27.71it/s]
5%|▍ | 98/2000 [00:04<01:22, 23.03it/s]
5%|▌ | 102/2000 [00:04<01:18, 24.20it/s]
5%|▌ | 106/2000 [00:04<01:12, 26.27it/s]
6%|▌ | 110/2000 [00:04<01:14, 25.44it/s]
6%|▌ | 114/2000 [00:05<01:17, 24.32it/s]
6%|▌ | 118/2000 [00:05<01:16, 24.64it/s]
6%|▌ | 122/2000 [00:05<01:22, 22.82it/s]
6%|▋ | 126/2000 [00:05<01:13, 25.47it/s]
6%|▋ | 130/2000 [00:05<01:11, 25.98it/s]
7%|▋ | 134/2000 [00:05<01:13, 25.25it/s]
7%|▋ | 138/2000 [00:06<01:19, 23.50it/s]
7%|▋ | 142/2000 [00:06<01:20, 22.98it/s]
7%|▋ | 146/2000 [00:06<01:13, 25.07it/s]
8%|▊ | 150/2000 [00:06<01:10, 26.30it/s]
8%|▊ | 154/2000 [00:06<01:08, 26.80it/s]
8%|▊ | 158/2000 [00:06<01:22, 22.39it/s]
8%|▊ | 162/2000 [00:07<01:20, 22.72it/s]
8%|▊ | 166/2000 [00:07<01:12, 25.40it/s]
8%|▊ | 170/2000 [00:07<01:13, 25.03it/s]
9%|▊ | 174/2000 [00:07<01:09, 26.14it/s]
9%|▉ | 178/2000 [00:07<01:17, 23.44it/s]
9%|▉ | 182/2000 [00:07<01:17, 23.37it/s]
9%|▉ | 186/2000 [00:08<01:10, 25.84it/s]
10%|▉ | 190/2000 [00:08<01:08, 26.31it/s]
10%|▉ | 194/2000 [00:08<01:13, 24.67it/s]
10%|▉ | 198/2000 [00:08<01:15, 23.76it/s]
10%|█ | 202/2000 [00:08<01:15, 23.71it/s]
10%|█ | 206/2000 [00:08<01:11, 25.04it/s]
10%|█ | 210/2000 [00:09<01:09, 25.75it/s]
11%|█ | 214/2000 [00:09<01:12, 24.48it/s]
11%|█ | 218/2000 [00:09<01:15, 23.55it/s]
11%|█ | 222/2000 [00:09<01:14, 23.73it/s]
11%|█▏ | 226/2000 [00:09<01:08, 25.88it/s]
12%|█▏ | 230/2000 [00:09<01:06, 26.54it/s]
12%|█▏ | 234/2000 [00:09<01:08, 25.78it/s]
12%|█▏ | 238/2000 [00:10<01:14, 23.58it/s]
12%|█▏ | 242/2000 [00:10<01:15, 23.29it/s]
12%|█▏ | 246/2000 [00:10<01:08, 25.50it/s]
12%|█▎ | 250/2000 [00:10<01:09, 25.26it/s]
13%|█▎ | 254/2000 [00:10<01:07, 26.00it/s]
13%|█▎ | 258/2000 [00:11<01:14, 23.51it/s]
13%|█▎ | 262/2000 [00:11<01:13, 23.68it/s]
13%|█▎ | 266/2000 [00:11<01:06, 26.01it/s]
14%|█▎ | 270/2000 [00:11<01:04, 26.70it/s]
14%|█▎ | 274/2000 [00:11<01:08, 25.12it/s]
14%|█▍ | 278/2000 [00:11<01:13, 23.51it/s]
14%|█▍ | 282/2000 [00:11<01:11, 23.90it/s]
14%|█▍ | 286/2000 [00:12<01:08, 24.86it/s]
14%|█▍ | 290/2000 [00:12<01:05, 26.09it/s]
15%|█▍ | 294/2000 [00:12<01:06, 25.79it/s]
15%|█▍ | 298/2000 [00:12<01:16, 22.33it/s]
15%|█▌ | 302/2000 [00:12<01:13, 22.96it/s]
15%|█▌ | 306/2000 [00:12<01:06, 25.35it/s]
16%|█▌ | 310/2000 [00:13<01:03, 26.76it/s]
16%|█▌ | 314/2000 [00:13<01:10, 24.07it/s]
16%|█▌ | 318/2000 [00:13<01:12, 23.22it/s]
16%|█▌ | 322/2000 [00:13<01:14, 22.57it/s]
16%|█▋ | 326/2000 [00:13<01:06, 25.06it/s]
16%|█▋ | 330/2000 [00:13<01:03, 26.13it/s]
17%|█▋ | 334/2000 [00:14<01:05, 25.36it/s]
17%|█▋ | 338/2000 [00:14<01:11, 23.09it/s]
17%|█▋ | 342/2000 [00:14<01:10, 23.56it/s]
17%|█▋ | 346/2000 [00:14<01:07, 24.68it/s]
18%|█▊ | 350/2000 [00:14<01:04, 25.72it/s]
18%|█▊ | 354/2000 [00:14<01:07, 24.49it/s]
18%|█▊ | 358/2000 [00:15<01:10, 23.35it/s]
18%|█▊ | 362/2000 [00:15<01:09, 23.48it/s]
18%|█▊ | 366/2000 [00:15<01:03, 25.71it/s]
18%|█▊ | 370/2000 [00:15<01:02, 26.25it/s]
19%|█▊ | 374/2000 [00:15<01:02, 25.82it/s]
19%|█▉ | 378/2000 [00:15<01:10, 23.11it/s]
19%|█▉ | 382/2000 [00:16<01:09, 23.40it/s]
19%|█▉ | 386/2000 [00:16<01:04, 25.04it/s]
20%|█▉ | 390/2000 [00:16<01:03, 25.49it/s]
20%|█▉ | 394/2000 [00:16<01:02, 25.78it/s]
20%|█▉ | 398/2000 [00:16<01:09, 23.02it/s]
20%|██ | 402/2000 [00:16<01:08, 23.35it/s]
20%|██ | 406/2000 [00:16<01:01, 25.74it/s]
20%|██ | 410/2000 [00:17<01:00, 26.34it/s]
21%|██ | 414/2000 [00:17<01:04, 24.71it/s]
21%|██ | 418/2000 [00:17<01:07, 23.43it/s]
21%|██ | 422/2000 [00:17<01:07, 23.29it/s]
21%|██▏ | 426/2000 [00:17<01:02, 25.35it/s]
22%|██▏ | 430/2000 [00:17<01:01, 25.40it/s]
22%|██▏ | 434/2000 [00:18<01:01, 25.38it/s]
22%|██▏ | 438/2000 [00:18<01:08, 22.66it/s]
22%|██▏ | 442/2000 [00:18<01:08, 22.78it/s]
22%|██▏ | 446/2000 [00:18<01:01, 25.09it/s]
22%|██▎ | 450/2000 [00:18<00:59, 26.00it/s]
23%|██▎ | 454/2000 [00:18<01:02, 24.66it/s]
23%|██▎ | 458/2000 [00:19<01:06, 23.10it/s]
23%|██▎ | 462/2000 [00:19<01:04, 23.92it/s]
23%|██▎ | 466/2000 [00:19<01:01, 25.01it/s]
24%|██▎ | 470/2000 [00:19<00:59, 25.71it/s]
24%|██▎ | 474/2000 [00:19<01:00, 25.41it/s]
24%|██▍ | 478/2000 [00:19<01:05, 23.06it/s]
24%|██▍ | 482/2000 [00:20<01:03, 23.78it/s]
24%|██▍ | 486/2000 [00:20<00:57, 26.22it/s]
24%|██▍ | 490/2000 [00:20<00:55, 26.97it/s]
25%|██▍ | 494/2000 [00:20<01:02, 24.09it/s]
25%|██▍ | 498/2000 [00:20<01:03, 23.80it/s]
25%|██▌ | 502/2000 [00:20<01:04, 23.17it/s]
25%|██▌ | 506/2000 [00:21<00:58, 25.73it/s]
26%|██▌ | 510/2000 [00:21<00:57, 25.72it/s]
26%|██▌ | 514/2000 [00:21<00:59, 24.83it/s]
26%|██▌ | 518/2000 [00:21<01:02, 23.83it/s]
26%|██▌ | 522/2000 [00:21<01:03, 23.41it/s]
26%|██▋ | 526/2000 [00:21<00:57, 25.43it/s]
26%|██▋ | 530/2000 [00:22<00:59, 24.56it/s]
27%|██▋ | 534/2000 [00:22<00:55, 26.51it/s]
27%|██▋ | 538/2000 [00:22<01:02, 23.54it/s]
27%|██▋ | 542/2000 [00:22<01:02, 23.29it/s]
27%|██▋ | 546/2000 [00:22<00:57, 25.48it/s]
28%|██▊ | 550/2000 [00:22<00:55, 26.33it/s]
28%|██▊ | 554/2000 [00:22<00:55, 26.10it/s]
28%|██▊ | 558/2000 [00:23<01:02, 23.15it/s]
28%|██▊ | 562/2000 [00:23<01:01, 23.34it/s]
28%|██▊ | 566/2000 [00:23<00:55, 25.87it/s]
28%|██▊ | 570/2000 [00:23<00:54, 26.46it/s]
29%|██▊ | 574/2000 [00:23<00:55, 25.75it/s]
29%|██▉ | 578/2000 [00:24<01:00, 23.32it/s]
29%|██▉ | 582/2000 [00:24<01:00, 23.58it/s]
29%|██▉ | 586/2000 [00:24<00:54, 25.85it/s]
30%|██▉ | 590/2000 [00:24<00:55, 25.37it/s]
30%|██▉ | 594/2000 [00:24<00:56, 25.04it/s]
30%|██▉ | 598/2000 [00:24<00:59, 23.46it/s]
30%|███ | 602/2000 [00:25<01:00, 23.15it/s]
30%|███ | 606/2000 [00:25<00:54, 25.57it/s]
30%|███ | 610/2000 [00:25<00:51, 26.75it/s]
31%|███ | 614/2000 [00:25<00:53, 25.95it/s]
31%|███ | 618/2000 [00:25<00:58, 23.57it/s]
31%|███ | 622/2000 [00:25<00:59, 23.21it/s]
31%|███▏ | 626/2000 [00:25<00:53, 25.78it/s]
32%|███▏ | 630/2000 [00:26<00:51, 26.53it/s]
32%|███▏ | 634/2000 [00:26<00:52, 25.86it/s]
32%|███▏ | 638/2000 [00:26<00:58, 23.23it/s]
32%|███▏ | 642/2000 [00:26<00:58, 23.27it/s]
32%|███▏ | 646/2000 [00:26<00:53, 25.11it/s]
32%|███▎ | 650/2000 [00:26<00:53, 25.27it/s]
33%|███▎ | 654/2000 [00:27<00:51, 25.89it/s]
33%|███▎ | 658/2000 [00:27<00:57, 23.33it/s]
33%|███▎ | 662/2000 [00:27<00:56, 23.58it/s]
33%|███▎ | 666/2000 [00:27<00:51, 25.80it/s]
34%|███▎ | 670/2000 [00:27<00:50, 26.17it/s]
34%|███▎ | 674/2000 [00:27<00:53, 24.82it/s]
34%|███▍ | 678/2000 [00:28<00:55, 23.78it/s]
34%|███▍ | 682/2000 [00:28<00:56, 23.40it/s]
34%|███▍ | 686/2000 [00:28<00:51, 25.40it/s]
34%|███▍ | 690/2000 [00:28<00:51, 25.24it/s]
35%|███▍ | 694/2000 [00:28<00:51, 25.23it/s]
35%|███▍ | 698/2000 [00:28<00:54, 23.75it/s]
35%|███▌ | 702/2000 [00:29<00:55, 23.35it/s]
35%|███▌ | 706/2000 [00:29<00:50, 25.67it/s]
36%|███▌ | 710/2000 [00:29<00:48, 26.72it/s]
36%|███▌ | 714/2000 [00:29<00:54, 23.65it/s]
36%|███▌ | 718/2000 [00:29<00:54, 23.64it/s]
36%|███▌ | 722/2000 [00:29<00:55, 23.02it/s]
36%|███▋ | 726/2000 [00:29<00:49, 25.58it/s]
36%|███▋ | 730/2000 [00:30<00:47, 26.63it/s]
37%|███▋ | 734/2000 [00:30<00:48, 25.99it/s]
37%|███▋ | 738/2000 [00:30<00:55, 22.77it/s]
37%|███▋ | 742/2000 [00:30<00:52, 23.96it/s]
37%|███▋ | 746/2000 [00:30<00:48, 26.11it/s]
38%|███▊ | 750/2000 [00:30<00:49, 25.10it/s]
38%|███▊ | 754/2000 [00:31<00:48, 25.84it/s]
38%|███▊ | 758/2000 [00:31<00:52, 23.47it/s]
38%|███▊ | 762/2000 [00:31<00:53, 23.35it/s]
38%|███▊ | 766/2000 [00:31<00:47, 25.73it/s]
38%|███▊ | 770/2000 [00:31<00:46, 26.41it/s]
39%|███▊ | 774/2000 [00:31<00:49, 25.00it/s]
39%|███▉ | 778/2000 [00:32<00:52, 23.44it/s]
39%|███▉ | 782/2000 [00:32<00:50, 23.93it/s]
39%|███▉ | 786/2000 [00:32<00:48, 25.01it/s]
40%|███▉ | 790/2000 [00:32<00:48, 24.99it/s]
40%|███▉ | 794/2000 [00:32<00:47, 25.63it/s]
40%|███▉ | 798/2000 [00:32<00:51, 23.28it/s]
40%|████ | 802/2000 [00:33<00:51, 23.38it/s]
40%|████ | 806/2000 [00:33<00:45, 26.14it/s]
40%|████ | 810/2000 [00:33<00:46, 25.74it/s]
41%|████ | 814/2000 [00:33<00:48, 24.32it/s]
41%|████ | 818/2000 [00:33<00:48, 24.28it/s]
41%|████ | 822/2000 [00:33<00:51, 23.05it/s]
41%|████▏ | 826/2000 [00:34<00:46, 25.07it/s]
42%|████▏ | 830/2000 [00:34<00:46, 25.37it/s]
42%|████▏ | 834/2000 [00:34<00:45, 25.82it/s]
42%|████▏ | 838/2000 [00:34<00:50, 23.12it/s]
42%|████▏ | 842/2000 [00:34<00:49, 23.54it/s]
42%|████▏ | 846/2000 [00:34<00:44, 25.79it/s]
42%|████▎ | 850/2000 [00:34<00:43, 26.50it/s]
43%|████▎ | 854/2000 [00:35<00:45, 25.09it/s]
43%|████▎ | 858/2000 [00:35<00:48, 23.58it/s]
43%|████▎ | 862/2000 [00:35<00:48, 23.56it/s]
43%|████▎ | 866/2000 [00:35<00:44, 25.68it/s]
44%|████▎ | 870/2000 [00:35<00:44, 25.47it/s]
44%|████▎ | 874/2000 [00:35<00:45, 24.62it/s]
44%|████▍ | 878/2000 [00:36<00:47, 23.57it/s]
44%|████▍ | 882/2000 [00:36<00:47, 23.34it/s]
44%|████▍ | 886/2000 [00:36<00:42, 25.91it/s]
44%|████▍ | 890/2000 [00:36<00:41, 26.82it/s]
45%|████▍ | 894/2000 [00:36<00:45, 24.31it/s]
45%|████▍ | 898/2000 [00:36<00:46, 23.51it/s]
45%|████▌ | 902/2000 [00:37<00:47, 23.26it/s]
45%|████▌ | 906/2000 [00:37<00:42, 25.46it/s]
46%|████▌ | 910/2000 [00:37<00:40, 26.95it/s]
46%|████▌ | 914/2000 [00:37<00:43, 24.95it/s]
46%|████▌ | 918/2000 [00:37<00:46, 23.13it/s]
46%|████▌ | 922/2000 [00:37<00:44, 24.17it/s]
46%|████▋ | 926/2000 [00:38<00:41, 26.17it/s]
46%|████▋ | 930/2000 [00:38<00:41, 25.57it/s]
47%|████▋ | 934/2000 [00:38<00:43, 24.39it/s]
47%|████▋ | 938/2000 [00:38<00:43, 24.27it/s]
47%|████▋ | 942/2000 [00:38<00:45, 23.36it/s]
47%|████▋ | 946/2000 [00:38<00:41, 25.52it/s]
48%|████▊ | 950/2000 [00:39<00:39, 26.65it/s]
48%|████▊ | 954/2000 [00:39<00:41, 25.14it/s]
48%|████▊ | 958/2000 [00:39<00:45, 23.06it/s]
48%|████▊ | 962/2000 [00:39<00:42, 24.19it/s]
48%|████▊ | 966/2000 [00:39<00:41, 25.18it/s]
48%|████▊ | 970/2000 [00:39<00:39, 26.18it/s]
49%|████▊ | 974/2000 [00:39<00:38, 26.45it/s]
49%|████▉ | 978/2000 [00:40<00:44, 22.81it/s]
49%|████▉ | 982/2000 [00:40<00:42, 23.83it/s]
49%|████▉ | 986/2000 [00:40<00:38, 26.04it/s]
50%|████▉ | 990/2000 [00:40<00:37, 26.88it/s]
50%|████▉ | 994/2000 [00:40<00:40, 25.15it/s]
50%|████▉ | 998/2000 [00:41<00:41, 23.89it/s]
50%|█████ | 1002/2000 [00:41<00:41, 23.86it/s]
50%|█████ | 1006/2000 [00:41<00:41, 24.19it/s]
50%|█████ | 1010/2000 [00:41<00:38, 25.66it/s]
51%|█████ | 1014/2000 [00:41<00:39, 24.96it/s]
51%|█████ | 1018/2000 [00:41<00:43, 22.72it/s]
51%|█████ | 1022/2000 [00:41<00:41, 23.85it/s]
51%|█████▏ | 1026/2000 [00:42<00:37, 25.94it/s]
52%|█████▏ | 1030/2000 [00:42<00:38, 25.15it/s]
52%|█████▏ | 1034/2000 [00:42<00:38, 24.98it/s]
52%|█████▏ | 1038/2000 [00:42<00:40, 23.63it/s]
52%|█████▏ | 1042/2000 [00:42<00:41, 22.94it/s]
52%|█████▏ | 1046/2000 [00:42<00:38, 25.09it/s]
52%|█████▎ | 1050/2000 [00:43<00:35, 26.39it/s]
53%|█████▎ | 1054/2000 [00:43<00:37, 25.13it/s]
53%|█████▎ | 1058/2000 [00:43<00:41, 22.77it/s]
53%|█████▎ | 1062/2000 [00:43<00:38, 24.16it/s]
53%|█████▎ | 1066/2000 [00:43<00:37, 24.74it/s]
54%|█████▎ | 1070/2000 [00:43<00:35, 26.05it/s]
54%|█████▎ | 1074/2000 [00:44<00:34, 26.65it/s]
54%|█████▍ | 1078/2000 [00:44<00:40, 22.55it/s]
54%|█████▍ | 1082/2000 [00:44<00:38, 23.95it/s]
54%|█████▍ | 1086/2000 [00:44<00:35, 25.89it/s]
55%|█████▍ | 1090/2000 [00:44<00:33, 27.29it/s]
55%|█████▍ | 1094/2000 [00:44<00:37, 24.06it/s]
55%|█████▍ | 1098/2000 [00:45<00:37, 23.86it/s]
55%|█████▌ | 1102/2000 [00:45<00:39, 22.89it/s]
55%|█████▌ | 1106/2000 [00:45<00:35, 25.39it/s]
56%|█████▌ | 1110/2000 [00:45<00:33, 26.36it/s]
56%|█████▌ | 1114/2000 [00:45<00:35, 24.73it/s]
56%|█████▌ | 1118/2000 [00:45<00:38, 23.09it/s]
56%|█████▌ | 1122/2000 [00:46<00:37, 23.64it/s]
56%|█████▋ | 1126/2000 [00:46<00:35, 24.95it/s]
56%|█████▋ | 1130/2000 [00:46<00:33, 25.67it/s]
57%|█████▋ | 1134/2000 [00:46<00:32, 26.26it/s]
57%|█████▋ | 1138/2000 [00:46<00:37, 22.73it/s]
57%|█████▋ | 1142/2000 [00:46<00:36, 23.54it/s]
57%|█████▋ | 1146/2000 [00:46<00:32, 25.90it/s]
57%|█████▊ | 1150/2000 [00:47<00:31, 26.83it/s]
58%|█████▊ | 1154/2000 [00:47<00:33, 24.93it/s]
58%|█████▊ | 1158/2000 [00:47<00:35, 23.53it/s]
58%|█████▊ | 1162/2000 [00:47<00:35, 23.52it/s]
58%|█████▊ | 1166/2000 [00:47<00:32, 25.36it/s]
58%|█████▊ | 1170/2000 [00:47<00:32, 25.42it/s]
59%|█████▊ | 1174/2000 [00:48<00:32, 25.26it/s]
59%|█████▉ | 1178/2000 [00:48<00:34, 23.75it/s]
59%|█████▉ | 1182/2000 [00:48<00:34, 23.39it/s]
59%|█████▉ | 1186/2000 [00:48<00:31, 25.80it/s]
60%|█████▉ | 1190/2000 [00:48<00:30, 26.58it/s]
60%|█████▉ | 1194/2000 [00:48<00:33, 24.17it/s]
60%|█████▉ | 1198/2000 [00:49<00:33, 24.04it/s]
60%|██████ | 1202/2000 [00:49<00:34, 23.00it/s]
60%|██████ | 1206/2000 [00:49<00:30, 25.63it/s]
60%|██████ | 1210/2000 [00:49<00:30, 26.12it/s]
61%|██████ | 1214/2000 [00:49<00:30, 25.61it/s]
61%|██████ | 1218/2000 [00:49<00:33, 23.24it/s]
61%|██████ | 1222/2000 [00:50<00:33, 23.51it/s]
61%|██████▏ | 1226/2000 [00:50<00:29, 25.95it/s]
62%|██████▏ | 1230/2000 [00:50<00:30, 24.85it/s]
62%|██████▏ | 1234/2000 [00:50<00:29, 26.22it/s]
62%|██████▏ | 1238/2000 [00:50<00:32, 23.50it/s]
62%|██████▏ | 1242/2000 [00:50<00:32, 23.41it/s]
62%|██████▏ | 1246/2000 [00:51<00:29, 25.56it/s]
62%|██████▎ | 1250/2000 [00:51<00:28, 26.63it/s]
63%|██████▎ | 1254/2000 [00:51<00:29, 25.23it/s]
63%|██████▎ | 1258/2000 [00:51<00:31, 23.35it/s]
63%|██████▎ | 1262/2000 [00:51<00:31, 23.56it/s]
63%|██████▎ | 1266/2000 [00:51<00:29, 25.19it/s]
64%|██████▎ | 1270/2000 [00:52<00:28, 25.57it/s]
64%|██████▎ | 1274/2000 [00:52<00:28, 25.17it/s]
64%|██████▍ | 1278/2000 [00:52<00:31, 23.09it/s]
64%|██████▍ | 1282/2000 [00:52<00:30, 23.67it/s]
64%|██████▍ | 1286/2000 [00:52<00:27, 25.51it/s]
64%|██████▍ | 1290/2000 [00:52<00:26, 26.78it/s]
65%|██████▍ | 1294/2000 [00:52<00:28, 24.73it/s]
65%|██████▍ | 1298/2000 [00:53<00:29, 23.72it/s]
65%|██████▌ | 1302/2000 [00:53<00:29, 23.87it/s]
65%|██████▌ | 1306/2000 [00:53<00:27, 24.84it/s]
66%|██████▌ | 1310/2000 [00:53<00:26, 25.96it/s]
66%|██████▌ | 1314/2000 [00:53<00:27, 25.31it/s]
66%|██████▌ | 1318/2000 [00:54<00:29, 22.88it/s]
66%|██████▌ | 1322/2000 [00:54<00:28, 23.75it/s]
66%|██████▋ | 1326/2000 [00:54<00:25, 26.13it/s]
66%|██████▋ | 1330/2000 [00:54<00:25, 26.79it/s]
67%|██████▋ | 1334/2000 [00:54<00:27, 23.87it/s]
67%|██████▋ | 1338/2000 [00:54<00:27, 24.06it/s]
67%|██████▋ | 1342/2000 [00:54<00:28, 22.78it/s]
67%|██████▋ | 1346/2000 [00:55<00:25, 25.35it/s]
68%|██████▊ | 1350/2000 [00:55<00:25, 25.89it/s]
68%|██████▊ | 1354/2000 [00:55<00:25, 24.85it/s]
68%|██████▊ | 1358/2000 [00:55<00:27, 23.17it/s]
68%|██████▊ | 1362/2000 [00:55<00:27, 23.47it/s]
68%|██████▊ | 1366/2000 [00:55<00:25, 25.32it/s]
68%|██████▊ | 1370/2000 [00:56<00:24, 25.54it/s]
69%|██████▊ | 1374/2000 [00:56<00:23, 26.28it/s]
69%|██████▉ | 1378/2000 [00:56<00:27, 23.01it/s]
69%|██████▉ | 1382/2000 [00:56<00:26, 23.58it/s]
69%|██████▉ | 1386/2000 [00:56<00:23, 26.09it/s]
70%|██████▉ | 1390/2000 [00:56<00:22, 26.91it/s]
70%|██████▉ | 1394/2000 [00:57<00:24, 24.83it/s]
70%|██████▉ | 1398/2000 [00:57<00:25, 23.30it/s]
70%|███████ | 1402/2000 [00:57<00:25, 23.58it/s]
70%|███████ | 1406/2000 [00:57<00:24, 24.35it/s]
70%|███████ | 1410/2000 [00:57<00:23, 25.22it/s]
71%|███████ | 1414/2000 [00:57<00:23, 25.31it/s]
71%|███████ | 1418/2000 [00:58<00:25, 23.04it/s]
71%|███████ | 1422/2000 [00:58<00:24, 23.24it/s]
71%|███████▏ | 1426/2000 [00:58<00:22, 25.25it/s]
72%|███████▏ | 1430/2000 [00:58<00:22, 25.08it/s]
72%|███████▏ | 1434/2000 [00:58<00:22, 24.91it/s]
72%|███████▏ | 1438/2000 [00:58<00:23, 23.42it/s]
72%|███████▏ | 1442/2000 [00:59<00:23, 23.27it/s]
72%|███████▏ | 1446/2000 [00:59<00:21, 25.46it/s]
72%|███████▎ | 1450/2000 [00:59<00:20, 26.45it/s]
73%|███████▎ | 1454/2000 [00:59<00:21, 25.35it/s]
73%|███████▎ | 1458/2000 [00:59<00:23, 22.87it/s]
73%|███████▎ | 1462/2000 [00:59<00:23, 23.00it/s]
73%|███████▎ | 1466/2000 [01:00<00:21, 25.29it/s]
74%|███████▎ | 1470/2000 [01:00<00:19, 26.68it/s]
74%|███████▎ | 1474/2000 [01:00<00:20, 25.60it/s]
74%|███████▍ | 1478/2000 [01:00<00:22, 23.15it/s]
74%|███████▍ | 1482/2000 [01:00<00:21, 24.16it/s]
74%|███████▍ | 1486/2000 [01:00<00:20, 25.21it/s]
74%|███████▍ | 1490/2000 [01:00<00:19, 25.84it/s]
75%|███████▍ | 1494/2000 [01:01<00:20, 25.21it/s]
75%|███████▍ | 1498/2000 [01:01<00:21, 23.29it/s]
75%|███████▌ | 1502/2000 [01:01<00:21, 23.41it/s]
75%|███████▌ | 1506/2000 [01:01<00:19, 25.85it/s]
76%|███████▌ | 1510/2000 [01:01<00:18, 26.42it/s]
76%|███████▌ | 1514/2000 [01:01<00:20, 24.27it/s]
76%|███████▌ | 1518/2000 [01:02<00:20, 23.74it/s]
76%|███████▌ | 1522/2000 [01:02<00:21, 22.63it/s]
76%|███████▋ | 1526/2000 [01:02<00:18, 25.36it/s]
76%|███████▋ | 1530/2000 [01:02<00:17, 26.23it/s]
77%|███████▋ | 1534/2000 [01:02<00:18, 25.48it/s]
77%|███████▋ | 1538/2000 [01:02<00:19, 23.19it/s]
77%|███████▋ | 1542/2000 [01:03<00:19, 23.96it/s]
77%|███████▋ | 1546/2000 [01:03<00:17, 26.32it/s]
78%|███████▊ | 1550/2000 [01:03<00:17, 25.27it/s]
78%|███████▊ | 1554/2000 [01:03<00:17, 25.15it/s]
78%|███████▊ | 1558/2000 [01:03<00:18, 24.06it/s]
78%|███████▊ | 1562/2000 [01:03<00:19, 23.05it/s]
78%|███████▊ | 1566/2000 [01:04<00:17, 25.14it/s]
78%|███████▊ | 1570/2000 [01:04<00:16, 26.34it/s]
79%|███████▊ | 1574/2000 [01:04<00:16, 25.24it/s]
79%|███████▉ | 1578/2000 [01:04<00:18, 23.30it/s]
79%|███████▉ | 1582/2000 [01:04<00:17, 23.57it/s]
79%|███████▉ | 1586/2000 [01:04<00:16, 24.83it/s]
80%|███████▉ | 1590/2000 [01:05<00:16, 25.49it/s]
80%|███████▉ | 1594/2000 [01:05<00:15, 26.41it/s]
80%|███████▉ | 1598/2000 [01:05<00:17, 22.72it/s]
80%|████████ | 1602/2000 [01:05<00:16, 23.83it/s]
80%|████████ | 1606/2000 [01:05<00:15, 26.08it/s]
80%|████████ | 1610/2000 [01:05<00:14, 26.70it/s]
81%|████████ | 1614/2000 [01:05<00:15, 25.17it/s]
81%|████████ | 1618/2000 [01:06<00:15, 24.07it/s]
81%|████████ | 1622/2000 [01:06<00:16, 23.60it/s]
81%|████████▏ | 1626/2000 [01:06<00:15, 24.54it/s]
82%|████████▏ | 1630/2000 [01:06<00:14, 25.50it/s]
82%|████████▏ | 1634/2000 [01:06<00:14, 25.20it/s]
82%|████████▏ | 1638/2000 [01:07<00:15, 23.10it/s]
82%|████████▏ | 1642/2000 [01:07<00:15, 23.64it/s]
82%|████████▏ | 1646/2000 [01:07<00:13, 25.94it/s]
82%|████████▎ | 1650/2000 [01:07<00:12, 26.92it/s]
83%|████████▎ | 1654/2000 [01:07<00:14, 24.60it/s]
83%|████████▎ | 1658/2000 [01:07<00:14, 23.77it/s]
83%|████████▎ | 1662/2000 [01:07<00:14, 22.81it/s]
83%|████████▎ | 1666/2000 [01:08<00:13, 25.43it/s]
84%|████████▎ | 1670/2000 [01:08<00:12, 26.34it/s]
84%|████████▎ | 1674/2000 [01:08<00:12, 25.82it/s]
84%|████████▍ | 1678/2000 [01:08<00:13, 23.43it/s]
84%|████████▍ | 1682/2000 [01:08<00:13, 23.72it/s]
84%|████████▍ | 1686/2000 [01:08<00:12, 26.15it/s]
84%|████████▍ | 1690/2000 [01:09<00:12, 25.25it/s]
85%|████████▍ | 1694/2000 [01:09<00:11, 25.95it/s]
85%|████████▍ | 1698/2000 [01:09<00:12, 23.82it/s]
85%|████████▌ | 1702/2000 [01:09<00:12, 23.24it/s]
85%|████████▌ | 1706/2000 [01:09<00:11, 25.30it/s]
86%|████████▌ | 1710/2000 [01:09<00:10, 26.38it/s]
86%|████████▌ | 1714/2000 [01:10<00:11, 24.85it/s]
86%|████████▌ | 1718/2000 [01:10<00:12, 23.37it/s]
86%|████████▌ | 1722/2000 [01:10<00:11, 23.68it/s]
86%|████████▋ | 1726/2000 [01:10<00:10, 25.65it/s]
86%|████████▋ | 1730/2000 [01:10<00:10, 25.79it/s]
87%|████████▋ | 1734/2000 [01:10<00:10, 25.70it/s]
87%|████████▋ | 1738/2000 [01:11<00:11, 23.14it/s]
87%|████████▋ | 1742/2000 [01:11<00:10, 23.62it/s]
87%|████████▋ | 1746/2000 [01:11<00:09, 26.13it/s]
88%|████████▊ | 1750/2000 [01:11<00:09, 26.76it/s]
88%|████████▊ | 1754/2000 [01:11<00:10, 24.15it/s]
88%|████████▊ | 1758/2000 [01:11<00:10, 23.81it/s]
88%|████████▊ | 1762/2000 [01:12<00:10, 22.88it/s]
88%|████████▊ | 1766/2000 [01:12<00:09, 25.41it/s]
88%|████████▊ | 1770/2000 [01:12<00:08, 26.51it/s]
89%|████████▊ | 1774/2000 [01:12<00:09, 24.84it/s]
89%|████████▉ | 1778/2000 [01:12<00:09, 23.20it/s]
89%|████████▉ | 1782/2000 [01:12<00:09, 23.31it/s]
89%|████████▉ | 1786/2000 [01:12<00:08, 25.28it/s]
90%|████████▉ | 1790/2000 [01:13<00:08, 25.60it/s]
90%|████████▉ | 1794/2000 [01:13<00:07, 26.65it/s]
90%|████████▉ | 1798/2000 [01:13<00:08, 23.47it/s]
90%|█████████ | 1802/2000 [01:13<00:08, 23.73it/s]
90%|█████████ | 1806/2000 [01:13<00:07, 26.22it/s]
90%|█████████ | 1810/2000 [01:13<00:07, 26.60it/s]
91%|█████████ | 1814/2000 [01:14<00:07, 25.01it/s]
91%|█████████ | 1818/2000 [01:14<00:07, 23.65it/s]
91%|█████████ | 1822/2000 [01:14<00:07, 23.89it/s]
91%|█████████▏| 1826/2000 [01:14<00:06, 25.29it/s]
92%|█████████▏| 1830/2000 [01:14<00:06, 25.52it/s]
92%|█████████▏| 1834/2000 [01:14<00:06, 25.20it/s]
92%|█████████▏| 1838/2000 [01:15<00:06, 23.59it/s]
92%|█████████▏| 1842/2000 [01:15<00:06, 23.24it/s]
92%|█████████▏| 1846/2000 [01:15<00:06, 25.57it/s]
92%|█████████▎| 1850/2000 [01:15<00:05, 26.50it/s]
93%|█████████▎| 1854/2000 [01:15<00:06, 24.00it/s]
93%|█████████▎| 1858/2000 [01:15<00:06, 23.35it/s]
93%|█████████▎| 1862/2000 [01:16<00:06, 22.94it/s]
93%|█████████▎| 1866/2000 [01:16<00:05, 25.15it/s]
94%|█████████▎| 1870/2000 [01:16<00:04, 26.54it/s]
94%|█████████▎| 1874/2000 [01:16<00:04, 26.54it/s]
94%|█████████▍| 1878/2000 [01:16<00:05, 22.84it/s]
94%|█████████▍| 1882/2000 [01:16<00:04, 23.85it/s]
94%|█████████▍| 1886/2000 [01:16<00:04, 26.01it/s]
94%|█████████▍| 1890/2000 [01:17<00:04, 25.85it/s]
95%|█████████▍| 1894/2000 [01:17<00:04, 25.03it/s]
95%|█████████▍| 1898/2000 [01:17<00:04, 24.05it/s]
95%|█████████▌| 1902/2000 [01:17<00:04, 23.48it/s]
95%|█████████▌| 1906/2000 [01:17<00:03, 25.96it/s]
96%|█████████▌| 1910/2000 [01:17<00:03, 24.95it/s]
96%|█████████▌| 1914/2000 [01:18<00:03, 24.52it/s]
96%|█████████▌| 1918/2000 [01:18<00:03, 24.26it/s]
96%|█████████▌| 1922/2000 [01:18<00:03, 23.04it/s]
96%|█████████▋| 1926/2000 [01:18<00:02, 25.46it/s]
96%|█████████▋| 1930/2000 [01:18<00:02, 26.37it/s]
97%|█████████▋| 1934/2000 [01:18<00:02, 26.56it/s]
97%|█████████▋| 1938/2000 [01:19<00:02, 23.05it/s]
97%|█████████▋| 1942/2000 [01:19<00:02, 23.24it/s]
97%|█████████▋| 1946/2000 [01:19<00:02, 25.48it/s]
98%|█████████▊| 1950/2000 [01:19<00:01, 26.29it/s]
98%|█████████▊| 1954/2000 [01:19<00:01, 26.33it/s]
98%|█████████▊| 1958/2000 [01:19<00:01, 22.98it/s]
98%|█████████▊| 1962/2000 [01:20<00:01, 23.59it/s]
98%|█████████▊| 1966/2000 [01:20<00:01, 25.97it/s]
98%|█████████▊| 1970/2000 [01:20<00:01, 26.00it/s]
99%|█████████▊| 1974/2000 [01:20<00:01, 24.54it/s]
99%|█████████▉| 1978/2000 [01:20<00:00, 24.02it/s]
99%|█████████▉| 1982/2000 [01:20<00:00, 23.16it/s]
99%|█████████▉| 1986/2000 [01:21<00:00, 25.60it/s]
100%|█████████▉| 1990/2000 [01:21<00:00, 25.83it/s]
100%|█████████▉| 1994/2000 [01:21<00:00, 24.75it/s]
100%|█████████▉| 1998/2000 [01:21<00:00, 23.39it/s]
100%|██████████| 2000/2000 [01:22<00:00, 24.36it/s]
Finally, we can plot the mean contributions of each feature:
plt.style.use("seaborn-v0_8-whitegrid")
fig, ax = plt.subplots()
xai.plot.bar(unary_values.mean(), ax=ax)
ax.set_ylim(bottom=0)
ax.tick_params(labelrotation=90)
fig.tight_layout()
plt.show()

Total running time of the script: (1 minutes 25.270 seconds)