Morris Sensitivity Analysis Explainer Demo

[2]:
import os
import logging

import datatable
import daimojo

from h2o_sonar import interpret
from h2o_sonar.lib.api import commons
from h2o_sonar.lib.api import explainers
from h2o_sonar.explainers import morris_sa_explainer as explainer
from h2o_sonar.lib.api.models import ModelApi
[3]:
# explainer description
interpret.describe_explainer(explainer.MorrisSensitivityAnalysisExplainer)
[3]:
{'id': 'h2o_sonar.explainers.morris_sa_explainer.MorrisSensitivityAnalysisExplainer',
 'name': 'MorrisSensitivityAnalysisExplainer',
 'description': 'Morris sensitivity analysis (SA) explainer provides Morris sensitivity analysis based feature importance which is a measure of the contribution of an input variable to the overall predictions of the model. In applied statistics, the Morris method for global sensitivity analysis is a so-called one-step-at-a-time method (OAT), meaning that in each run only one input parameter is given a new value. This explainer is based based on InterpretML library - see http://interpret.ml',
 'model_types': ['iid'],
 'can_explain': ['regression', 'binomial'],
 'explanation_scopes': ['global_scope'],
 'explanations': [{'explanation_type': 'global-feature-importance',
   'name': 'GlobalFeatImpExplanation',
   'category': None,
   'scope': 'global',
   'has_local': None,
   'formats': []}],
 'parameters': [],
 'keywords': []}

Interpretation

[4]:
# dataset
dataset_path = "../../data/pd_ice_creditcard_train.csv"
target_col = "LIMIT_BAL"

# model
mojo_path = "../../data/models/creditcard-regression.mojo"
mojo_model = daimojo.model(mojo_path)
model = ModelApi().create_model(
    model_src=mojo_model,
    target_col=target_col,
    used_features=list(mojo_model.feature_names),
)

# results
results_location = "./results"
os.makedirs(results_location, exist_ok=True)
[5]:
interpretation = interpret.run_interpretation(
    dataset=dataset_path,
    model=model,
    target_col=target_col,
    results_location=results_location,
    explainers=[explainer.MorrisSensitivityAnalysisExplainer.explainer_id()],
    log_level=logging.INFO,
)
/home/dvorka/h/mli/git/h2o-sonar/.venv/lib/python3.8/site-packages/tqdm/auto.py:22: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
  from .autonotebook import tqdm as notebook_tqdm
"is" with a literal. Did you mean "=="?
"is" with a literal. Did you mean "=="?
"is" with a literal. Did you mean "=="?
"is" with a literal. Did you mean "=="?
"is not" with a literal. Did you mean "!="?
"is not" with a literal. Did you mean "!="?
ExplainableDataset cleaner: label encoded ['SEX', 'EDUCATION', 'MARRIAGE'] columns
../_images/notebooks_h2o-sonar-morris-sa-explainer_5_1.png

Explainer Result

[6]:
# retrieve the result
result = interpretation.get_explainer_result(
    explainer.MorrisSensitivityAnalysisExplainer.explainer_id()
)

Display Data

[7]:
result.data()
[7]:
featureimportance
▪▪▪▪▪▪▪▪▪▪▪▪
0PAY_AMT2576582
1BILL_AMT1483290
2PAY_AMT6315424
3PAY_AMT1262665
4PAY_AMT3250634
5PAY_AMT5229284
6BILL_AMT3227349
7PAY_AMT4226623
8BILL_AMT4216030
9BILL_AMT5144456
10BILL_AMT6140663
11AGE85984.4
12PAY_370828
13PAY_550576.5
14PAY_236732.7
15EDUCATION28038.8
16PAY_116456.3
17MARRIAGE15054.1
18PAY_414673.7
19PAY_613648.6
20SEX5494.11
21BILL_AMT24649.55

Plot Sensitivity Analysis Data

[8]:
result.plot()
../_images/notebooks_h2o-sonar-morris-sa-explainer_11_0.png

Save Explainer Log and Data

[9]:
# save the explainer log
log_file_path = "./morris-sa-demo.log"
result.log(path=log_file_path)
[10]:
!cat $log_file_path
[12]:
# save the explainer data
result.zip(file_path="./morris-sa-demo-archive.zip")
[13]:
!unzip -l morris-sa-demo-archive.zip
Archive:  morris-sa-demo-archive.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
     1544  2022-09-19 15:58   explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_508d6cc9-79af-4d42-be00-8db7cf404599/result_descriptor.json
      110  2022-09-19 15:58   explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_508d6cc9-79af-4d42-be00-8db7cf404599/global_html_fragment/text_html.meta
      367  2022-09-19 15:58   explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_508d6cc9-79af-4d42-be00-8db7cf404599/global_html_fragment/text_html/explanation.html
    27825  2022-09-19 15:58   explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_508d6cc9-79af-4d42-be00-8db7cf404599/global_html_fragment/text_html/fi-class-0.png
        0  2022-09-19 15:58   explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_508d6cc9-79af-4d42-be00-8db7cf404599/log/explainer_run_508d6cc9-79af-4d42-be00-8db7cf404599.log
      185  2022-09-19 15:58   explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_508d6cc9-79af-4d42-be00-8db7cf404599/global_feature_importance/application_vnd_h2oai_json_datatable_jay.meta
      143  2022-09-19 15:58   explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_508d6cc9-79af-4d42-be00-8db7cf404599/global_feature_importance/application_json.meta
      669  2022-09-19 15:58   explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_508d6cc9-79af-4d42-be00-8db7cf404599/global_feature_importance/application_vnd_h2oai_json_datatable_jay/explanation.json
      872  2022-09-19 15:58   explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_508d6cc9-79af-4d42-be00-8db7cf404599/global_feature_importance/application_vnd_h2oai_json_datatable_jay/feature_importance_class_0.jay
      619  2022-09-19 15:58   explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_508d6cc9-79af-4d42-be00-8db7cf404599/global_feature_importance/application_json/explanation.json
     1476  2022-09-19 15:58   explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_508d6cc9-79af-4d42-be00-8db7cf404599/global_feature_importance/application_json/feature_importance_class_0.json
---------                     -------
    33810                     11 files
[ ]: