Reading and plotting results#

Explanation objects and SHAP plots#

Like UnifiedIG, direct TreeIG returns a plotting-library-independent Explanation containing parallel attribution arrays and completeness diagnostics:

ig = tig.TreeIG(model, baseline=x0)
result = ig.explain(X_eval)

result.values
result.base_values
result.data
result.feature_names
result.output_names
result.max_abs_completeness_error

Convert it when you want to use SHAP’s plotting ecosystem:

import shap

shap_values = result.to_shap()
shap.plots.beeswarm(shap_values)
shap.plots.waterfall(shap_values[0])
shap.plots.bar(shap_values)

SHAP is an optional plotting dependency; install it with pip install treeig[shap]. The conversion changes only the container, not the TreeIG attribution semantics.

For detailed split-crossing statistics, call diagnostics:

infos, summary = ig.diagnostics(X_eval)

Each entry in infos describes one observation:

{
    "n_events":        ...,   # number of split-crossing events
    "endpoint_delta":  ...,   # F(x) - F(x0)
    "attribution_sum": ...,   # sum_j phi_j
    "residual":        ...,   # attribution_sum - endpoint_delta
    "abs_residual":    ...,
}

TreeIGNumeric returns the same fields plus n_coincident_events, the number of events that remained unresolved and were allocated by the fallback rule. It also reports n_refined_intervals, max_refinement_depth, and n_unresolved_intervals. The summary dictionary aggregates these refinement, residual, and event-count diagnostics.

Classification targets#

For binary additive-score classifiers, target=None and target=1 both attribute the positive-class margin. target=0 attributes the negative margin, implemented as the negative of the positive-class margin.

ig = tig.TreeIG(model, baseline=x0, target=1)
phi_pos = ig.attribute(X_eval)

ig = tig.TreeIG(model, baseline=x0, target=0)
phi_neg = ig.attribute(X_eval)

For multiclass classifiers, pass the class index explicitly.

ig = tig.TreeIG(model, baseline=x0, target=2)
phi_class_2 = ig.attribute(X_eval)

Exact TreeIG attributes raw class margins. When no native margin exists, TreeIGNumeric defaults to binary log odds or centered multiclass log scores derived from probabilities. See numerical classification conventions for explicit floors at zero and the opt-in class-probability mode.

Functional interface#

TreeIG also provides a direct functional interface.

result = tig.compute(
    model,
    baseline=x0,
    X=X_eval,
)