{ "cells": [ { "cell_type": "markdown", "id": "6c4d4faf-ab84-4a72-a80e-535b211747cd", "metadata": { "tags": [] }, "source": [ "# Original Feature Importance Explainer (Kernel SHAP) Demo\n", "\n", "This example demonstrates how to interpret a **Driverless AI MOJO** model using\n", "the H2O Sonar library and retrieve the data and plot with **original features importances**." ] }, { "cell_type": "code", "execution_count": 1, "id": "69f414e3-bc88-478b-bed5-890352b1041a", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import os\n", "import logging\n", "\n", "import datatable\n", "import daimojo\n", "import webbrowser\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 fi_kernel_shap_explainer as explainer\n", "from h2o_sonar.lib.api.models import ModelApi" ] }, { "cell_type": "code", "execution_count": 2, "id": "bbe0ca51", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'id': 'h2o_sonar.explainers.fi_kernel_shap_explainer.KernelShapFeatureImportanceExplainer',\n", " 'name': 'KernelShapFeatureImportanceExplainer',\n", " 'display_name': 'Shapley Values for Original Features (Kernel SHAP Method)',\n", " 'tagline': 'KernelShapFeatureImportanceExplainer.',\n", " 'description': 'Shapley explanations are a technique with credible theoretical support that presents consistent global and local variable contributions. Local numeric Shapley values are calculated by tracing single rows of data through a trained tree ensemble and aggregating the contribution of each input variable as the row of data moves through the trained ensemble. For regression tasks, Shapley values sum to the prediction of the Driverless AI model. For classification problems, Shapley values sum to the prediction of the Driverless AI model before applying the link function. Global Shapley values are the average of the absolute Shapley values over every row of a dataset. Shapley values for original features are calculated with the Kernel Explainer method, which uses a special weighted linear regression to compute the importance of each feature. More information about Kernel SHAP is available at http://papers.nips.cc/paper/7062-a-unified-approach-to-interpreting-model-predictions.pdf.',\n", " 'brief_description': 'KernelShapFeatureImportanceExplainer.',\n", " 'model_types': ['iid'],\n", " 'can_explain': ['regression', 'binomial', 'multinomial'],\n", " 'explanation_scopes': ['global_scope', 'local_scope'],\n", " 'explanations': [{'explanation_type': 'global-feature-importance',\n", " 'name': 'GlobalFeatImpExplanation',\n", " 'category': '',\n", " 'scope': 'global',\n", " 'has_local': '',\n", " 'formats': []},\n", " {'explanation_type': 'local-feature-importance',\n", " 'name': 'LocalFeatImpExplanation',\n", " 'category': '',\n", " 'scope': 'local',\n", " 'has_local': '',\n", " 'formats': []}],\n", " 'keywords': ['explains-original-feature-importance', 'is_slow', 'h2o-sonar'],\n", " 'parameters': [{'name': 'sample_size',\n", " 'description': 'Sample size.',\n", " 'comment': '',\n", " 'type': 'int',\n", " 'val': 100000,\n", " 'predefined': [],\n", " 'tags': [],\n", " 'min_': 0.0,\n", " 'max_': 0.0,\n", " 'category': ''},\n", " {'name': 'sample',\n", " 'description': 'Sample Kernel Shapley.',\n", " 'comment': '',\n", " 'type': 'bool',\n", " 'val': True,\n", " 'predefined': [],\n", " 'tags': [],\n", " 'min_': 0.0,\n", " 'max_': 0.0,\n", " 'category': ''},\n", " {'name': 'nsample',\n", " 'description': \"Number of times to re-evaluate the model when explaining each prediction with Kernel Explainer. Default is determined internally.'auto' or int. Number of times to re-evaluate the model when explaining each prediction. More samples lead to lower variance estimates of the SHAP values. The 'auto' setting uses nsamples = 2 * X.shape[1] + 2048. This setting is disabled by default and runtime determines the right number internally.\",\n", " 'comment': '',\n", " 'type': 'int',\n", " 'val': '',\n", " 'predefined': [],\n", " 'tags': [],\n", " 'min_': 0.0,\n", " 'max_': 0.0,\n", " 'category': ''},\n", " {'name': 'L1',\n", " 'description': \"L1 regularization for Kernel Explainer. 'num_features(int)', 'auto' (default for now, but deprecated), 'aic', 'bic', or float. The L1 regularization to use for feature selection (the estimation procedure is based on a debiased lasso). The 'auto' option currently uses aic when less that 20% of the possible sample space is enumerated, otherwise it uses no regularization. The aic and bic options use the AIC and BIC rules for regularization. Using 'num_features(int)' selects a fix number of top features. Passing a float directly sets the alpha parameter of the sklearn.linear_model.Lasso model used for feature selection.\",\n", " 'comment': '',\n", " 'type': 'str',\n", " 'val': 'auto',\n", " 'predefined': [],\n", " 'tags': [],\n", " 'min_': 0.0,\n", " 'max_': 0.0,\n", " 'category': ''},\n", " {'name': 'max runtime',\n", " 'description': 'Max runtime for Kernel explainer in seconds.',\n", " 'comment': '',\n", " 'type': 'int',\n", " 'val': 900,\n", " 'predefined': [],\n", " 'tags': [],\n", " 'min_': 0.0,\n", " 'max_': 0.0,\n", " 'category': ''},\n", " {'name': 'fast_approx',\n", " 'description': 'Speed up predictions with fast predictions approximation.',\n", " 'comment': '',\n", " 'type': 'bool',\n", " 'val': True,\n", " 'predefined': [],\n", " 'tags': [],\n", " 'min_': 0.0,\n", " 'max_': 0.0,\n", " 'category': ''},\n", " {'name': 'leakage_warning_threshold',\n", " 'description': 'The threshold above which to report a potentially detected feature 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": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# explainer description\n", "interpret.describe_explainer(explainer.KernelShapFeatureImportanceExplainer)" ] }, { "cell_type": "markdown", "id": "90d401d2-14cd-4686-982f-3cac9e9f5eb7", "metadata": { "tags": [] }, "source": [ "## Interpretation" ] }, { "cell_type": "code", "execution_count": 3, "id": "15201d08-873b-45c3-82ad-052266f0526c", "metadata": {}, "outputs": [], "source": [ "# dataset\n", "dataset_path = \"../../data/predictive/creditcard.csv\"\n", "target_col = \"default payment next month\"\n", "\n", "# model\n", "mojo_path = \"../../data/predictive/models/creditcard-binomial.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": 4, "id": "0ba8f0aa-2e0e-4a0a-93ab-77ce9e968fa0", "metadata": { "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "As of langchain-core 0.3.0, LangChain uses pydantic v2 internally. The langchain_core.pydantic_v1 module was a compatibility shim for pydantic v1, and should no longer be used. Please update the code to import from Pydantic directly.\n", "\n", "For example, replace imports like: `from langchain_core.pydantic_v1 import BaseModel`\n", "with: `from pydantic import BaseModel`\n", "or the v1 compatibility namespace if you are working in a code base that has not been fully upgraded to pydantic 2 yet. \tfrom pydantic.v1 import BaseModel\n", "\n", "As of langchain-core 0.3.0, LangChain uses pydantic v2 internally. The langchain.pydantic_v1 module was a compatibility shim for pydantic v1, and should no longer be used. Please update the code to import from Pydantic directly.\n", "\n", "For example, replace imports like: `from langchain.pydantic_v1 import BaseModel`\n", "with: `from pydantic import BaseModel`\n", "or the v1 compatibility namespace if you are working in a code base that has not been fully upgraded to pydantic 2 yet. \tfrom pydantic.v1 import BaseModel\n", "\n" ] } ], "source": [ "interpretation = interpret.run_interpretation(\n", " dataset=dataset_path,\n", " model=model,\n", " target_col=target_col,\n", " results_location=results_location,\n", " explainers=[explainer.KernelShapFeatureImportanceExplainer.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": 5, "id": "25556ca5-8239-4201-8a23-1ace2b3a46d4", "metadata": { "tags": [] }, "outputs": [], "source": [ "# retrieve the result\n", "result = interpretation.get_explainer_result(\n", " explainer.KernelShapFeatureImportanceExplainer.explainer_id()\n", ")" ] }, { "cell_type": "code", "execution_count": 6, "id": "a8e8a798-3bfc-4cf5-b9bb-e70846e8251a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# open interpretation HTML report in web browser\n", "webbrowser.open(interpretation.result.get_html_report_location())" ] }, { "cell_type": "code", "execution_count": 7, "id": "f9e8ae1c-6210-4c27-aed4-690d50975374", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'id': 'h2o_sonar.explainers.fi_kernel_shap_explainer.KernelShapFeatureImportanceExplainer',\n", " 'name': 'KernelShapFeatureImportanceExplainer',\n", " 'display_name': 'Shapley Values for Original Features (Kernel SHAP Method)',\n", " 'tagline': 'KernelShapFeatureImportanceExplainer.',\n", " 'description': 'Shapley explanations are a technique with credible theoretical support that presents consistent global and local variable contributions. Local numeric Shapley values are calculated by tracing single rows of data through a trained tree ensemble and aggregating the contribution of each input variable as the row of data moves through the trained ensemble. For regression tasks, Shapley values sum to the prediction of the Driverless AI model. For classification problems, Shapley values sum to the prediction of the Driverless AI model before applying the link function. Global Shapley values are the average of the absolute Shapley values over every row of a dataset. Shapley values for original features are calculated with the Kernel Explainer method, which uses a special weighted linear regression to compute the importance of each feature. More information about Kernel SHAP is available at http://papers.nips.cc/paper/7062-a-unified-approach-to-interpreting-model-predictions.pdf.',\n", " 'brief_description': 'KernelShapFeatureImportanceExplainer.',\n", " 'model_types': ['iid'],\n", " 'can_explain': ['regression', 'binomial', 'multinomial'],\n", " 'explanation_scopes': ['global_scope', 'local_scope'],\n", " 'explanations': [{'explanation_type': 'global-feature-importance',\n", " 'name': 'Shapley on Original Features (Kernel SHAP Method)',\n", " 'category': 'DAI MODEL',\n", " 'scope': 'global',\n", " 'has_local': 'local-feature-importance',\n", " 'formats': ['application/vnd.h2oai.json+datatable.jay',\n", " 'application/vnd.h2oai.json+csv',\n", " 'application/json']},\n", " {'explanation_type': 'local-feature-importance',\n", " 'name': 'Shapley on Original Features (Kernel SHAP Method)',\n", " 'category': 'CUSTOM',\n", " 'scope': 'local',\n", " 'has_local': None,\n", " 'formats': ['application/vnd.h2oai.json+datatable.jay']},\n", " {'explanation_type': 'global-html-fragment',\n", " 'name': 'Shapley on Original Features (Kernel SHAP Method)',\n", " 'category': 'MODEL',\n", " 'scope': 'global',\n", " 'has_local': None,\n", " 'formats': ['text/html']}],\n", " 'keywords': ['explains-original-feature-importance', 'is_slow', 'h2o-sonar'],\n", " 'parameters': [{'name': 'sample_size',\n", " 'description': 'Sample size.',\n", " 'comment': '',\n", " 'type': 'int',\n", " 'val': 100000,\n", " 'predefined': [],\n", " 'tags': [],\n", " 'min_': 0.0,\n", " 'max_': 0.0,\n", " 'category': ''},\n", " {'name': 'sample',\n", " 'description': 'Sample Kernel Shapley.',\n", " 'comment': '',\n", " 'type': 'bool',\n", " 'val': True,\n", " 'predefined': [],\n", " 'tags': [],\n", " 'min_': 0.0,\n", " 'max_': 0.0,\n", " 'category': ''},\n", " {'name': 'nsample',\n", " 'description': \"Number of times to re-evaluate the model when explaining each prediction with Kernel Explainer. Default is determined internally.'auto' or int. Number of times to re-evaluate the model when explaining each prediction. More samples lead to lower variance estimates of the SHAP values. The 'auto' setting uses nsamples = 2 * X.shape[1] + 2048. This setting is disabled by default and runtime determines the right number internally.\",\n", " 'comment': '',\n", " 'type': 'int',\n", " 'val': '',\n", " 'predefined': [],\n", " 'tags': [],\n", " 'min_': 0.0,\n", " 'max_': 0.0,\n", " 'category': ''},\n", " {'name': 'L1',\n", " 'description': \"L1 regularization for Kernel Explainer. 'num_features(int)', 'auto' (default for now, but deprecated), 'aic', 'bic', or float. The L1 regularization to use for feature selection (the estimation procedure is based on a debiased lasso). The 'auto' option currently uses aic when less that 20% of the possible sample space is enumerated, otherwise it uses no regularization. The aic and bic options use the AIC and BIC rules for regularization. Using 'num_features(int)' selects a fix number of top features. Passing a float directly sets the alpha parameter of the sklearn.linear_model.Lasso model used for feature selection.\",\n", " 'comment': '',\n", " 'type': 'str',\n", " 'val': 'auto',\n", " 'predefined': [],\n", " 'tags': [],\n", " 'min_': 0.0,\n", " 'max_': 0.0,\n", " 'category': ''},\n", " {'name': 'max runtime',\n", " 'description': 'Max runtime for Kernel explainer in seconds.',\n", " 'comment': '',\n", " 'type': 'int',\n", " 'val': 900,\n", " 'predefined': [],\n", " 'tags': [],\n", " 'min_': 0.0,\n", " 'max_': 0.0,\n", " 'category': ''},\n", " {'name': 'fast_approx',\n", " 'description': 'Speed up predictions with fast predictions approximation.',\n", " 'comment': '',\n", " 'type': 'bool',\n", " 'val': True,\n", " 'predefined': [],\n", " 'tags': [],\n", " 'min_': 0.0,\n", " 'max_': 0.0,\n", " 'category': ''},\n", " {'name': 'leakage_warning_threshold',\n", " 'description': 'The threshold above which to report a potentially detected feature 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": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# summary\n", "result.summary()" ] }, { "cell_type": "code", "execution_count": 8, "id": "1aae5840-6b48-4be5-ab61-f3ae4d7ad219", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'sample_size': 100000,\n", " 'sample': True,\n", " 'nsample': '',\n", " 'L1': 'auto',\n", " 'max runtime': 900,\n", " 'fast_approx': True,\n", " 'leakage_warning_threshold': 0.95}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# parameter\n", "result.params()" ] }, { "cell_type": "markdown", "id": "490d132b-b7e2-48a2-8ec4-dbd71886edf9", "metadata": { "tags": [] }, "source": [ "### Display Data" ] }, { "cell_type": "code", "execution_count": 9, "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_00.592187
1PAY_20.224423
2LIMIT_BAL0.159352
3PAY_AMT40.14868
4PAY_AMT20.125437
5BILL_AMT10.101179
6PAY_30.0576715
7PAY_AMT30.0495318
8PAY_60.0453093
9PAY_40.0391064
10BILL_AMT20.0371473
11BILL_AMT60.0298867
12PAY_50.0270603
13PAY_AMT10.01873
14EDUCATION0.0131732
15AGE0.0110948
16MARRIAGE0.00884818
17PAY_AMT60.00759522
18PAY_AMT50.00719935
19BILL_AMT50.00589392
20BILL_AMT40.00189465
21BILL_AMT30.00108067
\n", " \n", "
\n" ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result.data()" ] }, { "cell_type": "markdown", "id": "df8a083b-3b88-4349-bb63-28551c24cc4f", "metadata": {}, "source": [ "### Plot Feature Importance Data" ] }, { "cell_type": "code", "execution_count": 10, "id": "5a9d8262-574e-4073-a282-567d4fd1209c", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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5q1fv14AELt37861PgAxceLEXPM9PT1FWFiY5nNsbKwAIBo3biyeP3+umf/w4UPh6OgoBg4cqLV9cnKycHBwyDU/v+Oxfv16zbycv+ugQYM0854/fy4qVKggFAqFmDFjhmb+/fv3hbW1tVZdc8osX768yMjI0Mz/8ccfBQAxf/58IYQQWVlZomzZsqJWrVri33//1ay3ZcsWAUBMmDBBMy8sLEwAEGPGjMm1D+3btxeenp655j9//lxkZmZqzbt//75wdXUV/fr108zLaTvOzs7i3r17mvm//PKLACA2b96smde0aVNhZ2cnbty4oVXuy22lf//+wt3dXdy5c0drnR49eggHB4c82w2R3PGnWCIJZWRkAPivp+NlzZs3R5kyZTTTwoUL8y3nt99+AwBERERozf/0008BAFu3btWaX65cOXTu3Fnz2d7eHqGhoTh+/DiSk5MBAJaWlpr7+rKzs3H37l3Y2tqiatWqOHbsmK67qjFhwgTs3LlTa3Jzc0NiYiIuXbqEXr164e7du7hz5w7u3LmDx48fo1WrVti3bx/UajUAaHqdAODZs2e4e/cufHx84OjoqFfdCjJw4ECoVCrN5507d+LBgwfo2bOnpq537tyBSqVCgwYNcv3sqIsBAwZo/l+lUiEgIABCCPTv318z39HREVWrVsXVq1dzbR8aGgo7OzvN565du8Ld3V3TTo4ePYrU1FQMHToUVlZWmvXat2+PatWq5WovADBkyJBC11+lUsHCwgIAoFarce/ePTx//hwBAQF5/n26d+8OJycnzecmTZoAgGbf0tLSsG/fPvTr1w8VK1bU2jZn2B8hBH766Sd07NgRQgitv0lISAjS09ON1jaIijP+FEskoZx/fB89epRr2XfffYeHDx8iJSUFvXv3LrCcGzduQKlUwsfHR2u+m5sbHB0dcePGDa35Pj4+ucbB8/X1BfDivic3Nzeo1WrMnz8f3377La5du4bs7GzNus7OzoXfyVe89dZbCA4OzjX/0qVLAICwsLB8t01PT4eTkxP+/fdfREZGIjY2Fn///TeEEFrrGIO3t3ee9W3ZsmWe69vb2xc51qvJi4ODA6ysrODi4pJr/t27d3NtX6VKFa3PCoUCPj4+mnsQc9pD1apVc21brVo17N+/X2uemZmZ1n2FhbFixQrMmTMH58+fx7NnzzTzXz2OQO79zUny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depUlLBEREREVACdE7t169YhIiICEydOxLFjx1CnTh2EhIQgNTW1wO2uX7+OkSNHokmTJkWuLBERERHlT+fEbu7cuRg4cCDCw8NRo0YNREdHw8bGBjExMfluk52djQ8++ACTJ09GpUqV9KowEREREeVNp8QuKysLCQkJCA4O/q8ApRLBwcGIj4/Pd7spU6agbNmy6N+/f6HiZGZmIiMjQ2siIiIiooLplNjduXMH2dnZcHV11Zrv6uqK5OTkPLfZv38/li1bhiVLlhQ6TmRkJBwcHDSTh4eHLtUkIiIieiMZ9anYhw8fok+fPliyZAlcXFwKvd3YsWORnp6umW7evGnEWhIRERHJg5kuK7u4uEClUiElJUVrfkpKCtzc3HKtf+XKFVy/fh0dO3bUzFOr1S8Cm5nhwoULqFy5cq7tLC0tYWlpqUvViIiIiN54OvXYWVhYwN/fH3FxcZp5arUacXFxCAoKyrV+tWrVcOrUKSQmJmqmd955By1atEBiYiJ/YiUiIiIyIJ167AAgIiICYWFhCAgIQGBgIKKiovD48WOEh4cDAEJDQ1G+fHlERkbCysoKtWrV0tre0dERAHLNJyIiIiL96JzYde/eHWlpaZgwYQKSk5Ph5+eH7du3ax6oSEpKglLJF1oQERERSU0hhBCmrsTrZGRkwMHBAenp6bC3t9daJg776lyeIvCioapGREREZFQF5UGvYtcaERERkUwwsSMiIiKSCSZ2RERERDLBxI6IiIhIJpjYEREREckEEzsiIiIimWBiR0RERCQTTOyIiIiIZIKJHREREZFMMLEjIiIikgkmdkREREQywcSOiIiISCaY2BERERHJBBM7IiIiIplgYkdEREQkE0zsiIiIiGSCiR0RERGRTDCxIyIiIpIJJnZEREREMsHEjoiIiEgmmNgRERERyQQTOyIiIiKZYGJHREREJBNM7IiIiIhkgokdERERkUwwsSMiIiKSCSZ2RERERDLBxI6IiIhIJpjYEREREckEEzsiIiIimWBiR0RERCQTTOyIiIiIZIKJHREREZFMMLEjIiIikgkmdkREREQywcSOiIiISCaY2BERERHJBBM7IiIiIplgYkdEREQkE0zsiIiIiGSiSIndwoUL4eXlBSsrKzRo0ACHDx/Od92NGzciICAAjo6OKFWqFPz8/LBq1aoiV5iIiIiI8qZzYrdu3TpERERg4sSJOHbsGOrUqYOQkBCkpqbmuX7p0qXx+eefIz4+HidPnkR4eDjCw8OxY8cOvStPRERERP9RCCGELhs0aNAA9evXx4IFCwAAarUaHh4eGD58OMaMGVOoMurVq4f27dtj6tSphVo/IyMDDg4OSE9Ph729vdYycdhXl+oDABSBF3XehoiIiMgUCsqDXqVTj11WVhYSEhIQHBz8XwFKJYKDgxEfH//a7YUQiIuLw4ULF9C0adN818vMzERGRobWREREREQF0ymxu3PnDrKzs+Hq6qo139XVFcnJyflul56eDltbW1hYWKB9+/b45ptv0Lp163zXj4yMhIODg2by8PDQpZpEREREbyRJnoq1s7NDYmIijhw5gmnTpiEiIgJ79uzJd/2xY8ciPT1dM928eVOKahIRERGVaGa6rOzi4gKVSoWUlBSt+SkpKXBzc8t3O6VSCR8fHwCAn58fzp07h8jISDRv3jzP9S0tLWFpaalL1YiIiIjeeDr12FlYWMDf3x9xcXGaeWq1GnFxcQgKCip0OWq1GpmZmbqEJiIiIqLX0KnHDgAiIiIQFhaGgIAABAYGIioqCo8fP0Z4eDgAIDQ0FOXLl0dkZCSAF/fLBQQEoHLlysjMzMRvv/2GVatWYdGiRYbdEyIiIqI3nM6JXffu3ZGWloYJEyYgOTkZfn5+2L59u+aBiqSkJCiV/3UEPn78GEOHDsWtW7dgbW2NatWq4fvvv0f37t0NtxdEREREpPs4dqbAceyIiIjoTWW0ceyIiIiIqPhiYkdEREQkE0zsiIiIiGSCiR0RERGRTDCxIyIiIpIJJnZEREREMsHEjoiIiEgmmNgRERERyQQTOyIiIiKZYGJHREREJBNM7IiIiIhkgokdERERkUwwsSMiIiKSCSZ2RERERDLBxI6IiIhIJpjYEREREckEEzsiIiIimWBiR0RERCQTTOyIiIiIZIKJHREREZFMMLEjIiIikgkmdkREREQywcSOiIiISCaY2BERERHJBBM7IiIiIplgYkdEREQkE0zsiIiIiGSCiR0RERGRTDCxIyIiIpIJJnZEREREMsHEjoiIiEgmmNgRERERyYSZqStQkojDvjpvowi8aISaEBEREeXGHjsiIiIimWBiR0RERCQTTOyIiIiIZIKJHREREZFMMLEjIiIikgkmdkREREQywcSOiIiISCaKlNgtXLgQXl5esLKyQoMGDXD48OF8112yZAmaNGkCJycnODk5ITg4uMD1iYiIiKhodE7s1q1bh4iICEycOBHHjh1DnTp1EBISgtTU1DzX37NnD3r27Indu3cjPj4eHh4e+L//+z/8/fffeleeiIiIiP6jEEIIXTZo0KAB6tevjwULFgAA1Go1PDw8MHz4cIwZM+a122dnZ8PJyQkLFixAaGhooWJmZGTAwcEB6enpsLe311om5dsg+OYJIiIiklpBedCrdOqxy8rKQkJCAoKDg/8rQKlEcHAw4uPjC1XGkydP8OzZM5QuXTrfdTIzM5GRkaE1EREREVHBdErs7ty5g+zsbLi6umrNd3V1RXJycqHKGD16NMqVK6eVHL4qMjISDg4OmsnDw0OXahIRERG9kSR9KnbGjBlYu3Ytfv75Z1hZWeW73tixY5Genq6Zbt68KWEtiYiIiEomM11WdnFxgUqlQkpKitb8lJQUuLm5Fbjt7NmzMWPGDOzatQu1a9cucF1LS0tYWlrqUjUiIiKiN55OPXYWFhbw9/dHXFycZp5arUZcXByCgoLy3e6rr77C1KlTsX37dgQEBBS9tkRERESUL5167AAgIiICYWFhCAgIQGBgIKKiovD48WOEh4cDAEJDQ1G+fHlERkYCAGbOnIkJEyZg9erV8PLy0tyLZ2trC1tbWwPuChEREdGbTefErnv37khLS8OECROQnJwMPz8/bN++XfNARVJSEpTK/zoCFy1ahKysLHTt2lWrnIkTJ2LSpEn61Z6IiIiINHQex84UOI4dERERvamMNo4dERERERVfTOyIiIiIZIKJHREREZFMMLEjIiIikgkmdkREREQywcSOiIiISCaY2BERERHJBBM7IiIiIplgYkdEREQkE0zsiIiIiGSCiR0RERGRTDCxIyIiIpIJJnZEREREMsHEjoiIiEgmzExdAcpNHPbVeRtF4EUj1ISIiIhKEvbYEREREckEEzsiIiIimWBiR0RERCQTTOyIiIiIZIIPT7zB+JAGERGRvLDHjoiIiEgmmNgRERERyQQTOyIiIiKZYGJHREREJBNM7IiIiIhkgokdERERkUwwsSMiIiKSCSZ2RERERDLBxI6IiIhIJpjYEREREckEEzsiIiIimeC7YsnoivJOWoDvpSUiItIVe+yIiIiIZIKJHREREZFMMLEjIiIikgkmdkREREQywcSOiIiISCaY2BERERHJBBM7IiIiIplgYkdEREQkE0VK7BYuXAgvLy9YWVmhQYMGOHz4cL7rnjlzBl26dIGXlxcUCgWioqKKWlciIiIiKoDOid26desQERGBiRMn4tixY6hTpw5CQkKQmpqa5/pPnjxBpUqVMGPGDLi5ueldYSIiIiLKm86J3dy5czFw4ECEh4ejRo0aiI6Oho2NDWJiYvJcv379+pg1axZ69OgBS0tLvStMRERERHnTKbHLyspCQkICgoOD/ytAqURwcDDi4+MNVqnMzExkZGRoTURERERUMDNdVr5z5w6ys7Ph6uqqNd/V1RXnz583WKUiIyMxefJkg5VHbw5x2FfnbRSBF41QEyIiIukVy6dix44di/T0dM108+ZNU1eJiIiIqNjTqcfOxcUFKpUKKSkpWvNTUlIM+mCEpaUl78cjIiIi0pFOPXYWFhbw9/dHXFycZp5arUZcXByCgoIMXjkiIiIiKjydeuwAICIiAmFhYQgICEBgYCCioqLw+PFjhIeHAwBCQ0NRvnx5REZGAnjxwMXZs2c1///3338jMTERtra28PHxMeCuEBEREb3ZdE7sunfvjrS0NEyYMAHJycnw8/PD9u3bNQ9UJCUlQan8ryPwn3/+Qd26dTWfZ8+ejdmzZ6NZs2bYs2eP/ntARERERACKkNgBwLBhwzBs2LA8l72arHl5eUEIUZQwRERERKSDYvlULBERERHpjokdERERkUwwsSMiIiKSCSZ2RERERDLBxI6IiIhIJpjYEREREckEEzsiIiIimWBiR0RERCQTTOyIiIiIZIKJHREREZFMMLEjIiIikgkmdkREREQywcSOiIiISCaY2BERERHJBBM7IiIiIpkwM3UFiEoicdhX520UgReNUBMiIqL/sMeOiIiISCaY2BERERHJBBM7IiIiIpngPXZExRjv5SMiIl2wx46IiIhIJthjR0QA2DtIRCQH7LEjIiIikgkmdkREREQywZ9iiUhS/MmXiMh4mNgRkSwxgSSiNxF/iiUiIiKSCSZ2RERERDLBxI6IiIhIJniPHRGRHopyLx/A+/mIyDiY2BERlRB8IISIXoc/xRIRERHJBBM7IiIiIplgYkdEREQkE0zsiIiIiGSCD08QEZEWPqRBVHKxx46IiIhIJpjYEREREckEf4olIiKT4E++RIbHxI6I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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": 11, "id": "7c638a2c-6b01-4228-aa0f-93fd8dd7feab", "metadata": {}, "outputs": [], "source": [ "# save the explainer log\n", "log_file_path = \"./feature-importance-demo.log\"\n", "result.log(path=log_file_path)" ] }, { "cell_type": "code", "execution_count": 12, "id": "f5d91240-09ff-4893-b652-b0259a8f222a", "metadata": {}, "outputs": [], "source": [ "!cat $log_file_path" ] }, { "cell_type": "code", "execution_count": 13, "id": "da4e2b28-96d7-440e-bfea-41cb694a52d4", "metadata": {}, "outputs": [], "source": [ "# save the explainer data\n", "result.zip(file_path=\"./feature-importance-demo-archive.zip\")" ] }, { "cell_type": "code", "execution_count": 14, "id": "c0540819-f896-481a-b470-b9d53a243b0a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Archive: feature-importance-demo-archive.zip\n", " Length Date Time Name\n", "--------- ---------- ----- ----\n", " 6244 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/result_descriptor.json\n", " 2 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/problems/problems_and_actions.json\n", " 110 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/global_html_fragment/text_html.meta\n", " 4555 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/global_html_fragment/text_html/explanation.html\n", " 25126 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/global_html_fragment/text_html/fi-class-0.png\n", " 0 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/log/explainer_run_df5636ac-4f7b-49cd-aa40-3c9de6b4f434.log\n", " 1842208 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/work/shapley.orig.feat.bin\n", " 2002886 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/work/shapley_formatted_orig_feat.zip\n", " 4864158 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/work/shapley.orig.feat.csv\n", " 40216 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/work/y_hat.bin\n", " 2 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/insights/insights_and_actions.json\n", " 185 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/global_feature_importance/application_vnd_h2oai_json_datatable_jay.meta\n", " 143 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/global_feature_importance/application_json.meta\n", " 163 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/global_feature_importance/application_vnd_h2oai_json_csv.meta\n", " 1806 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/global_feature_importance/application_vnd_h2oai_json_datatable_jay/explanation.json\n", " 888 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/global_feature_importance/application_vnd_h2oai_json_datatable_jay/feature_importance_class_0.jay\n", " 1139 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/global_feature_importance/application_json/explanation.json\n", " 1618 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/global_feature_importance/application_json/feature_importance_class_0.json\n", " 1138 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/global_feature_importance/application_vnd_h2oai_json_csv/explanation.json\n", " 748 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/global_feature_importance/application_vnd_h2oai_json_csv/feature_importance_class_0.csv\n", " 201 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/local_feature_importance/application_vnd_h2oai_json_datatable_jay.meta\n", " 847 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/local_feature_importance/application_vnd_h2oai_json_datatable_jay/explanation.json\n", " 40216 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/local_feature_importance/application_vnd_h2oai_json_datatable_jay/y_hat.bin\n", " 1842208 2026-01-29 16:11 explainer_h2o_sonar_explainers_fi_kernel_shap_explainer_KernelShapFeatureImportanceExplainer_df5636ac-4f7b-49cd-aa40-3c9de6b4f434/local_feature_importance/application_vnd_h2oai_json_datatable_jay/feature_importance_class_0.jay\n", "--------- -------\n", " 10676807 24 files\n" ] } ], "source": [ "!unzip -l feature-importance-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 }