shap

import os

from shap import Explanation

import shap
import pandas as pd
from ai4water import Model
import matplotlib.pyplot as plt
from ai4water.postprocessing import ShapExplainer
shap.__version__

from sul1_utils import get_fitted_model, sul1_data
model = get_fitted_model(Model)
x, y, input_features, output_features = sul1_data()
********** Removing Examples with nan in labels  **********

***** Training *****
input_x shape:  (374, 6)
target shape:  (374, 1)
class MyShapExplainer(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

    def waterfall_plot_single_example(
            self,
            example_index: int,
            name: str = "waterfall",
            max_display: int = 10,
    ):
        """draws and saves waterfall_ plot
         for one example.
        The waterfall plots are based upon SHAP values and show the
        contribution by each feature in model's prediction. It shows which
        feature pushed the prediction in which direction. They answer the
        question, why the ML model simply did not predict mean of training y
        instead of what it predicted. The mean of training observations that
        the ML model saw during training is called base value or expected value.
        Arguments:
            example_index : int
                index of example to use
            max_display : int
                maximu features to display
            name : str
                name of plot
        .. _waterfall:
            https://shap.readthedocs.io/en/latest/generated/shap.plots.waterfall.html
        """
        if self.explainer.__class__.__name__ in ["Deep", "Kernel"]:
            shap_vals_as_exp = None
        else:
            shap_vals_as_exp = self.explainer(self.data)

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

        plt.close('all')

        if shap_vals_as_exp is None:

            features = self.features
            if not self.data_is_2d:
                features = self.unrolled_features

            # waterfall plot expects first argument as Explaination class
            # which must have at least these attributes (values, data, feature_names, base_values)
            # https://github.com/slundberg/shap/issues/1420#issuecomment-715190610
            if not self.data_is_2d:  # if original data is 3d then we flat it into 1d array
                values = shap_values[example_index].reshape(-1, )
                data = self.data[example_index].reshape(-1, )
            else:
                values = shap_values[example_index]
                data = self.data.iloc[example_index]

            exp_value = self.explainer.expected_value
            if self.explainer.__class__.__name__ in ["Kernel"]:
                pass
            else:
                exp_value = exp_value[0]

            e = Explanation(
                values,
                base_values=exp_value,
                data=data,
                feature_names=features
            )

            shap.plots.waterfall(e, show=False, max_display=max_display)
        else:
            shap.plots.waterfall(shap_vals_as_exp[example_index], show=False, max_display=max_display)

        if self.save:
            plt.savefig(os.path.join(self.path, f"{name}_{example_index}"),
                        dpi=300,
                        bbox_inches="tight")

        if self.show:
            plt.show()

        return
explainer = MyShapExplainer(model=model,
                         data=x,
                         train_data=x,
                         feature_names=model.input_features,
                          #save=False
                         )
explainer.explainer
  0%|          | 0/371 [00:00<?, ?it/s]
  1%|          | 2/371 [00:00<00:35, 10.35it/s]
  1%|1         | 4/371 [00:00<00:39,  9.29it/s]
  1%|1         | 5/371 [00:00<00:40,  9.05it/s]
  2%|1         | 6/371 [00:00<00:40,  8.92it/s]
  2%|1         | 7/371 [00:00<00:41,  8.84it/s]
  2%|2         | 8/371 [00:00<00:41,  8.76it/s]
  2%|2         | 9/371 [00:01<00:41,  8.72it/s]
  3%|2         | 10/371 [00:01<00:41,  8.69it/s]
  3%|2         | 11/371 [00:01<00:41,  8.67it/s]
  3%|3         | 12/371 [00:01<00:41,  8.65it/s]
  4%|3         | 13/371 [00:01<00:41,  8.64it/s]
  4%|3         | 14/371 [00:01<00:41,  8.64it/s]
  4%|4         | 15/371 [00:01<00:41,  8.63it/s]
  4%|4         | 16/371 [00:01<00:41,  8.63it/s]
  5%|4         | 17/371 [00:01<00:41,  8.63it/s]
  5%|4         | 18/371 [00:02<00:40,  8.62it/s]
  5%|5         | 19/371 [00:02<00:40,  8.62it/s]
  5%|5         | 20/371 [00:02<00:40,  8.62it/s]
  6%|5         | 21/371 [00:02<00:40,  8.62it/s]
  6%|5         | 22/371 [00:02<00:40,  8.62it/s]
  6%|6         | 23/371 [00:02<00:40,  8.62it/s]
  6%|6         | 24/371 [00:02<00:40,  8.62it/s]
  7%|6         | 25/371 [00:02<00:40,  8.62it/s]
  7%|7         | 26/371 [00:02<00:40,  8.62it/s]
  7%|7         | 27/371 [00:03<00:39,  8.62it/s]
  8%|7         | 28/371 [00:03<00:39,  8.62it/s]
  8%|7         | 29/371 [00:03<00:39,  8.62it/s]
  8%|8         | 30/371 [00:03<00:39,  8.62it/s]
  8%|8         | 31/371 [00:03<00:39,  8.62it/s]
  9%|8         | 32/371 [00:03<00:39,  8.62it/s]
  9%|8         | 33/371 [00:03<00:39,  8.62it/s]
  9%|9         | 34/371 [00:03<00:39,  8.62it/s]
  9%|9         | 35/371 [00:04<00:38,  8.62it/s]
 10%|9         | 36/371 [00:04<00:38,  8.62it/s]
 10%|9         | 37/371 [00:04<00:38,  8.62it/s]
 10%|#         | 38/371 [00:04<00:38,  8.62it/s]
 11%|#         | 39/371 [00:04<00:38,  8.62it/s]
 11%|#         | 40/371 [00:04<00:38,  8.62it/s]
 11%|#1        | 41/371 [00:04<00:38,  8.62it/s]
 11%|#1        | 42/371 [00:04<00:38,  8.62it/s]
 12%|#1        | 43/371 [00:04<00:38,  8.62it/s]
 12%|#1        | 44/371 [00:05<00:37,  8.62it/s]
 12%|#2        | 45/371 [00:05<00:37,  8.62it/s]
 12%|#2        | 46/371 [00:05<00:37,  8.62it/s]
 13%|#2        | 47/371 [00:05<00:37,  8.62it/s]
 13%|#2        | 48/371 [00:05<00:37,  8.62it/s]
 13%|#3        | 49/371 [00:05<00:37,  8.62it/s]
 13%|#3        | 50/371 [00:05<00:37,  8.62it/s]
 14%|#3        | 51/371 [00:05<00:37,  8.62it/s]
 14%|#4        | 52/371 [00:05<00:37,  8.62it/s]
 14%|#4        | 53/371 [00:06<00:36,  8.62it/s]
 15%|#4        | 54/371 [00:06<00:36,  8.62it/s]
 15%|#4        | 55/371 [00:06<00:36,  8.62it/s]
 15%|#5        | 56/371 [00:06<00:36,  8.62it/s]
 15%|#5        | 57/371 [00:06<00:36,  8.61it/s]
 16%|#5        | 58/371 [00:06<00:36,  8.62it/s]
 16%|#5        | 59/371 [00:06<00:36,  8.62it/s]
 16%|#6        | 60/371 [00:06<00:36,  8.62it/s]
 16%|#6        | 61/371 [00:07<00:35,  8.62it/s]
 17%|#6        | 62/371 [00:07<00:35,  8.62it/s]
 17%|#6        | 63/371 [00:07<00:35,  8.62it/s]
 17%|#7        | 64/371 [00:07<00:35,  8.62it/s]
 18%|#7        | 65/371 [00:07<00:35,  8.62it/s]
 18%|#7        | 66/371 [00:07<00:35,  8.62it/s]
 18%|#8        | 67/371 [00:07<00:35,  8.62it/s]
 18%|#8        | 68/371 [00:07<00:35,  8.62it/s]
 19%|#8        | 69/371 [00:07<00:35,  8.62it/s]
 19%|#8        | 70/371 [00:08<00:34,  8.62it/s]
 19%|#9        | 71/371 [00:08<00:34,  8.62it/s]
 19%|#9        | 72/371 [00:08<00:34,  8.62it/s]
 20%|#9        | 73/371 [00:08<00:34,  8.62it/s]
 20%|#9        | 74/371 [00:08<00:34,  8.62it/s]
 20%|##        | 75/371 [00:08<00:34,  8.62it/s]
 20%|##        | 76/371 [00:08<00:34,  8.62it/s]
 21%|##        | 77/371 [00:08<00:34,  8.62it/s]
 21%|##1       | 78/371 [00:09<00:33,  8.62it/s]
 21%|##1       | 79/371 [00:09<00:33,  8.62it/s]
 22%|##1       | 80/371 [00:09<00:33,  8.60it/s]
 22%|##1       | 81/371 [00:09<00:33,  8.63it/s]
 22%|##2       | 82/371 [00:09<00:33,  8.63it/s]
 22%|##2       | 83/371 [00:09<00:33,  8.63it/s]
 23%|##2       | 84/371 [00:09<00:33,  8.62it/s]
 23%|##2       | 85/371 [00:09<00:33,  8.62it/s]
 23%|##3       | 86/371 [00:09<00:33,  8.62it/s]
 23%|##3       | 87/371 [00:10<00:32,  8.62it/s]
 24%|##3       | 88/371 [00:10<00:32,  8.62it/s]
 24%|##3       | 89/371 [00:10<00:32,  8.62it/s]
 24%|##4       | 90/371 [00:10<00:32,  8.62it/s]
 25%|##4       | 91/371 [00:10<00:32,  8.62it/s]
 25%|##4       | 92/371 [00:10<00:32,  8.62it/s]
 25%|##5       | 93/371 [00:10<00:32,  8.62it/s]
 25%|##5       | 94/371 [00:10<00:32,  8.62it/s]
 26%|##5       | 95/371 [00:10<00:32,  8.62it/s]
 26%|##5       | 96/371 [00:11<00:31,  8.62it/s]
 26%|##6       | 97/371 [00:11<00:31,  8.62it/s]
 26%|##6       | 98/371 [00:11<00:31,  8.62it/s]
 27%|##6       | 99/371 [00:11<00:31,  8.62it/s]
 27%|##6       | 100/371 [00:11<00:31,  8.62it/s]
 27%|##7       | 101/371 [00:11<00:31,  8.62it/s]
 27%|##7       | 102/371 [00:11<00:31,  8.60it/s]
 28%|##7       | 103/371 [00:11<00:31,  8.63it/s]
 28%|##8       | 104/371 [00:12<00:30,  8.62it/s]
 28%|##8       | 105/371 [00:12<00:30,  8.63it/s]
 29%|##8       | 106/371 [00:12<00:30,  8.62it/s]
 29%|##8       | 107/371 [00:12<00:30,  8.62it/s]
 29%|##9       | 108/371 [00:12<00:30,  8.62it/s]
 29%|##9       | 109/371 [00:12<00:30,  8.62it/s]
 30%|##9       | 110/371 [00:12<00:30,  8.62it/s]
 30%|##9       | 111/371 [00:12<00:30,  8.62it/s]
 30%|###       | 112/371 [00:12<00:30,  8.62it/s]
 30%|###       | 113/371 [00:13<00:29,  8.62it/s]
 31%|###       | 114/371 [00:13<00:29,  8.62it/s]
 31%|###       | 115/371 [00:13<00:29,  8.62it/s]
 31%|###1      | 116/371 [00:13<00:29,  8.62it/s]
 32%|###1      | 117/371 [00:13<00:29,  8.62it/s]
 32%|###1      | 118/371 [00:13<00:29,  8.62it/s]
 32%|###2      | 119/371 [00:13<00:29,  8.62it/s]
 32%|###2      | 120/371 [00:13<00:29,  8.62it/s]
 33%|###2      | 121/371 [00:13<00:28,  8.62it/s]
 33%|###2      | 122/371 [00:14<00:28,  8.62it/s]
 33%|###3      | 123/371 [00:14<00:28,  8.62it/s]
 33%|###3      | 124/371 [00:14<00:28,  8.62it/s]
 34%|###3      | 125/371 [00:14<00:28,  8.62it/s]
 34%|###3      | 126/371 [00:14<00:28,  8.62it/s]
 34%|###4      | 127/371 [00:14<00:28,  8.62it/s]
 35%|###4      | 128/371 [00:14<00:28,  8.62it/s]
 35%|###4      | 129/371 [00:14<00:28,  8.62it/s]
 35%|###5      | 130/371 [00:15<00:27,  8.62it/s]
 35%|###5      | 131/371 [00:15<00:27,  8.62it/s]
 36%|###5      | 132/371 [00:15<00:27,  8.62it/s]
 36%|###5      | 133/371 [00:15<00:27,  8.62it/s]
 36%|###6      | 134/371 [00:15<00:27,  8.62it/s]
 36%|###6      | 135/371 [00:15<00:27,  8.62it/s]
 37%|###6      | 136/371 [00:15<00:27,  8.64it/s]
 37%|###6      | 137/371 [00:15<00:29,  7.94it/s]
 37%|###7      | 138/371 [00:16<00:28,  8.17it/s]
 37%|###7      | 139/371 [00:16<00:28,  8.28it/s]
 38%|###7      | 140/371 [00:16<00:27,  8.38it/s]
 38%|###8      | 141/371 [00:16<00:27,  8.45it/s]
 38%|###8      | 142/371 [00:16<00:26,  8.50it/s]
 39%|###8      | 143/371 [00:16<00:26,  8.54it/s]
 39%|###8      | 144/371 [00:16<00:26,  8.56it/s]
 39%|###9      | 145/371 [00:16<00:26,  8.58it/s]
 39%|###9      | 146/371 [00:16<00:26,  8.59it/s]
 40%|###9      | 147/371 [00:17<00:26,  8.60it/s]
 40%|###9      | 148/371 [00:17<00:25,  8.61it/s]
 40%|####      | 149/371 [00:17<00:25,  8.61it/s]
 40%|####      | 150/371 [00:17<00:27,  7.92it/s]
 41%|####      | 151/371 [00:17<00:26,  8.16it/s]
 41%|####      | 152/371 [00:17<00:26,  8.29it/s]
 41%|####1     | 153/371 [00:17<00:25,  8.39it/s]
 42%|####1     | 154/371 [00:17<00:25,  8.46it/s]
 42%|####1     | 155/371 [00:18<00:25,  8.51it/s]
 42%|####2     | 156/371 [00:18<00:25,  8.54it/s]
 42%|####2     | 157/371 [00:18<00:24,  8.56it/s]
 43%|####2     | 158/371 [00:18<00:24,  8.58it/s]
 43%|####2     | 159/371 [00:18<00:24,  8.59it/s]
 43%|####3     | 160/371 [00:18<00:24,  8.60it/s]
 43%|####3     | 161/371 [00:18<00:24,  8.61it/s]
 44%|####3     | 162/371 [00:18<00:24,  8.61it/s]
 44%|####3     | 163/371 [00:18<00:24,  8.61it/s]
 44%|####4     | 164/371 [00:19<00:24,  8.62it/s]
 44%|####4     | 165/371 [00:19<00:23,  8.62it/s]
 45%|####4     | 166/371 [00:19<00:23,  8.62it/s]
 45%|####5     | 167/371 [00:19<00:23,  8.62it/s]
 45%|####5     | 168/371 [00:19<00:23,  8.62it/s]
 46%|####5     | 169/371 [00:19<00:23,  8.62it/s]
 46%|####5     | 170/371 [00:19<00:23,  8.62it/s]
 46%|####6     | 171/371 [00:19<00:23,  8.62it/s]
 46%|####6     | 172/371 [00:19<00:23,  8.62it/s]
 47%|####6     | 173/371 [00:20<00:22,  8.62it/s]
 47%|####6     | 174/371 [00:20<00:22,  8.62it/s]
 47%|####7     | 175/371 [00:20<00:22,  8.62it/s]
 47%|####7     | 176/371 [00:20<00:22,  8.62it/s]
 48%|####7     | 177/371 [00:20<00:22,  8.62it/s]
 48%|####7     | 178/371 [00:20<00:22,  8.62it/s]
 48%|####8     | 179/371 [00:20<00:22,  8.62it/s]
 49%|####8     | 180/371 [00:20<00:22,  8.62it/s]
 49%|####8     | 181/371 [00:21<00:22,  8.62it/s]
 49%|####9     | 182/371 [00:21<00:21,  8.62it/s]
 49%|####9     | 183/371 [00:21<00:21,  8.62it/s]
 50%|####9     | 184/371 [00:21<00:21,  8.62it/s]
 50%|####9     | 185/371 [00:21<00:21,  8.62it/s]
 50%|#####     | 186/371 [00:21<00:21,  8.62it/s]
 50%|#####     | 187/371 [00:21<00:23,  7.84it/s]
 51%|#####     | 188/371 [00:21<00:22,  8.11it/s]
 51%|#####     | 189/371 [00:21<00:22,  8.25it/s]
 51%|#####1    | 190/371 [00:22<00:21,  8.36it/s]
 51%|#####1    | 191/371 [00:22<00:21,  8.35it/s]
 52%|#####1    | 192/371 [00:22<00:21,  8.43it/s]
 52%|#####2    | 193/371 [00:22<00:20,  8.49it/s]
 52%|#####2    | 194/371 [00:22<00:20,  8.53it/s]
 53%|#####2    | 195/371 [00:22<00:20,  8.55it/s]
 53%|#####2    | 196/371 [00:22<00:20,  8.58it/s]
 53%|#####3    | 197/371 [00:22<00:20,  8.59it/s]
 53%|#####3    | 198/371 [00:23<00:20,  8.60it/s]
 54%|#####3    | 199/371 [00:23<00:19,  8.60it/s]
 54%|#####3    | 200/371 [00:23<00:19,  8.59it/s]
 54%|#####4    | 201/371 [00:23<00:19,  8.53it/s]
 54%|#####4    | 202/371 [00:23<00:19,  8.56it/s]
 55%|#####4    | 203/371 [00:23<00:19,  8.58it/s]
 55%|#####4    | 204/371 [00:23<00:19,  8.59it/s]
 55%|#####5    | 205/371 [00:23<00:19,  8.58it/s]
 56%|#####5    | 206/371 [00:23<00:19,  8.61it/s]
 56%|#####5    | 207/371 [00:24<00:19,  8.61it/s]
 56%|#####6    | 208/371 [00:24<00:18,  8.61it/s]
 56%|#####6    | 209/371 [00:24<00:18,  8.53it/s]
 57%|#####6    | 210/371 [00:24<00:18,  8.56it/s]
 57%|#####6    | 211/371 [00:24<00:18,  8.57it/s]
 57%|#####7    | 212/371 [00:24<00:18,  8.50it/s]
 57%|#####7    | 213/371 [00:24<00:18,  8.54it/s]
 58%|#####7    | 214/371 [00:24<00:18,  8.56it/s]
 58%|#####7    | 215/371 [00:25<00:18,  8.58it/s]
 58%|#####8    | 216/371 [00:25<00:17,  8.62it/s]
 58%|#####8    | 217/371 [00:25<00:18,  8.50it/s]
 59%|#####8    | 218/371 [00:25<00:18,  8.45it/s]
 59%|#####9    | 219/371 [00:25<00:17,  8.50it/s]
 59%|#####9    | 220/371 [00:25<00:17,  8.54it/s]
 60%|#####9    | 221/371 [00:25<00:17,  8.56it/s]
 60%|#####9    | 222/371 [00:25<00:17,  8.58it/s]
 60%|######    | 223/371 [00:25<00:17,  8.59it/s]
 60%|######    | 224/371 [00:26<00:17,  8.60it/s]
 61%|######    | 225/371 [00:26<00:16,  8.61it/s]
 61%|######    | 226/371 [00:26<00:16,  8.61it/s]
 61%|######1   | 227/371 [00:26<00:16,  8.61it/s]
 61%|######1   | 228/371 [00:26<00:16,  8.62it/s]
 62%|######1   | 229/371 [00:26<00:16,  8.51it/s]
 62%|######1   | 230/371 [00:26<00:16,  8.47it/s]
 62%|######2   | 231/371 [00:26<00:17,  7.83it/s]
 63%|######2   | 232/371 [00:27<00:17,  8.10it/s]
 63%|######2   | 233/371 [00:27<00:16,  8.17it/s]
 63%|######3   | 234/371 [00:27<00:16,  8.22it/s]
 63%|######3   | 235/371 [00:27<00:16,  8.24it/s]
 64%|######3   | 236/371 [00:27<00:16,  8.36it/s]
 64%|######3   | 237/371 [00:27<00:15,  8.44it/s]
 64%|######4   | 238/371 [00:27<00:15,  8.40it/s]
 64%|######4   | 239/371 [00:27<00:15,  8.38it/s]
 65%|######4   | 240/371 [00:27<00:15,  8.45it/s]
 65%|######4   | 241/371 [00:28<00:15,  8.50it/s]
 65%|######5   | 242/371 [00:28<00:15,  8.54it/s]
 65%|######5   | 243/371 [00:28<00:14,  8.56it/s]
 66%|######5   | 244/371 [00:28<00:14,  8.58it/s]
 66%|######6   | 245/371 [00:28<00:14,  8.59it/s]
 66%|######6   | 246/371 [00:28<00:14,  8.51it/s]
 67%|######6   | 247/371 [00:28<00:14,  8.55it/s]
 67%|######6   | 248/371 [00:28<00:14,  8.57it/s]
 67%|######7   | 249/371 [00:29<00:14,  8.58it/s]
 67%|######7   | 250/371 [00:29<00:14,  8.51it/s]
 68%|######7   | 251/371 [00:29<00:14,  8.45it/s]
 68%|######7   | 252/371 [00:29<00:14,  8.42it/s]
 68%|######8   | 253/371 [00:29<00:13,  8.48it/s]
 68%|######8   | 254/371 [00:29<00:13,  8.52it/s]
 69%|######8   | 255/371 [00:29<00:13,  8.55it/s]
 69%|######9   | 256/371 [00:29<00:13,  8.48it/s]
 69%|######9   | 257/371 [00:29<00:13,  8.53it/s]
 70%|######9   | 258/371 [00:30<00:13,  8.55it/s]
 70%|######9   | 259/371 [00:30<00:13,  8.57it/s]
 70%|#######   | 260/371 [00:30<00:12,  8.59it/s]
 70%|#######   | 261/371 [00:30<00:12,  8.60it/s]
 71%|#######   | 262/371 [00:30<00:12,  8.60it/s]
 71%|#######   | 263/371 [00:30<00:12,  8.52it/s]
 71%|#######1  | 264/371 [00:30<00:12,  8.55it/s]
 71%|#######1  | 265/371 [00:30<00:12,  8.57it/s]
 72%|#######1  | 266/371 [00:31<00:12,  8.59it/s]
 72%|#######1  | 267/371 [00:31<00:12,  8.60it/s]
 72%|#######2  | 268/371 [00:31<00:11,  8.60it/s]
 73%|#######2  | 269/371 [00:31<00:11,  8.61it/s]
 73%|#######2  | 270/371 [00:31<00:11,  8.61it/s]
 73%|#######3  | 271/371 [00:31<00:11,  8.61it/s]
 73%|#######3  | 272/371 [00:31<00:11,  8.62it/s]
 74%|#######3  | 273/371 [00:31<00:11,  8.62it/s]
 74%|#######3  | 274/371 [00:31<00:11,  8.62it/s]
 74%|#######4  | 275/371 [00:32<00:11,  8.62it/s]
 74%|#######4  | 276/371 [00:32<00:11,  8.53it/s]
 75%|#######4  | 277/371 [00:32<00:10,  8.56it/s]
 75%|#######4  | 278/371 [00:32<00:10,  8.57it/s]
 75%|#######5  | 279/371 [00:32<00:10,  8.59it/s]
 75%|#######5  | 280/371 [00:32<00:10,  8.60it/s]
 76%|#######5  | 281/371 [00:32<00:10,  8.61it/s]
 76%|#######6  | 282/371 [00:32<00:10,  8.61it/s]
 76%|#######6  | 283/371 [00:33<00:10,  8.61it/s]
 77%|#######6  | 284/371 [00:33<00:10,  8.62it/s]
 77%|#######6  | 285/371 [00:33<00:09,  8.62it/s]
 77%|#######7  | 286/371 [00:33<00:09,  8.62it/s]
 77%|#######7  | 287/371 [00:33<00:09,  8.62it/s]
 78%|#######7  | 288/371 [00:33<00:09,  8.62it/s]
 78%|#######7  | 289/371 [00:33<00:09,  8.62it/s]
 78%|#######8  | 290/371 [00:33<00:09,  8.62it/s]
 78%|#######8  | 291/371 [00:33<00:09,  8.62it/s]
 79%|#######8  | 292/371 [00:34<00:09,  8.62it/s]
 79%|#######8  | 293/371 [00:34<00:09,  8.63it/s]
 79%|#######9  | 294/371 [00:34<00:08,  8.62it/s]
 80%|#######9  | 295/371 [00:34<00:08,  8.62it/s]
 80%|#######9  | 296/371 [00:34<00:08,  8.62it/s]
 80%|########  | 297/371 [00:34<00:08,  8.62it/s]
 80%|########  | 298/371 [00:34<00:08,  8.62it/s]
 81%|########  | 299/371 [00:34<00:08,  8.62it/s]
 81%|########  | 300/371 [00:34<00:08,  8.62it/s]
 81%|########1 | 301/371 [00:35<00:08,  8.62it/s]
 81%|########1 | 302/371 [00:35<00:08,  8.62it/s]
 82%|########1 | 303/371 [00:35<00:07,  8.63it/s]
 82%|########1 | 304/371 [00:35<00:07,  8.62it/s]
 82%|########2 | 305/371 [00:35<00:07,  8.62it/s]
 82%|########2 | 306/371 [00:35<00:07,  8.62it/s]
 83%|########2 | 307/371 [00:35<00:07,  8.62it/s]
 83%|########3 | 308/371 [00:35<00:07,  8.62it/s]
 83%|########3 | 309/371 [00:36<00:07,  8.62it/s]
 84%|########3 | 310/371 [00:36<00:07,  8.62it/s]
 84%|########3 | 311/371 [00:36<00:06,  8.62it/s]
 84%|########4 | 312/371 [00:36<00:06,  8.62it/s]
 84%|########4 | 313/371 [00:36<00:06,  8.62it/s]
 85%|########4 | 314/371 [00:36<00:06,  8.62it/s]
 85%|########4 | 315/371 [00:36<00:06,  8.63it/s]
 85%|########5 | 316/371 [00:36<00:06,  8.62it/s]
 85%|########5 | 317/371 [00:36<00:06,  8.62it/s]
 86%|########5 | 318/371 [00:37<00:06,  8.62it/s]
 86%|########5 | 319/371 [00:37<00:06,  8.53it/s]
 86%|########6 | 320/371 [00:37<00:06,  8.49it/s]
 87%|########6 | 321/371 [00:37<00:05,  8.42it/s]
 87%|########6 | 322/371 [00:37<00:05,  8.48it/s]
 87%|########7 | 323/371 [00:37<00:05,  8.52it/s]
 87%|########7 | 324/371 [00:37<00:05,  8.55it/s]
 88%|########7 | 325/371 [00:37<00:05,  8.57it/s]
 88%|########7 | 326/371 [00:38<00:05,  8.59it/s]
 88%|########8 | 327/371 [00:38<00:05,  8.60it/s]
 88%|########8 | 328/371 [00:38<00:04,  8.60it/s]
 89%|########8 | 329/371 [00:38<00:04,  8.61it/s]
 89%|########8 | 330/371 [00:38<00:04,  8.61it/s]
 89%|########9 | 331/371 [00:38<00:04,  8.62it/s]
 89%|########9 | 332/371 [00:38<00:04,  8.62it/s]
 90%|########9 | 333/371 [00:38<00:04,  8.62it/s]
 90%|######### | 334/371 [00:38<00:04,  8.62it/s]
 90%|######### | 335/371 [00:39<00:04,  8.62it/s]
 91%|######### | 336/371 [00:39<00:04,  8.62it/s]
 91%|######### | 337/371 [00:39<00:03,  8.62it/s]
 91%|#########1| 338/371 [00:39<00:03,  8.62it/s]
 91%|#########1| 339/371 [00:39<00:03,  8.67it/s]
 92%|#########1| 340/371 [00:39<00:03,  8.60it/s]
 92%|#########1| 341/371 [00:39<00:03,  8.61it/s]
 92%|#########2| 342/371 [00:39<00:03,  8.61it/s]
 92%|#########2| 343/371 [00:39<00:03,  8.61it/s]
 93%|#########2| 344/371 [00:40<00:03,  8.62it/s]
 93%|#########2| 345/371 [00:40<00:03,  8.62it/s]
 93%|#########3| 346/371 [00:40<00:02,  8.62it/s]
 94%|#########3| 347/371 [00:40<00:02,  8.62it/s]
 94%|#########3| 348/371 [00:40<00:02,  8.62it/s]
 94%|#########4| 349/371 [00:40<00:02,  8.64it/s]
 94%|#########4| 350/371 [00:40<00:02,  8.61it/s]
 95%|#########4| 351/371 [00:40<00:02,  8.62it/s]
 95%|#########4| 352/371 [00:41<00:02,  8.62it/s]
 95%|#########5| 353/371 [00:41<00:02,  8.62it/s]
 95%|#########5| 354/371 [00:41<00:01,  8.62it/s]
 96%|#########5| 355/371 [00:41<00:01,  8.62it/s]
 96%|#########5| 356/371 [00:41<00:01,  8.62it/s]
 96%|#########6| 357/371 [00:41<00:01,  8.62it/s]
 96%|#########6| 358/371 [00:41<00:01,  8.62it/s]
 97%|#########6| 359/371 [00:41<00:01,  8.64it/s]
 97%|#########7| 360/371 [00:41<00:01,  8.61it/s]
 97%|#########7| 361/371 [00:42<00:01,  8.62it/s]
 98%|#########7| 362/371 [00:42<00:01,  8.62it/s]
 98%|#########7| 363/371 [00:42<00:00,  8.44it/s]
 98%|#########8| 364/371 [00:42<00:00,  8.41it/s]
 98%|#########8| 365/371 [00:42<00:00,  8.47it/s]
 99%|#########8| 366/371 [00:42<00:00,  8.52it/s]
 99%|#########8| 367/371 [00:42<00:00,  8.55it/s]
 99%|#########9| 368/371 [00:42<00:00,  8.57it/s]
 99%|#########9| 369/371 [00:43<00:00,  8.59it/s]
100%|#########9| 370/371 [00:43<00:00,  8.60it/s]
100%|##########| 371/371 [00:43<00:00,  8.60it/s]
100%|##########| 371/371 [00:43<00:00,  8.58it/s]

<shap.explainers._kernel.Kernel object at 0x7fa22c60e9d0>
explainer.plot_shap_values()
sul1 shap

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")
sul1 shap
explainer.summary_plot(plot_type="bar")
sul1 shap
explainer.summary_plot(plot_type="violin")
sul1 shap
explainer.dependence_plot_all_features()
sul1 shap
# explainer.scatter_plot_all_features()
## Kernel Explainer
explainer = MyShapExplainer(model=model,
                         data=x,
                         train_data=x,
                         feature_names=model.input_features,
                          explainer="KernelExplainer",
                          #save=False
                         )
explainer.explainer
  0%|          | 0/371 [00:00<?, ?it/s]
  1%|          | 2/371 [00:00<00:34, 10.58it/s]
  1%|1         | 4/371 [00:00<00:39,  9.33it/s]
  1%|1         | 5/371 [00:00<00:40,  9.11it/s]
  2%|1         | 6/371 [00:00<00:40,  8.96it/s]
  2%|1         | 7/371 [00:00<00:41,  8.86it/s]
  2%|2         | 8/371 [00:00<00:41,  8.78it/s]
  2%|2         | 9/371 [00:01<00:41,  8.73it/s]
  3%|2         | 10/371 [00:01<00:41,  8.70it/s]
  3%|2         | 11/371 [00:01<00:41,  8.68it/s]
  3%|3         | 12/371 [00:01<00:41,  8.66it/s]
  4%|3         | 13/371 [00:01<00:41,  8.65it/s]
  4%|3         | 14/371 [00:01<00:41,  8.64it/s]
  4%|4         | 15/371 [00:01<00:41,  8.63it/s]
  4%|4         | 16/371 [00:01<00:41,  8.63it/s]
  5%|4         | 17/371 [00:01<00:41,  8.63it/s]
  5%|4         | 18/371 [00:02<00:40,  8.63it/s]
  5%|5         | 19/371 [00:02<00:40,  8.62it/s]
  5%|5         | 20/371 [00:02<00:40,  8.62it/s]
  6%|5         | 21/371 [00:02<00:40,  8.62it/s]
  6%|5         | 22/371 [00:02<00:40,  8.62it/s]
  6%|6         | 23/371 [00:02<00:40,  8.62it/s]
  6%|6         | 24/371 [00:02<00:40,  8.62it/s]
  7%|6         | 25/371 [00:02<00:40,  8.62it/s]
  7%|7         | 26/371 [00:02<00:40,  8.62it/s]
  7%|7         | 27/371 [00:03<00:39,  8.62it/s]
  8%|7         | 28/371 [00:03<00:39,  8.62it/s]
  8%|7         | 29/371 [00:03<00:39,  8.62it/s]
  8%|8         | 30/371 [00:03<00:39,  8.62it/s]
  8%|8         | 31/371 [00:03<00:39,  8.62it/s]
  9%|8         | 32/371 [00:03<00:39,  8.62it/s]
  9%|8         | 33/371 [00:03<00:39,  8.62it/s]
  9%|9         | 34/371 [00:03<00:39,  8.62it/s]
  9%|9         | 35/371 [00:04<00:38,  8.62it/s]
 10%|9         | 36/371 [00:04<00:38,  8.62it/s]
 10%|9         | 37/371 [00:04<00:38,  8.62it/s]
 10%|#         | 38/371 [00:04<00:38,  8.62it/s]
 11%|#         | 39/371 [00:04<00:38,  8.62it/s]
 11%|#         | 40/371 [00:04<00:38,  8.62it/s]
 11%|#1        | 41/371 [00:04<00:38,  8.62it/s]
 11%|#1        | 42/371 [00:04<00:38,  8.62it/s]
 12%|#1        | 43/371 [00:04<00:38,  8.62it/s]
 12%|#1        | 44/371 [00:05<00:37,  8.62it/s]
 12%|#2        | 45/371 [00:05<00:37,  8.62it/s]
 12%|#2        | 46/371 [00:05<00:37,  8.62it/s]
 13%|#2        | 47/371 [00:05<00:37,  8.62it/s]
 13%|#2        | 48/371 [00:05<00:37,  8.62it/s]
 13%|#3        | 49/371 [00:05<00:37,  8.62it/s]
 13%|#3        | 50/371 [00:05<00:37,  8.62it/s]
 14%|#3        | 51/371 [00:05<00:37,  8.62it/s]
 14%|#4        | 52/371 [00:05<00:36,  8.63it/s]
 14%|#4        | 53/371 [00:06<00:36,  8.62it/s]
 15%|#4        | 54/371 [00:06<00:36,  8.62it/s]
 15%|#4        | 55/371 [00:06<00:36,  8.62it/s]
 15%|#5        | 56/371 [00:06<00:36,  8.62it/s]
 15%|#5        | 57/371 [00:06<00:36,  8.62it/s]
 16%|#5        | 58/371 [00:06<00:36,  8.62it/s]
 16%|#5        | 59/371 [00:06<00:36,  8.53it/s]
 16%|#6        | 60/371 [00:06<00:36,  8.56it/s]
 16%|#6        | 61/371 [00:07<00:36,  8.58it/s]
 17%|#6        | 62/371 [00:07<00:35,  8.59it/s]
 17%|#6        | 63/371 [00:07<00:35,  8.60it/s]
 17%|#7        | 64/371 [00:07<00:35,  8.61it/s]
 18%|#7        | 65/371 [00:07<00:35,  8.61it/s]
 18%|#7        | 66/371 [00:07<00:35,  8.61it/s]
 18%|#8        | 67/371 [00:07<00:35,  8.62it/s]
 18%|#8        | 68/371 [00:07<00:35,  8.62it/s]
 19%|#8        | 69/371 [00:07<00:35,  8.62it/s]
 19%|#8        | 70/371 [00:08<00:34,  8.62it/s]
 19%|#9        | 71/371 [00:08<00:34,  8.62it/s]
 19%|#9        | 72/371 [00:08<00:34,  8.62it/s]
 20%|#9        | 73/371 [00:08<00:34,  8.62it/s]
 20%|#9        | 74/371 [00:08<00:34,  8.62it/s]
 20%|##        | 75/371 [00:08<00:34,  8.62it/s]
 20%|##        | 76/371 [00:08<00:34,  8.62it/s]
 21%|##        | 77/371 [00:08<00:34,  8.62it/s]
 21%|##1       | 78/371 [00:09<00:33,  8.62it/s]
 21%|##1       | 79/371 [00:09<00:33,  8.62it/s]
 22%|##1       | 80/371 [00:09<00:33,  8.62it/s]
 22%|##1       | 81/371 [00:09<00:33,  8.62it/s]
 22%|##2       | 82/371 [00:09<00:33,  8.64it/s]
 22%|##2       | 83/371 [00:09<00:37,  7.64it/s]
 23%|##2       | 84/371 [00:09<00:36,  7.86it/s]
 23%|##2       | 85/371 [00:09<00:35,  8.08it/s]
 23%|##3       | 86/371 [00:09<00:34,  8.23it/s]
 23%|##3       | 87/371 [00:10<00:34,  8.34it/s]
 24%|##3       | 88/371 [00:10<00:33,  8.43it/s]
 24%|##3       | 89/371 [00:10<00:33,  8.48it/s]
 24%|##4       | 90/371 [00:10<00:35,  7.85it/s]
 25%|##4       | 91/371 [00:10<00:34,  8.10it/s]
 25%|##4       | 92/371 [00:10<00:33,  8.25it/s]
 25%|##5       | 93/371 [00:10<00:33,  8.36it/s]
 25%|##5       | 94/371 [00:10<00:32,  8.43it/s]
 26%|##5       | 95/371 [00:11<00:32,  8.49it/s]
 26%|##5       | 96/371 [00:11<00:32,  8.53it/s]
 26%|##6       | 97/371 [00:11<00:32,  8.56it/s]
 26%|##6       | 98/371 [00:11<00:31,  8.58it/s]
 27%|##6       | 99/371 [00:11<00:31,  8.66it/s]
 27%|##6       | 100/371 [00:11<00:31,  8.67it/s]
 27%|##7       | 101/371 [00:11<00:31,  8.65it/s]
 27%|##7       | 102/371 [00:11<00:31,  8.64it/s]
 28%|##7       | 103/371 [00:11<00:30,  8.66it/s]
 28%|##8       | 104/371 [00:12<00:30,  8.63it/s]
 28%|##8       | 105/371 [00:12<00:30,  8.62it/s]
 29%|##8       | 106/371 [00:12<00:30,  8.62it/s]
 29%|##8       | 107/371 [00:12<00:30,  8.62it/s]
 29%|##9       | 108/371 [00:12<00:30,  8.62it/s]
 29%|##9       | 109/371 [00:12<00:30,  8.62it/s]
 30%|##9       | 110/371 [00:12<00:30,  8.62it/s]
 30%|##9       | 111/371 [00:12<00:30,  8.62it/s]
 30%|###       | 112/371 [00:13<00:30,  8.62it/s]
 30%|###       | 113/371 [00:13<00:29,  8.62it/s]
 31%|###       | 114/371 [00:13<00:29,  8.62it/s]
 31%|###       | 115/371 [00:13<00:29,  8.62it/s]
 31%|###1      | 116/371 [00:13<00:29,  8.62it/s]
 32%|###1      | 117/371 [00:13<00:29,  8.62it/s]
 32%|###1      | 118/371 [00:13<00:29,  8.62it/s]
 32%|###2      | 119/371 [00:13<00:29,  8.62it/s]
 32%|###2      | 120/371 [00:13<00:29,  8.62it/s]
 33%|###2      | 121/371 [00:14<00:28,  8.62it/s]
 33%|###2      | 122/371 [00:14<00:28,  8.62it/s]
 33%|###3      | 123/371 [00:14<00:28,  8.62it/s]
 33%|###3      | 124/371 [00:14<00:28,  8.62it/s]
 34%|###3      | 125/371 [00:14<00:28,  8.62it/s]
 34%|###3      | 126/371 [00:14<00:28,  8.62it/s]
 34%|###4      | 127/371 [00:14<00:28,  8.62it/s]
 35%|###4      | 128/371 [00:14<00:28,  8.62it/s]
 35%|###4      | 129/371 [00:15<00:28,  8.62it/s]
 35%|###5      | 130/371 [00:15<00:27,  8.62it/s]
 35%|###5      | 131/371 [00:15<00:27,  8.62it/s]
 36%|###5      | 132/371 [00:15<00:27,  8.62it/s]
 36%|###5      | 133/371 [00:15<00:27,  8.62it/s]
 36%|###6      | 134/371 [00:15<00:27,  8.62it/s]
 36%|###6      | 135/371 [00:15<00:27,  8.67it/s]
 37%|###6      | 136/371 [00:15<00:26,  8.71it/s]
 37%|###6      | 137/371 [00:15<00:26,  8.67it/s]
 37%|###7      | 138/371 [00:16<00:26,  8.66it/s]
 37%|###7      | 139/371 [00:16<00:26,  8.65it/s]
 38%|###7      | 140/371 [00:16<00:26,  8.64it/s]
 38%|###8      | 141/371 [00:16<00:26,  8.63it/s]
 38%|###8      | 142/371 [00:16<00:26,  8.63it/s]
 39%|###8      | 143/371 [00:16<00:26,  8.63it/s]
 39%|###8      | 144/371 [00:16<00:26,  8.63it/s]
 39%|###9      | 145/371 [00:16<00:26,  8.62it/s]
 39%|###9      | 146/371 [00:16<00:26,  8.62it/s]
 40%|###9      | 147/371 [00:17<00:25,  8.62it/s]
 40%|###9      | 148/371 [00:17<00:25,  8.62it/s]
 40%|####      | 149/371 [00:17<00:25,  8.62it/s]
 40%|####      | 150/371 [00:17<00:25,  8.62it/s]
 41%|####      | 151/371 [00:17<00:25,  8.62it/s]
 41%|####      | 152/371 [00:17<00:25,  8.62it/s]
 41%|####1     | 153/371 [00:17<00:25,  8.62it/s]
 42%|####1     | 154/371 [00:17<00:25,  8.62it/s]
 42%|####1     | 155/371 [00:18<00:25,  8.62it/s]
 42%|####2     | 156/371 [00:18<00:24,  8.62it/s]
 42%|####2     | 157/371 [00:18<00:24,  8.62it/s]
 43%|####2     | 158/371 [00:18<00:24,  8.62it/s]
 43%|####2     | 159/371 [00:18<00:24,  8.62it/s]
 43%|####3     | 160/371 [00:18<00:24,  8.62it/s]
 43%|####3     | 161/371 [00:18<00:24,  8.62it/s]
 44%|####3     | 162/371 [00:18<00:24,  8.64it/s]
 44%|####3     | 163/371 [00:18<00:24,  8.61it/s]
 44%|####4     | 164/371 [00:19<00:24,  8.62it/s]
 44%|####4     | 165/371 [00:19<00:23,  8.62it/s]
 45%|####4     | 166/371 [00:19<00:23,  8.62it/s]
 45%|####5     | 167/371 [00:19<00:23,  8.62it/s]
 45%|####5     | 168/371 [00:19<00:23,  8.62it/s]
 46%|####5     | 169/371 [00:19<00:23,  8.62it/s]
 46%|####5     | 170/371 [00:19<00:23,  8.62it/s]
 46%|####6     | 171/371 [00:19<00:23,  8.62it/s]
 46%|####6     | 172/371 [00:19<00:23,  8.62it/s]
 47%|####6     | 173/371 [00:20<00:22,  8.62it/s]
 47%|####6     | 174/371 [00:20<00:22,  8.62it/s]
 47%|####7     | 175/371 [00:20<00:22,  8.62it/s]
 47%|####7     | 176/371 [00:20<00:22,  8.62it/s]
 48%|####7     | 177/371 [00:20<00:22,  8.62it/s]
 48%|####7     | 178/371 [00:20<00:22,  8.62it/s]
 48%|####8     | 179/371 [00:20<00:22,  8.62it/s]
 49%|####8     | 180/371 [00:20<00:22,  8.62it/s]
 49%|####8     | 181/371 [00:21<00:22,  8.62it/s]
 49%|####9     | 182/371 [00:21<00:21,  8.60it/s]
 49%|####9     | 183/371 [00:21<00:21,  8.63it/s]
 50%|####9     | 184/371 [00:21<00:21,  8.63it/s]
 50%|####9     | 185/371 [00:21<00:21,  8.62it/s]
 50%|#####     | 186/371 [00:21<00:21,  8.62it/s]
 50%|#####     | 187/371 [00:21<00:21,  8.62it/s]
 51%|#####     | 188/371 [00:21<00:21,  8.62it/s]
 51%|#####     | 189/371 [00:21<00:21,  8.62it/s]
 51%|#####1    | 190/371 [00:22<00:20,  8.62it/s]
 51%|#####1    | 191/371 [00:22<00:20,  8.62it/s]
 52%|#####1    | 192/371 [00:22<00:20,  8.62it/s]
 52%|#####2    | 193/371 [00:22<00:20,  8.62it/s]
 52%|#####2    | 194/371 [00:22<00:20,  8.62it/s]
 53%|#####2    | 195/371 [00:22<00:20,  8.62it/s]
 53%|#####2    | 196/371 [00:22<00:20,  8.62it/s]
 53%|#####3    | 197/371 [00:22<00:20,  8.62it/s]
 53%|#####3    | 198/371 [00:23<00:20,  8.62it/s]
 54%|#####3    | 199/371 [00:23<00:19,  8.62it/s]
 54%|#####3    | 200/371 [00:23<00:19,  8.62it/s]
 54%|#####4    | 201/371 [00:23<00:19,  8.62it/s]
 54%|#####4    | 202/371 [00:23<00:19,  8.62it/s]
 55%|#####4    | 203/371 [00:23<00:19,  8.62it/s]
 55%|#####4    | 204/371 [00:23<00:19,  8.62it/s]
 55%|#####5    | 205/371 [00:23<00:19,  8.62it/s]
 56%|#####5    | 206/371 [00:23<00:19,  8.62it/s]
 56%|#####5    | 207/371 [00:24<00:19,  8.62it/s]
 56%|#####6    | 208/371 [00:24<00:18,  8.61it/s]
 56%|#####6    | 209/371 [00:24<00:18,  8.63it/s]
 57%|#####6    | 210/371 [00:24<00:18,  8.62it/s]
 57%|#####6    | 211/371 [00:24<00:18,  8.62it/s]
 57%|#####7    | 212/371 [00:24<00:18,  8.62it/s]
 57%|#####7    | 213/371 [00:24<00:18,  8.62it/s]
 58%|#####7    | 214/371 [00:24<00:18,  8.62it/s]
 58%|#####7    | 215/371 [00:24<00:18,  8.62it/s]
 58%|#####8    | 216/371 [00:25<00:17,  8.62it/s]
 58%|#####8    | 217/371 [00:25<00:17,  8.62it/s]
 59%|#####8    | 218/371 [00:25<00:17,  8.62it/s]
 59%|#####9    | 219/371 [00:25<00:17,  8.62it/s]
 59%|#####9    | 220/371 [00:25<00:17,  8.62it/s]
 60%|#####9    | 221/371 [00:25<00:17,  8.62it/s]
 60%|#####9    | 222/371 [00:25<00:17,  8.62it/s]
 60%|######    | 223/371 [00:25<00:17,  8.62it/s]
 60%|######    | 224/371 [00:26<00:17,  8.64it/s]
 61%|######    | 225/371 [00:26<00:16,  8.62it/s]
 61%|######    | 226/371 [00:26<00:16,  8.62it/s]
 61%|######1   | 227/371 [00:26<00:16,  8.62it/s]
 61%|######1   | 228/371 [00:26<00:16,  8.62it/s]
 62%|######1   | 229/371 [00:26<00:16,  8.62it/s]
 62%|######1   | 230/371 [00:26<00:16,  8.62it/s]
 62%|######2   | 231/371 [00:26<00:16,  8.62it/s]
 63%|######2   | 232/371 [00:26<00:16,  8.62it/s]
 63%|######2   | 233/371 [00:27<00:16,  8.53it/s]
 63%|######3   | 234/371 [00:27<00:16,  8.56it/s]
 63%|######3   | 235/371 [00:27<00:15,  8.58it/s]
 64%|######3   | 236/371 [00:27<00:15,  8.59it/s]
 64%|######3   | 237/371 [00:27<00:15,  8.60it/s]
 64%|######4   | 238/371 [00:27<00:15,  8.61it/s]
 64%|######4   | 239/371 [00:27<00:15,  8.61it/s]
 65%|######4   | 240/371 [00:27<00:15,  8.61it/s]
 65%|######4   | 241/371 [00:27<00:15,  8.62it/s]
 65%|######5   | 242/371 [00:28<00:14,  8.62it/s]
 65%|######5   | 243/371 [00:28<00:14,  8.62it/s]
 66%|######5   | 244/371 [00:28<00:14,  8.62it/s]
 66%|######6   | 245/371 [00:28<00:14,  8.62it/s]
 66%|######6   | 246/371 [00:28<00:14,  8.62it/s]
 67%|######6   | 247/371 [00:28<00:14,  8.62it/s]
 67%|######6   | 248/371 [00:28<00:14,  8.62it/s]
 67%|######7   | 249/371 [00:28<00:14,  8.62it/s]
 67%|######7   | 250/371 [00:29<00:14,  8.62it/s]
 68%|######7   | 251/371 [00:29<00:13,  8.62it/s]
 68%|######7   | 252/371 [00:29<00:13,  8.62it/s]
 68%|######8   | 253/371 [00:29<00:13,  8.62it/s]
 68%|######8   | 254/371 [00:29<00:13,  8.62it/s]
 69%|######8   | 255/371 [00:29<00:13,  8.62it/s]
 69%|######9   | 256/371 [00:29<00:13,  8.62it/s]
 69%|######9   | 257/371 [00:29<00:13,  8.62it/s]
 70%|######9   | 258/371 [00:29<00:13,  8.62it/s]
 70%|######9   | 259/371 [00:30<00:12,  8.62it/s]
 70%|#######   | 260/371 [00:30<00:12,  8.62it/s]
 70%|#######   | 261/371 [00:30<00:12,  8.62it/s]
 71%|#######   | 262/371 [00:30<00:12,  8.62it/s]
 71%|#######   | 263/371 [00:30<00:12,  8.62it/s]
 71%|#######1  | 264/371 [00:30<00:12,  8.62it/s]
 71%|#######1  | 265/371 [00:30<00:12,  8.62it/s]
 72%|#######1  | 266/371 [00:30<00:12,  8.62it/s]
 72%|#######1  | 267/371 [00:31<00:12,  8.62it/s]
 72%|#######2  | 268/371 [00:31<00:11,  8.62it/s]
 73%|#######2  | 269/371 [00:31<00:11,  8.66it/s]
 73%|#######2  | 270/371 [00:31<00:11,  8.70it/s]
 73%|#######3  | 271/371 [00:31<00:11,  8.67it/s]
 73%|#######3  | 272/371 [00:31<00:11,  8.66it/s]
 74%|#######3  | 273/371 [00:31<00:11,  8.65it/s]
 74%|#######3  | 274/371 [00:31<00:11,  8.64it/s]
 74%|#######4  | 275/371 [00:31<00:11,  8.63it/s]
 74%|#######4  | 276/371 [00:32<00:11,  8.63it/s]
 75%|#######4  | 277/371 [00:32<00:10,  8.63it/s]
 75%|#######4  | 278/371 [00:32<00:10,  8.63it/s]
 75%|#######5  | 279/371 [00:32<00:10,  8.62it/s]
 75%|#######5  | 280/371 [00:32<00:10,  8.62it/s]
 76%|#######5  | 281/371 [00:32<00:10,  8.62it/s]
 76%|#######6  | 282/371 [00:32<00:10,  8.62it/s]
 76%|#######6  | 283/371 [00:32<00:10,  8.62it/s]
 77%|#######6  | 284/371 [00:32<00:10,  8.62it/s]
 77%|#######6  | 285/371 [00:33<00:09,  8.62it/s]
 77%|#######7  | 286/371 [00:33<00:09,  8.62it/s]
 77%|#######7  | 287/371 [00:33<00:09,  8.62it/s]
 78%|#######7  | 288/371 [00:33<00:09,  8.62it/s]
 78%|#######7  | 289/371 [00:33<00:09,  8.62it/s]
 78%|#######8  | 290/371 [00:33<00:09,  8.62it/s]
 78%|#######8  | 291/371 [00:33<00:09,  8.62it/s]
 79%|#######8  | 292/371 [00:33<00:09,  8.62it/s]
 79%|#######8  | 293/371 [00:34<00:09,  8.62it/s]
 79%|#######9  | 294/371 [00:34<00:08,  8.62it/s]
 80%|#######9  | 295/371 [00:34<00:08,  8.62it/s]
 80%|#######9  | 296/371 [00:34<00:08,  8.62it/s]
 80%|########  | 297/371 [00:34<00:08,  8.62it/s]
 80%|########  | 298/371 [00:34<00:08,  8.62it/s]
 81%|########  | 299/371 [00:34<00:08,  8.62it/s]
 81%|########  | 300/371 [00:34<00:08,  8.62it/s]
 81%|########1 | 301/371 [00:34<00:08,  8.62it/s]
 81%|########1 | 302/371 [00:35<00:08,  8.62it/s]
 82%|########1 | 303/371 [00:35<00:07,  8.62it/s]
 82%|########1 | 304/371 [00:35<00:07,  8.62it/s]
 82%|########2 | 305/371 [00:35<00:07,  8.62it/s]
 82%|########2 | 306/371 [00:35<00:07,  8.53it/s]
 83%|########2 | 307/371 [00:35<00:07,  8.56it/s]
 83%|########3 | 308/371 [00:35<00:07,  8.58it/s]
 83%|########3 | 309/371 [00:35<00:07,  8.59it/s]
 84%|########3 | 310/371 [00:36<00:07,  8.60it/s]
 84%|########3 | 311/371 [00:36<00:06,  8.61it/s]
 84%|########4 | 312/371 [00:36<00:06,  8.61it/s]
 84%|########4 | 313/371 [00:36<00:06,  8.61it/s]
 85%|########4 | 314/371 [00:36<00:06,  8.62it/s]
 85%|########4 | 315/371 [00:36<00:06,  8.62it/s]
 85%|########5 | 316/371 [00:36<00:06,  8.62it/s]
 85%|########5 | 317/371 [00:36<00:06,  8.62it/s]
 86%|########5 | 318/371 [00:36<00:06,  8.62it/s]
 86%|########5 | 319/371 [00:37<00:06,  8.62it/s]
 86%|########6 | 320/371 [00:37<00:05,  8.62it/s]
 87%|########6 | 321/371 [00:37<00:05,  8.62it/s]
 87%|########6 | 322/371 [00:37<00:05,  8.62it/s]
 87%|########7 | 323/371 [00:37<00:05,  8.62it/s]
 87%|########7 | 324/371 [00:37<00:05,  8.62it/s]
 88%|########7 | 325/371 [00:37<00:05,  8.62it/s]
 88%|########7 | 326/371 [00:37<00:05,  8.62it/s]
 88%|########8 | 327/371 [00:37<00:05,  8.62it/s]
 88%|########8 | 328/371 [00:38<00:04,  8.62it/s]
 89%|########8 | 329/371 [00:38<00:04,  8.62it/s]
 89%|########8 | 330/371 [00:38<00:04,  8.62it/s]
 89%|########9 | 331/371 [00:38<00:04,  8.62it/s]
 89%|########9 | 332/371 [00:38<00:04,  8.62it/s]
 90%|########9 | 333/371 [00:38<00:04,  8.62it/s]
 90%|######### | 334/371 [00:38<00:04,  8.62it/s]
 90%|######### | 335/371 [00:38<00:04,  8.62it/s]
 91%|######### | 336/371 [00:39<00:04,  8.62it/s]
 91%|######### | 337/371 [00:39<00:03,  8.62it/s]
 91%|#########1| 338/371 [00:39<00:03,  8.62it/s]
 91%|#########1| 339/371 [00:39<00:03,  8.62it/s]
 92%|#########1| 340/371 [00:39<00:03,  8.63it/s]
 92%|#########1| 341/371 [00:39<00:03,  8.53it/s]
 92%|#########2| 342/371 [00:39<00:03,  8.56it/s]
 92%|#########2| 343/371 [00:39<00:03,  7.89it/s]
 93%|#########2| 344/371 [00:39<00:03,  8.13it/s]
 93%|#########2| 345/371 [00:40<00:03,  8.27it/s]
 93%|#########3| 346/371 [00:40<00:02,  8.37it/s]
 94%|#########3| 347/371 [00:40<00:02,  8.45it/s]
 94%|#########3| 348/371 [00:40<00:02,  8.50it/s]
 94%|#########4| 349/371 [00:40<00:02,  8.53it/s]
 94%|#########4| 350/371 [00:40<00:02,  8.56it/s]
 95%|#########4| 351/371 [00:40<00:02,  8.58it/s]
 95%|#########4| 352/371 [00:40<00:02,  8.59it/s]
 95%|#########5| 353/371 [00:41<00:02,  8.60it/s]
 95%|#########5| 354/371 [00:41<00:01,  8.61it/s]
 96%|#########5| 355/371 [00:41<00:01,  8.61it/s]
 96%|#########5| 356/371 [00:41<00:01,  8.61it/s]
 96%|#########6| 357/371 [00:41<00:01,  8.62it/s]
 96%|#########6| 358/371 [00:41<00:01,  8.62it/s]
 97%|#########6| 359/371 [00:41<00:01,  8.62it/s]
 97%|#########7| 360/371 [00:41<00:01,  7.86it/s]
 97%|#########7| 361/371 [00:42<00:01,  7.53it/s]
 98%|#########7| 362/371 [00:42<00:01,  7.74it/s]
 98%|#########7| 363/371 [00:42<00:01,  7.99it/s]
 98%|#########8| 364/371 [00:42<00:00,  8.17it/s]
 98%|#########8| 365/371 [00:42<00:00,  8.30it/s]
 99%|#########8| 366/371 [00:42<00:00,  8.39it/s]
 99%|#########8| 367/371 [00:42<00:00,  8.46it/s]
 99%|#########9| 368/371 [00:42<00:00,  8.51it/s]
 99%|#########9| 369/371 [00:42<00:00,  8.54it/s]
100%|#########9| 370/371 [00:43<00:00,  8.56it/s]
100%|##########| 371/371 [00:43<00:00,  8.58it/s]
100%|##########| 371/371 [00:43<00:00,  8.59it/s]

<shap.explainers._kernel.Kernel object at 0x7fa22c5b34f0>
explainer.plot_shap_values()
sul1 shap
#explainer.beeswarm_plot()
explainer.summary_plot(plot_type="bar")
sul1 shap
explainer.summary_plot(plot_type="dot")
sul1 shap
explainer.summary_plot(plot_type="violin")
sul1 shap
#explainer.heatmap()
#explainer.waterfall_plot_single_example(27)
explainer.dependence_plot_all_features()
sul1 shap
#explainer.scatter_plot_all_features()

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

Gallery generated by Sphinx-Gallery