Morris Sensitivity Analysis¶
See the backing repository for Morris here.
Also known as the Morris method, 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 for its Morris method.
How it Works¶
gsa-module package has a good conceptual overview of the Morris method for screening here.
SALib package describes what sensitivity analysis is, and the steps required in conducting it at a basic level here.
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())
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 = 1 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(n_estimators=100, n_jobs=-1) blackbox_model = Pipeline([('pca', pca), ('rf', rf)]) blackbox_model.fit(X_train, y_train) msa = MorrisSensitivity(predict_fn=blackbox_model.predict_proba, data=X_train) msa_global = msa.explain_global() show(msa_global)