Skip to content

triadxai

TRIAD splits every feature's contribution to a model score into three signed channels that sum back exactly:

  • I — Information: the part supported by training data,
  • D — Density / epistemic: the under-supported part — where the model guesses,
  • M — Missingness: the part routed through missing-value handling.

The identity I + D + M = f_j(x_j) holds per feature (C1) and channel totals reconcile exactly to the model score (C2). This separates "denied because of bad information" from "denied because we lack information" — aligned with the Reg B adverse-action reason-code taxonomy that distinguishes derogatory from insufficient-information reasons.

Two modes, one API

Exact mode Approximate mode
Models Additive: fit_lgbm_gam boosters, EBM (triadxai[ebm]) Any LightGBM booster
Attribution Exact term contributions from bin tensors Native TreeSHAP (pred_contrib)
Support weight Per-bin empirical-Bayes shrinkage w = τ²/(τ²+v) Per-instance, from bag-replica disagreement
Guarantees C1–C8 exact C1–C8 hold; interaction effects leak into per-feature channels

See Design decisions for what "approximate" gives up and why bag disagreement doubles as a density signal.

Where to start

Getting started walks through fitting an additive-constrained LightGBM, reading the channels frame, epistemic scores (ES / KR), reason codes, and the three-channel waterfall.

The Guidebook runs the same workflow end to end on synthetic data with known ground truth, including the density-gap and approximate-mode studies.