From 69554d87e9d86f15a4f9584713054572260b6ece Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Mon, 5 Oct 2026 22:09:45 -0400 Subject: [PATCH 1/2] Call the docs site Microcosm Dynamics, and the microdata stack Microcosm The docs book, its home page and the concept note still said Populace dynamics and Populace, the names before PolicyEngine/populace became PolicyEngine/microcosm. The paper is titled Microcosm Dynamics, and the NASI follow-up links readers to this site's baselines page. Prose names only. Identifiers that still carry the old name stay: populace_dynamics, populace-fit, populace_us_panel_*, and file and storage names. The progress page's paper link moves from populace.dev/papers/dynamics (a redirect) to microcosm.institute/dynamics/paper; progress.md is regenerated from progress.json. Co-Authored-By: Claude Opus 5.5 --- CLAUDE.md | 2 +- docs/_quarto.yml | 2 +- docs/funder-summary.md | 28 ++++++++++++++-------------- docs/index.md | 28 ++++++++++++++-------------- docs/progress.md | 2 +- docs/progress/progress.json | 4 ++-- 6 files changed, 33 insertions(+), 33 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index fb1ea4f1..b21bec60 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -6,7 +6,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co **Current phase**: Implementation, under a locked pre-registered evaluation gate. -This repository is Populace dynamics: an open longitudinal microsimulation layer (paper at populace.dev/papers/dynamics) plus a working implementation in `src/populace_dynamics/`: +This repository is Microcosm Dynamics: an open longitudinal microsimulation layer (paper at microcosm.institute/dynamics/paper) plus a working implementation in `src/populace_dynamics/`: - `harness/` — the population-view scoring harness (geometry blocks, PanelView trajectory windows, the moment battery in `moments.py`) - `data/` — label-verified PSID readers (`family.py` builds the 1968-2022 head/spouse earnings panel with assignment flags; PSID files staged at `~/PolicyEngine/psid-data`) diff --git a/docs/_quarto.yml b/docs/_quarto.yml index 451e30c8..c2852f8d 100644 --- a/docs/_quarto.yml +++ b/docs/_quarto.yml @@ -3,7 +3,7 @@ project: output-dir: _book book: - title: "Populace dynamics" + title: "Microcosm Dynamics" subtitle: "An open, scored longitudinal layer for policy microsimulation — validated first on U.S. Social Security" author: - name: Max Ghenis diff --git a/docs/funder-summary.md b/docs/funder-summary.md index ff31c9a5..9aa743a9 100644 --- a/docs/funder-summary.md +++ b/docs/funder-summary.md @@ -1,9 +1,9 @@ -# Concept note: Populace dynamics +# Concept note: Microcosm Dynamics ## What this is This concept note describes the design of an open, longitudinal -Dynamics layer for `populace`, PolicyEngine's country-agnostic +Dynamics layer for Microcosm, PolicyEngine's country-agnostic microdata stack — validated first on the U.S. Social Security system, and built so that every claim it makes can be scored against reality. Social Security is the proving ground because it is the @@ -15,7 +15,7 @@ benefit systems as PolicyEngine's country coverage grows. The premise is George Box's, taken literally: all models are wrong, and a model is useful only if it improves predictions. So this project's product is not a brand-name simulator. The machinery lives -in `populace`, PolicyEngine's open microdata stack; the deliverable +in Microcosm, PolicyEngine's open microdata stack; the deliverable is a versioned population artifact with a manifest and a public scorecard; and this repository holds the Social Security application and the validation program that grades it. Models made their names @@ -156,7 +156,7 @@ combination: backtests, and held-out moments — in place of fidelity-only validation - domains of validity as shipped metadata on every output -- a contribution rule inherited from `populace`: changes merge if +- a contribution rule inherited from Microcosm: changes merge if and only if they improve the score on held-out facts, from any contributor - AI-callable interfaces from day one @@ -167,8 +167,8 @@ No equivalent bundle exists for U.S. Social Security analysis. The natural implementation is the PolicyEngine open-source stack. -**Populace** is PolicyEngine's rebuilt, open-source microdata stack -([github.com/PolicyEngine/populace](https://github.com/PolicyEngine/populace), +**Microcosm** is PolicyEngine's rebuilt, open-source microdata stack +([github.com/PolicyEngine/microcosm](https://github.com/PolicyEngine/microcosm), MIT). It builds a calibrated synthetic population entirely from primary-source government data (CPS/ASEC, IRS Public Use File, Survey of Consumer Finances, SIPP, CPS outgoing-rotation groups, @@ -179,7 +179,7 @@ PolicyEngine's enhanced CPS as the certified default U.S. microdata in policyengine.py, after a matched, symmetric-refit comparison on 41,314 households with a 739-target holdout: -| Metric (lower is better) | Populace | enhanced CPS | +| Metric (lower is better) | Microcosm | enhanced CPS | |---|---|---| | Holdout loss (739 held-out targets) | 0.038 | 0.317 | | Training loss | 0.190 | 1.089 | @@ -188,13 +188,13 @@ in policyengine.py, after a matched, symmetric-refit comparison on The asymmetry in the last row is published deliberately: the enhanced CPS wins more individual targets narrowly, while its -largest misses are far larger — Populace's aggregate loss is an +largest misses are far larger — Microcosm's aggregate loss is an order of magnitude lower on held-out targets. Publishing the number that cuts against the headline is the discipline this whole project -runs on. (Source: the release manifest in the Populace repository.) +runs on. (Source: the release manifest in the Microcosm repository.) **The longitudinal extension is designed, not improvised.** -Populace's charter names this project's direction explicitly and +Microcosm's charter names this project's direction explicitly and specifies the kernel rules: one weight per trajectory, with multi-period targets stacked as (target, period) constraint rows over the same weight vector; entry and exit markers (birth, death, @@ -212,12 +212,12 @@ forward are the same operator run in either direction. **PolicyEngine-US** supplies the rules engine — OASDI benefit calculation, benefit taxation, and means-tested interactions — -through Populace's rules-engine adapter, with Axiom's rules layer as +through Microcosm's rules-engine adapter, with Axiom's rules layer as the next adapter: statute encoded declaratively and compiled to Rust, a performance boundary that matters when benefit formulas run over person-periods across hundreds of thousands of trajectories. In that architecture PolicyEngine is a composition — Axiom rules, -Populace population, and a labeled behavioral scenario layer. +Microcosm population, and a labeled behavioral scenario layer. **PolicyEngine-API** and the MCP server are the delivery surface. The deliverable is a versioned artifact — `populace_us_panel_*` — @@ -337,7 +337,7 @@ These are not phase-one commitments. They are reasons to design the core architecture well. The longitudinal machinery itself is generic and lives upstream in -`populace`, whose kernel is country-agnostic. The same extension can +Microcosm, whose kernel is country-agnostic. The same extension can eventually serve other countries' pension and benefit systems; Social Security is the first application, not the boundary. @@ -377,7 +377,7 @@ makes the scorecard, and the case for trusting it, longer. be co-owned through bilateral institutional agreements. - Not a 75-year oracle — the long horizon ships as a sensitivity surface, never a point forecast. -- Not a brand-name simulator — the machinery is Populace's, the +- Not a brand-name simulator — the machinery is Microcosm's, the artifact is versioned, and the scorecard is the product. ## Open invitation diff --git a/docs/index.md b/docs/index.md index c5909cbd..7243bff6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,4 +1,4 @@ -# Populace dynamics +# Microcosm Dynamics ::: {.callout-note} **Stage-gated planning document** @@ -17,7 +17,7 @@ go/no-go decisions of clinical trials. ## Executive summary -This project extends `populace` — PolicyEngine's certified, +This project extends Microcosm — PolicyEngine's certified, country-agnostic microdata stack — with an open longitudinal **Dynamics** layer, and validates it first on U.S. Social Security. The layer is built so that every claim it makes can be scored against @@ -47,7 +47,7 @@ through its resolution record One naming note, because it is a design decision: this project does not introduce a named simulator to stand beside DYNASIM or MINT. The -machinery lives in `populace`, PolicyEngine's open microdata stack; +machinery lives in Microcosm, PolicyEngine's open microdata stack; the deliverable is a versioned population artifact with a manifest and a scorecard. Models were branded when the model was the moat. Here the artifact and its track record are the product. @@ -80,7 +80,7 @@ them. At the same time, static tax-benefit modeling has already shown that publicly reproducible microdata can be useful when the pipeline is carefully engineered and aggressively validated. PolicyEngine's -Populace stack demonstrates this at production scale today — built +Microcosm stack demonstrates this at production scale today — built entirely from primary sources, it became the certified default U.S. microdata in policyengine.py in 2026 after beating the prior enhanced CPS on held-out accuracy. The next question is whether that stack can @@ -93,7 +93,7 @@ This project is: - a research and infrastructure effort to build a validated public synthetic longitudinal population -- a global capability: Populace's kernel is country-agnostic, so the +- a global capability: Microcosm's kernel is country-agnostic, so the same Dynamics layer can serve every country PolicyEngine models — pension and benefit systems abroad follow as country coverage expands @@ -112,19 +112,19 @@ This project is not: ## Decisions already made -### 1. Build on PolicyEngine's Populace microdata stack +### 1. Build on PolicyEngine's Microcosm microdata stack -The project extends `populace`, PolicyEngine's ML-first microdata +The project extends Microcosm, PolicyEngine's ML-first microdata layer, rather than building an isolated Social Security-only -dataset. Populace already integrates and calibrates dozens of +dataset. Microcosm already integrates and calibrates dozens of surveys and administrative sources and supports the methodological machinery (synthesis, calibration, sparsification, and authenticity/privacy evaluation) the Social Security extension needs. That choice matters because: -- generic population synthesis belongs in Populace, not in this +- generic population synthesis belongs in Microcosm, not in this repository -- Populace's cross-sectional layer is already validated against +- Microcosm's cross-sectional layer is already validated against large numbers of administrative targets - this repository can focus on Social Security domain validation and policy application rather than rebuilding generic synthesis tools @@ -134,7 +134,7 @@ needs. That choice matters because: ### 2. Social Security first, with adjacent interactions preserved The initial objective is still a Social Security model. That means the -first longitudinal extension of `populace` should include the family +first longitudinal extension of Microcosm should include the family structure, disability, and claiming dynamics needed for serious benefit analysis. It also preserves interactions with taxes, SSI, and other means-tested programs through PolicyEngine-US where possible. @@ -169,7 +169,7 @@ committed leadership alone. This project now has two validation obligations: -- validate longitudinal `populace` as a population asset +- validate longitudinal Microcosm as a population asset - validate Social Security outputs generated from that asset Those are related, but not identical. A population platform can look @@ -191,7 +191,7 @@ domain-of-validity tier as metadata By the end of the full plan, the project should produce: -- a documented longitudinal `populace` suitable for Social Security +- a documented longitudinal Microcosm suitable for Social Security analysis and adjacent reuse - a validated benefit-calculation pipeline integrated with PolicyEngine-US @@ -226,7 +226,7 @@ longitudinal ingredients, especially: family structure matter over time That does not mean those domains belong in phase 1. It means the -project should not lock `populace` into a Social-Security-only design +project should not lock Microcosm into a Social-Security-only design that cannot be extended later. ## Guide to the rest of the book diff --git a/docs/progress.md b/docs/progress.md index 2b60b5aa..2313514c 100644 --- a/docs/progress.md +++ b/docs/progress.md @@ -356,4 +356,4 @@ Every block of work moves through the same pipeline before it counts here: a ful - [Amendment 20 draft (PR #405)](https://github.com/PolicyEngine/microcosm-dynamics/pull/405) - [Pre-registered gate contract (gates.yaml)](https://github.com/PolicyEngine/microcosm-dynamics/blob/master/gates.yaml) - [Timeline forecast ledger (machine-readable)](https://github.com/PolicyEngine/microcosm-dynamics/blob/master/docs/forecasts/timeline_ledger.json) -- [The Populace dynamics paper](https://populace.dev/papers/dynamics) +- [The Microcosm Dynamics paper](https://microcosm.institute/dynamics/paper) diff --git a/docs/progress/progress.json b/docs/progress/progress.json index 147d3a55..c6891581 100644 --- a/docs/progress/progress.json +++ b/docs/progress/progress.json @@ -206,8 +206,8 @@ "href": "https://github.com/PolicyEngine/microcosm-dynamics/blob/master/docs/forecasts/timeline_ledger.json" }, { - "text": "The Populace dynamics paper", - "href": "https://populace.dev/papers/dynamics" + "text": "The Microcosm Dynamics paper", + "href": "https://microcosm.institute/dynamics/paper" } ] } From 06e01bfe89008a5880d6f3024d9757f8e7a5b4b8 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Mon, 5 Oct 2026 22:16:07 -0400 Subject: [PATCH 2/2] Rename Populace to Microcosm in every published chapter The first commit renamed only the title, home page and concept note, which left the book mixing both names (review r1). This sweeps the other published chapters: prose names, Mermaid labels, the stack's GitHub link, its package names (populace-frame/fit/calibrate/data/build are microcosm-* in PolicyEngine/microcosm today) and the microcosm.* namespace. Kept: populace_us_panel_* (Microcosm's artifacts are still named populace_us_*), the ADR 0001 file link, src/populace_dynamics paths, and dated records outside the book. Co-Authored-By: Claude Opus 5.5 --- docs/benchmark-model-component-matrix.md | 8 +- docs/calibration-targets.md | 4 +- docs/data-sources.md | 12 +-- docs/evaluation-and-model-selection.md | 16 ++-- docs/infrastructure.md | 54 ++++++------- docs/methodology.md | 78 +++++++++---------- ...onalizing-family-and-auxiliary-benefits.md | 12 +-- ...rationalizing-longitudinal-construction.md | 32 ++++---- docs/policy-applications.md | 4 +- docs/public-validation-inventory.md | 4 +- docs/risks-and-stage-gates.md | 6 +- docs/roadmap.md | 26 +++---- docs/scoring-and-resolution.md | 6 +- docs/team.md | 4 +- docs/technical-specifications.md | 14 ++-- 15 files changed, 140 insertions(+), 140 deletions(-) diff --git a/docs/benchmark-model-component-matrix.md b/docs/benchmark-model-component-matrix.md index 83d2638f..fc0a11b9 100644 --- a/docs/benchmark-model-component-matrix.md +++ b/docs/benchmark-model-component-matrix.md @@ -33,7 +33,7 @@ That means: This chapter covers five comparison objects: 1. **Our plan** - longitudinal `populace` plus PolicyEngine-US plus this Social + longitudinal Microcosm plus PolicyEngine-US plus this Social Security application layer 2. **DYNASIM** the main non-governmental dynamic benchmark @@ -65,11 +65,11 @@ modern retirement-outcomes model being used for LTSS policy analysis | Component | Our plan | DYNASIM | MINT | CBO / CBOLT | Morningstar | |---|---|---|---|---|---| -| **Base population** | Public synthetic `populace`, PolicyEngine's ML-first microdata layer, extended longitudinally | SIPP-based starting sample with publicly documented 0.04% core and 0.4% expanded variants [@favreault2015; @urban2024dynasim4] | SIPP plus administrative earnings and program records for strong near-retirement credibility [@smith2010mint; @smith2021mint8; @ssa2024mint] | SSA Continuous Work History Sample foundation, with a 1-in-1,000 representative microsimulation sample and SIPP/CPS imputations for missing demographics and family structure [@cbo2018; @cbo2019replacementrates] | Household-oriented retirement simulation using current resources, projected longevity, healthcare, and retirement assets; public materials emphasize model outputs more than raw starting-file mechanics [@look2024retirementoutcomes; @morningstar2024modelpage] | -| **Historical earnings** | Synthetic reconstruction from panel data, calibrated against `populace`'s registry of administrative targets; benchmarked across candidate model families | Public record shows lifetime economic histories built from survey and linked administrative inputs, with annual updating and alignment [@favreault2015; @urban2024dynasim4] | Strongest public benchmark because administrative earnings are built in for many cohorts [@smith2010mint; @ssa2024mint] | Public record discusses lifetime earnings assumptions and fiscal outputs, but is much less explicit on the micro history-construction machinery [@cbo2004; @cbo2018; @cbo2024finances] | Public papers say the model estimates historical wages for each household member and then simulates accumulation and retirement adequacy; claim age is simplified in the inaugural analysis [@look2024retirementoutcomes] | +| **Base population** | Public synthetic Microcosm, PolicyEngine's ML-first microdata layer, extended longitudinally | SIPP-based starting sample with publicly documented 0.04% core and 0.4% expanded variants [@favreault2015; @urban2024dynasim4] | SIPP plus administrative earnings and program records for strong near-retirement credibility [@smith2010mint; @smith2021mint8; @ssa2024mint] | SSA Continuous Work History Sample foundation, with a 1-in-1,000 representative microsimulation sample and SIPP/CPS imputations for missing demographics and family structure [@cbo2018; @cbo2019replacementrates] | Household-oriented retirement simulation using current resources, projected longevity, healthcare, and retirement assets; public materials emphasize model outputs more than raw starting-file mechanics [@look2024retirementoutcomes; @morningstar2024modelpage] | +| **Historical earnings** | Synthetic reconstruction from panel data, calibrated against Microcosm's registry of administrative targets; benchmarked across candidate model families | Public record shows lifetime economic histories built from survey and linked administrative inputs, with annual updating and alignment [@favreault2015; @urban2024dynasim4] | Strongest public benchmark because administrative earnings are built in for many cohorts [@smith2010mint; @ssa2024mint] | Public record discusses lifetime earnings assumptions and fiscal outputs, but is much less explicit on the micro history-construction machinery [@cbo2004; @cbo2018; @cbo2024finances] | Public papers say the model estimates historical wages for each household member and then simulates accumulation and retirement adequacy; claim age is simplified in the inaugural analysis [@look2024retirementoutcomes] | | **Family structure** | Explicit relationship-history layer with spouse links, widowhood, divorce duration, remarriage, and benefit-facing auxiliary states | Public documentation shows marriage, divorce, family structure, and spouse-related states are part of the annual simulation [@favreault2015; @urban2024dynasim4] | Public methodology supports spouse and survivor benefit analysis, but the public record is less explicit than DYNASIM on relationship-history mechanics [@smith2010mint; @ssa2024mint] | Public record is relatively thin on family-history construction at the record level [@cbo2004; @cbo2018] | Public outputs are household-based and broken out by family status, but the public record does not suggest a fully general spouse-former-spouse-child network like the one needed for detailed auxiliary-benefit analysis [@morningstar2024modelpage; @look2024retirementoutcomes] | | **Disability and health** | Separate impairment, program-pathway, and claiming states, plus mortality and family interactions | Publicly documented health, disability, cognition, and work-limitation modules with yearly transitions [@favreault2015; @urban2024dynasim4] | Includes disability pathways but with publicly documented simplifications around adjudication and return-to-work rules [@ssa2024mint] | Public record is strong on aggregate Social Security finances and disability spending, weaker on record-level disability-state machinery [@cbo2024finances; @cbo2024longterm] | Public papers explicitly include healthcare costs, projected longevity, and LTSS states such as home healthcare and nursing home need, but not a public SSDI-style program pathway [@look2024retirementoutcomes; @look2025ltss] | -| **Wealth, assets, and LTSS** | Not phase-1 core, but preserved as a later extension track through longitudinal `populace` | Major documented strength: wealth, pensions, health spending, LTSS use, payer assignment, and Medicaid interaction [@favreault2015; @urban2024dynasim4; @favreault2020ltss] | Stronger than a Social Security-only model on pensions and SSI interactions, but not positioned publicly as a leading LTSS model [@smith2010mint; @ssa2024mint] | Public emphasis is fiscal outlook rather than household adequacy, wealth depletion, or LTSS risk pathways [@cbo2024finances; @cbo2024longterm] | Major strength: retirement assets, expenses, projected inadequacy, and recent LTSS and WISH analyses using the same model family [@look2024retirementoutcomes; @look2025ltss; @look2025wish] | +| **Wealth, assets, and LTSS** | Not phase-1 core, but preserved as a later extension track through longitudinal Microcosm | Major documented strength: wealth, pensions, health spending, LTSS use, payer assignment, and Medicaid interaction [@favreault2015; @urban2024dynasim4; @favreault2020ltss] | Stronger than a Social Security-only model on pensions and SSI interactions, but not positioned publicly as a leading LTSS model [@smith2010mint; @ssa2024mint] | Public emphasis is fiscal outlook rather than household adequacy, wealth depletion, or LTSS risk pathways [@cbo2024finances; @cbo2024longterm] | Major strength: retirement assets, expenses, projected inadequacy, and recent LTSS and WISH analyses using the same model family [@look2024retirementoutcomes; @look2025ltss; @look2025wish] | ## Matrix 2: benefit logic, behavior, and policy use diff --git a/docs/calibration-targets.md b/docs/calibration-targets.md index f3980f10..04a5b28d 100644 --- a/docs/calibration-targets.md +++ b/docs/calibration-targets.md @@ -2,11 +2,11 @@ ## Overview -Calibration ensures that longitudinal `populace` matches known +Calibration ensures that longitudinal Microcosm matches known population characteristics and that the Social Security application layer matches system aggregates. This chapter specifies the targets the project will use for calibration, their sources, and priority -weighting. `populace` maintains these administrative aggregates as a +weighting. Microcosm maintains these administrative aggregates as a versioned target registry — signed facts with standard errors — so that calibration runs against a single, consistent set of targets and treats them as uncertainty-weighted evidence rather than exact hits. diff --git a/docs/data-sources.md b/docs/data-sources.md index a1214951..fb58bcc3 100644 --- a/docs/data-sources.md +++ b/docs/data-sources.md @@ -3,12 +3,12 @@ ## Overview Building a dynamic Social Security microsimulation model means -extending `populace` longitudinally and then using it for Social +extending Microcosm longitudinally and then using it for Social Security analysis. That requires multiple data sources that capture cross-sectional population characteristics, longitudinal earnings dynamics, and demographic transitions. -PolicyEngine's `populace` stack assembles these primary sources, +PolicyEngine's Microcosm stack assembles these primary sources, along with the administrative aggregates used as calibration targets, and builds a calibrated synthetic population from them. This chapter describes the primary sources that feed that pipeline. @@ -42,7 +42,7 @@ describes the primary sources that feed that pipeline. - Limited earning history (only current year) **Our Use**: -- Core cross-sectional input to the current public `populace` +- Core cross-sectional input to the current public Microcosm population layer - Validation of age-earnings profiles - Calibration targets for population characteristics @@ -75,7 +75,7 @@ describes the primary sources that feed that pipeline. - Public use files have restricted geographic detail **Our Use**: -- **Primary source for longitudinal extension of `populace`** +- **Primary source for longitudinal extension of Microcosm** - Training data for quantile regression forests - Validation of lifetime earnings distributions - Demographic transition modeling @@ -336,7 +336,7 @@ state LTC pilot. One reason LTC is hard to model is that no single public dataset adequately covers household populations, caregivers, and institutional residents at the same time. CPS and many other core household surveys exclude most institutional populations. An LTC-ready architecture therefore needs an explicit blended strategy: -1. Household base population from Populace's calibrated CPS-based core and allied surveys +1. Household base population from Microcosm's calibrated CPS-based core and allied surveys 2. Longitudinal aging and wealth dynamics from PSID and HRS 3. Care-need and caregiving detail from NHATS/NSOC and MCBS 4. Institutional population benchmarks from MDS and Medicaid administrative sources @@ -355,7 +355,7 @@ Rather than treating each survey in isolation, we pursue a multi-survey fusion s Our data integration follows a hierarchical structure: -1. **Base population**: Populace's CPS-based core providing a large sample with calibrated cross-sectional income +1. **Base population**: Microcosm's CPS-based core providing a large sample with calibrated cross-sectional income 2. **Longitudinal structure**: PSID for earnings trajectories and transition dynamics 3. **Income detail**: PUF for tax return variables and high-income tail corrections 4. **Validation**: SIPP for program participation; administrative aggregates diff --git a/docs/evaluation-and-model-selection.md b/docs/evaluation-and-model-selection.md index 676013ef..248f74c4 100644 --- a/docs/evaluation-and-model-selection.md +++ b/docs/evaluation-and-model-selection.md @@ -13,7 +13,7 @@ enough to justify the next stage of the build. This chapter therefore defines the evaluation framework for deciding: - which earnings architecture becomes the production path for - longitudinal `populace` + longitudinal Microcosm - whether the resulting panel is good enough for benefit calculation - whether the full project has earned the right to advance from stage 1 to stage 2 @@ -141,7 +141,7 @@ person-years. ### Cross-sectional anchor tests -Because the final use case starts from a cross-sectional `populace` +Because the final use case starts from a cross-sectional Microcosm record, the project should also simulate that workflow directly: 1. collapse a held-out panel person to a pseudo-cross-section at a @@ -274,7 +274,7 @@ These may include: - zero-fraction error - correlation preservation -They are useful as diagnostics, especially for comparing `populace` +They are useful as diagnostics, especially for comparing Microcosm candidate families, but they are not the final decision rule. ### Operational metrics @@ -317,7 +317,7 @@ For candidates that clear Gate 1, score them on: - policy-output fit - stability - runtime and reproducibility -- architectural alignment with longitudinal `populace` +- architectural alignment with longitudinal Microcosm The scorecard should be reported as a table, not just prose. @@ -330,7 +330,7 @@ The winning architecture should be the one that: 3. is simple enough to explain and maintain publicly That rule leaves open whether the winner is ZI-QDNN, ZI-MAF, a broader -`populace` sequence model, or a more transparent annual-state process. +Microcosm sequence model, or a more transparent annual-state process. ## Suggested numeric thresholds for stage 1 @@ -381,14 +381,14 @@ decision: - which architecture deserves continued investment - what the residual limitations are even if the answer is "yes" -## Relationship to the refreshed Populace evaluations +## Relationship to the refreshed Microcosm evaluations -The `populace` imputation evaluations should feed directly into this +The Microcosm imputation evaluations should feed directly into this chapter, but they should not be the only evidence. The right interpretation is: -- refreshed `populace` evals help narrow the candidate set +- refreshed Microcosm evals help narrow the candidate set - Social-Security-specific benchmarks decide the production winner - the proposal should remain architecture-agnostic until both pieces are in hand diff --git a/docs/infrastructure.md b/docs/infrastructure.md index 450d6645..9de36b4b 100644 --- a/docs/infrastructure.md +++ b/docs/infrastructure.md @@ -5,7 +5,7 @@ Building a dynamic Social Security microsimulation model requires infrastructure for data processing, synthesis, calibration, and policy simulation. The most important architectural point is now clear: -`populace` should be treated as the population platform and dataset, +Microcosm should be treated as the population platform and dataset, while this repository provides the Social Security-specific application layer on top of it. This chapter describes the tools that make that split possible. @@ -21,11 +21,11 @@ flowchart LR SRC["CPS/ASEC, IRS PUF,
SCF, SIPP, CPS-ORG,
MEPS, ACS + admin targets"] end - subgraph population["Populace (microdata stack)"] - FRAME["populace-frame
(Frame kernel)"] - FIT["populace-fit
(conditional models)"] - CAL["populace-calibrate
(targets to weights)"] - LMPX["Longitudinal Populace
(project target)"] + subgraph population["Microcosm (microdata stack)"] + FRAME["microcosm-frame
(Frame kernel)"] + FIT["microcosm-fit
(conditional models)"] + CAL["microcosm-calibrate
(targets to weights)"] + LMPX["Longitudinal Microcosm
(project target)"] end subgraph application["Policy Application Layer"] @@ -55,22 +55,22 @@ flowchart LR The high-level logic is: -- `populace` builds and calibrates the public cross-sectional +- Microcosm builds and calibrates the public cross-sectional population from primary-source data (shipped; now the certified default U.S. microdata in policyengine.py) -- extend `populace` longitudinally — the project's central work +- extend Microcosm longitudinally — the project's central work - use PolicyEngine-US and this repository to turn that asset into a Social Security policy model This means the project should avoid rebuilding generic synthesis machinery in the Social Security repository when that work properly -belongs in `populace`. +belongs in Microcosm. ## Population layer versus application layer The tooling should be divided intentionally. -### What belongs in Populace +### What belongs in Microcosm - synthetic public population construction - cross-sectional and longitudinal calibration machinery @@ -94,39 +94,39 @@ public population platform plus an open policy application layer. ## Key tools and libraries -### Populace: the microdata stack +### Microcosm: the microdata stack **Purpose**: build and calibrate the public population from primary-source government data, and expose it to a rules engine. **Status**: PolicyEngine's rebuilt open-source microdata stack -([github.com/PolicyEngine/populace](https://github.com/PolicyEngine/populace), +([github.com/PolicyEngine/microcosm](https://github.com/PolicyEngine/microcosm), MIT). Built entirely from primary sources (CPS/ASEC, IRS PUF, SCF, SIPP, CPS-ORG, MEPS, ACS), it replaced PolicyEngine's enhanced CPS as the certified default U.S. microdata in policyengine.py in June 2026, after beating it on a held-out, symmetric-refit comparison. Its -synthesis method (the `populace-fit` shard) is a regime-gated, +synthesis method (the `microcosm-fit` shard) is a regime-gated, sequentially-chained, weight-aware quantile-regression-forest imputer, with a gradient-boosted classifier handling zero inflation. **Architecture**: one kernel datatype — the `Frame`, a weighted sampling frame of entity tables — with operators as separate shards -that share the `populace.*` namespace: +that share the `microcosm.*` namespace: -- `populace-frame`: the kernel (typed weights with conservation +- `microcosm-frame`: the kernel (typed weights with conservation invariants, strata for provenance, links, unit structure, and the rules-engine adapter protocol — policyengine-us today, Axiom's rules layer next). Succeeds microdf and microunit. -- `populace-fit`: weight-aware conditional models for synthesis and +- `microcosm-fit`: weight-aware conditional models for synthesis and imputation. Succeeds microimpute. -- `populace-calibrate`: targets-to-weights calibration (accelerated +- `microcosm-calibrate`: targets-to-weights calibration (accelerated projected gradient and L0 sparse selection). Succeeds microcalibrate. -- `populace-data` / `populace-build`: dataset registry and the +- `microcosm-data` / `microcosm-build`: dataset registry and the gated, no-fallback build pipeline. **Longitudinal status**: the kernel is longitudinal-ready by -design — one weight per trajectory — and Populace's charter names the +design — one weight per trajectory — and Microcosm's charter names the longitudinal extension (person-period keying, cohort entry and exit, household recomposition over time) explicitly as "the social-security-model direction." Those kernel hooks are deliberate @@ -142,12 +142,12 @@ project. ### Predecessor tooling: microimpute, microcalibrate, L0 -Before Populace, PolicyEngine's enhancement pipeline used three +Before Microcosm, PolicyEngine's enhancement pipeline used three standalone packages: `microimpute` (quantile-regression-forest and related imputation), `microcalibrate` (gradient-descent base-population calibration), and `L0` (L0-regularized sparse record selection). -Populace reimplements their capabilities as the `populace-fit` and -`populace-calibrate` shards on the shared `Frame` kernel; the legacy +Microcosm reimplements their capabilities as the `microcosm-fit` and +`microcosm-calibrate` shards on the shared `Frame` kernel; the legacy packages remain available but are no longer the path this project builds on. @@ -156,7 +156,7 @@ builds on. PolicyEngine's earlier Enhanced CPS used QRF imputation and gradient descent calibration against administrative targets [@ghenis2024]. That work is best understood as an important precursor to -`populace`, not as the architecture of this project. Populace +Microcosm, not as the architecture of this project. Microcosm generalizes the conceptual approach into a broader ML-first microdata stack. @@ -538,19 +538,19 @@ Like this document: We leverage a rich ecosystem of open-source tools: **Core tools** (PolicyEngine-developed): -- `populace`: the microdata stack (`populace-frame` kernel, - `populace-fit` synthesis, `populace-calibrate` calibration) +- Microcosm: the microdata stack (`microcosm-frame` kernel, + `microcosm-fit` synthesis, `microcosm-calibrate` calibration) - `policyengine-core`: microsimulation engine **Foundation** (existing): -- `populace` as starting point — shipped, and the certified default +- Microcosm as starting point — shipped, and the certified default U.S. microdata in policyengine.py - proven data construction and calibration pipeline - Social Security rules already implemented in PolicyEngine-US - infrastructure for web/API deployment **Additional methodological approaches** (to evaluate during proof of concept): -- **Baseline (incumbent)**: Populace's production synthesis method is a regime-gated, weight-aware quantile-regression-forest imputer. It is the proven cross-sectional method and the natural baseline for the longitudinal extension to beat. +- **Baseline (incumbent)**: Microcosm's production synthesis method is a regime-gated, weight-aware quantile-regression-forest imputer. It is the proven cross-sectional method and the natural baseline for the longitudinal extension to beat. - **Zero-inflated neural distribution models (e.g. ZI-QDNN)**: candidate for richer earnings-trajectory imputation, with a dedicated zero-inflation head and conditional quantile output — to evaluate against the QRF baseline, not assumed superior. - **Normalizing flows**: candidate for joint multi-year imputation where cross-year correlation structure matters; to evaluate, not committed. - **Multi-survey fusion**: Harmonize CPS, PSID, and PUF into unified datasets using common variable schemas and masked imputation for cross-survey variables diff --git a/docs/methodology.md b/docs/methodology.md index 47cc7d96..998f18b3 100644 --- a/docs/methodology.md +++ b/docs/methodology.md @@ -2,9 +2,9 @@ ## Overview -This chapter describes the technical approach to making `populace` +This chapter describes the technical approach to making Microcosm longitudinal and then using that longitudinal population for Social -Security microsimulation. `populace` is PolicyEngine's rebuilt +Security microsimulation. Microcosm is PolicyEngine's rebuilt open-source microdata stack: it synthesizes populations from primary-source U.S. government survey and administrative data (CPS/ASEC, IRS Public Use File, SCF, SIPP, CPS-ORG, MEPS, ACS) using @@ -28,26 +28,26 @@ MINT, and the public CBO record. ## Methodology flow The following diagram illustrates the high-level data flow through the -synthetic panel construction process. `populace` draws on +synthetic panel construction process. Microcosm draws on primary-source microdata and administrative calibration targets (including SSA aggregates): ```mermaid flowchart TD subgraph inputs["Input Data Sources"] - MPX["Populace
(Cross-sectional population)"] + MPX["Microcosm
(Cross-sectional population)"] PSID["PSID
(Longitudinal)"] SSA["Calibration targets
(SSA, CBO, IRS, Census)"] end subgraph processing["Longitudinal Extension"] - HIST["Add lifetime histories
to Populace"] + HIST["Add lifetime histories
to Microcosm"] TRANS["Add demographic and
family transitions"] CAL["Longitudinal validation
& calibration"] end subgraph outputs["Application Layer"] - PANEL["Longitudinal
Populace"] + PANEL["Longitudinal
Microcosm"] PE["PolicyEngine-US
Benefit Calculations"] WEB["Web Interface
& API"] end @@ -66,7 +66,7 @@ flowchart TD The methodology now has two explicit layers: -1. **Population layer**: make `populace` into a credible longitudinal +1. **Population layer**: make Microcosm into a credible longitudinal synthetic population. 2. **Application layer**: use that longitudinal population for Social Security benefit calculation, validation, and reform analysis. @@ -75,13 +75,13 @@ That split is not just organizational. It determines where methods and code should live. - Generic synthesis, calibration, trajectory construction, and - longitudinal state machinery belong in `populace` or its companion + longitudinal state machinery belong in Microcosm or its companion packages. - Social Security-specific logic, policy validation, and reform workflows belong in this repository and in PolicyEngine-US. Within the population layer, the project should remain baseline-first. -That means the first implementation inside longitudinal `populace` +That means the first implementation inside longitudinal Microcosm should use methods that are simple enough to audit and validate directly. More ambitious joint generative models can be added later if they improve the metrics that matter. @@ -96,7 +96,7 @@ Machine learning is useful inside that system, but it is not the system. This produces a longitudinal public population with: -- representative synthetic records from the `populace` base population +- representative synthetic records from the Microcosm base population - lifetime dynamics learned from panel data and external targets - explicit calibration and validation artifacts - reuse across Social Security and adjacent policy domains @@ -104,7 +104,7 @@ This produces a longitudinal public population with: ### How this differs from existing models **vs. DynaSim**: the comparison object is not this repository alone. It -is longitudinal `populace` plus PolicyEngine-US plus this Social +is longitudinal Microcosm plus PolicyEngine-US plus this Social Security application layer. The differentiator is openness, inspectability, and modularity rather than institutional continuity. @@ -122,10 +122,10 @@ comparison to DynaSim, MINT, CBOLT, and other models. ## Phase 1: Base-year cross-section -### Starting point: Populace's current cross-sectional layer +### Starting point: Microcosm's current cross-sectional layer -The project starts from `populace`, PolicyEngine's rebuilt microdata -stack. Populace builds a calibrated cross-sectional population +The project starts from Microcosm, PolicyEngine's rebuilt microdata +stack. Microcosm builds a calibrated cross-sectional population entirely from primary sources and, in June 2026, replaced PolicyEngine's enhanced CPS as the certified default U.S. microdata in policyengine.py — after beating it on a held-out, symmetric-refit @@ -134,23 +134,23 @@ shipped and won; the longitudinal extension is the open work. Advantages of this starting point: -1. **Proven methodology**: Populace has already solved the +1. **Proven methodology**: Microcosm has already solved the cross-sectional income underreporting problem using the same tools the longitudinal extension will apply 2. **Integration**: seamless connection to PolicyEngine-US's existing tax-benefit calculations 3. **Asset value**: improvements made for this project strengthen - `populace` rather than remaining trapped in a narrow application + Microcosm rather than remaining trapped in a narrow application repository 4. **Credibility**: builds on a demonstrated production stack rather than restarting from scratch 5. **Sample size**: a large synthetic public population provides statistical power for national and subnational analysis -Populace improves upon raw CPS through: +Microcosm improves upon raw CPS through: **Income imputation**: filling missing income components with -weight-aware conditional models (the `populace-fit` shard, succeeding +weight-aware conditional models (the `microcosm-fit` shard, succeeding `microimpute` — quantile regression forests and related methods) **Benefit underreporting correction**: aligning survey-reported @@ -160,10 +160,10 @@ transfer income with administrative aggregates structure **Multi-source calibration**: base-population reweighting (the -`populace-calibrate` shard) against administrative aggregates from +`microcosm-calibrate` shard) against administrative aggregates from CBO, IRS, SSA, Census, and other sources -The proof-of-concept phase should validate that `populace` can be +The proof-of-concept phase should validate that Microcosm can be extended longitudinally, rather than reopening the question of whether the project should start from some entirely different base population. If computational constraints arise with the full @@ -188,13 +188,13 @@ For dynamic modeling, we need variables not in CPS: These "latent" variables will drive longitudinal transitions even when not directly observed. -## Phase 2: Longitudinal extension of Populace +## Phase 2: Longitudinal extension of Microcosm ### The core challenge Social Security benefits depend on 35 highest years of earnings, but the current public population layer only observes a cross-section. We need -to extend `populace` so that it carries: +to extend Microcosm so that it carries: - Past earnings for current workers (ages 18-70) - Future earnings for younger workers (for projections) @@ -206,27 +206,27 @@ to extend `populace` so that it carries: - Realistic variance This is the step where the project becomes more than a static synthetic -dataset. It turns `populace` into a longitudinal population asset. +dataset. It turns Microcosm into a longitudinal population asset. -### Earnings-history approach inside longitudinal Populace +### Earnings-history approach inside longitudinal Microcosm The project should begin with a benchmark set rather than prematurely declaring one model family to be the production architecture. The -current `populace` direction points away from plain sequential QRF as +current Microcosm direction points away from plain sequential QRF as the main design and toward zero-inflated, pathwise generation inside -`populace`. +Microcosm. That means the proposal should distinguish: - **diagnostic comparators** such as QRF and ZI-QRF - **serious production candidates** such as ZI-QDNN and zero-inflated - pathwise `populace` models + pathwise Microcosm models - **the architectural question underneath them**: sequential age-point imputation versus all-at-once trajectory generation The methodological objective is therefore not "use QRF because it is familiar." It is "use the simplest architecture that survives the -Social-Security-specific validation gates." The refreshed `populace` +Social-Security-specific validation gates." The refreshed Microcosm imputation evaluations should help decide whether the leading candidate is ZI-QDNN, a flow-based pathwise model, or another zero-inflated trajectory approach. The proposal should be written to accommodate that @@ -255,7 +255,7 @@ decision rather than forcing it in advance. **Phase-1 comparison approach**: -For each base-year CPS or `populace` individual, the project should +For each base-year CPS or Microcosm individual, the project should compare at least two families: 1. **Age-point benchmark models**: @@ -267,7 +267,7 @@ compare at least two families: The first family is useful because it is interpretable and easy to debug. The second is the more likely production direction because it is -better aligned with the actual `populace` longitudinal architecture and +better aligned with the actual Microcosm longitudinal architecture and preserves cross-age dependence natively. ### Interval-specific training strategy for benchmark models @@ -288,14 +288,14 @@ This approach: - Allows different predictors to matter at different ages - Prevents impossible trajectories (e.g., starting at $200k at age 22) - Provides an interpretable benchmark arm for the more ambitious - `populace` trajectory models + Microcosm trajectory models But it should no longer be described as the expected production architecture. ### Expected production direction: joint trajectory synthesis -The stronger architectural bet is that `populace` should learn full +The stronger architectural bet is that Microcosm should learn full earnings trajectories all at once, with zero-inflation built directly into the model. In practice, that means: @@ -307,13 +307,13 @@ into the model. In practice, that means: careers - preserving cross-age correlations without post-hoc smoothing -This is the design most consistent with making `populace` +This is the design most consistent with making Microcosm longitudinal. It also better matches the actual Social Security decision problem, where the full path matters more than any single age's earnings. The winning model family should still be chosen empirically. The -refreshed `populace` evaluation work should tell us whether ZI-QDNN, a +refreshed Microcosm evaluation work should tell us whether ZI-QDNN, a flow-based pathwise model, or another zero-inflated sequence model is the strongest production candidate. @@ -334,7 +334,7 @@ cohort in the conditioning set for all candidate models birth where sample size permits **Trend adjustment**: Adjust PSID training data to reflect the CPS or -`populace` cohort's economic environment +Microcosm cohort's economic environment ### Validation of imputed histories @@ -354,7 +354,7 @@ We validate imputed earnings histories against multiple benchmarks: This validation step is doing double duty. It decides whether the earnings-history machinery is good enough for Social Security, and it -also decides whether longitudinal `populace` is becoming a credible +also decides whether longitudinal Microcosm is becoming a credible population asset in its own right. ## Phase 3: Demographic transitions @@ -518,9 +518,9 @@ structure this project needs. ### Base-year calibration Weights still matter before longitudinalization. The cross-sectional -`populace` base should be calibrated to demographic, income, tax, and -program targets using `populace`'s existing calibration shard -(`populace-calibrate`) against administrative aggregates. +Microcosm base should be calibrated to demographic, income, tax, and +program targets using Microcosm's existing calibration shard +(`microcosm-calibrate`) against administrative aggregates. Once that base population is converted into a longitudinal population, the representation should be treated as a population scaffold with diff --git a/docs/operationalizing-family-and-auxiliary-benefits.md b/docs/operationalizing-family-and-auxiliary-benefits.md index e1627fb2..5868c7b4 100644 --- a/docs/operationalizing-family-and-auxiliary-benefits.md +++ b/docs/operationalizing-family-and-auxiliary-benefits.md @@ -124,7 +124,7 @@ micro-implementation than the documentation supports. ## Recommended state representation The proposal should specify a family-history layer as a first-class -state block inside longitudinal `populace`. +state block inside longitudinal Microcosm. ### Current marital-status state @@ -279,12 +279,12 @@ auxiliary layer is credible. ## Recommended construction strategy The family-history layer should be built in a way that respects both the -existing `populace` cross section and the needs of Social Security +existing Microcosm cross section and the needs of Social Security benefit logic. ### 1. Start from the base-year household network -`populace` already provides a cross-sectional household and family +Microcosm already provides a cross-sectional household and family structure. That gives the project a real starting point for: - current couples @@ -339,7 +339,7 @@ That mechanism should preserve: - dual-earner versus single-earner household patterns This is one of the strongest reasons to think in terms of longitudinal -`populace` rather than a loose collection of independent hazards. +Microcosm rather than a loose collection of independent hazards. ### 5. Enforce relational consistency @@ -404,7 +404,7 @@ it is likely more fundable and easier to validate in phase 1. ### Higher-upside extension -If longitudinal `populace` advances enough, the project can later move +If longitudinal Microcosm advances enough, the project can later move toward hierarchical or household-first generation that jointly models: - household composition @@ -567,7 +567,7 @@ The proposal should not describe family structure as a few marriage hazards plus a spouse-benefit rule call. It should describe an explicit relationship-history layer inside -longitudinal `populace`, say what phase 1 will and will not include, +longitudinal Microcosm, say what phase 1 will and will not include, benchmark those choices against DYNASIM and MINT, and evaluate the result against the auxiliary-benefit outcomes that policy users actually care about. diff --git a/docs/operationalizing-longitudinal-construction.md b/docs/operationalizing-longitudinal-construction.md index d58528a7..d5d193a0 100644 --- a/docs/operationalizing-longitudinal-construction.md +++ b/docs/operationalizing-longitudinal-construction.md @@ -7,10 +7,10 @@ compute Social Security benefits once the right variables exist. The hard question is whether we can construct a public, person-level panel with plausible lifetime earnings, family histories, disability spells, and claiming-relevant states. That is the part that determines whether -longitudinal `populace` is merely an interesting synthetic dataset or a +longitudinal Microcosm is merely an interesting synthetic dataset or a serious policy-analysis asset. -Throughout this chapter, `populace` is PolicyEngine's rebuilt +Throughout this chapter, Microcosm is PolicyEngine's rebuilt open-source microdata stack — it integrates primary-source U.S. government survey and administrative data and calibrates against administrative targets (CBO, IRS, SSA, Census, and others), and it @@ -41,7 +41,7 @@ For this project to justify a serious build, it needs to do more than generate reasonable average earnings by age. It needs to support the following chain end to end: -1. represent a public cross-sectional population in `populace` +1. represent a public cross-sectional population in Microcosm 2. attach plausible lifetime earnings and family histories to each record 3. transform those histories into quarters of coverage, AIME, and PIA @@ -68,7 +68,7 @@ main benchmark models: | Component | DYNASIM public record | MINT public record | CBO public record | Implication for us | |---|---|---|---|---| -| **Starting sample** | Starts from survey-based representative samples and augments them with multiple public and administrative data sources | Starts from SIPP matched to SSA administrative earnings and benefits | Uses CBOLT as the long-term baseline framework for fiscal and distributional analysis | `populace`, synthesized from primary-source survey data, can play the starting-sample role, but it does not inherit observed earnings histories | +| **Starting sample** | Starts from survey-based representative samples and augments them with multiple public and administrative data sources | Starts from SIPP matched to SSA administrative earnings and benefits | Uses CBOLT as the long-term baseline framework for fiscal and distributional analysis | Microcosm, synthesized from primary-source survey data, can play the starting-sample role, but it does not inherit observed earnings histories | | **Historical earnings** | Older DYNASIM work used statistical matching to attach historical earnings built from PSID and CPS/SER-style sources | Uses observed administrative earnings where available and projects the remainder | Public documentation is sparse on exact record construction | This is the central gap our project must close with public methods | | **Annual labor-market process** | Relies on yearly transition equations, hazard-style modules, and Monte Carlo simulation | Projects labor force participation and earnings from an admin-linked base | Public emphasis is on cohort/quintile outputs and aggregate consistency | Our design should be annual and state-based, not only age-point imputation | | **Alignment and calibration** | Explicitly aligns modules to observed history and future control totals | Uses Trustees assumptions and current-law rules for projections | Integrated to official long-term projections and budget baselines | We need explicit alignment layers, not a one-shot imputation | @@ -179,7 +179,7 @@ systems: | System | What it must do | Benchmark lesson | |---|---|---| -| Starting-file adapter | Convert cross-sectional `populace` into a person-year scaffold with stable IDs, household IDs, tax-unit IDs, and fixed representation factors or replicate counts | CBOLT and DYNASIM both begin with a representative population, not abstract cohorts | +| Starting-file adapter | Convert cross-sectional Microcosm into a person-year scaffold with stable IDs, household IDs, tax-unit IDs, and fixed representation factors or replicate counts | CBOLT and DYNASIM both begin with a representative population, not abstract cohorts | | Historical earnings engine | Reconstruct covered earnings, uncovered earnings, self-employment, zero-earnings years, and taxable-maximum exposure | CBOLT's strength comes from CWHS; our public substitute must be validated hard | | Annual transition engine | Simulate work, earnings, marital status, fertility, disability, mortality, claiming, and household changes year by year | Both benchmark systems are annual transition models | | Family network engine | Maintain current, former, and deceased spouse links plus parent-child links needed for auxiliary benefits | CBOLT explicitly uses family links for benefits | @@ -237,7 +237,7 @@ while still leaving room for more ambitious joint generative methods later. The strongest version of that "more ambitious" path is probably a -zero-inflated all-at-once `populace` trajectory model. But the +zero-inflated all-at-once Microcosm trajectory model. But the proposal should leave room for refreshed evaluation results to decide whether the best implementation is ZI-QDNN, a flow-based model, or another pathwise candidate. @@ -331,7 +331,7 @@ current earnings become a better proxy only around midcareer, and much worse outside that window [@haider2006]. So the first operational task is to define and estimate a latent -earnings-capacity measure that can be attached to each `populace` +earnings-capacity measure that can be attached to each Microcosm person. ### Practical definition @@ -344,7 +344,7 @@ A workable phase-1 target is: currently observed cross-sectional traits The target should be estimated in PSID and similar panel sources, then -mapped back to `populace` using supervised prediction. This is the +mapped back to Microcosm using supervised prediction. This is the right use of tools like QRF or distributional regression: not as the whole earnings engine, but as a way to recover a latent position in the lifetime distribution. @@ -440,7 +440,7 @@ include: - QRF and ZI-QRF as interpretable age-point benchmarks - ZI-QDNN as the most obvious zero-inflated neural candidate -- at least one pathwise `populace` model that generates the earnings +- at least one pathwise Microcosm model that generates the earnings path all at once In other words, the proposal should compare benchmark models against @@ -534,7 +534,7 @@ solve all pension interaction problems on day one. The key operational problem is backward construction. -For a person observed in `populace` at age 52 in 2025, we need a path +For a person observed in Microcosm at age 52 in 2025, we need a path from age 18 to age 52 that is consistent with: - their current observed earnings or benefit state @@ -649,7 +649,7 @@ So the operational plan should treat alignment as a stack: ### Layer 1: Base-population calibration -Calibrate the cross-sectional `populace` population before the dynamic +Calibrate the cross-sectional Microcosm population before the dynamic simulation begins. After longitudinalization, carry fixed representation factors or replicate counts through the relationship network rather than freely changing individual weights every year. @@ -738,7 +738,7 @@ The proposal should explicitly benchmark the following pieces: ### Starting file -- **Our plan**: `populace` cross section, synthesized from +- **Our plan**: Microcosm cross section, synthesized from primary-source survey data - **DYNASIM**: representative survey base, augmented by multiple surveys and matched historical earnings work @@ -800,7 +800,7 @@ The project should compare at least three candidate families: latent rank plus work-state plus conditional earnings plus calibrated residuals 3. **Joint trajectory generator**: - a pathwise zero-inflated generator inside `populace`, with + a pathwise zero-inflated generator inside Microcosm, with ZI-QDNN, ZI-MAF, or related sequence models as candidates The project should precommit that the simplest architecture that clears @@ -849,7 +849,7 @@ At minimum, year one should deliver: earnings-state features 2. a benchmark note comparing the public record on DYNASIM, MINT, and CBO component by component -3. a longitudinal `populace` alpha with historical earnings paths and +3. a longitudinal Microcosm alpha with historical earnings paths and source provenance flags 4. a validation report covering earnings distributions, mobility, taxable-maximum incidence, zero-earnings years, and AIME-sensitive @@ -868,14 +868,14 @@ technical object of the project. The right architecture is not "QRF everywhere." It is a transparent annual state process for covered work and earnings, anchored to current records and disciplined by external calibration, with a likely -production path toward zero-inflated all-at-once `populace` +production path toward zero-inflated all-at-once Microcosm trajectory models. QRF can still play an important role as a benchmark and diagnostic tool, but it should no longer be described as the default destination. The public differentiator remains real: -- `populace` as PolicyEngine's reusable public population layer +- Microcosm as PolicyEngine's reusable public population layer - explicit benchmark comparison to DYNASIM, MINT, and CBO - record-level provenance - published validation gates diff --git a/docs/policy-applications.md b/docs/policy-applications.md index f8e58be4..dab7bb2d 100644 --- a/docs/policy-applications.md +++ b/docs/policy-applications.md @@ -7,7 +7,7 @@ they care how it works. The point of this project is not to create a generic simulator in the abstract. It is to answer concrete policy questions that require lifecycle information and distributional detail. More specifically, this repository should be understood as the first -serious proving ground for longitudinal `populace`: if the population +serious proving ground for longitudinal Microcosm: if the population platform can support Social Security well, it earns the right to support adjacent domains later. @@ -316,7 +316,7 @@ Accessible public modeling supply appears even thinner than in Social Security. The fair claim is not that any one closed model is the sole bottleneck. It is that LTC policy interest is substantial and visible, while LTSS modeling capacity is concentrated in a small number of closed -or proprietary systems. If longitudinal `populace` becomes credible, +or proprietary systems. If longitudinal Microcosm becomes credible, LTC may become one of the highest-value adjacent domains for expansion. The most plausible first adjacent LTC product is not a national dynamic diff --git a/docs/public-validation-inventory.md b/docs/public-validation-inventory.md index b5269fd0..183d9bc6 100644 --- a/docs/public-validation-inventory.md +++ b/docs/public-validation-inventory.md @@ -14,9 +14,9 @@ negotiations before it can produce a credible first model. This chapter inventories the main public or low-friction sources we can use to validate the model. It is not an exhaustive bibliography. It is the minimum practical source stack for judging whether longitudinal -`populace` is becoming decision-useful. +Microcosm is becoming decision-useful. -Many of these sources are already assembled inside `populace`, +Many of these sources are already assembled inside Microcosm, PolicyEngine's microdata stack — the primary-source microdata and the calibration targets (from CBO, IRS, SSA, Census, and others) that it draws on. Naming the sources diff --git a/docs/risks-and-stage-gates.md b/docs/risks-and-stage-gates.md index c5bddea8..ce9cb791 100644 --- a/docs/risks-and-stage-gates.md +++ b/docs/risks-and-stage-gates.md @@ -27,7 +27,7 @@ tension is one of the core research problems of the project. ### 3. Platform work expands faster than policy validation -Now that the project is best understood as making `populace` +Now that the project is best understood as making Microcosm longitudinal, there is a new risk: the population platform can become technically interesting without yet being decision-useful for Social Security. That would be real research progress, but it would not by @@ -49,10 +49,10 @@ forward if drift is not controlled explicitly. A public interface is attractive and visible, but it can also amplify weaknesses if the validation record is not ready. -## Stage gate 1: longitudinal Populace quality +## Stage gate 1: longitudinal Microcosm quality The project should advance past stage 1 only if it can show that -longitudinal `populace` is credible on multiple dimensions: +longitudinal Microcosm is credible on multiple dimensions: - age-earnings levels - dispersion and percentiles diff --git a/docs/roadmap.md b/docs/roadmap.md index 11d78efd..4fc177da 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -15,7 +15,7 @@ decision points, not chronological phases. The project has four core workstreams: -1. **Longitudinal Populace construction** +1. **Longitudinal Microcosm construction** 2. **Social Security integration and validation** 3. **Policy analysis products** 4. **Public API and interface** @@ -31,11 +31,11 @@ implementation. ### Deliverables -- Finalized base population platform: `populace`, PolicyEngine's +- Finalized base population platform: Microcosm, PolicyEngine's microdata stack -- Clear boundary between `populace` platform work and +- Clear boundary between Microcosm platform work and Social Security-specific application work -- Benchmark datasets and target tables assembled from `populace`'s +- Benchmark datasets and target tables assembled from Microcosm's primary-source data and its versioned target registry - Initial validation harness for baseline distributions - Implementation team and external review capacity identified @@ -51,16 +51,16 @@ implementation. ## Stage 1: historical earnings reconstruction -**Purpose**: determine whether `populace` can be extended into a +**Purpose**: determine whether Microcosm can be extended into a credible longitudinal population asset for Social Security analysis. ### Core tasks - Harmonize PSID and related longitudinal sources - Build at least one conservative production path for earnings-history - reconstruction inside `populace` + reconstruction inside Microcosm - Add the first longitudinal state variables and transition machinery to - `populace` + Microcosm - Compare alternative model families where justified - Validate age-earnings profiles, percentiles, mobility, AIME, and correlation structure @@ -68,14 +68,14 @@ credible longitudinal population asset for Social Security analysis. ### Deliverables -- Longitudinal `populace` alpha with earnings histories and core +- Longitudinal Microcosm alpha with earnings histories and core longitudinal states - Validation report on held-out data and external benchmarks - Recommendation on the production longitudinal architecture ### Exit criteria -- Longitudinal `populace` is accurate enough to justify downstream +- Longitudinal Microcosm is accurate enough to justify downstream benefit modeling - Validation results are publishable and not merely anecdotal @@ -84,12 +84,12 @@ proceeding mechanically. ## Stage 2: family, disability, claiming, and benefits -**Purpose**: turn longitudinal `populace` into a credible Social +**Purpose**: turn longitudinal Microcosm into a credible Social Security analysis dataset. ### Core tasks -- Freeze the minimal production version of longitudinal `populace` +- Freeze the minimal production version of longitudinal Microcosm chosen at the end of stage 1 - Implement family structure and marital histories needed for auxiliary benefits @@ -113,7 +113,7 @@ Security analysis dataset. ## Stage 3: forward projection and reform analysis -**Purpose**: move from longitudinal `populace` plus a validated Social +**Purpose**: move from longitudinal Microcosm plus a validated Social Security layer to a projected dynamic model that can analyze reform packages. @@ -176,7 +176,7 @@ Throughout the project: - preserve reproducible data-processing pipelines where licensing permits - document model decisions and reversals -- preserve the separation between reusable `populace` infrastructure +- preserve the separation between reusable Microcosm infrastructure and Social Security-specific application code - collect external review from domain experts diff --git a/docs/scoring-and-resolution.md b/docs/scoring-and-resolution.md index f771d79f..61633549 100644 --- a/docs/scoring-and-resolution.md +++ b/docs/scoring-and-resolution.md @@ -48,7 +48,7 @@ useful even to those who treat it as authoritative. Long-horizon dynamics cannot wait decades for a grade, but the past already resolved. The protocol: build the panel from data vintages available at time T, project forward, and score against realized -outcomes at T+k. The `populace` data registry pins source vintages, +outcomes at T+k. The Microcosm data registry pins source vintages, which is what makes "what could the model have known on date X" an enforceable constraint rather than an honor-system claim. Retrodictive scores are necessary but not sufficient — calibration under the @@ -68,7 +68,7 @@ are actually uncertain. ### 5. Held-out panel moments -The population layer itself is scored the way `populace` already +The population layer itself is scored the way Microcosm already scores cross-sections: held-out evaluation against moments the model was not fit to — earnings-mobility matrices, autocorrelation structure and higher-order moments of earnings changes @@ -88,7 +88,7 @@ yet, it says so. ## The contribution rule -Scoring is also the governance mechanism, inherited from `populace`: +Scoring is also the governance mechanism, inherited from Microcosm: **a contribution merges if and only if it improves the population's score on held-out facts.** A better mortality module, a sharper claiming model, a new earnings architecture — from this team or diff --git a/docs/team.md b/docs/team.md index af90b093..0c3c9ed8 100644 --- a/docs/team.md +++ b/docs/team.md @@ -41,7 +41,7 @@ during implementation: ### Technical lead or research engineer -Implementation leadership is needed to own the longitudinal `populace` +Implementation leadership is needed to own the longitudinal Microcosm pipeline, modeling infrastructure, and reproducibility workflow. This capacity should not be treated as optional. @@ -56,7 +56,7 @@ just whether the code runs. The project requires substantial work on harmonization, ingestion, versioning, and reproducibility across the surveys and administrative -sources that `populace` integrates and calibrates against. This is a +sources that Microcosm integrates and calibrates against. This is a real workload, not a background task. ### Research assistance diff --git a/docs/technical-specifications.md b/docs/technical-specifications.md index 69b403a6..c3481531 100644 --- a/docs/technical-specifications.md +++ b/docs/technical-specifications.md @@ -1,7 +1,7 @@ # Technical Specifications This chapter provides technical specifications for longitudinal -`populace` and for the Social Security application layer that will sit +Microcosm and for the Social Security application layer that will sit on top of it. The relevant build is not a standalone Social Security-only dataset. It is a reusable longitudinal population asset plus a policy-analysis layer. @@ -11,7 +11,7 @@ plus a policy-analysis layer. Dynamic microsimulation models begin with a longitudinal sample of the population and age that sample forward through time using stochastic demographic and economic transition equations. In this project, that -sample should be delivered as longitudinal `populace`. The specific +sample should be delivered as longitudinal Microcosm. The specific variables and equations required depend on the modeling goals. For Social Security analysis, we need inputs to both payroll tax and benefit calculations. @@ -38,16 +38,16 @@ A basic Social Security model thus involves simulating year-by-year and person-b - Earnings (combining participation, hours, and wages) - Benefit claiming decisions -## Constructing longitudinal Populace: historical simulation +## Constructing longitudinal Microcosm: historical simulation The input dataset for dynamic microsimulation requires longitudinal histories for all listed variables in a representative sample as of the base year. Creating and validating that dataset is the central task in -making `populace` longitudinal. It proceeds through historical +making Microcosm longitudinal. It proceeds through historical simulation, which is effectively a synthetic data generation exercise using cross-sectional and longitudinal input data, including parameterized stochastic earnings shocks and other transition -equations. `populace` integrates those cross-sectional and +equations. Microcosm integrates those cross-sectional and longitudinal sources, along with the SSA, CBO, IRS, and Census calibration targets the validation steps rely on, from primary-source U.S. government survey and administrative data. @@ -162,7 +162,7 @@ This approach aligns with PolicyEngine's existing strength in detailed tax and t ## Output dataset structure -Longitudinal `populace` should be organized as a relational dataset +Longitudinal Microcosm should be organized as a relational dataset with four linked tables. This structure captures all data elements required for benefit calculation across all beneficiary types, maintains family relationships for auxiliary and survivor benefits, and @@ -265,7 +265,7 @@ For PolicyEngine integration, the 4-table structure will be flattened into the e The technical specifications outlined here provide a roadmap for model development. We start with clearly defined variables and transition equations needed for Social Security analysis, but we place them inside -the broader task of building longitudinal `populace`. Historical +the broader task of building longitudinal Microcosm. Historical simulation creates and validates the base longitudinal population. Forward projections incorporate calibration to address the jump-off problem. Behavioral responses, even if simple, ensure realism.