Examples · Plots
decision_drivers
Population view: which features drive decisions across many rows.
Code#
decision_drivers.py
import matplotlib.pyplot as plt from _setup import X_test, artifact, y_test from compileml.runtime import decidefrom compileml.viz import decision_drivers # Explain everything. A few milliseconds each is real-time for credit# decisioning, and a fully explained book turns portfolio questions into# census facts instead of sample estimates.sample = X_test[:1500]decisions = [decide(artifact, r.tolist(), include_contributions=True) for r in sample] fig, ax = decision_drivers(decisions, y=y_test[:1500], top_codes=10)fig.savefig("../../public/examples/decision_drivers.png", dpi=120, bbox_inches="tight")plt.close(fig) print(f"explained {len(decisions)} decisions")print()counts = {}for decision in decisions: for reason in decision["reasons_negative"]: counts[reason["code"]] = counts.get(reason["code"], 0) + 1 print("most frequent adverse codes:")for code, count in sorted(counts.items(), key=lambda kv: -kv[1])[:5]: print(f" {count:>4} {code}")Output#
Captured from an actual run against compileml 0.9.0 and the UCI credit panel. If this script stops working, the build fails.
captured in CIdecision_drivers.py
explained 1500 decisions most frequent adverse codes: 565 AMOUNT_PAID_M3 528 AMOUNT_PAID_M4 527 AMOUNT_PAID_M2 495 AMOUNT_PAID_M1 485 STATEMENT_BALANCE_M1Figure#

Rendered by the run above, from the decision payload rather than a recomputation.