PolicyEngine / PolicyEngine/microcosm

UK CGT top-tail age and geography joints inherit from incidence and look off — benchmark against HMRC marginals

Open
#725 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
0
Forks
4
Avg merge
1d 3h
Merged PRs (30d)
94

Description

Health check of the joints the CGT imputation does not condition on, prompted by Nikhil's question in #microcosm-uk. The stage conditions on taxable income only (rank-preserving within the Table 3 bands; the 76 band facts are fenced from calibration per #552, and nothing else is targeted), so age, region, wealth, and income-composition joints inherit from FRS/WAS incidence plus rank ordering. These are weighted aggregates from the signed 2026-08-17 staging artifact (main 1131576b, seed 42).

Age

age taxpayers £2m+ gainers
<25 4,300 0
25–34 37,200 160
35–44 66,600 1,330
45–54 71,300 1,750
55–64 91,900 1,280
65–74 46,200 30
75+ 40,400 70
total 357,900 4,630

The all-taxpayer profile looks sane (peak 55–64; 24% of taxpayers 65+). The top tail does not: 65+ holds 24% of taxpayers but 2% of £2m+ gainers. Mechanism: retirees report pension-sized taxable income, so the proxy files them in low income columns where Table 3 puts small gains, and rank preservation hands the biggest amounts to working-age high earners. If HMRC's age/sex table in the same statistics collection shows top gains skewing older (I expect it does), this is the first candidate for the #552 fence's promotion path as a reviewed target.

Region (£2m+ group)

region people gains £bn
London 700 6.50
East of England 430 4.00
South East 370 3.83
South West 660 3.62
Yorkshire 750 3.54
West Midlands 1,090 2.75
North West 350 1.47
Wales 140 1.20
East Midlands 70 0.18
Scotland 50 0.37
Northern Ireland 30 0.15

Treat this joint as weakly identified: 4,630 weighted people at household weights up to ~9,300 means the smaller cells hold one or two clone households, and West Midlands out-crowding London on counts reads as incidence noise. HMRC's geography table gives the benchmark; second promotion-path candidate.

Income composition

£2m+ group vs all taxpayers: dividends 24% vs 11%; self-employment 30% vs 10%; property 12% vs 7%. Direction sensible (top gainers more business-linked). Whether 24% dividend-receiving runs high enough for a group that should be heavy with share disposals is untestable internally — the FRS records the year's flows, and a founder in their exit year may report zero dividends.

Suggested work

  1. Pin HMRC's age/sex and geography CGT tables (same collection as Table 3) as fingerprinted source artifacts and compute the comparison.
  2. Where the inherited joints fail the benchmark, adjudicate promotion to reviewed targets via the #552 fence's promotion path — in the rebuild ordering of #704 (imputations before calibration), so the weights can carry the correction.
  3. Reproduction: ~/microcosm-gated-builds/uk-cgt-676/gains_interactions.json locally; the script loads the staged H5 via load_uk_national_frame and needs only the artifact.

Refs: #552 (fence + promotion path), #704 (calibration sequencing), #710 (the weight fix behind the signed artifact).

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with gains_interactions.json and the load_uk_national_frame entry point, using the staged H5 artifact referenced in the issue. Obtain and fingerprint HMRC's age/sex and geography CGT tables, then compare their marginals with the generated £2m+ groups. Done means documented comparisons and an evidence-based decision on promotion through the #552 path, respecting #704 ordering.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
analytics, data
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.