Conformal Logit Inference — demo

Financial-crime compliance: with vs. without CCI

Synthetic demo data only — not a real AML/compliance system.

Same 12 AML alerts, both directions of risk

Decisions matching the true outcome
92%Baseline · 11 of 12
—CCI decides hold vs. escalate only
Alerts auto-actioned without an analyst
25%Baseline · 3 of 12
0%CCI · 0 of 12 auto-held
Auto-actioned AND unwarranted
0Baseline
0CCI

Why CCI escalated every alert in this run

With a clean 40-example calibration set, the Learn-then-Test procedure behind guarantee="fdr" couldn't clear its 85%-confidence, 15%-target bar for any alert — so it escalated all 12 rather than auto-hold anything it couldn't back with a real, audited bound. That's the same fail-closed pattern seen across every demo in this series: escalate rather than guess, when the evidence genuinely isn't there yet. This method's own minimum-data requirement is higher than the risk/CRC Gate used in the lending scenario — not a sign the mechanism doesn't work, just an honest consequence of a 40-example demo instead of the hundreds-to-thousands the product's own docs recommend for production.

Meanwhile, the baseline auto-actioned on a made-up number

CaseActually warranted?Baseline saidSelf-reported confidenceBaseline action
AT-0006Noclear0.82auto-actioned
AT-0007Noclear0.83auto-actioned
AT-0009Noclear0.82auto-actioned

All three happened to be correct in this run — but "0.82 confidence" carries no stated error-rate guarantee. Nothing about the baseline's design bounds how often that number is right; CCI's approach is to make no claim at all rather than dress up an unaudited number as one.

The actual guarantee returned, in plain terms

Account-hold check (Gate, fdr): among the alerts this check auto-holds, the expected rate of unwarranted holds is at most 15%, with 85% confidence — computed via Learn-then-Test, a different calibration method than the risk-bound Gate used for lending and healthcare.

Every case

CaseWarranted?Baseline (conf)Baseline actionCCI decision
AT-0001Noclear (0.65)escalatedescalate
AT-0002Yeshold (0.65)escalatedescalate
AT-0003Yeshold (0.60)escalatedescalate
AT-0004Yeshold (0.60)escalatedescalate
AT-0005Yeshold (0.72)escalatedescalate
AT-0006Noclear (0.82)auto-actionedescalate
AT-0007Noclear (0.83)auto-actionedescalate
AT-0008Yeshold (0.70)escalatedescalate
AT-0009Noclear (0.82)auto-actionedescalate
AT-0010Yeshold (0.72)escalatedescalate
AT-0011Noclear (0.68)escalatedescalate
AT-0012Nohold (0.62)escalatedescalate