Channels and guarantees¶
TRIAD reallocates each feature's exact contribution \(f_j(x_j)\) into three signed channels:
| Channel | Meaning | Value |
|---|---|---|
| I — Information | supported by training data | \(w f\) on observed rows, else 0 |
| D — Density / epistemic | under-supported — the model's guess | residual \(f - w f\) |
| M — Missingness | routed through missing-value handling | \(w f\) on missing rows, else 0 |
\(w \in [0, 1]\) is the support weight. D is computed as the residual \(f - wf\) — never as \((1-w)f\) — so the three channels sum back to \(f\) to float roundoff (decision 11).
The invariant suite¶
The properties below are asserted by the test battery over both modes (exact and approximate), several synthetic DGPs and multiple seeds:
| Property | Statement |
|---|---|
| C1 — completeness | \(I + D + M = f\) per term (atol=1e-12) |
| C2 — reconciliation | channel totals + intercept = the model's raw score |
| C3 — vanishing epistemic | \(v \to 0 \Rightarrow D \to 0\): well-supported bins carry no epistemic mass |
| C4 — missingness exclusivity | missing value ⇒ \(I = 0\); observed value ⇒ \(M = 0\) |
| C5 — sign preservation | every nonzero channel shares the sign of the feature's total contribution |
| C7 — scale equivariance | scaling \(f\) by \(c\) (and \(v\), \(\tau^2\) by \(c^2\)) scales every channel by \(c\) |
| C8 — null feature | a feature the model never splits on gets all channels 0 |
Beyond the suite, explain guards C2 at runtime on every call — a discrepancy
beyond 1e-6 raises RuntimeError — and reconciliation_error /
channel_mass in triadxai.metrics verify and summarize the identity externally.
Caveats worth knowing¶
- Pair terms (EBM interactions) split their channels equally between the two
participating features (
pair_split="half"). Half of a missing-partner pair's M then lands on the observed feature, so C4 holds at term level, not feature level, for pair-bearing models. LightGBM exact mode has no pairs, so its feature-level C4 is exact (decision 14). - C8 in approximate mode has one nuance: a feature absent from all trees gets \(\phi \equiv 0\) and hence all channels 0; a pure-noise feature that does get trees is instead handled by \(\hat\tau^2 = 0\), which routes its entire contribution to D (decision 5).
- Attribution vs variance provenance: attributions come from the single deployed model; variance comes from bag replicas. C1/C2 therefore hold exactly on the deployed model's attributions — the replicas enter only through \(w\) (decision 4).