updatesupport

Claim audits for aggregation bias

Know whether a reported aggregate survives hidden subgroup recomposition.

updatesupport audits whether coarse public categories are stable enough for a reported estimate, decision, model metric, risk measure, or causal effect.

Claim audits Declare the claim, then audit it.

Pass, fail, or explain why the current public representation is inconclusive.

Simple surface One front door, deeper tools behind it.

Use us.claim(...).audit(rows); drop lower when you need evidence internals.

Refinement intelligence Find the smallest useful public representation.

Rank refinements, inspect interactions, and search reporting-design frontiers.

Stress tests Choose the recomposition model explicitly.

Saturated fibers, TV/KL/chi-square budgets, Wasserstein, balance drift, and custom CVXPY sets.

Quickstart

pip install updatesupport
import updatesupport as us

claim = us.claim(
    "reported lift remains positive",
    public=["segment"],
    hidden=["segment", "channel", "tenure_band", "device"],
    target="treatment_minus_control_lift",
    weight="users",
    candidate_refinements=["channel", "tenure_band", "device"],
    decision=us.threshold_decision(">=", 0.0),
)

audit = claim.audit(rows_or_frame)
print(audit.to_markdown())

What The Audit Separates

Reported estimate

The target value supplied by your model, estimator, dashboard, or metric pipeline.

Statistical uncertainty

Optional standard errors or intervals from the upstream statistical workflow.

Hidden-composition ambiguity

The partial-ID interval induced by retained but not publicly reported subgroups.

Refinement recommendations

Which hidden variables most improve the public representation for this claim.

Documentation Map

Start with Quickstart, then read API Surface for the consolidated Python surface. Use Framework Overview and Mathematical and Statistical Soundness for the modeling assumptions, and Transport Presets when choosing a stress-test family.