ce-mondrian-conditional
Configure and validate Mondrian and conditional calibration for subgroup-aware uncertainty and fairness-sensitive workflows.
SKILL.md.claude/skills/ce-mondrian-conditional/SKILL.md
GitHubCE Mondrian Conditional
You are setting up Mondrian (conditional) calibration, which partitions calibration data into subgroups so that each group receives its own uncertainty estimate. This reveals group-specific prediction quality and is the foundational technique for fairness-aware deployments in CE.
Research: Conditional Calibrated Explanations (xAI 2024)
Load references/mondrian_examples.md for full code examples (Options A/B/C,
fairness analysis, global vs conditional comparison).
Why Mondrian matters for fairness
Without conditional calibration, the CPS/Venn-Abers calibrator averages over all calibration instances. A minority group with harder prediction patterns may receive the same interval width as an easy majority group, hiding bias.
Mondrian splits calibration by a grouping key and fits a separate calibrator per bin. Resulting intervals are:
- Narrower for groups the model predicts reliably.
- Wider for groups the model predicts poorly.
Three options for specifying bins
- Option A — Inline
binsarray: pass integer group labels directly at calibrate time. - Option B —
MondrianCategorizer(recommended for continuous features): auto-bins viacrepes.extras.MondrianCategorizer. - Option C — Lambda as
mc: pass a callable directly for ad-hoc one-off scripts.
Calibration -> predict -> explain consistency rules
| Step | Bins argument |
|---|---|
calibrate(...) |
mc= (MondrianCategorizer or callable) OR bins= (integer array) |
predict(x, ...) |
nothing if mc was used at calibrate time OR bins=group_labels_test |
predict_proba(x, ...) |
same as above |
explain_factual(x, ...) |
same as above |
explore_alternatives(x, ...) |
same as above |
CRITICAL: always pass bins= at inference time whenever the explainer
was calibrated with inline Mondrian bins. Omitting it raises ValidationError;
passing bins= after global calibration raises ConfigurationError. When
mc= was used at calibration time, omit bins= at inference because the stored
categorizer derives labels automatically.
Recalibrating without bins= or mc= resets to global calibration. Use
calibrate(..., reuse_conditional=True) only when intentionally reusing a
stored categorizer on a new calibration set.
Minimum bin size warning
Mondrian calibration splits the calibration set by group. Too few samples per bin leads to unreliable or very wide intervals.
Rule of thumb: aim for >= 30-50 calibration samples per bin.
Out of Scope
- DifficultyEstimator (per-instance sigma scaling for regression; see
ce-regression-intervals). - Reject policies (deciding whether to defer uncertain predictions; see
ce-reject-policy). - Fairness constraint enforcement (CE reveals uncertainty; it does not enforce fairness automatically).
Evaluation Checklist
- Group labels at explain/predict time match the label space used at calibrate time.
- Minimum bin size verified (>= 30 samples per bin recommended).
- Inline
bins=were supplied at calibration and inference, ormc=was supplied at calibration and inference omitsbins=. - If comparing global vs Mondrian: separate
WrapCalibratedExplainerinstances used. - Per-group interval widths inspected to surface differential uncertainty.
- Coverage rate verified per group (not just pooled).