Skip to content

Reduce CGT band donors to 30 per band for L0 sparsity economics#445

Merged
vahid-ahmadi merged 1 commit into
mainfrom
cgt-donor-sparsity
Jul 21, 2026
Merged

Reduce CGT band donors to 30 per band for L0 sparsity economics#445
vahid-ahmadi merged 1 commit into
mainfrom
cgt-donor-sparsity

Conversation

@vahid-ahmadi

Copy link
Copy Markdown
Collaborator

Problem

The first full build after #444 was correctly blocked from uploading by the built-dataset outcome tests: the taxpayer count passed (532k, down from 1.86m), but total above-AEA gains came out at £20.7bn vs HMRC's £65.9bn and only 20% of gains from £1m+ gainers vs ~61%. The calibration logs show why: all 2,700 donors kept positive weight but their total weight shrank ~8x (139k prior → 16.6k), leaving every band target 32-97% under, worst at the top (£2m band -94%, £5m band -97%).

Cause

The L0-regularised calibration pays a HardConcrete gate penalty per active record. A top band represented by 300 rows of weight ~7 each is expensive to keep open relative to the loss it recovers on its two band targets, so the optimiser shrank the donors and accepted the CGT undershoot.

Fix

30 donors per band instead of 300: identical band-exact initial totals (top band: ~67 weight each instead of ~6.7), a tenth of the gate cost. All structural tests derive from DONORS_PER_BAND and pass unchanged.

If the full build still undershoots the top bands after this, the next lever is exempting donor rows from L0 gating or group-weighting the CGT targets — but this is the cheapest change that directly attacks the observed failure mode.

🤖 Generated with Claude Code

The first full 512-epoch build with 300 donors per band passed the
taxpayer-count outcome test but failed total gains (£20.7bn vs £65.9bn)
and concentration (20% vs ~61% from £1m+): the L0-regularised calibration
pays a gate penalty per active record, and keeping 2,700 light donors
(weight ~7 each in the top band) open cost more than the band targets
recovered, so donor weight shrank ~8x and the £2m+ bands landed 94-97%
under target. The outcome tests gated the upload, so nothing was
published. Thirty donors per band carry the same band-exact initial
totals with a tenth of the gate cost.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vahid-ahmadi
vahid-ahmadi merged commit 9779a6d into main Jul 21, 2026
4 checks passed
@vahid-ahmadi
vahid-ahmadi deleted the cgt-donor-sparsity branch July 21, 2026 14:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant