Skip to content

Run full-surface Populace L0 sweep - #15

Merged
juaristi22 merged 15 commits into
mainfrom
full-surface-populace-results
Jul 1, 2026
Merged

Run full-surface Populace L0 sweep#15
juaristi22 merged 15 commits into
mainfrom
full-surface-populace-results

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Summary

  • runs and reports the current Populace full-surface fixed-lambda experiment on the three-year ASEC support: 337,704 candidate households and 32,633 materialized targets
  • leads the paper with the Populace production target-loss objective, with target-level diagnostics and weight artifacts preserved for reconstruction/interactive use
  • compares L0 + no-L0 refit against dense no-L0, random + reweight at the matched selected count, raw L0 gated weights, and a dense-weight random sample scaled back up without refitting
  • imports Populace scoring/calibration helpers where available and keeps a fallback for released Populace versions
  • updates the paper, generated figures/tables/PDF, Quarto web rendering/citations, and the IMA presentation deck/slides to match the latest findings

Research result

The current best presentation result is the fixed L0-penalty run, not the earlier budget-sweep conclusion. With normalized L0 penalty share 0.8, L0 selects 57,240 records from the 337,704-household support and the no-L0 refit gives the lowest completed-run Populace objective loss among the sparse alternatives.

Final 1,500-epoch comparison:

  • L0 + refit: 57,240 records, Populace loss 4.74%, median ARE 0.89%, ESS 4,726
  • Dense no-L0: 337,704 records, Populace loss 5.07%, median ARE 0.56%, ESS 5,970
  • Random + reweight: 57,240 records, Populace loss 7.55%, median ARE 6.70%, ESS 2,480
  • Raw L0 gated weights: 57,240 records, Populace loss 9.86%, median ARE 11.66%, ESS 6,879
  • Dense random sample scaled: 57,240 records, Populace loss 24.24%, median ARE 55.24%, ESS 981

Caveat: the dense no-L0 run was still slowly declining at 1,500 epochs, so the claim is about completed-run loss under the matched run budget, not a proof that dense no-L0 cannot eventually catch up.

Artifacts

Target-level diagnostics, metrics, manifests, and weights are attached to the prerelease asset:

https://github.com/PolicyEngine/l0-paper/releases/tag/l0-full-surface-results-20260630

Asset: l0-full-surface-target-results-20260630.tar.gz
SHA256: fce2556f05753818e4eb09a0f15f60566488553cf64516dd2e4a2c66d8483502

Notes

This branch includes the presentation branch history from PR #11 because the slides were updated to match the full-surface paper findings. If #11 merges first, GitHub should automatically shrink this PR diff to the remaining full-surface paper/code/results changes.

Checks

  • uv run ruff format --check src/l0_paper/cli/merge_runs.py src/l0_paper/cli/__init__.py src/l0_paper/cli/figures.py src/l0_paper/cli/paper.py src/l0_paper/cli/sweep.py src/l0_paper/experiments/artifacts.py src/l0_paper/experiments/conditions.py src/l0_paper/experiments/crunch.py src/l0_paper/experiments/metrics.py src/l0_paper/experiments/tables.py tests/test_end_to_end.py tests/test_experiments.py
  • uv run ruff check src/l0_paper/cli/merge_runs.py src/l0_paper/cli/__init__.py src/l0_paper/cli/figures.py src/l0_paper/cli/paper.py src/l0_paper/cli/sweep.py src/l0_paper/experiments/artifacts.py src/l0_paper/experiments/conditions.py src/l0_paper/experiments/crunch.py src/l0_paper/experiments/metrics.py src/l0_paper/experiments/tables.py tests/test_end_to_end.py tests/test_experiments.py
  • uv run pytest tests/test_experiments.py tests/test_end_to_end.py -q
  • quarto render paper/index.qmd --to html
  • quarto render paper/index.qmd --to pdf
  • cd presentation && npm run typecheck
  • cd presentation && npm run lint
  • cd presentation && npm run build
  • cd presentation && npm run export:pdf

juaristi22 and others added 15 commits June 28, 2026 23:32
Restructure the presentation from 19 to ~28 sectioned slides, front-loaded on
context per the proof-of-concept framing (open -> motivation -> data engine ->
imputation mechanics -> Louizos foundation + our translation -> proof of concept
-> close), targeting a 15/8 split of a ~23 min talk.

- Comparison is now four methods, two families: informed L0 and L1 (convex
  sparse) vs random+reweight and survey-weight sampling (per l0-paper PR #10).
- Add KaTeX for rigorous math; new AutoFitMath wrapper scales equations to fit
  their boxes so nothing overflows during a live talk; 3-term loss is multi-line.
- Differentiate the two equation slides: slide 18 is the training objective,
  slide 22 is the shared evaluation loss with a four-method "held fixed" panel.
- New PE-styled diagram components: GeographyHierarchy, FactAnatomy, FrameAnatomy,
  DonorFusion, RegimeQuantileViz, ScaleLadder, HardConcreteGate, TranslationTable.
- ScaleLadder shows generation growth (survey spine -> 30M) then a prune step
  that drops below the generate-big peak.
- Embed speaker headshot on the cover slide (optional headshot on SpeakerInfo).
- Add TALKING_POINTS.md: detailed per-slide bullets for the first half; the
  results half is stubbed and deferred until the final 4-way sweep numbers land.

Verified: typecheck, lint, and production build all pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Update the presentation slides to the final four-way sweep (run 4way-l1-cap1, c=1):

- Replace the result placeholders with the generated plots: f1_frontier (main
  result, slide 23), f3_generalization_gap (slide 24), and f6_operability (added
  to the operability slide). Add a Figure component that renders the PNGs at full
  size with no surrounding box, so the plots read large instead of small-in-a-card.
- Fix the calibration-objective note to the production cap c=1 (was c=10); drop the
  "final sweep still pending" caveat on the experiment-design slide.
- Geography slide: label the national level as the United States and note the same
  nesting applies to any country with its own subnational divisions.
- "Four methods" slide: drop the two group labels (survey-weight fits then samples,
  so "sample, then fit" was wrong for it) and sharpen the ordering wording.
- Operability slide: replace the three heavy cards with a compact left-accent list
  and widen the figure column so the graph leads.

Talking points (TALKING_POINTS.md) left uncommitted for author review.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…; recompile PDF

Talking points (presentation/TALKING_POINTS.md):
- Align numbers and framing to the final four-way sweep (run 4way-l1-cap1, c=1).
- Slide 18: explain the L2 penalty acts on weight magnitude, which keeps population
  mass spread across records and the effective sample size high.
- Restructure the second half (slides 20-28) into the first half's
  KEY MESSAGE / SAY / TRANSITION format.
- Frame classical calibrators (GREG, IPF, raking, balanced sampling) as related work
  and robustness checks, not baselines.

Deck (presentation/slides/l0-ima-2026.tsx):
- Tension slide: drop "calibrate" (the dataset is calibrated, not too large to calibrate).
- Arch slide: 4.6k -> 4,393 active US targets, matching the paper.
- Main frontier: state the median/mean split (baselines overtake on the median; informed
  L0 keeps the lower mean throughout).

Paper (paper/sections/future_work.tex, paper/main.pdf):
- Reframe future work for consistency with the expanded literature review: classical
  calibration methods are robustness checks on the categorical-margin subsets where their
  assumptions hold, not a full-surface GREG/IPF benchmark. Recompile main.pdf.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
`npm run export:pdf` drives headless Chromium over each `?slide=N` view,
screenshots it at 1080p (2x), and assembles one PDF page per slide at the standard
16:9 size. Screenshots (not print-to-PDF) keep the output identical to the
on-screen render (KaTeX, gradients, custom layout). Slide count is read from
slides/config.ts (override with SLIDE_COUNT); SKIP_BUILD=1 reuses an existing build.

One-time setup: `npm i -D playwright pdf-lib && npx playwright install chromium`.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
"Ledger" is the public name of the arch-data fact store, so the deck and speaker
notes now say Ledger everywhere the product is named (the literal arch-data repo
name is unchanged). Renames the ArchSlide component to LedgerSlide and updates the
data-engine section, the Ledger slide, FactAnatomy, and the talking points. The
paper already uses Ledger.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@juaristi22
juaristi22 merged commit 69a7b82 into main Jul 1, 2026
1 check passed
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.

2 participants