@classmethod
def from_ModelBunch(cls, model_bunch, raw_data, metric, shap='tree',
    index_column=None, permutation_cv=None, na_fill=-999, **kwargs):
    """create an ExplainerBunch from a ModelBunch. A ModelBunch is a class
        containing a model, data transformer, target name and used columns, with
        both a .transform() and a .predict() method.

        Assumes model is tree based.

        :param model_bunch: ModelBunch
        :type model_bunch: [type]
        :param raw_data: raw input data that will be transformed
        :type raw_data: pd.DataFrame
        :param metric: metric with which to evaluate permutation importances
        :type metric: metric function or str
        :param index_column: column that will be used for idxs, defaults to None
        :type index_column: str, optional
        :param permutation_cv: [description], defaults to None
        :type permutation_cv: [type], optional
        :param na_fill: [description], defaults to -999
        :type na_fill: int, optional
        :return: ExplainerBunch instance
        """
    assert not index_column or index_column in raw_data.columns, f'{index_column} not in raw_data!'
    X, y = model_bunch.transform(raw_data)
    cats = raw_data.select_dtypes(include='object').columns.tolist()
    if index_column is not None:
        idxs = raw_data[index_column].astype(str).values.tolist()
    else:
        idxs = None
    return cls(model_bunch.model, X, y, metric=metric, shap=shap, cats=cats,
        idxs=idxs, permutation_cv=permutation_cv, na_fill=na_fill, **kwargs)
