PolicyEngine / PolicyEngine/microcosm

Informed-init L0 selection: warm-start reselection for pool changes (ACS/ASEC ingest forcing function)

Open
#346 2 comments 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

Why

Build G's cold-L0-2026 head-to-head (populace#299, comment 4902533514) settled the reselection question empirically: a fresh cold L0 at the current pin fails the critical-target gate outright (federal income tax +17.8%, within-10% 55.4%) while the frozen 57,240 selection calibrates to loss 0.02964 with income tax +0.5%. The frozen selection's edge is the selection itself — accumulated combinatorial optimization the cold run cannot reproduce in one 1,500-epoch pass from random init (it drops thin-tail records that carry rare-but-load-bearing target support and never recovers them).

But the frozen identity set has a hard ceiling: it cannot cover records that don't exist in its lineage. The moment the support pool changes — ASEC vintage ingest (#296), ACS records joining the pool, any new support channel — reselection becomes mandatory, and cold L0 is proven inadequate.

Ask: implement informed-init selection (mode (b) of #330's design)

Initialize L0 selection probabilities from the incumbent selection (high prob on the frozen 57,240 via the committed identity-join manifest; prior-scaled prob on new-pool records), then optimize — preserving accumulated search while letting new records compete for slots. Design notes already in #330's design doc (the seam anticipated this mode). Complements:

  • Dense-informed initialization as a cheap enhancer: run the dense solve first and set initial selection probability proportional to dense weight — records the dense solve leans on are exactly the thin-tail carriers cold L0 drops.
  • Criticality weighting in the selection loss: the critical-fit targets (income tax, SS) should be protected during selection, not discovered failed at the gate.

Forcing function

#296 (ASEC 2024+2025 ingest) and any future ACS channel cannot ship a sparse artifact without this. Sequence it with the first pool change.

Refs: #330 (merged seam + design), #328 (closed — frozen-support mode), #299 Build G three-way, #285 (λ sweep context).

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 the design notes in #330, then inspect the committed identity-join manifest and the existing L0 selection path. Compare the incumbent-informed, dense-informed, and criticality-weighted requirements, and confirm that the result can incorporate #296 and future ACS pool changes while preserving critical-target coverage.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
data, machine-learning
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.