Metadata Builder Helper

GitHub Link to Code.

Metadata builder helper for feature importance operations.

This module provides helper methods for building metadata dictionaries that describe feature importance analyses, extracting common logic from FeatureImportanceManager methods.

class mdxplain.feature_importance.helper.metadata_builder_helper.MetadataBuilderHelper

Helper class for building feature importance analysis metadata.

Provides static methods for creating standardized metadata dictionaries that describe feature importance analyses. These dictionaries are stored alongside analysis results for documentation and debugging.

Examples

>>> # Build analysis metadata
>>> metadata = MetadataBuilderHelper.build_analysis_metadata(
...     sub_comp, analyzer_type, X, y, result
... )
>>> # Add group information
>>> MetadataBuilderHelper.add_group_information(metadata, sub_comp)
static add_group_information(metadata: Dict[str, Any], sub_comp: Dict[str, Any]) None

Add group information to metadata dictionary.

Adds information about the groups/selectors involved in the comparison to the metadata dictionary. Handles both binary and multiclass comparison modes.

Parameters

metadataDict[str, Any]

Metadata dictionary to add group information to (modified in-place)

sub_compDict[str, Any]

Sub-comparison dictionary containing group information

Returns

None

Modifies metadata dictionary in-place

Examples

>>> metadata = {"comparison": "test"}
>>> MetadataBuilderHelper.add_group_information(metadata, sub_comp)
>>> print("group1" in metadata or "selectors" in metadata)  # True
static add_model_metadata(metadata: Dict[str, Any], result: Dict[str, Any]) None

Add model-specific metadata to metadata dictionary.

Extracts and adds model-specific metadata from the analysis result to the main metadata dictionary.

Parameters

metadataDict[str, Any]

Metadata dictionary to add model metadata to (modified in-place)

resultDict[str, Any]

Analysis result containing model metadata

Returns

None

Modifies metadata dictionary in-place

Examples

>>> metadata = {"comparison": "test"}
>>> MetadataBuilderHelper.add_model_metadata(metadata, analysis_result)
>>> print("model_metadata" in metadata)  # True
static generate_sub_comparison_name(sub_comp: Dict[str, Any]) str

Generate sub-comparison name from data selector names.

Creates a descriptive name for the sub-comparison by joining data selector names with “_vs_” separator.

Parameters

sub_compDict[str, Any]

Sub-comparison dictionary containing selector information

Returns

str

Generated sub-comparison name

Examples

>>> # Binary comparison
>>> sub_comp = {
...     "group1_selectors": ["folded"],
...     "group2_selectors": ["unfolded"]
... }
>>> name = MetadataBuilderHelper.generate_sub_comparison_name(sub_comp)
>>> print(name)
folded_vs_unfolded
>>> # One-vs-rest comparison
>>> sub_comp = {
...     "group1_selectors": ["cluster_2"],
...     "group2_selectors": ["cluster_0", "cluster_1", "cluster_3"]
... }
>>> name = MetadataBuilderHelper.generate_sub_comparison_name(sub_comp)
>>> print(name)
cluster_2_vs_rest
>>> # Multiclass comparison
>>> sub_comp = {
...     "selectors": ["folded", "unfolded", "intermediate"]
... }
>>> name = MetadataBuilderHelper.generate_sub_comparison_name(sub_comp)
>>> print(name)
folded_vs_unfolded_vs_intermediate
static extract_class_names(sub_comp: Dict[str, Any]) list

Extract class names from sub-comparison data selectors.

Extracts the data selector names that represent the classes in the comparison for use as human-readable class labels. Handles one-vs-rest comparisons by using “all other” label and ensures correct label-to-name mapping.

Parameters

sub_compDict[str, Any]

Sub-comparison dictionary containing selector information

Returns

list

List of class names (data selector names) in correct label order

Examples

>>> # Binary comparison
>>> sub_comp = {
...     "group1_selectors": ["folded"],
...     "group2_selectors": ["unfolded"],
...     "labels": (0, 1)
... }
>>> names = MetadataBuilderHelper.extract_class_names(sub_comp)
>>> print(names)
['folded', 'unfolded']
>>> # One-vs-rest comparison
>>> sub_comp = {
...     "group1_selectors": ["cluster_0"],
...     "group2_selectors": ["cluster_1", "cluster_2", "cluster_3"],
...     "labels": (1, 0)
... }
>>> names = MetadataBuilderHelper.extract_class_names(sub_comp)
>>> print(names)
['all other', 'cluster_0']
>>> # Multiclass comparison
>>> sub_comp = {
...     "selectors": ["folded", "unfolded", "intermediate"]
... }
>>> names = MetadataBuilderHelper.extract_class_names(sub_comp)
>>> print(names)
['folded', 'unfolded', 'intermediate']