{ "cells": [ { "cell_type": "markdown", "id": "6c4d4faf-ab84-4a72-a80e-535b211747cd", "metadata": { "tags": [] }, "source": [ "# Morris Sensitivity Analysis Explainer Demo" ] }, { "cell_type": "code", "execution_count": 13, "id": "69f414e3-bc88-478b-bed5-890352b1041a", "metadata": {}, "outputs": [], "source": [ "import os\n", "import logging\n", "\n", "import datatable\n", "import daimojo\n", "\n", "from h2o_sonar import interpret\n", "from h2o_sonar.lib.api import commons\n", "from h2o_sonar.lib.api import explainers\n", "from h2o_sonar.explainers import morris_sa_explainer as explainer\n", "from h2o_sonar.lib.api.models import ModelApi" ] }, { "cell_type": "code", "execution_count": 14, "id": "bbe0ca51", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'id': 'h2o_sonar.explainers.morris_sa_explainer.MorrisSensitivityAnalysisExplainer',\n", " 'name': 'MorrisSensitivityAnalysisExplainer',\n", " 'display_name': 'Morris Sensitivity Analysis',\n", " 'tagline': 'MorrisSensitivityAnalysisExplainer.',\n", " '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',\n", " 'brief_description': 'MorrisSensitivityAnalysisExplainer.',\n", " 'model_types': ['iid'],\n", " 'can_explain': ['regression', 'binomial'],\n", " 'explanation_scopes': ['global_scope'],\n", " 'explanations': [{'explanation_type': 'global-feature-importance',\n", " 'name': 'GlobalFeatImpExplanation',\n", " 'category': '',\n", " 'scope': 'global',\n", " 'has_local': '',\n", " 'formats': []}],\n", " 'keywords': ['explains-original-feature-importance', 'h2o-sonar'],\n", " 'parameters': [{'name': 'leakage_warning_threshold',\n", " 'description': 'The threshold above which to report a potentially detectedfeature importance leak problem.',\n", " 'comment': '',\n", " 'type': 'float',\n", " 'val': 0.95,\n", " 'predefined': [],\n", " 'tags': [],\n", " 'min_': 0.0,\n", " 'max_': 0.0,\n", " 'category': ''}],\n", " 'metrics_meta': []}" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# explainer description\n", "interpret.describe_explainer(explainer.MorrisSensitivityAnalysisExplainer)" ] }, { "cell_type": "markdown", "id": "90d401d2-14cd-4686-982f-3cac9e9f5eb7", "metadata": { "tags": [] }, "source": [ "## Interpretation" ] }, { "cell_type": "code", "execution_count": 15, "id": "15201d08-873b-45c3-82ad-052266f0526c", "metadata": {}, "outputs": [], "source": [ "# dataset\n", "dataset_path = \"../../data/predictive/pd_ice_creditcard_train.csv\"\n", "target_col = \"LIMIT_BAL\"\n", "\n", "# model\n", "mojo_path = \"../../data/predictive/models/creditcard-regression.mojo\"\n", "mojo_model = daimojo.model(mojo_path)\n", "model = ModelApi().create_model(\n", " model_src=mojo_model,\n", " target_col=target_col,\n", " used_features=list(mojo_model.feature_names),\n", ")\n", "\n", "# results\n", "results_location = \"./results\"\n", "os.makedirs(results_location, exist_ok=True)" ] }, { "cell_type": "code", "execution_count": 16, "id": "kfcalnxpg0g", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "✓ Morris Sensitivity Analysis explainer is compatible with this model/dataset\n" ] } ], "source": [ "# check explainer compatibility before running interpretation\n", "morris_explainer = explainer.MorrisSensitivityAnalysisExplainer()\n", "morris_explainer.logger = logging.getLogger(\"morris_compatibility_check\")\n", "\n", "params = commons.CommonInterpretationParams(\n", " model=model,\n", " models=[],\n", " dataset=dataset_path,\n", " target_col=target_col,\n", ")\n", "\n", "is_compatible = morris_explainer.check_compatibility(params=params, model=model)\n", "\n", "if not is_compatible:\n", " error_msg = \"Morris Sensitivity Analysis explainer is NOT compatible with this model/dataset.\\n\\n\"\n", " error_msg += \"Possible reasons:\\n\"\n", " error_msg += \"1. Missing dependencies: interpret==0.1.20 or gevent==1.5.0\\n\"\n", " error_msg += \" Install with: pip install interpret==0.1.20 gevent==1.5.0\\n\"\n", " error_msg += \"2. Model type not supported (H2O-3 models are not compatible)\\n\"\n", " error_msg += \"3. Model must be regression or binary classification\\n\\n\"\n", " error_msg += \"Cannot continue with interpretation. Please resolve compatibility issues first.\"\n", " raise RuntimeError(error_msg)\n", "else:\n", " print(\"✓ Morris Sensitivity Analysis explainer is compatible with this model/dataset\")" ] }, { "cell_type": "code", "execution_count": 17, "id": "0ba8f0aa-2e0e-4a0a-93ab-77ce9e968fa0", "metadata": { "tags": [] }, "outputs": [], "source": [ "%%capture\n", "interpretation = interpret.run_interpretation(\n", " dataset=dataset_path,\n", " model=model,\n", " target_col=target_col,\n", " results_location=results_location,\n", " explainers=[explainer.MorrisSensitivityAnalysisExplainer.explainer_id()],\n", " log_level=logging.INFO,\n", ")" ] }, { "cell_type": "markdown", "id": "ff9df4be-d4da-44db-a479-7d8d7f45c29d", "metadata": { "tags": [] }, "source": [ "## Explainer Result" ] }, { "cell_type": "code", "execution_count": 18, "id": "25556ca5-8239-4201-8a23-1ace2b3a46d4", "metadata": { "tags": [] }, "outputs": [], "source": [ "# retrieve the result\n", "result = interpretation.get_explainer_result(\n", " explainer.MorrisSensitivityAnalysisExplainer.explainer_id()\n", ")" ] }, { "cell_type": "markdown", "id": "490d132b-b7e2-48a2-8ec4-dbd71886edf9", "metadata": { "tags": [] }, "source": [ "### Display Data" ] }, { "cell_type": "code", "execution_count": 19, "id": "2aa6274e-79d5-49b1-b29a-2263db5cb8a8", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
featureimportance
▪▪▪▪▪▪▪▪▪▪▪▪
0PAY_AMT2576582
1BILL_AMT1483290
2PAY_AMT6315424
3PAY_AMT1262665
4PAY_AMT3250634
5PAY_AMT5229284
6BILL_AMT3227349
7PAY_AMT4226623
8BILL_AMT4216030
9BILL_AMT5144456
10BILL_AMT6140663
11AGE85044.2
12PAY_370326.1
13PAY_550648.5
14PAY_236126.8
15EDUCATION28226.3
16PAY_116431.9
17MARRIAGE15073.3
18PAY_414440.6
19PAY_613579.2
20SEX5472.43
21BILL_AMT24649.54
\n", " \n", "
\n" ], "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result.data()" ] }, { "cell_type": "markdown", "id": "df8a083b-3b88-4349-bb63-28551c24cc4f", "metadata": {}, "source": [ "### Plot Sensitivity Analysis Data" ] }, { "cell_type": "code", "execution_count": 20, "id": "5a9d8262-574e-4073-a282-567d4fd1209c", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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NWrUwJo1a7TWKxQKLF26FF26dIGFhQWGDh2KVq1aAQBsbW2hUCgwYMAAAMC+ffvQvHlz2NjYwM7ODp06dcKNGzekvm7fvg2FQoGtW7eiVatWKFeuHOrVq4eYmBitmEePHsU777yDcuXKwdbWFgEBAXj8+DGA/54gMmvWLLi7u8Pc3Bz16tXDli1b9PKdF4SFHREREenFvHnz0KxZM/z5558IDAxEv379EBISgvfffx9nzpxBtWrVEBISgtxT6D59+hRffvklfv75Zxw9ehRJSUno3bu3tH7btm348MMP8dFHH+HChQsYPnw4Bg4ciN9//10r9vTp09G9e3ecP38eM2bMwK+//goAuHr1Ku7du4cFCxYAANLS0hAWFobTp08jKioKSqUS3bt3z/PEj08//RTjx49HXFwcPD09ERwcjOfPnwMA4uLi0KZNG3h7eyMmJgZHjhxB586dpWlrZs2ahZ9//hnLli3DxYsXERoaivfffx/R0dH6/9JfwAmKX6GgCQF5KpaIiPQhPT0dt27dgru7O8zMzKTlZf0au3feeQf169fH/Pnz4ebmhhYtWkhH0xISEuDk5ITPPvsMM2fOBAAcP34cfn5+uHfvHhwdHREeHo6BAwfi+PHj0vPir1y5Ai8vL5w4cQKNGzdGs2bNUKtWLemRoQDQs2dPpKWlYffu3f/l/X+PEc396NHCXmP377//wt7eHufPn0ft2rVx+/ZtuLu7Y/ny5Rg8eDAA4NKlS6hVqxYuX76MmjVrok+fPoiPj8eRI0fy9JeRkYHy5cvjwIED0vPrAWDIkCF4+vQp1q1bl28eL/sZADhBMREREZWCunXrSv92cHAAANSpUyfPssTERGmZkZER3nrrLel9zZo1YWNjg8uXLwMALl++jGbNmmnFadasmbQ+R6NGjQqV419//YXg4GBUrVoVarUabm5uAID4+PiXjiXnMV85eeccscvP9evX8fTpU7Rt2xaWlpbS6+eff9Y65VtSePMEERER6UXuO2RzJtzNb9mLpz31wcLColDtOnfujCpVquCnn36Cs7MzNBoNateujczMTK12r8rb3Nz8pf0/efIEALB7925UqlRJa52pqWmhctQFj9gRERFRqXn+/LnWDRVXr15FUlISvLy8AABeXl44evSo1meOHj0Kb2/vV/ab83i2nOvegP+ex3r16lVMmTIFbdq0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uLi4YPny5QgICJDa9OrVCw8ePMDUqVORkJCA+vXrY9++fVo3VBSUCxEREZHcFGkeuzcN57EjIiKi0lai89gRERERUdnEwo6IiIhIJop0jR0ZVlFP9QI83UtERPQm4xE7IiIiIplgYUdEREQkEyzsiIiIiGSChR0RERGRTLCwIyIiIpIJFnZEREREMsHCjoiIiEgmWNgRERERyQQLOyIiIiKZYGFHREREJBMs7IiIiIhkgoUdERERkUywsCMiIiKSCRZ2RERERDLBwo6IiIhIJljYEREREckECzsiIiIimWBhR0RERCQTLOyIiIiIZIKFHREREZFMsLAjIiIikgkWdkREREQywcKOiIiISCZY2BERERHJBAs7IiIiIplgYUdEREQkEyzsiIiIiGSChR0RERGRTLCwIyIiIpIJFnZEREREMsHCjoiIiEgmWNgRERERyQQLOyIiIiKZYGFHREREJBMs7IiIiIhkgoUdERERkUywsCMiIiKSCRZ2RERERDKhU2H39ddfQ6FQYNy4cdKy9PR0jB49GnZ2drC0tERQUBDu37+v9bn4+HgEBgaiXLlyqFixIiZMmIDnz59rtTl06BAaNmwIU1NTeHh4IDw8PE/8xYsXw83NDWZmZvD19cXJkye11hcmFyIiIiK5KHZhd+rUKfzwww+oW7eu1vLQ0FDs2rULmzdvRnR0NO7evYt3331XWp+dnY3AwEBkZmbi2LFjWL16NcLDwzF16lSpza1btxAYGIhWrVohLi4O48aNw5AhQ7B//36pzcaNGxEWFoZp06bhzJkzqFevHgICApCYmFjoXIiIiIjkRCGEEEX90JMnT9CwYUMsWbIEX3zxBerXr4/58+cjOTkZ9vb2WLduHXr06AEAuHLlCry8vBATE4MmTZpg79696NSpE+7evQsHBwcAwLJlyzBx4kQ8ePAAJiYmmDhxInbv3o0LFy5IMXv37o2kpCTs27cPAODr64u33noLixYtAgBoNBq4urpi7NixmDRpUqFyKUhKSgqsra2RnJwMtVqdZ7046Vmk703R+FqR2he1/+LEICIiorKtoHokt2IdsRs9ejQCAwPh7++vtTw2NhZZWVlay2vWrInKlSsjJiYGABATE4M6depIRR0ABAQEICUlBRcvXpTavNh3QECA1EdmZiZiY2O12iiVSvj7+0ttCpMLERERkZwYFfUD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EZGc6DSPndxxHjvG0CVGWZ3/TS4xiIjeFAabx46IiIiIyg4WdkREREQywcKOiIiISCZY2BERERHJBAs7IiIiIplgYUdEREQkEyzsiIiIiGSChR0RERGRTLCwIyIiIpIJFnZEREREMsHCjoiIiEgmWNgRERERyQQLOyIiIiKZYGFHREREJBMs7IiIiIhkgoUdERERkUywsCMiIiKSCRZ2RERERDLBwo6IiIhIJljYEREREckECzsiIiIimWBhR0RERCQTLOyIiIiIZMKotBMgIioOcdKzSO0Vja+VUCZERGUHj9gRERERyQSP2BERvQSPChLR64ZH7IiIiIhkgoUdERERkUywsCMiIiKSCRZ2RERERDLBwo6IiIhIJljYEREREckECzsiIiIimWBhR0RERCQTLOyIiIiIZIKFHREREZFMsLAjIiIikgkWdkREREQywcKOiIiISCZY2BERERHJBAs7IiIiIpkocmF3+PBhdO7cGc7OzlAoFNi+fbvWeiEEpk6dCicnJ5ibm8Pf3x9//fWXVptHjx6hb9++UKvVsLGxweDBg/HkyROtNufOnUOLFi1gZmYGV1dXzJ49O08umzdvRs2aNWFmZoY6depgz549Rc6FiIiISC6KXNilpaWhXr16WLx4cb7rZ8+ejYULF2LZsmU4ceIELCwsEBAQgPT0dKlN3759cfHiRURGRiIiIgKHDx/GsGHDpPUpKSlo164dqlSpgtjYWHz77beYPn06fvzxR6nNsWPHEBwcjMGDB+PPP/9Et27d0K1bN1y4cKFIuRARERHJhVFRP9ChQwd06NAh33VCCMyfPx9TpkxB165dAQA///wzHBwcsH37dvTu3RuXL1/Gvn37cOrUKTRq1AgA8P3336Njx46YM2cOnJ2dsXbtWmRmZmLlypUwMTFBrVq1EBcXh++++04qABcsWID27dtjwoQJAIDPP/8ckZGRWLRoEZYtW1aoXIiIiIjkRK/X2N26dQsJCQnw9/eXlllbW8PX1xcxMTEAgJiYGNjY2EhFHQD4+/tDqVTixIkTUpu3334bJiYmUpuAgABcvXoVjx8/ltrkjpPTJidOYXIhIiIikpMiH7F7lYSEBACAg4OD1nIHBwdpXUJCAipWrKidhJERypcvr9XG3d09Tx8562xtbZGQkFBgnIJyeVFGRgYyMjKk9ykpKQWMmIiIiKjs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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "result.plot()" ] }, { "cell_type": "markdown", "id": "a493b092-6236-419f-906c-16d52c47674f", "metadata": {}, "source": [ "### Save Explainer Log and Data" ] }, { "cell_type": "code", "execution_count": 21, "id": "7c638a2c-6b01-4228-aa0f-93fd8dd7feab", "metadata": {}, "outputs": [], "source": [ "# save the explainer log\n", "log_file_path = \"./morris-sa-demo.log\"\n", "result.log(path=log_file_path)" ] }, { "cell_type": "code", "execution_count": 22, "id": "f5d91240-09ff-4893-b652-b0259a8f222a", "metadata": {}, "outputs": [], "source": [ "!cat $log_file_path" ] }, { "cell_type": "code", "execution_count": 23, "id": "da4e2b28-96d7-440e-bfea-41cb694a52d4", "metadata": {}, "outputs": [], "source": [ "# save the explainer data\n", "result.zip(file_path=\"./morris-sa-demo-archive.zip\")" ] }, { "cell_type": "code", "execution_count": 24, "id": "c0540819-f896-481a-b470-b9d53a243b0a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Archive: morris-sa-demo-archive.zip\n", " Length Date Time Name\n", "--------- ---------- ----- ----\n", " 2217 2026-01-29 16:21 explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_ae200700-113e-45dd-9c07-325067173db7/result_descriptor.json\n", " 2 2026-01-29 16:21 explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_ae200700-113e-45dd-9c07-325067173db7/problems/problems_and_actions.json\n", " 110 2026-01-29 16:21 explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_ae200700-113e-45dd-9c07-325067173db7/global_html_fragment/text_html.meta\n", " 373 2026-01-29 16:21 explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_ae200700-113e-45dd-9c07-325067173db7/global_html_fragment/text_html/explanation.html\n", " 27808 2026-01-29 16:21 explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_ae200700-113e-45dd-9c07-325067173db7/global_html_fragment/text_html/fi-class-0.png\n", " 0 2026-01-29 16:21 explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_ae200700-113e-45dd-9c07-325067173db7/log/explainer_run_ae200700-113e-45dd-9c07-325067173db7.log\n", " 2 2026-01-29 16:21 explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_ae200700-113e-45dd-9c07-325067173db7/insights/insights_and_actions.json\n", " 185 2026-01-29 16:21 explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_ae200700-113e-45dd-9c07-325067173db7/global_feature_importance/application_vnd_h2oai_json_datatable_jay.meta\n", " 143 2026-01-29 16:21 explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_ae200700-113e-45dd-9c07-325067173db7/global_feature_importance/application_json.meta\n", " 669 2026-01-29 16:21 explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_ae200700-113e-45dd-9c07-325067173db7/global_feature_importance/application_vnd_h2oai_json_datatable_jay/explanation.json\n", " 872 2026-01-29 16:21 explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_ae200700-113e-45dd-9c07-325067173db7/global_feature_importance/application_vnd_h2oai_json_datatable_jay/feature_importance_class_0.jay\n", " 619 2026-01-29 16:21 explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_ae200700-113e-45dd-9c07-325067173db7/global_feature_importance/application_json/explanation.json\n", " 1504 2026-01-29 16:21 explainer_h2o_sonar_explainers_morris_sa_explainer_MorrisSensitivityAnalysisExplainer_ae200700-113e-45dd-9c07-325067173db7/global_feature_importance/application_json/feature_importance_class_0.json\n", "--------- -------\n", " 34504 13 files\n" ] } ], "source": [ "!unzip -l morris-sa-demo-archive.zip" ] }, { "cell_type": "code", "execution_count": null, "id": "72ae2b2f-5817-4ccc-a7d0-3cbc70d3eaa5", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "H2O Sonar", "language": "python", "name": "h2o-sonar" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.11" } }, "nbformat": 4, "nbformat_minor": 5 }