aac shap

model building

import numpy as np
import pandas as pd
from ai4water import Model
import matplotlib.pyplot as plt
from aac_utils import aac_data, get_fitted_model

x, y, input_features, output_features = aac_data()

np.set_printoptions(suppress=True, linewidth=200)
********** Removing Examples with nan in labels  **********

***** Training *****
input_x shape:  (374, 6)
target shape:  (374, 1)
model = Model(
    model= {
            "XGBRegressor": {
                "n_estimators": 5,
                "learning_rate": 0.0001,
                "booster": "gblinear",
                "random_state": 313
            }
        },


    x_transformation= [
            {
                "method": "pareto",
                "features": [
                    "wat_temp_c"
                ]
            },
            {
                "method": "quantile_normal",
                "features": [
                    "sal_psu"
                ],
                "n_quantiles": 40
            },
            {
                "method": "quantile",
                "features": [
                    "pcp_mm"
                ],
                "n_quantiles": 40
            },
            {
                "method": "sqrt",
                "features": [
                    "wind_speed_mps"
                ],
                "treat_negatives": True
            },
            {
                "method": "pareto",
                "features": [
                    "air_p_hpa"
                ]
            }
        ],
    y_transformation=   [
            {
                "method": "zscore",
                "features": [
                    "aac_coppml"
                ]
            }
        ],


    seed=313,
    split_random = False,
    cross_validator= {"TimeSeriesSplit": {"n_splits": 10}},
    verbosity=0,
    input_features=[
            "wat_temp_c",
            "tide_cm",
            "sal_psu",
            "pcp_mm",
            "wind_speed_mps",
            "air_p_hpa"
        ],
    output_features=[
            "aac_coppml"
        ],
)
model.fit(x, y)
XGBRegressor(base_score=None, booster='gblinear', callbacks=None,
             colsample_bylevel=None, colsample_bynode=None,
             colsample_bytree=None, early_stopping_rounds=None,
             enable_categorical=False, eval_metric=None, feature_types=None,
             gamma=None, gpu_id=None, grow_policy=None, importance_type=None,
             interaction_constraints=None, learning_rate=0.0001, max_bin=None,
             max_cat_threshold=None, max_cat_to_onehot=None,
             max_delta_step=None, max_depth=None, max_leaves=None,
             min_child_weight=None, missing=nan, monotone_constraints=None,
             n_estimators=5, n_jobs=None, num_parallel_tree=None,
             predictor=None, random_state=313, ...)
from ai4water.postprocessing.explain import ShapExplainer
import shap
print(shap.__version__)
0.40.0
class MyShapExpaliner(ShapExplainer):
    def summary_plot(
            self,
            plot_type: str = None,
            name: str = "summary_plot",
            **kwargs
    ):
        """
        Plots the `summary <https://shap-lrjball.readthedocs.io/en/latest/generated/shap.summary_plot.html#shap.summary_plot>`_
        plot of SHAP package.
        Arguments:
            plot_type : str,
                either "bar", or "violen" or "dot"
            name:
                name of saved file
            kwargs:
                any keyword arguments to shap.summary_plot
        """

        def _summary_plot(_shap_val, _data, _features, _name):
            plt.close('all')

            shap.summary_plot(_shap_val, _data, show=False, plot_type=plot_type,
                              feature_names=_features,
                              **kwargs)
            # if self.save:
            #     plt.savefig(os.path.join(self.path, _name + " _bar"), dpi=300,
            #                 bbox_inches="tight")
            # if self.show:
            #     plt.show()

            return

        shap_vals = self.shap_values
        if isinstance(shap_vals, list) and len(shap_vals) == 1:
            shap_vals = shap_vals[0]

        data = self.data

        if self.single_source:
            if data.ndim == 3:
                assert shap_vals.ndim == 3

                for lookback in range(data.shape[1]):

                    _summary_plot(shap_vals[:, lookback],
                                  _data=data[:, lookback],
                                  _features=self.features,
                                  _name=f"{name}_{lookback}")
            else:
                _summary_plot(_shap_val=shap_vals, _data=data,
                              _features=self.features, _name=name)
        else:
            # data is a list of data sources
            for idx, _data in enumerate(data):
                if _data.ndim == 3:
                    for lb in range(_data.shape[1]):
                        _summary_plot(_shap_val=shap_vals[idx][:, lb],
                                      _data=_data[:, lb],
                                      _features=self.features[idx],
                                      _name=f"{name}_{idx}_{lb}")
                else:
                    _summary_plot(_shap_val=shap_vals[idx], _data=_data,
                                  _features=self.features[idx], _name=f"{name}_{idx}")

        return
explainer = MyShapExpaliner(model=model,
                         data=x,
                         train_data=x,
                         feature_names=model.input_features,
                          #save=False
                         )
print(explainer.explainer)
  0%|          | 0/370 [00:00<?, ?it/s]
  1%|          | 2/370 [00:00<00:30, 11.96it/s]
  1%|1         | 4/370 [00:00<00:34, 10.60it/s]
  2%|1         | 6/370 [00:00<00:35, 10.31it/s]
  2%|2         | 8/370 [00:00<00:35, 10.19it/s]
  3%|2         | 10/370 [00:00<00:35, 10.12it/s]
  3%|3         | 12/370 [00:01<00:35, 10.08it/s]
  4%|3         | 14/370 [00:01<00:36,  9.86it/s]
  4%|4         | 15/370 [00:01<00:36,  9.81it/s]
  4%|4         | 16/370 [00:01<00:36,  9.77it/s]
  5%|4         | 17/370 [00:01<00:36,  9.73it/s]
  5%|4         | 18/370 [00:01<00:36,  9.70it/s]
  5%|5         | 19/370 [00:01<00:36,  9.75it/s]
  5%|5         | 20/370 [00:02<00:35,  9.74it/s]
  6%|5         | 21/370 [00:02<00:35,  9.71it/s]
  6%|5         | 22/370 [00:02<00:35,  9.68it/s]
  6%|6         | 23/370 [00:02<00:35,  9.66it/s]
  6%|6         | 24/370 [00:02<00:35,  9.65it/s]
  7%|6         | 25/370 [00:02<00:35,  9.62it/s]
  7%|7         | 27/370 [00:02<00:34,  9.81it/s]
  8%|7         | 28/370 [00:02<00:35,  9.76it/s]
  8%|7         | 29/370 [00:02<00:35,  9.72it/s]
  8%|8         | 30/370 [00:03<00:35,  9.69it/s]
  8%|8         | 31/370 [00:03<00:35,  9.67it/s]
  9%|8         | 32/370 [00:03<00:35,  9.66it/s]
  9%|8         | 33/370 [00:03<00:34,  9.65it/s]
  9%|9         | 34/370 [00:03<00:34,  9.63it/s]
  9%|9         | 35/370 [00:03<00:34,  9.63it/s]
 10%|#         | 37/370 [00:03<00:33,  9.80it/s]
 11%|#         | 39/370 [00:03<00:33,  9.88it/s]
 11%|#1        | 41/370 [00:04<00:33,  9.85it/s]
 11%|#1        | 42/370 [00:04<00:33,  9.80it/s]
 12%|#1        | 44/370 [00:04<00:33,  9.80it/s]
 12%|#2        | 45/370 [00:04<00:33,  9.76it/s]
 12%|#2        | 46/370 [00:04<00:33,  9.73it/s]
 13%|#2        | 47/370 [00:04<00:33,  9.61it/s]
 13%|#2        | 48/370 [00:04<00:33,  9.61it/s]
 14%|#3        | 50/370 [00:05<00:33,  9.69it/s]
 14%|#3        | 51/370 [00:05<00:32,  9.69it/s]
 14%|#4        | 52/370 [00:05<00:32,  9.75it/s]
 15%|#4        | 54/370 [00:05<00:32,  9.85it/s]
 15%|#5        | 56/370 [00:05<00:31,  9.91it/s]
 16%|#5        | 58/370 [00:05<00:31,  9.87it/s]
 16%|#5        | 59/370 [00:06<00:31,  9.82it/s]
 16%|#6        | 60/370 [00:06<00:31,  9.77it/s]
 16%|#6        | 61/370 [00:06<00:31,  9.74it/s]
 17%|#6        | 62/370 [00:06<00:31,  9.70it/s]
 17%|#7        | 63/370 [00:06<00:31,  9.68it/s]
 17%|#7        | 64/370 [00:06<00:31,  9.66it/s]
 18%|#7        | 65/370 [00:06<00:31,  9.65it/s]
 18%|#7        | 66/370 [00:06<00:31,  9.64it/s]
 18%|#8        | 67/370 [00:06<00:31,  9.63it/s]
 18%|#8        | 68/370 [00:06<00:31,  9.63it/s]
 19%|#8        | 69/370 [00:07<00:31,  9.62it/s]
 19%|#8        | 70/370 [00:07<00:31,  9.62it/s]
 19%|#9        | 71/370 [00:07<00:30,  9.70it/s]
 19%|#9        | 72/370 [00:07<00:30,  9.71it/s]
 20%|#9        | 73/370 [00:07<00:30,  9.68it/s]
 20%|##        | 74/370 [00:07<00:30,  9.66it/s]
 20%|##        | 75/370 [00:07<00:30,  9.65it/s]
 21%|##        | 76/370 [00:07<00:30,  9.64it/s]
 21%|##1       | 78/370 [00:07<00:30,  9.71it/s]
 21%|##1       | 79/370 [00:08<00:30,  9.69it/s]
 22%|##1       | 81/370 [00:08<00:29,  9.82it/s]
 22%|##2       | 83/370 [00:08<00:29,  9.88it/s]
 23%|##2       | 85/370 [00:08<00:28,  9.86it/s]
 23%|##3       | 86/370 [00:08<00:29,  9.73it/s]
 24%|##3       | 87/370 [00:08<00:29,  9.71it/s]
 24%|##4       | 89/370 [00:09<00:28,  9.82it/s]
 25%|##4       | 91/370 [00:09<00:28,  9.88it/s]
 25%|##5       | 93/370 [00:09<00:27,  9.92it/s]
 26%|##5       | 95/370 [00:09<00:27,  9.95it/s]
 26%|##6       | 97/370 [00:09<00:27,  9.96it/s]
 26%|##6       | 98/370 [00:09<00:27,  9.90it/s]
 27%|##6       | 99/370 [00:10<00:27,  9.84it/s]
 27%|##7       | 100/370 [00:10<00:27,  9.78it/s]
 27%|##7       | 101/370 [00:10<00:27,  9.74it/s]
 28%|##7       | 102/370 [00:10<00:27,  9.71it/s]
 28%|##7       | 103/370 [00:10<00:27,  9.68it/s]
 28%|##8       | 104/370 [00:10<00:27,  9.66it/s]
 28%|##8       | 105/370 [00:10<00:27,  9.65it/s]
 29%|##8       | 106/370 [00:10<00:27,  9.64it/s]
 29%|##8       | 107/370 [00:10<00:27,  9.63it/s]
 29%|##9       | 108/370 [00:11<00:27,  9.63it/s]
 29%|##9       | 109/370 [00:11<00:27,  9.52it/s]
 30%|##9       | 110/370 [00:11<00:27,  9.55it/s]
 30%|###       | 111/370 [00:11<00:26,  9.62it/s]
 30%|###       | 112/370 [00:11<00:26,  9.67it/s]
 31%|###       | 114/370 [00:11<00:26,  9.82it/s]
 31%|###1      | 116/370 [00:11<00:25,  9.85it/s]
 32%|###1      | 117/370 [00:11<00:25,  9.84it/s]
 32%|###2      | 119/370 [00:12<00:25,  9.83it/s]
 32%|###2      | 120/370 [00:12<00:25,  9.78it/s]
 33%|###2      | 122/370 [00:12<00:25,  9.79it/s]
 33%|###3      | 123/370 [00:12<00:25,  9.75it/s]
 34%|###3      | 124/370 [00:12<00:25,  9.78it/s]
 34%|###4      | 126/370 [00:12<00:24,  9.89it/s]
 34%|###4      | 127/370 [00:12<00:24,  9.83it/s]
 35%|###4      | 128/370 [00:13<00:24,  9.78it/s]
 35%|###4      | 129/370 [00:13<00:27,  8.81it/s]
 35%|###5      | 130/370 [00:13<00:26,  9.06it/s]
 35%|###5      | 131/370 [00:13<00:25,  9.21it/s]
 36%|###5      | 132/370 [00:13<00:25,  9.28it/s]
 36%|###5      | 133/370 [00:13<00:25,  9.28it/s]
 36%|###6      | 134/370 [00:13<00:25,  9.41it/s]
 36%|###6      | 135/370 [00:13<00:25,  9.36it/s]
 37%|###6      | 136/370 [00:13<00:24,  9.44it/s]
 37%|###7      | 138/370 [00:14<00:23,  9.69it/s]
 38%|###7      | 140/370 [00:14<00:23,  9.83it/s]
 38%|###8      | 141/370 [00:14<00:23,  9.84it/s]
 39%|###8      | 143/370 [00:14<00:22,  9.90it/s]
 39%|###8      | 144/370 [00:14<00:22,  9.84it/s]
 39%|###9      | 145/370 [00:14<00:22,  9.79it/s]
 39%|###9      | 146/370 [00:14<00:22,  9.74it/s]
 40%|###9      | 147/370 [00:15<00:22,  9.71it/s]
 40%|####      | 148/370 [00:15<00:22,  9.73it/s]
 40%|####      | 149/370 [00:15<00:22,  9.76it/s]
 41%|####      | 151/370 [00:15<00:22,  9.86it/s]
 41%|####1     | 153/370 [00:15<00:21,  9.92it/s]
 42%|####1     | 155/370 [00:15<00:21,  9.93it/s]
 42%|####2     | 156/370 [00:15<00:21,  9.88it/s]
 42%|####2     | 157/370 [00:16<00:21,  9.82it/s]
 43%|####2     | 158/370 [00:16<00:21,  9.77it/s]
 43%|####2     | 159/370 [00:16<00:21,  9.73it/s]
 43%|####3     | 160/370 [00:16<00:22,  9.50it/s]
 44%|####3     | 161/370 [00:16<00:21,  9.53it/s]
 44%|####3     | 162/370 [00:16<00:21,  9.56it/s]
 44%|####4     | 163/370 [00:16<00:21,  9.57it/s]
 44%|####4     | 164/370 [00:16<00:21,  9.59it/s]
 45%|####4     | 165/370 [00:16<00:21,  9.49it/s]
 45%|####4     | 166/370 [00:17<00:21,  9.52it/s]
 45%|####5     | 167/370 [00:17<00:21,  9.54it/s]
 45%|####5     | 168/370 [00:17<00:21,  9.54it/s]
 46%|####5     | 169/370 [00:17<00:20,  9.60it/s]
 46%|####5     | 170/370 [00:17<00:20,  9.60it/s]
 46%|####6     | 172/370 [00:17<00:20,  9.78it/s]
 47%|####6     | 173/370 [00:17<00:20,  9.74it/s]
 47%|####7     | 174/370 [00:17<00:20,  9.69it/s]
 47%|####7     | 175/370 [00:17<00:20,  9.69it/s]
 48%|####7     | 176/370 [00:18<00:20,  9.67it/s]
 48%|####7     | 177/370 [00:18<00:20,  9.65it/s]
 48%|####8     | 179/370 [00:18<00:19,  9.81it/s]
 49%|####8     | 180/370 [00:18<00:19,  9.76it/s]
 49%|####8     | 181/370 [00:18<00:19,  9.72it/s]
 49%|####9     | 182/370 [00:18<00:19,  9.70it/s]
 49%|####9     | 183/370 [00:18<00:19,  9.67it/s]
 50%|####9     | 184/370 [00:18<00:19,  9.65it/s]
 50%|#####     | 185/370 [00:19<00:19,  9.28it/s]
 50%|#####     | 186/370 [00:19<00:21,  8.44it/s]
 51%|#####     | 187/370 [00:19<00:20,  8.81it/s]
 51%|#####     | 188/370 [00:19<00:20,  9.04it/s]
 51%|#####1    | 189/370 [00:19<00:19,  9.29it/s]
 52%|#####1    | 191/370 [00:19<00:18,  9.61it/s]
 52%|#####2    | 193/370 [00:19<00:18,  9.76it/s]
 52%|#####2    | 194/370 [00:19<00:18,  9.73it/s]
 53%|#####2    | 195/370 [00:20<00:18,  9.70it/s]
 53%|#####2    | 196/370 [00:20<00:17,  9.68it/s]
 53%|#####3    | 197/370 [00:20<00:17,  9.66it/s]
 54%|#####3    | 198/370 [00:20<00:17,  9.65it/s]
 54%|#####3    | 199/370 [00:20<00:17,  9.64it/s]
 54%|#####4    | 200/370 [00:20<00:17,  9.63it/s]
 54%|#####4    | 201/370 [00:20<00:17,  9.63it/s]
 55%|#####4    | 202/370 [00:20<00:17,  9.62it/s]
 55%|#####4    | 203/370 [00:20<00:17,  9.62it/s]
 55%|#####5    | 204/370 [00:21<00:17,  9.62it/s]
 55%|#####5    | 205/370 [00:21<00:17,  9.62it/s]
 56%|#####5    | 206/370 [00:21<00:17,  9.60it/s]
 56%|#####5    | 207/370 [00:21<00:17,  9.33it/s]
 56%|#####6    | 208/370 [00:21<00:17,  9.39it/s]
 56%|#####6    | 209/370 [00:21<00:17,  9.45it/s]
 57%|#####6    | 210/370 [00:21<00:16,  9.50it/s]
 57%|#####7    | 211/370 [00:21<00:16,  9.54it/s]
 57%|#####7    | 212/370 [00:21<00:16,  9.45it/s]
 58%|#####7    | 213/370 [00:21<00:16,  9.39it/s]
 58%|#####7    | 214/370 [00:22<00:16,  9.46it/s]
 58%|#####8    | 215/370 [00:22<00:16,  9.24it/s]
 58%|#####8    | 216/370 [00:22<00:16,  9.40it/s]
 59%|#####8    | 218/370 [00:22<00:15,  9.67it/s]
 59%|#####9    | 220/370 [00:22<00:15,  9.80it/s]
 60%|#####9    | 221/370 [00:22<00:15,  9.76it/s]
 60%|######    | 222/370 [00:22<00:15,  9.81it/s]
 60%|######    | 223/370 [00:22<00:15,  9.76it/s]
 61%|######    | 225/370 [00:23<00:14,  9.78it/s]
 61%|######1   | 226/370 [00:23<00:14,  9.74it/s]
 61%|######1   | 227/370 [00:23<00:14,  9.71it/s]
 62%|######1   | 228/370 [00:23<00:14,  9.78it/s]
 62%|######1   | 229/370 [00:23<00:14,  9.84it/s]
 62%|######2   | 230/370 [00:23<00:14,  9.78it/s]
 63%|######2   | 232/370 [00:23<00:14,  9.78it/s]
 63%|######2   | 233/370 [00:24<00:14,  9.75it/s]
 64%|######3   | 235/370 [00:24<00:13,  9.85it/s]
 64%|######4   | 237/370 [00:24<00:13,  9.90it/s]
 65%|######4   | 239/370 [00:24<00:13,  9.94it/s]
 65%|######4   | 240/370 [00:24<00:13,  9.87it/s]
 65%|######5   | 241/370 [00:24<00:13,  9.81it/s]
 66%|######5   | 243/370 [00:25<00:12,  9.89it/s]
 66%|######5   | 244/370 [00:25<00:12,  9.91it/s]
 66%|######6   | 245/370 [00:25<00:12,  9.84it/s]
 66%|######6   | 246/370 [00:25<00:12,  9.69it/s]
 67%|######6   | 247/370 [00:25<00:12,  9.67it/s]
 67%|######7   | 249/370 [00:25<00:12,  9.81it/s]
 68%|######7   | 250/370 [00:25<00:12,  9.76it/s]
 68%|######8   | 252/370 [00:25<00:12,  9.78it/s]
 69%|######8   | 254/370 [00:26<00:11,  9.79it/s]
 69%|######8   | 255/370 [00:26<00:11,  9.75it/s]
 69%|######9   | 256/370 [00:26<00:11,  9.72it/s]
 69%|######9   | 257/370 [00:26<00:11,  9.69it/s]
 70%|######9   | 258/370 [00:26<00:11,  9.67it/s]
 70%|#######   | 259/370 [00:26<00:11,  9.66it/s]
 70%|#######   | 260/370 [00:26<00:11,  9.65it/s]
 71%|#######   | 261/370 [00:26<00:11,  9.64it/s]
 71%|#######   | 262/370 [00:26<00:11,  9.63it/s]
 71%|#######1  | 263/370 [00:27<00:10,  9.74it/s]
 71%|#######1  | 264/370 [00:27<00:10,  9.70it/s]
 72%|#######1  | 265/370 [00:27<00:10,  9.67it/s]
 72%|#######1  | 266/370 [00:27<00:10,  9.55it/s]
 72%|#######2  | 267/370 [00:27<00:10,  9.57it/s]
 72%|#######2  | 268/370 [00:27<00:10,  9.58it/s]
 73%|#######2  | 269/370 [00:27<00:10,  9.59it/s]
 73%|#######2  | 270/370 [00:27<00:10,  9.60it/s]
 73%|#######3  | 271/370 [00:27<00:10,  9.60it/s]
 74%|#######3  | 272/370 [00:28<00:10,  9.61it/s]
 74%|#######3  | 273/370 [00:28<00:10,  9.60it/s]
 74%|#######4  | 275/370 [00:28<00:09,  9.79it/s]
 75%|#######4  | 277/370 [00:28<00:09,  9.87it/s]
 75%|#######5  | 279/370 [00:28<00:09,  9.85it/s]
 76%|#######5  | 280/370 [00:28<00:09,  9.80it/s]
 76%|#######5  | 281/370 [00:28<00:09,  9.84it/s]
 76%|#######6  | 282/370 [00:29<00:08,  9.79it/s]
 76%|#######6  | 283/370 [00:29<00:08,  9.74it/s]
 77%|#######6  | 284/370 [00:29<00:08,  9.61it/s]
 77%|#######7  | 285/370 [00:29<00:08,  9.51it/s]
 77%|#######7  | 286/370 [00:29<00:08,  9.54it/s]
 78%|#######7  | 288/370 [00:29<00:08,  9.66it/s]
 78%|#######8  | 289/370 [00:29<00:08,  9.65it/s]
 78%|#######8  | 290/370 [00:29<00:08,  9.64it/s]
 79%|#######8  | 291/370 [00:29<00:08,  9.63it/s]
 79%|#######9  | 293/370 [00:30<00:07,  9.79it/s]
 80%|#######9  | 295/370 [00:30<00:07,  9.87it/s]
 80%|########  | 296/370 [00:30<00:07,  9.81it/s]
 80%|########  | 297/370 [00:30<00:07,  9.77it/s]
 81%|########  | 299/370 [00:30<00:07,  9.78it/s]
 81%|########1 | 301/370 [00:30<00:06,  9.86it/s]
 82%|########1 | 303/370 [00:31<00:06,  9.84it/s]
 82%|########2 | 304/370 [00:31<00:06,  9.80it/s]
 82%|########2 | 305/370 [00:31<00:06,  9.76it/s]
 83%|########2 | 306/370 [00:31<00:06,  9.81it/s]
 83%|########2 | 307/370 [00:31<00:06,  9.86it/s]
 83%|########3 | 308/370 [00:31<00:06,  9.79it/s]
 84%|########3 | 309/370 [00:31<00:06,  9.74it/s]
 84%|########3 | 310/370 [00:31<00:06,  9.60it/s]
 84%|########4 | 311/370 [00:32<00:06,  9.61it/s]
 84%|########4 | 312/370 [00:32<00:06,  9.61it/s]
 85%|########4 | 313/370 [00:32<00:05,  9.61it/s]
 85%|########4 | 314/370 [00:32<00:05,  9.61it/s]
 85%|########5 | 315/370 [00:32<00:05,  9.61it/s]
 85%|########5 | 316/370 [00:32<00:05,  9.61it/s]
 86%|########5 | 317/370 [00:32<00:05,  9.61it/s]
 86%|########5 | 318/370 [00:32<00:05,  9.51it/s]
 86%|########6 | 319/370 [00:32<00:05,  9.43it/s]
 86%|########6 | 320/370 [00:32<00:05,  9.48it/s]
 87%|########7 | 322/370 [00:33<00:04,  9.63it/s]
 87%|########7 | 323/370 [00:33<00:04,  9.54it/s]
 88%|########7 | 324/370 [00:33<00:04,  9.46it/s]
 88%|########7 | 325/370 [00:33<00:04,  9.50it/s]
 88%|########8 | 326/370 [00:33<00:04,  9.53it/s]
 88%|########8 | 327/370 [00:33<00:04,  9.56it/s]
 89%|########8 | 329/370 [00:33<00:04,  9.75it/s]
 89%|########9 | 330/370 [00:33<00:04,  9.72it/s]
 89%|########9 | 331/370 [00:34<00:04,  9.69it/s]
 90%|########9 | 332/370 [00:34<00:04,  9.47it/s]
 90%|######### | 333/370 [00:34<00:03,  9.51it/s]
 90%|######### | 334/370 [00:34<00:03,  9.54it/s]
 91%|######### | 335/370 [00:34<00:03,  9.56it/s]
 91%|######### | 336/370 [00:34<00:03,  9.58it/s]
 91%|#########1| 337/370 [00:34<00:03,  9.59it/s]
 91%|#########1| 338/370 [00:34<00:03,  9.60it/s]
 92%|#########1| 340/370 [00:35<00:03,  9.78it/s]
 92%|#########2| 341/370 [00:35<00:02,  9.83it/s]
 92%|#########2| 342/370 [00:35<00:02,  9.77it/s]
 93%|#########2| 343/370 [00:35<00:02,  9.63it/s]
 93%|#########2| 344/370 [00:35<00:02,  9.63it/s]
 94%|#########3| 346/370 [00:35<00:02,  9.79it/s]
 94%|#########4| 348/370 [00:35<00:02,  9.87it/s]
 94%|#########4| 349/370 [00:35<00:02,  9.81it/s]
 95%|#########4| 351/370 [00:36<00:01,  9.81it/s]
 95%|#########5| 352/370 [00:36<00:01,  9.70it/s]
 95%|#########5| 353/370 [00:36<00:01,  9.67it/s]
 96%|#########5| 354/370 [00:36<00:01,  9.65it/s]
 96%|#########5| 355/370 [00:36<00:01,  9.64it/s]
 96%|#########6| 356/370 [00:36<00:01,  9.64it/s]
 96%|#########6| 357/370 [00:36<00:01,  9.53it/s]
 97%|#########6| 358/370 [00:36<00:01,  9.55it/s]
 97%|#########7| 359/370 [00:37<00:01,  9.57it/s]
 98%|#########7| 361/370 [00:37<00:00,  9.68it/s]
 98%|#########7| 362/370 [00:37<00:00,  9.57it/s]
 98%|#########8| 363/370 [00:37<00:00,  9.49it/s]
 98%|#########8| 364/370 [00:37<00:00,  9.52it/s]
 99%|#########8| 365/370 [00:37<00:00,  9.55it/s]
 99%|#########8| 366/370 [00:37<00:00,  9.57it/s]
 99%|#########9| 368/370 [00:37<00:00,  9.76it/s]
100%|#########9| 369/370 [00:38<00:00,  9.81it/s]
100%|##########| 370/370 [00:38<00:00,  9.70it/s]
<shap.explainers._kernel.Kernel object at 0x7fa22a455b50>
explainer.plot_shap_values()
shap results

explainer.waterfall_plot_single_example(27)

#%%

explainer.waterfall_plot_single_example(28)

#%%

explainer.waterfall_plot_single_example(29)

#%%

explainer.waterfall_plot_single_example(30)

#%%

explainer.waterfall_plot_single_example(31)

#%%

explainer.waterfall_plot_single_example(32)

#%%

explainer.waterfall_plot_single_example(33)

#explainer.beeswarm_plot()
#explainer.heatmap()
explainer.summary_plot(plot_type="dot")
shap results
explainer.summary_plot(plot_type="bar")
shap results
explainer.summary_plot(plot_type="violin")
shap results
explainer.dependence_plot_all_features()
shap results
# explainer.scatter_plot_all_features()
## Kernel Explainer
# ------------------
explainer = MyShapExpaliner(model=model,
                         data=x,
                         train_data=x,
                         feature_names=model.input_features,
                          explainer="KernelExplainer",
                         # save=False
                         )
print(explainer.explainer)
  0%|          | 0/370 [00:00<?, ?it/s]
  1%|          | 2/370 [00:00<00:33, 11.03it/s]
  1%|1         | 4/370 [00:00<00:35, 10.35it/s]
  2%|1         | 6/370 [00:00<00:35, 10.19it/s]
  2%|2         | 8/370 [00:00<00:35, 10.11it/s]
  3%|2         | 10/370 [00:00<00:35, 10.07it/s]
  3%|3         | 12/370 [00:01<00:35, 10.05it/s]
  4%|3         | 14/370 [00:01<00:35, 10.03it/s]
  4%|4         | 16/370 [00:01<00:35, 10.02it/s]
  5%|4         | 18/370 [00:01<00:35,  9.95it/s]
  5%|5         | 20/370 [00:01<00:35,  9.97it/s]
  6%|5         | 22/370 [00:02<00:34,  9.98it/s]
  6%|6         | 23/370 [00:02<00:34,  9.98it/s]
  7%|6         | 25/370 [00:02<00:34,  9.99it/s]
  7%|7         | 27/370 [00:02<00:34,  9.99it/s]
  8%|7         | 29/370 [00:02<00:34,  9.99it/s]
  8%|8         | 31/370 [00:03<00:33, 10.00it/s]
  9%|8         | 33/370 [00:03<00:33, 10.00it/s]
  9%|9         | 35/370 [00:03<00:33, 10.00it/s]
 10%|9         | 36/370 [00:03<00:33,  9.85it/s]
 10%|#         | 37/370 [00:03<00:33,  9.81it/s]
 10%|#         | 38/370 [00:03<00:33,  9.85it/s]
 11%|#         | 39/370 [00:03<00:33,  9.79it/s]
 11%|#         | 40/370 [00:04<00:33,  9.75it/s]
 11%|#1        | 41/370 [00:04<00:33,  9.71it/s]
 11%|#1        | 42/370 [00:04<00:33,  9.68it/s]
 12%|#1        | 44/370 [00:04<00:33,  9.82it/s]
 12%|#2        | 45/370 [00:04<00:32,  9.86it/s]
 13%|#2        | 47/370 [00:04<00:32,  9.92it/s]
 13%|#3        | 49/370 [00:04<00:32,  9.95it/s]
 14%|#3        | 50/370 [00:05<00:32,  9.96it/s]
 14%|#4        | 52/370 [00:05<00:31,  9.98it/s]
 15%|#4        | 54/370 [00:05<00:31,  9.98it/s]
 15%|#4        | 55/370 [00:05<00:31,  9.99it/s]
 15%|#5        | 57/370 [00:05<00:31,  9.99it/s]
 16%|#5        | 59/370 [00:05<00:31,  9.99it/s]
 16%|#6        | 60/370 [00:06<00:31, 10.00it/s]
 17%|#6        | 62/370 [00:06<00:30, 10.00it/s]
 17%|#7        | 64/370 [00:06<00:30, 10.00it/s]
 18%|#7        | 66/370 [00:06<00:30,  9.93it/s]
 18%|#8        | 68/370 [00:06<00:30,  9.95it/s]
 19%|#8        | 69/370 [00:06<00:30,  9.89it/s]
 19%|#8        | 70/370 [00:07<00:30,  9.83it/s]
 19%|#9        | 71/370 [00:07<00:30,  9.78it/s]
 19%|#9        | 72/370 [00:07<00:30,  9.74it/s]
 20%|#9        | 73/370 [00:07<00:30,  9.75it/s]
 20%|##        | 74/370 [00:07<00:30,  9.77it/s]
 21%|##        | 76/370 [00:07<00:30,  9.79it/s]
 21%|##        | 77/370 [00:07<00:30,  9.75it/s]
 21%|##1       | 79/370 [00:07<00:29,  9.85it/s]
 22%|##1       | 80/370 [00:08<00:29,  9.88it/s]
 22%|##1       | 81/370 [00:08<00:29,  9.82it/s]
 22%|##2       | 82/370 [00:08<00:29,  9.67it/s]
 22%|##2       | 83/370 [00:08<00:29,  9.65it/s]
 23%|##2       | 84/370 [00:08<00:32,  8.88it/s]
 23%|##2       | 85/370 [00:08<00:32,  8.90it/s]
 23%|##3       | 86/370 [00:08<00:31,  9.09it/s]
 24%|##3       | 87/370 [00:08<00:30,  9.24it/s]
 24%|##3       | 88/370 [00:08<00:30,  9.35it/s]
 24%|##4       | 90/370 [00:09<00:29,  9.63it/s]
 25%|##4       | 92/370 [00:09<00:28,  9.78it/s]
 25%|##5       | 93/370 [00:09<00:28,  9.82it/s]
 26%|##5       | 95/370 [00:09<00:28,  9.82it/s]
 26%|##5       | 96/370 [00:09<00:28,  9.77it/s]
 26%|##6       | 97/370 [00:09<00:27,  9.82it/s]
 27%|##6       | 99/370 [00:10<00:27,  9.90it/s]
 27%|##7       | 100/370 [00:10<00:27,  9.83it/s]
 27%|##7       | 101/370 [00:10<00:27,  9.78it/s]
 28%|##7       | 102/370 [00:10<00:27,  9.74it/s]
 28%|##8       | 104/370 [00:10<00:29,  8.92it/s]
 28%|##8       | 105/370 [00:10<00:31,  8.33it/s]
 29%|##8       | 106/370 [00:10<00:30,  8.55it/s]
 29%|##9       | 108/370 [00:11<00:28,  9.10it/s]
 30%|##9       | 110/370 [00:11<00:27,  9.41it/s]
 30%|###       | 112/370 [00:11<00:27,  9.55it/s]
 31%|###       | 113/370 [00:11<00:26,  9.56it/s]
 31%|###1      | 115/370 [00:11<00:26,  9.71it/s]
 31%|###1      | 116/370 [00:11<00:26,  9.69it/s]
 32%|###1      | 117/370 [00:11<00:26,  9.68it/s]
 32%|###1      | 118/370 [00:12<00:26,  9.69it/s]
 32%|###2      | 119/370 [00:12<00:26,  9.64it/s]
 33%|###2      | 121/370 [00:12<00:25,  9.79it/s]
 33%|###3      | 123/370 [00:12<00:25,  9.87it/s]
 34%|###3      | 124/370 [00:12<00:25,  9.81it/s]
 34%|###3      | 125/370 [00:12<00:25,  9.77it/s]
 34%|###4      | 126/370 [00:12<00:25,  9.73it/s]
 34%|###4      | 127/370 [00:12<00:25,  9.70it/s]
 35%|###4      | 129/370 [00:13<00:24,  9.74it/s]
 35%|###5      | 130/370 [00:13<00:24,  9.71it/s]
 36%|###5      | 132/370 [00:13<00:24,  9.75it/s]
 36%|###5      | 133/370 [00:13<00:24,  9.75it/s]
 36%|###6      | 134/370 [00:13<00:24,  9.77it/s]
 37%|###6      | 136/370 [00:13<00:23,  9.87it/s]
 37%|###7      | 138/370 [00:14<00:23,  9.91it/s]
 38%|###7      | 139/370 [00:14<00:23,  9.85it/s]
 38%|###8      | 141/370 [00:14<00:23,  9.91it/s]
 38%|###8      | 142/370 [00:14<00:25,  9.05it/s]
 39%|###8      | 143/370 [00:14<00:24,  9.22it/s]
 39%|###9      | 145/370 [00:14<00:23,  9.52it/s]
 40%|###9      | 147/370 [00:15<00:23,  9.69it/s]
 40%|####      | 149/370 [00:15<00:22,  9.79it/s]
 41%|####      | 151/370 [00:15<00:22,  9.86it/s]
 41%|####1     | 153/370 [00:15<00:21,  9.90it/s]
 42%|####1     | 155/370 [00:15<00:21,  9.87it/s]
 42%|####2     | 156/370 [00:15<00:21,  9.88it/s]
 42%|####2     | 157/370 [00:16<00:21,  9.84it/s]
 43%|####2     | 158/370 [00:16<00:21,  9.82it/s]
 43%|####2     | 159/370 [00:16<00:21,  9.83it/s]
 43%|####3     | 160/370 [00:16<00:21,  9.77it/s]
 44%|####3     | 161/370 [00:16<00:21,  9.73it/s]
 44%|####3     | 162/370 [00:16<00:21,  9.70it/s]
 44%|####4     | 163/370 [00:16<00:21,  9.68it/s]
 44%|####4     | 164/370 [00:16<00:21,  9.66it/s]
 45%|####4     | 165/370 [00:16<00:21,  9.65it/s]
 45%|####4     | 166/370 [00:16<00:21,  9.64it/s]
 45%|####5     | 167/370 [00:17<00:21,  9.63it/s]
 45%|####5     | 168/370 [00:17<00:20,  9.63it/s]
 46%|####5     | 169/370 [00:17<00:20,  9.62it/s]
 46%|####5     | 170/370 [00:17<00:20,  9.62it/s]
 46%|####6     | 171/370 [00:17<00:20,  9.62it/s]
 46%|####6     | 172/370 [00:17<00:20,  9.62it/s]
 47%|####7     | 174/370 [00:17<00:20,  9.79it/s]
 48%|####7     | 176/370 [00:18<00:19,  9.87it/s]
 48%|####8     | 178/370 [00:18<00:19,  9.92it/s]
 49%|####8     | 180/370 [00:18<00:19,  9.92it/s]
 49%|####8     | 181/370 [00:18<00:19,  9.89it/s]
 49%|####9     | 182/370 [00:18<00:19,  9.83it/s]
 50%|####9     | 184/370 [00:18<00:18,  9.89it/s]
 50%|#####     | 185/370 [00:18<00:18,  9.83it/s]
 50%|#####     | 186/370 [00:19<00:18,  9.78it/s]
 51%|#####     | 187/370 [00:19<00:18,  9.74it/s]
 51%|#####     | 188/370 [00:19<00:18,  9.81it/s]
 51%|#####1    | 190/370 [00:19<00:18,  9.89it/s]
 52%|#####1    | 192/370 [00:19<00:18,  9.86it/s]
 52%|#####2    | 193/370 [00:19<00:18,  9.80it/s]
 53%|#####2    | 195/370 [00:19<00:17,  9.88it/s]
 53%|#####3    | 197/370 [00:20<00:17,  9.85it/s]
 54%|#####3    | 198/370 [00:20<00:17,  9.80it/s]
 54%|#####3    | 199/370 [00:20<00:17,  9.85it/s]
 54%|#####4    | 201/370 [00:20<00:17,  9.83it/s]
 55%|#####4    | 202/370 [00:20<00:17,  9.78it/s]
 55%|#####5    | 204/370 [00:20<00:16,  9.87it/s]
 56%|#####5    | 206/370 [00:21<00:16,  9.91it/s]
 56%|#####6    | 208/370 [00:21<00:16,  9.94it/s]
 57%|#####6    | 210/370 [00:21<00:16,  9.96it/s]
 57%|#####7    | 212/370 [00:21<00:15,  9.97it/s]
 58%|#####7    | 214/370 [00:21<00:15,  9.92it/s]
 58%|#####8    | 215/370 [00:21<00:15,  9.86it/s]
 58%|#####8    | 216/370 [00:22<00:15,  9.73it/s]
 59%|#####8    | 217/370 [00:22<00:15,  9.71it/s]
 59%|#####9    | 219/370 [00:22<00:15,  9.82it/s]
 60%|#####9    | 221/370 [00:22<00:15,  9.88it/s]
 60%|######    | 223/370 [00:22<00:14,  9.92it/s]
 61%|######    | 225/370 [00:22<00:14,  9.95it/s]
 61%|######1   | 227/370 [00:23<00:14,  9.96it/s]
 62%|######1   | 229/370 [00:23<00:14,  9.98it/s]
 62%|######2   | 231/370 [00:23<00:13,  9.98it/s]
 63%|######2   | 232/370 [00:23<00:13,  9.92it/s]
 63%|######2   | 233/370 [00:23<00:13,  9.85it/s]
 63%|######3   | 234/370 [00:23<00:13,  9.80it/s]
 64%|######3   | 235/370 [00:24<00:15,  8.86it/s]
 64%|######3   | 236/370 [00:24<00:14,  9.09it/s]
 64%|######4   | 238/370 [00:24<00:14,  9.38it/s]
 65%|######4   | 239/370 [00:24<00:13,  9.43it/s]
 65%|######4   | 240/370 [00:24<00:13,  9.48it/s]
 65%|######5   | 241/370 [00:24<00:13,  9.51it/s]
 65%|######5   | 242/370 [00:24<00:13,  9.44it/s]
 66%|######5   | 243/370 [00:24<00:13,  9.39it/s]
 66%|######5   | 244/370 [00:24<00:13,  9.45it/s]
 66%|######6   | 246/370 [00:25<00:12,  9.69it/s]
 67%|######7   | 248/370 [00:25<00:12,  9.81it/s]
 68%|######7   | 250/370 [00:25<00:12,  9.88it/s]
 68%|######8   | 252/370 [00:25<00:11,  9.92it/s]
 69%|######8   | 254/370 [00:25<00:11,  9.95it/s]
 69%|######8   | 255/370 [00:26<00:11,  9.88it/s]
 69%|######9   | 256/370 [00:26<00:11,  9.74it/s]
 69%|######9   | 257/370 [00:26<00:11,  9.71it/s]
 70%|######9   | 258/370 [00:26<00:11,  9.69it/s]
 70%|#######   | 259/370 [00:26<00:11,  9.67it/s]
 71%|#######   | 261/370 [00:26<00:11,  9.81it/s]
 71%|#######   | 262/370 [00:26<00:11,  9.76it/s]
 71%|#######1  | 263/370 [00:26<00:11,  9.73it/s]
 72%|#######1  | 265/370 [00:27<00:10,  9.84it/s]
 72%|#######2  | 267/370 [00:27<00:10,  9.90it/s]
 73%|#######2  | 269/370 [00:27<00:10,  9.93it/s]
 73%|#######3  | 271/370 [00:27<00:09,  9.96it/s]
 74%|#######3  | 273/370 [00:27<00:09,  9.97it/s]
 74%|#######4  | 275/370 [00:28<00:09,  9.98it/s]
 75%|#######4  | 276/370 [00:28<00:09,  9.91it/s]
 75%|#######4  | 277/370 [00:28<00:09,  9.85it/s]
 75%|#######5  | 278/370 [00:28<00:09,  9.79it/s]
 76%|#######5  | 280/370 [00:28<00:09,  9.87it/s]
 76%|#######6  | 282/370 [00:28<00:08,  9.92it/s]
 76%|#######6  | 283/370 [00:28<00:08,  9.91it/s]
 77%|#######6  | 284/370 [00:29<00:08,  9.87it/s]
 77%|#######7  | 285/370 [00:29<00:08,  9.81it/s]
 77%|#######7  | 286/370 [00:29<00:08,  9.86it/s]
 78%|#######7  | 288/370 [00:29<00:08,  9.92it/s]
 78%|#######8  | 290/370 [00:29<00:08,  9.87it/s]
 79%|#######8  | 291/370 [00:29<00:08,  9.82it/s]
 79%|#######8  | 292/370 [00:29<00:07,  9.77it/s]
 79%|#######9  | 293/370 [00:29<00:07,  9.73it/s]
 80%|#######9  | 295/370 [00:30<00:07,  9.84it/s]
 80%|########  | 297/370 [00:30<00:07,  9.90it/s]
 81%|########  | 298/370 [00:30<00:07,  9.90it/s]
 81%|########1 | 300/370 [00:30<00:07,  9.96it/s]
 82%|########1 | 302/370 [00:30<00:06,  9.97it/s]
 82%|########2 | 304/370 [00:31<00:06,  9.98it/s]
 83%|########2 | 306/370 [00:31<00:06,  9.99it/s]
 83%|########2 | 307/370 [00:31<00:06,  9.92it/s]
 83%|########3 | 308/370 [00:31<00:06,  9.85it/s]
 84%|########3 | 309/370 [00:31<00:06,  9.80it/s]
 84%|########3 | 310/370 [00:31<00:06,  9.75it/s]
 84%|########4 | 311/370 [00:31<00:06,  9.71it/s]
 85%|########4 | 313/370 [00:31<00:05,  9.83it/s]
 85%|########5 | 315/370 [00:32<00:05,  9.90it/s]
 85%|########5 | 316/370 [00:32<00:05,  9.84it/s]
 86%|########5 | 317/370 [00:32<00:05,  9.78it/s]
 86%|########5 | 318/370 [00:32<00:05,  9.74it/s]
 86%|########6 | 319/370 [00:32<00:05,  9.71it/s]
 86%|########6 | 320/370 [00:32<00:05,  9.68it/s]
 87%|########6 | 321/370 [00:32<00:05,  9.66it/s]
 87%|########7 | 322/370 [00:32<00:04,  9.65it/s]
 87%|########7 | 323/370 [00:32<00:04,  9.64it/s]
 88%|########7 | 324/370 [00:33<00:04,  9.63it/s]
 88%|########7 | 325/370 [00:33<00:04,  9.63it/s]
 88%|########8 | 327/370 [00:33<00:04,  9.80it/s]
 89%|########8 | 328/370 [00:33<00:04,  9.75it/s]
 89%|########8 | 329/370 [00:33<00:04,  9.71it/s]
 89%|########9 | 330/370 [00:33<00:04,  9.71it/s]
 89%|########9 | 331/370 [00:33<00:03,  9.77it/s]
 90%|######### | 333/370 [00:34<00:03,  9.87it/s]
 90%|######### | 334/370 [00:34<00:03,  9.90it/s]
 91%|######### | 335/370 [00:34<00:03,  9.54it/s]
 91%|######### | 336/370 [00:34<00:03,  9.66it/s]
 91%|#########1| 337/370 [00:34<00:03,  9.55it/s]
 91%|#########1| 338/370 [00:34<00:03,  9.56it/s]
 92%|#########1| 339/370 [00:34<00:03,  9.58it/s]
 92%|#########1| 340/370 [00:34<00:03,  9.59it/s]
 92%|#########2| 341/370 [00:34<00:03,  9.49it/s]
 92%|#########2| 342/370 [00:34<00:02,  9.53it/s]
 93%|#########2| 344/370 [00:35<00:02,  9.74it/s]
 94%|#########3| 346/370 [00:35<00:02,  9.84it/s]
 94%|#########4| 348/370 [00:35<00:02,  9.90it/s]
 95%|#########4| 350/370 [00:35<00:02,  9.93it/s]
 95%|#########5| 352/370 [00:35<00:01,  9.95it/s]
 96%|#########5| 354/370 [00:36<00:01,  9.97it/s]
 96%|#########5| 355/370 [00:36<00:01,  9.95it/s]
 96%|#########6| 356/370 [00:36<00:01,  9.90it/s]
 96%|#########6| 357/370 [00:36<00:01,  9.75it/s]
 97%|#########6| 358/370 [00:36<00:01,  9.72it/s]
 97%|#########7| 360/370 [00:36<00:01,  9.83it/s]
 98%|#########7| 362/370 [00:36<00:00,  9.89it/s]
 98%|#########8| 363/370 [00:37<00:00,  9.92it/s]
 99%|#########8| 365/370 [00:37<00:00,  9.87it/s]
 99%|#########8| 366/370 [00:37<00:00,  9.82it/s]
 99%|#########9| 368/370 [00:37<00:00,  9.89it/s]
100%|##########| 370/370 [00:37<00:00,  9.93it/s]
100%|##########| 370/370 [00:37<00:00,  9.79it/s]
<shap.explainers._kernel.Kernel object at 0x7fa22c489490>
explainer.plot_shap_values()
shap results
#explainer.beeswarm_plot()
explainer.summary_plot(plot_type="bar")
shap results
explainer.summary_plot(plot_type="dot")
shap results
explainer.summary_plot(plot_type="violin")
shap results
#explainer.heatmap()
#explainer.waterfall_plot_single_example(27)
explainer.dependence_plot_all_features()
shap results
#explainer.scatter_plot_all_features()

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

Gallery generated by Sphinx-Gallery