Morris Sensitivity Analysis#
Link to API Reference: MorrisSensitivity
See the backing repository for Morris here.
Summary
Also known as the Morris method[1], this is a one-step-at-a-time (OAT) global sensitivity analysis where only one input has its level (discretized value) adjusted per run. Relative to other sensitivity analysis algorithms, the Morris method is fast (fewer model executions) but comes at the cost of not being able to differentiate non-linearities with interactions. This is commonly used for screening which inputs are important enough for further analysis. The implementation uses SALib
[2] for its Morris method.
How it Works
The gsa-module
package has a good conceptual overview of the Morris method for screening here.
The SALib
package describes what sensitivity analysis is, and the steps required in conducting it at a basic level here.
The conceiving paper for Morris method[1] can be found here.
Code Example
The following code will train a blackbox pipeline for the breast cancer dataset. Aftewards it will interpret the pipeline and its decisions with Morris method. The visualizations provided will be for global explanations.
from interpret import set_visualize_provider
from interpret.provider import InlineProvider
set_visualize_provider(InlineProvider())
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
from interpret import show
from interpret.blackbox import MorrisSensitivity
seed = 42
np.random.seed(seed)
X, y = load_breast_cancer(return_X_y=True, as_frame=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=seed)
pca = PCA()
rf = RandomForestClassifier(random_state=seed)
blackbox_model = Pipeline([('pca', pca), ('rf', rf)])
blackbox_model.fit(X_train, y_train)
msa = MorrisSensitivity(blackbox_model, X_train)
show(msa.explain_global())