From dc9e7fe00e83647bc052437b784dcd3cd4452162 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Mon, 28 Sep 2026 16:55:19 -0400 Subject: [PATCH 01/15] Add the US support-mix bake-off harness (WIP) Co-Authored-By: Claude Opus 5.5 --- changelog.d/us-support-mix-bakeoff.added.md | 1 + docs/us-support-mix-bakeoff.md | 211 +++ .../microcosm/build/us_runtime/support_mix.py | 343 ++++ .../engine_free/us/test_us_support_mix.py | 224 +++ tools/bakeoff_us_support_mix.py | 1439 +++++++++++++++++ 5 files changed, 2218 insertions(+) create mode 100644 changelog.d/us-support-mix-bakeoff.added.md create mode 100644 docs/us-support-mix-bakeoff.md create mode 100644 packages/microcosm-build/src/microcosm/build/us_runtime/support_mix.py create mode 100644 packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py create mode 100644 tools/bakeoff_us_support_mix.py diff --git a/changelog.d/us-support-mix-bakeoff.added.md b/changelog.d/us-support-mix-bakeoff.added.md new file mode 100644 index 0000000000..8f91c1e707 --- /dev/null +++ b/changelog.d/us-support-mix-bakeoff.added.md @@ -0,0 +1 @@ +Add a support-mix bake-off (tools/bakeoff_us_support_mix.py, us_runtime/support_mix.py): CPS years vs ACS rows vs CPS location clones at fixed household budgets, calibrated with the production solver and scored on the hash-split holdout; memo in docs/us-support-mix-bakeoff.md. diff --git a/docs/us-support-mix-bakeoff.md b/docs/us-support-mix-bakeoff.md new file mode 100644 index 0000000000..5d864c9aae --- /dev/null +++ b/docs/us-support-mix-bakeoff.md @@ -0,0 +1,211 @@ +# US support mix: CPS years vs ACS rows at a fixed row budget + +Status: bake-off run 2026-09-28 on main `bda72cb02`, policyengine-us 2.2.1, +pinned Chronicle feed `b8543739` (32,842 targets). Tool: +[`tools/bakeoff_us_support_mix.py`](../tools/bakeoff_us_support_mix.py); +primitives and invariants: +[`us_runtime/support_mix.py`](../packages/microcosm-build/src/microcosm/build/us_runtime/support_mix.py). + +## Question + +Max, 2026-09-27: the ACS matters mainly as variation in the support, meaning +more distinct households for calibration to choose among. Pooling more CPS +years is the other route to support, at full CPS richness. Cloning CPS +households to new locations adds rows that differ only in geography. At a +household budget we can afford to build and serve, which mix gives the best +held-out accuracy, for the national compact file and for the CD and county +local file? + + + +## Design + +### Arms + +A **source household** is one survey household record: one ASEC +household-year or one ACS household. Budgets count source households, as in +the design note, so the 2022–2024 ASEC pool is 168,852. A CPS source +household keeps its PUF tax-detail clone rows from the Route A pipeline, so +it spans two or three physical rows. The receipts report physical rows +separately, and physical rows drive engine and serving cost. + +Each arm keeps every household of its CPS income years and fills the rest of +the budget with: + +- **ACS** households (`acs100`): the first *n* in a salted hash order of + `SERIALNO`, so a smaller arm's ACS households are always a subset of a + larger arm's; +- **CPS location clones** (`acs000`): copies of the arm's own CPS households, + each physical row drawing a new (district, county) within its state in + proportion to ACS household weight, the way Route A draws rows + independently; +- a 50/50 mix (`acs050`, at 600k only). + +| Budget | CPS years | Fills | +|---|---|---| +| natural size | 2024; 2023–24; 2022–24 | none | +| 300k, 600k, 1.2M | 2024; 2023–24; 2022–24 | ACS; clones | +| 300k, 600k, 1.2M | none | ACS only | +| 600k | 2024; 2022–24 | 50/50; ACS with seeds 1 and 2 (replicates) | + +That is 30 arms. Each is calibrated twice, once per product: + +- **national compact**: the release's `national_state` surface (national and + state targets, 5,694 in all, before the split); +- **local**: the full surface (adding 24,340 district targets) plus district + total population from the ACS, as the ACS local release trains. + +**Five CPS years were not run.** Income years 2020 and 2021 pass the +response-quality check below, but main pins ASEC role and person sources +only for 2022–2024 and refuses other years. The pipeline stages that would +build them peak at 72–80 GB, above this task's 60 GB ceiling, while a Route A +release waits for memory on the same machine. The tool takes more years as +more rows, so a 5-year arm is a rerun once the pins and a base build land (see +Follow-ups). + +### Superpool: one engine pass, many arms + +Rerunning the pipeline per arm would cost hours and 70–94 GB each. Instead +the bake-off computes every household's target contributions once and +reweights subsets: + +- **CPS rows**: the Route A 310842b release export (352,932 physical rows: + income years 2022–2024, PUF clones, all enrichment stages), with design + weights from its base. The run failed only its post-export smoke gate. +- **ACS rows**: the 2026-09-23 ACS local staging (1,531,614 ACS 2024 1-year + households with CPS-only inputs transferred from the 57,240-household + receipt-qualified donor spine). The staging's own 57,240 donor rows are not + used. + +Both carry the same PolicyEngine input schema (141 and 140 person inputs). +Imputations are fixed across arms: an ACS row's CPS-only variables come from +the same donor spine whatever CPS years the arm pools. The bake-off +therefore measures the support effect with donor quality held constant; in a +real rebuild, a 1-year arm would also have a thinner donor pool. + +**Concepts.** The release materializer builds each state or district +target's household column as a geography-free value times an indicator of +the household's own state or district +(`_base_simulation_household_columns`). `compile` groups the 32,842 targets +into 419 such concepts, and `materialize` runs the release tool's own +`_materialize_target_frame` on them in 50,000-household shards (peak about +5 GB). Every arm's target matrix is then concept value × geography mask, +assembled sparse. `diffcheck` verifies the identity on real rows: production +per-target columns and concept × mask agree exactly on sampled state and +district targets of every family (receipt below). The 11 JCT tax-expenditure +targets need reform simulations and are excluded from every arm. + +### Holdout + +The US holdout ("Port the UK holdout to US release targets") has not merged. +The bake-off mirrors its pending `target_split` spec byte for byte: SHA-256 +of `salt + "\x1f" + key`, sealed if below 0.05 on the sealed salt, otherwise +held out if below 0.10 on the holdout salt. District children take their +state parent's key, and vintage tokens are dropped, so a held-out group is +held out at every level it appears. The pending spec's pins, which force +some groups to train, were not yet written and are not mirrored, so the +bake-off split differs from the eventual release split for pinned groups. +Sealed targets are neither trained nor scored. + +On the pinned feed: 27,711 train, 3,470 holdout (36 national, 787 state, +2,647 district), 1,661 sealed. + +**ACS-native truth.** The registry has no housing targets and no county +targets. ACS-native dimensions are scored against the ACS 2024 1-year +table-based summary file (B25003 tenure, B25060 and B25065 aggregate rent, +B25090 aggregate real-estate taxes, B25008 and B01003 population, B01001 age +and sex) at national, state, district (119th Congress) and county (the 850 +counties the 1-year file covers). They are never calibrated, except +district total population in the local product. These tables come from the +same ACS year as the ACS rows; the PUMS is a subsample of the published +sample and district and county are drawn from PUMA, so ACS rows do not +reproduce them by construction, but they share its sampling error. Treat +ACS-native scores as consistency with the published ACS, not as truth. + +### Calibration + +Every arm uses the production optimizer, `microcosm.calibrate.solve._optimize`, +with the fiscal release's settings: Adam on log-weights, learning rate 0.02, +capped relative error (cap 1.0), mass conserved, max weight ratio 5, the +release's concept-budget loss weights computed once on the full registry +(so train and holdout keep fixed weights), no L0 pruning (so the row budget +stays fixed). A sparse operator with a precomputed transpose replaces the +torch sparse-CSR backward pass, which was the bottleneck; the objective and +projections are unchanged. + +Starting weights: each CPS income year gets an equal share of the CPS mass; +a household with *k* location copies splits its weight over 1 + *k* rows; +CPS and ACS sides share mass in proportion to source households; then the +release's population mass repair rescales to its 334.2M-person benchmark. + +**Invariants** (property-tested in `test_us_support_mix.py`): an arm's CPS, +ACS and clone households sum to its budget; ACS selections are nested and +independent of input order; clone copies differ by at most one; starting +weights are positive, sum to the requested mass, give each CPS year an equal +share and split CPS and ACS in proportion to households; distinct-household +ESS never exceeds row ESS or the distinct-unit count; the holdout role is a +pure function of the group key and never moves with a vintage token. +**Differential**: `diffcheck` compares production per-target materialization +with concept × mask. + +### Scoring + +- **Registry holdout**: capped relative error `min(|est − target| / + max(|target|, 1), 1)`, mean and loss-weighted mean, by dimension (CPS-native: + income components, tax items, program receipt; ACS-native: PEP + demographics) and level. Unsupported targets (no row in the arm can move + them) are counted separately. +- **ACS-native**: households, tenure, aggregate rent and real-estate taxes, + household population and age and sex bands, by level including county. +- **ESS** over distinct households: weights summed within each household + unit (an ASEC housing unit, `H_IDNUM`, counted once across rotation years, + PUF clone rows and location clones; an ACS `SERIALNO`), then Kish; also the + median across districts. +- **Cost**: calibration wall time and peak RSS per arm; engine seconds per + household from the materialization receipts; physical rows as the serving + cost driver. +- **Report only**: SPM poverty rate, all persons and children. Never + calibrated or gated. + +## CPS year response quality + +`census_cps_YYYY.h5` is keyed by income year (ASEC collected in YYYY+1). +Checked from the Census microdata and technical documentation: + +| File (income year) | ASEC | Households | Combined response rate | Whole-supplement imputed | Earnings allocated | +|---|---|---|---|---|---| +| 2019 | 2020 | 60,460 | 61.1% | 21.6% | 29.4% | +| 2020 | 2021 | 62,850 | 65.0% | 20.3% | 30.1% | +| 2021 | 2022 | 59,148 | 61.4% | 20.5% | 29.5% | +| 2022 | 2023 | 56,839 | 59.6% | 20.0% | 28.8% | +| 2023 | 2024 | 56,251 | 59.3% | 19.2% | 27.8% | +| 2024 | 2025 | 55,762 | 60.1% | 17.8% | 28.1% | + +Combined response is the product of basic-CPS and ASEC household response, +from each year's Source and Accuracy statement; imputation and allocation +are weighted shares computed from the Census microdata (`FL_665 != 1`; +earnings allocated among respondent earners). + +Income years 2020 and 2021 **pass** on response and processing quality: +their combined response rates are above the pinned years', their imputation, +allocation and weight-dispersion metrics sit within about 1.5 points of the +pinned years', and they show no composition break. Three caveats: + +- Census asks users to take care comparing data years 2019, 2020 and 2021 + with other years, and documents that nonrespondents in the 2020–2026 + surveys differ more from respondents than before (2026 CPS ASEC technical + documentation). That caution covers the pinned 2022–2024 years' collections + too. +- Their income years carry pandemic program receipt: 10,915 and 4,065 + unemployment-compensation recipients, against about 1,200–1,700 in other + years. That matters for program-receipt targets. +- About 35% of each file's households repeat in the neighbouring year. + +Income year 2019 (ASEC 2020, collected as COVID hit) is the file that fails: +it shows composition jumps in characteristics that are not weighting +controls (weighted BA+ share +1.5 points, homeownership +1.9 points, a 11.5% +smaller household sample). + +Rotation overlap: a housing unit appears in at most two adjacent files, so +2022–2024 has 130,294 distinct units in 168,852 households (77.2%), and +2020–2024 would have 211,834 in 290,850 (72.8%). diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/support_mix.py b/packages/microcosm-build/src/microcosm/build/us_runtime/support_mix.py new file mode 100644 index 0000000000..649f640f6d --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/support_mix.py @@ -0,0 +1,343 @@ +"""Support-mix bake-off primitives: CPS years and ACS rows at fixed row budgets. + +The US calibration support can grow two ways. Pooling more CPS ASEC years adds +households at full CPS richness; adding ACS households adds real variation in +what the ACS observes (housing, local geography, composition) and only model +draws in what it does not (the CPS-only variables imputed onto ACS rows). A +third way, cloning CPS households to new locations, adds degrees of freedom +for geography alone. This module holds the pure, engine-free pieces of a +bake-off that compares those mixes at a fixed household budget: + +- arm planning: how many CPS source households, ACS households and CPS + location clones an arm holds (:func:`plan_arm_counts`); +- nested, identity-keyed ACS selection (:func:`acs_selection_order`), so a + smaller arm's ACS households are always a subset of a larger arm's; +- deterministic clone allocation (:func:`clone_copies`); +- the arm's starting weights (:func:`arm_initial_weights`); +- the US target split mirrored from the pending ``target_split`` module + (:func:`target_split_group_key`, :func:`target_split_role`); +- effective sample size over distinct households (:func:`distinct_unit_ess`). + +A "source household" is one survey household record: one ASEC household-year +or one ACS household. A CPS source household keeps its PUF tax-detail clone +rows (the Route A support channels), so it can span two or three physical +rows; every physical row of one source household shares one unit key. +""" + +from __future__ import annotations + +import hashlib +import math +import re +from collections.abc import Iterable, Mapping, Sequence +from dataclasses import dataclass + +import numpy as np + +__all__ = [ + "HOLDOUT_FRACTION", + "SEALED_FRACTION", + "TARGET_SPLIT_HOLDOUT_SALT", + "TARGET_SPLIT_SEALED_SALT", + "ArmCounts", + "SupportMixArm", + "acs_selection_order", + "arm_initial_weights", + "clone_copies", + "distinct_unit_ess", + "hash_uniform", + "kish_ess", + "plan_arm_counts", + "target_split_group_key", + "target_split_role", +] + +#: The release split's salts and fractions, copied from the unmerged +#: ``us-target-roles-holdout`` branch (microcosm.build.us_runtime.target_split) +#: as of 2026-09-28. Its pins, which force whole groups to train, are not +#: mirrored: they were not yet written. Swap this block for that module once +#: it merges. +TARGET_SPLIT_SEALED_SALT = "microcosm.us.target_split.v1.sealed" +TARGET_SPLIT_HOLDOUT_SALT = "microcosm.us.target_split.v1.holdout" +SEALED_FRACTION = 0.05 +HOLDOUT_FRACTION = 0.10 + +_HASH_UNIFORM_SCALE = float(2**64) +_VINTAGE_TOKEN = re.compile(r"^(?:(?:ty|cy|fy|v|oep)\d{4}|month\d{4}_\d{1,2})$") +_HEX16_TOKEN = re.compile(r"^[0-9a-f]{16}$") + + +def hash_uniform(key: str, *, salt: str) -> float: + """A key's deterministic uniform draw on ``[0, 1)``. + + ``sha256(salt + "\\x1f" + key)``, first 8 bytes big-endian, divided by + ``2**64`` — byte-identical to the pending + ``microcosm.build.holdout.hash_holdout_uniform``. The draw depends only on + the key and the salt, never on which other keys exist or their order. + """ + if not isinstance(key, str) or not key: + raise ValueError(f"hash key must be a non-empty string, got {key!r}.") + if not isinstance(salt, str) or not salt: + raise ValueError(f"hash salt must be a non-empty string, got {salt!r}.") + digest = hashlib.sha256(f"{salt}\x1f{key}".encode()).digest() + return int.from_bytes(digest[:8], "big") / _HASH_UNIFORM_SCALE + + +def target_split_group_key(name: str, hierarchy_parent: str | None = None) -> str: + """The unit a target's split role is drawn for. + + A congressional-district child takes its state parent's key, so a + district is never held out while its parent and trained siblings pin it. + The name is split on ``"."``; vintage tokens (``ty2023``, ``v2024``, + ``month2024_7``, ...) are dropped so a restated vintage keeps its role; + names with a ``current_cd`` token also drop a trailing 16-hex digest. + Bare 4-digit tokens are district GEOIDs and are always kept. + """ + source = hierarchy_parent if hierarchy_parent else name + if not isinstance(source, str) or not source: + raise ValueError(f"target name must be a non-empty string, got {source!r}.") + tokens = [token for token in source.split(".") if not _VINTAGE_TOKEN.match(token)] + if "current_cd" in tokens and tokens and _HEX16_TOKEN.match(tokens[-1]): + tokens = tokens[:-1] + return ".".join(tokens) + + +def target_split_role(group_key: str) -> str: + """``"sealed"``, ``"holdout"`` or ``"train"`` for one group key. + + Sealed first, on its own salt, so the sealed tier rotates independently + of the holdout; then holdout on the holdout salt. About 5% sealed, 9.5% + holdout, 85.5% train. + """ + if hash_uniform(group_key, salt=TARGET_SPLIT_SEALED_SALT) < SEALED_FRACTION: + return "sealed" + if hash_uniform(group_key, salt=TARGET_SPLIT_HOLDOUT_SALT) < HOLDOUT_FRACTION: + return "holdout" + return "train" + + +@dataclass(frozen=True) +class SupportMixArm: + """One bake-off arm. + + Attributes: + budget: Source households in the arm, or ``None`` for a CPS-only arm + at its natural size (no fill). + cps_income_years: ASEC income years whose households are all kept. + acs_fill_share: Share of the fill (``budget`` minus the CPS source + households) taken by ACS households; the rest are CPS location + clones. ``1.0`` fills with ACS only, ``0.0`` with clones only. + seed: Salt suffix for the ACS order and clone draws, so replicate + arms differ only in which households fill. + """ + + budget: int | None + cps_income_years: tuple[int, ...] + acs_fill_share: float = 1.0 + seed: int = 0 + + def __post_init__(self) -> None: + if self.budget is not None and ( + isinstance(self.budget, bool) or int(self.budget) <= 0 + ): + raise ValueError(f"budget must be positive or None, got {self.budget!r}.") + years = tuple(int(year) for year in self.cps_income_years) + if len(set(years)) != len(years): + raise ValueError(f"cps_income_years repeats a year: {years}.") + object.__setattr__(self, "cps_income_years", tuple(sorted(years))) + share = float(self.acs_fill_share) + if not (math.isfinite(share) and 0.0 <= share <= 1.0): + raise ValueError(f"acs_fill_share must be in [0, 1], got {share!r}.") + object.__setattr__(self, "acs_fill_share", share) + + @property + def label(self) -> str: + budget = "natural" if self.budget is None else f"b{self.budget // 1000}k" + years = ( + "cps" + "-".join(str(year) for year in self.cps_income_years) + if self.cps_income_years + else "cps0" + ) + return f"{budget}.{years}.acs{round(self.acs_fill_share * 100):03d}.s{self.seed}" + + +@dataclass(frozen=True) +class ArmCounts: + """Source-household counts of one arm; they sum to its budget.""" + + cps: int + acs: int + clones: int + + @property + def total(self) -> int: + return self.cps + self.acs + self.clones + + +def plan_arm_counts( + arm: SupportMixArm, + *, + cps_households_by_year: Mapping[int, int], + acs_households: int, +) -> ArmCounts: + """How many CPS, ACS and clone source households ``arm`` holds. + + Raises: + ValueError: If a year has no CPS households, the CPS years alone + exceed the budget, clones are requested without CPS households, + or the ACS fill exceeds the ACS households available. + """ + missing = [year for year in arm.cps_income_years if year not in cps_households_by_year] + if missing: + raise ValueError(f"no CPS households for income year(s) {missing}.") + cps = int(sum(int(cps_households_by_year[year]) for year in arm.cps_income_years)) + if arm.budget is None: + return ArmCounts(cps=cps, acs=0, clones=0) + fill = int(arm.budget) - cps + if fill < 0: + raise ValueError( + f"{arm.label}: {cps:,} CPS source households exceed the " + f"{arm.budget:,} budget." + ) + acs = int(round(fill * arm.acs_fill_share)) + clones = fill - acs + if clones and not cps: + raise ValueError(f"{arm.label}: clones need at least one CPS household.") + if acs > int(acs_households): + raise ValueError( + f"{arm.label}: the ACS fill of {acs:,} exceeds the " + f"{int(acs_households):,} ACS households available." + ) + return ArmCounts(cps=cps, acs=acs, clones=clones) + + +def acs_selection_order(unit_keys: Sequence[str], *, salt: str) -> np.ndarray: + """Positions of ``unit_keys`` in selection order. + + An arm with ``n`` ACS households takes the first ``n`` positions, so + selections are nested across budgets: every household in a smaller arm is + in every larger arm with the same salt. Ties (identical draws) break by + key, so the order is a pure function of the key set. + """ + keys = [str(key) for key in unit_keys] + draws = np.fromiter( + (hash_uniform(key, salt=salt) for key in keys), dtype=np.float64, count=len(keys) + ) + return np.lexsort((np.asarray(keys, dtype=object).astype(str), draws)) + + +def clone_copies(unit_keys: Sequence[str], n_clones: int, *, salt: str) -> np.ndarray: + """Extra location copies per CPS source household, summing to ``n_clones``. + + Every household gets ``n_clones // n`` copies and the remainder goes to + the households first in hash order, so no household carries more than one + copy above any other. + """ + n = len(unit_keys) + if n_clones < 0: + raise ValueError(f"n_clones must be non-negative, got {n_clones!r}.") + if n == 0: + if n_clones: + raise ValueError("clones need at least one CPS household.") + return np.zeros(0, dtype=np.int64) + copies = np.full(n, n_clones // n, dtype=np.int64) + remainder = n_clones - int(copies.sum()) + if remainder: + order = acs_selection_order(unit_keys, salt=salt) + copies[order[:remainder]] += 1 + return copies + + +def arm_initial_weights( + *, + cps_design_weights: np.ndarray, + cps_income_year: np.ndarray, + cps_copies: np.ndarray, + acs_design_weights: np.ndarray, + counts: ArmCounts, + total_mass: float, +) -> tuple[np.ndarray, np.ndarray]: + """Starting weights for an arm's CPS rows (with copies) and ACS rows. + + - Each CPS income year gets an equal share of the CPS mass, keeping the + within-year design weights' shape. + - A CPS row with ``k`` copies splits its weight over ``1 + k`` rows. + - The ACS rows keep their design weights' shape. + - The CPS side (source households plus clones) and the ACS side share + ``total_mass`` in proportion to their source-household counts, so the + mean starting weight per source household is the same on both sides. + + Args: + cps_design_weights: Design weight per selected CPS physical row. + cps_income_year: Income year per selected CPS physical row. + cps_copies: Extra copies per selected CPS physical row (every row of + one source household carries that household's count). + acs_design_weights: Design weight per selected ACS row. + counts: The arm's source-household counts. + total_mass: The household weight the arm's weights sum to. + + Returns: + ``(cps_row_weights, acs_row_weights)``: the CPS array is per physical + row *per copy* (divide-by-``1 + k`` already applied), to be repeated + ``1 + k`` times by the caller. + """ + cps_w = np.asarray(cps_design_weights, dtype=np.float64) + years = np.asarray(cps_income_year) + copies = np.asarray(cps_copies, dtype=np.int64) + acs_w = np.asarray(acs_design_weights, dtype=np.float64) + if cps_w.shape != years.shape or cps_w.shape != copies.shape: + raise ValueError("CPS weights, years and copies must align.") + for name, values in (("CPS", cps_w), ("ACS", acs_w)): + if not np.isfinite(values).all() or (values <= 0).any(): + raise ValueError(f"{name} design weights must be finite and positive.") + if (copies < 0).any(): + raise ValueError("copies must be non-negative.") + if not (math.isfinite(total_mass) and total_mass > 0): + raise ValueError(f"total_mass must be positive, got {total_mass!r}.") + source = counts.total + if source <= 0: + raise ValueError("an arm needs at least one source household.") + cps_share = (counts.cps + counts.clones) / source + acs_share = counts.acs / source + if (counts.cps + counts.clones) and not len(cps_w): + raise ValueError("counts declare CPS households but no CPS rows were given.") + if counts.acs and not len(acs_w): + raise ValueError("counts declare ACS households but no ACS rows were given.") + + cps_out = np.zeros_like(cps_w) + if len(cps_w): + unique_years = np.unique(years) + per_year_mass = cps_share * total_mass / len(unique_years) + for year in unique_years: + in_year = years == year + cps_out[in_year] = cps_w[in_year] * (per_year_mass / cps_w[in_year].sum()) + cps_out = cps_out / (1 + copies) + acs_out = ( + acs_w * (acs_share * total_mass / acs_w.sum()) if len(acs_w) else acs_w.copy() + ) + return cps_out, acs_out + + +def kish_ess(weights: np.ndarray) -> float: + """Kish effective sample size ``(sum w)^2 / sum w^2`` over rows.""" + w = np.asarray(weights, dtype=np.float64) + if not np.isfinite(w).all() or (w < 0).any(): + raise ValueError("weights must be finite and non-negative.") + denominator = float(np.square(w).sum()) + return 0.0 if denominator == 0.0 else float(w.sum() ** 2 / denominator) + + +def distinct_unit_ess(weights: np.ndarray, unit_codes: Iterable) -> float: + """Kish ESS after summing weights within each distinct unit. + + A repeated household (the same ASEC housing unit in two rotation years, a + PUF clone row, a location clone) is one unit, so its rows count once. + Never exceeds the row-level Kish ESS nor the number of distinct units. + """ + w = np.asarray(weights, dtype=np.float64) + codes = np.asarray(list(unit_codes) if not isinstance(unit_codes, np.ndarray) else unit_codes) + if codes.shape != w.shape: + raise ValueError("weights and unit codes must align.") + _, inverse = np.unique(codes, return_inverse=True) + unit_weight = np.bincount(inverse.ravel(), weights=w) + return kish_ess(unit_weight) diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py b/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py new file mode 100644 index 0000000000..9b0d68ea58 --- /dev/null +++ b/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py @@ -0,0 +1,224 @@ +"""Properties of the support-mix bake-off primitives. + +Invariants checked for every drawn input: + +- budget accounting: an arm's CPS, ACS and clone source households sum to + its budget, and infeasible arms are refused rather than truncated; +- nesting: a smaller ACS selection is a prefix of a larger one, and the order + depends only on the key set, not its input order; +- clone allocation: copies sum to the requested clones and differ by at most + one across households; +- mass: starting weights are positive, sum to the requested total, give each + CPS income year an equal share, and split CPS and ACS mass in proportion to + source households; a row's copies sum back to its per-year weight; +- ESS: distinct-unit ESS never exceeds the row ESS or the number of distinct + units, and equals the row ESS when every unit is distinct; +- split: the role is a pure function of the group key, district children + share their parent's role, vintage tokens never change a role, and the + hash matches the pending release primitive byte for byte. +""" + +from __future__ import annotations + +import hashlib + +import numpy as np +import pytest + +hypothesis = pytest.importorskip("hypothesis") +from hypothesis import given, settings # noqa: E402 +from hypothesis import strategies as st # noqa: E402 + +from microcosm.build.us_runtime.support_mix import ( # noqa: E402 + TARGET_SPLIT_HOLDOUT_SALT, + TARGET_SPLIT_SEALED_SALT, + ArmCounts, + SupportMixArm, + acs_selection_order, + arm_initial_weights, + clone_copies, + distinct_unit_ess, + hash_uniform, + kish_ess, + plan_arm_counts, + target_split_group_key, + target_split_role, +) + +YEARS = {2022: 56_839, 2023: 56_251, 2024: 55_762} + + +def test_hash_uniform_matches_the_release_primitive() -> None: + digest = hashlib.sha256(b"salt\x1fkey").digest() + assert hash_uniform("key", salt="salt") == int.from_bytes(digest[:8], "big") / 2**64 + with pytest.raises(ValueError): + hash_uniform("", salt="salt") + with pytest.raises(ValueError): + hash_uniform("key", salt="") + + +@given(st.text(min_size=1, max_size=40), st.text(min_size=1, max_size=20)) +def test_hash_uniform_is_a_unit_interval_draw(key: str, salt: str) -> None: + u = hash_uniform(key, salt=salt) + assert 0.0 <= u < 1.0 + assert u == hash_uniform(key, salt=salt) + + +@given( + budget=st.integers(min_value=1, max_value=2_000_000), + years=st.sets(st.sampled_from(sorted(YEARS)), max_size=3), + share=st.floats(min_value=0.0, max_value=1.0), +) +def test_arm_counts_sum_to_the_budget_or_refuse(budget, years, share) -> None: + arm = SupportMixArm(budget=budget, cps_income_years=tuple(years), acs_fill_share=share) + cps = sum(YEARS[year] for year in years) + try: + counts = plan_arm_counts(arm, cps_households_by_year=YEARS, acs_households=1_531_614) + except ValueError: + fill = budget - cps + acs = round(fill * share) if fill >= 0 else 0 + assert fill < 0 or acs > 1_531_614 or (fill - acs > 0 and cps == 0) + return + assert counts.total == budget + assert counts.cps == cps + assert min(counts.acs, counts.clones) >= 0 + + +def test_natural_arm_has_no_fill() -> None: + arm = SupportMixArm(budget=None, cps_income_years=(2024,)) + counts = plan_arm_counts(arm, cps_households_by_year=YEARS, acs_households=10) + assert counts == ArmCounts(cps=55_762, acs=0, clones=0) + assert arm.label == "natural.cps2024.acs100.s0" + + +@given( + keys=st.lists(st.text(min_size=1, max_size=12), min_size=1, max_size=60, unique=True), + data=st.data(), +) +def test_acs_selection_is_nested_and_order_free(keys, data) -> None: + order = acs_selection_order(keys, salt="s") + assert sorted(order.tolist()) == list(range(len(keys))) + small = data.draw(st.integers(min_value=0, max_value=len(keys))) + large = data.draw(st.integers(min_value=small, max_value=len(keys))) + chosen_small = {keys[i] for i in order[:small]} + chosen_large = {keys[i] for i in order[:large]} + assert chosen_small <= chosen_large + shuffled = list(reversed(keys)) + reorder = acs_selection_order(shuffled, salt="s") + assert [shuffled[i] for i in reorder] == [keys[i] for i in order] + + +@given( + keys=st.lists(st.text(min_size=1, max_size=8), min_size=1, max_size=50, unique=True), + n_clones=st.integers(min_value=0, max_value=500), +) +def test_clone_copies_sum_and_balance(keys, n_clones) -> None: + copies = clone_copies(keys, n_clones, salt="c") + assert int(copies.sum()) == n_clones + assert copies.max() - copies.min() <= 1 + + +positive = st.floats(min_value=0.01, max_value=1e4, allow_nan=False) + + +@settings(max_examples=150) +@given( + cps=st.lists(st.tuples(positive, st.sampled_from([2022, 2023, 2024]), st.integers(0, 5)), + min_size=1, max_size=40), + acs=st.lists(positive, min_size=0, max_size=40), + clones=st.integers(min_value=0, max_value=100), + mass=st.floats(min_value=1.0, max_value=1e9), +) +def test_initial_weights_conserve_and_split_mass(cps, acs, clones, mass) -> None: + weights = np.array([w for w, _, _ in cps]) + years = np.array([y for _, y, _ in cps]) + copies = np.array([k for _, _, k in cps]) + acs_w = np.array(acs, dtype=np.float64) + counts = ArmCounts(cps=len(cps), acs=len(acs), clones=clones) + cps_out, acs_out = arm_initial_weights( + cps_design_weights=weights, cps_income_year=years, cps_copies=copies, + acs_design_weights=acs_w, counts=counts, total_mass=mass, + ) + expanded = cps_out * (1 + copies) + assert (cps_out > 0).all() and (acs_out > 0).all() + total = expanded.sum() + acs_out.sum() + assert np.isclose(total, mass, rtol=1e-9) + cps_share = (counts.cps + counts.clones) / counts.total + assert np.isclose(expanded.sum(), cps_share * mass, rtol=1e-9) + per_year = [expanded[years == y].sum() for y in np.unique(years)] + assert np.allclose(per_year, per_year[0], rtol=1e-9) + + +def test_initial_weights_refuse_bad_inputs() -> None: + counts = ArmCounts(cps=1, acs=1, clones=0) + ok = dict(cps_design_weights=np.array([1.0]), cps_income_year=np.array([2024]), + cps_copies=np.array([0]), acs_design_weights=np.array([1.0]), + counts=counts, total_mass=10.0) + arm_initial_weights(**ok) + for key, value in (("cps_design_weights", np.array([0.0])), + ("acs_design_weights", np.array([np.nan])), + ("total_mass", -1.0), ("cps_copies", np.array([-1]))): + with pytest.raises(ValueError): + arm_initial_weights(**{**ok, key: value}) + + +@given( + rows=st.lists(st.tuples(st.floats(min_value=0.0, max_value=1e6), st.integers(0, 15)), + min_size=1, max_size=80) +) +def test_distinct_unit_ess_bounds(rows) -> None: + w = np.array([r[0] for r in rows]) + units = np.array([r[1] for r in rows]) + if w.sum() == 0: + return + unit_ess = distinct_unit_ess(w, units) + assert unit_ess <= kish_ess(w) * (1 + 1e-9) + assert unit_ess <= len(np.unique(units[w > 0])) * (1 + 1e-9) + assert np.isclose(distinct_unit_ess(w, np.arange(len(w))), kish_ess(w)) + + +def test_group_key_normalization() -> None: + assert target_split_group_key("irs_soi.state.ty2023.agi.06") == "irs_soi.state.agi.06" + assert target_split_group_key("a.month2024_7.b") == "a.b" + # District GEOIDs are 4-digit tokens and survive. + assert target_split_group_key("irs_soi.cd.0601.v2024") == "irs_soi.cd.0601" + assert target_split_group_key( + "x.current_cd.0601.0123456789abcdef" + ) == "x.current_cd.0601" + # A district child takes its state parent's key. + assert target_split_group_key("child.0601", "parent.06.ty2022") == "parent.06" + + +@given(st.lists(st.sampled_from(["ty2021", "cy2024", "v2024", "fy2023", "oep2025"]), max_size=3)) +def test_vintage_tokens_never_change_a_role(vintages) -> None: + base = "irs_soi.state.agi.band3.06" + name = ".".join([*base.split(".")[:2], *vintages, *base.split(".")[2:]]) + assert target_split_group_key(name) == base + assert target_split_role(target_split_group_key(name)) == target_split_role(base) + + +def test_role_rates_are_near_the_declared_fractions() -> None: + roles = [target_split_role(f"k{i}") for i in range(20_000)] + sealed = roles.count("sealed") / len(roles) + holdout = roles.count("holdout") / len(roles) + assert abs(sealed - 0.05) < 0.01 + assert abs(holdout - 0.095) < 0.01 + # Sealed is drawn first on its own salt. + for i in range(200): + key = f"k{i}" + if hash_uniform(key, salt=TARGET_SPLIT_SEALED_SALT) < 0.05: + assert target_split_role(key) == "sealed" + elif hash_uniform(key, salt=TARGET_SPLIT_HOLDOUT_SALT) < 0.10: + assert target_split_role(key) == "holdout" + + +def test_arm_validation() -> None: + with pytest.raises(ValueError): + SupportMixArm(budget=0, cps_income_years=(2024,)) + with pytest.raises(ValueError): + SupportMixArm(budget=10, cps_income_years=(2024, 2024)) + with pytest.raises(ValueError): + SupportMixArm(budget=10, cps_income_years=(2024,), acs_fill_share=1.5) + arm = SupportMixArm(budget=600_000, cps_income_years=(2024, 2022), acs_fill_share=0.5, seed=2) + assert arm.cps_income_years == (2022, 2024) + assert arm.label == "b600k.cps2022-2024.acs050.s2" diff --git a/tools/bakeoff_us_support_mix.py b/tools/bakeoff_us_support_mix.py new file mode 100644 index 0000000000..ced0ba5500 --- /dev/null +++ b/tools/bakeoff_us_support_mix.py @@ -0,0 +1,1439 @@ +#!/usr/bin/env python +"""Bake-off: CPS ASEC years vs ACS rows in the US calibration support. + +At fixed source-household budgets, each arm keeps every household of N CPS +income years and fills the rest with ACS households, CPS location clones, or +a mix. Every arm is calibrated with the production solver and scored on +targets it never saw. See docs/us-support-mix-bakeoff.md for the design, +results and caveats. + +The expensive part, running PolicyEngine-US, happens once per household, not +once per arm. ``compile`` groups the pinned target registry into concepts: +a concept is a target with its geography stripped, and every state or +district target is that concept's household value times an indicator of the +household's own state or district (the release materializer builds its +columns exactly this way; ``diffcheck`` verifies it on real rows). +``materialize`` runs the release tool's own ``_materialize_target_frame`` on +household shards for the concept specs. ``arm`` then selects rows, assembles +the sparse target matrix, calls the production ``_optimize`` and scores. + +Subcommands, in order: compile, shard, materialize, diffcheck, truth, arm, +report. Every subcommand writes a JSON receipt with wall time and peak RSS. +""" + +from __future__ import annotations + +import argparse +import dataclasses +import gc +import hashlib +import importlib.util +import json +import math +import pickle +import resource +import sys +import time +from collections import Counter +from pathlib import Path + +import numpy as np +import pandas as pd +import scipy.sparse as sp + +TOOLS = Path(__file__).resolve().parent +sys.path.insert(0, str(TOOLS)) + +from microcosm.build.us_runtime.support_mix import ( # noqa: E402 + SupportMixArm, + acs_selection_order, + arm_initial_weights, + clone_copies, + distinct_unit_ess, + hash_uniform, + kish_ess, + plan_arm_counts, + target_split_group_key, + target_split_role, +) + +PERIOD = 2024 +FEED_SHA256 = "b85437390021777e746f507c5890305496baf5fc7f2c78ba08ddb090f4839801" +ENTITIES = ("person", "household", "tax_unit", "spm_unit", "family", "marital_unit") +GROUP_ID = { + "tax_unit": ("tax_unit_id", "person_tax_unit_id"), + "spm_unit": ("spm_unit_id", "person_spm_unit_id"), + "family": ("family_id", "person_family_id"), + "marital_unit": ("marital_unit_id", "person_marital_unit_id"), +} +ACS_SELECTION_SALT = "microcosm.us.support_mix_bakeoff.v1.acs_order" +CLONE_SALT = "microcosm.us.support_mix_bakeoff.v1.clones" +CLONE_GEO_SALT = "microcosm.us.support_mix_bakeoff.v1.clone_geography" +REPORT_SPECS = { + "report.spm_poor_persons": {"base_variable": "person_in_poverty", "measure_mode": "sum"}, + "report.spm_poor_children": { + "base_variable": "person_in_poverty", + "measure_mode": "sum", + "age_lower_bound": "0", + "age_upper_bound": "18", + }, +} + +# ------------------------------------------------------------------ utilities + + +def log(message: str) -> None: + stamp = time.strftime("%Y-%m-%d %H:%M:%S") + print(f"{stamp} {message}", flush=True) + + +def peak_rss_gb() -> float: + # macOS reports ru_maxrss in bytes; Linux in kilobytes. + raw = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss + return raw / 1e9 if sys.platform == "darwin" else raw * 1024 / 1e9 + + +def sha256_file(path: Path) -> str: + digest = hashlib.sha256() + with open(path, "rb") as handle: + for block in iter(lambda: handle.read(1 << 22), b""): + digest.update(block) + return digest.hexdigest() + + +def write_json(path: Path, payload: object) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + tmp = path.with_suffix(path.suffix + ".tmp") + tmp.write_text(json.dumps(payload, indent=1, sort_keys=True, default=str)) + tmp.replace(path) + + +#: Touch this file to pause every bake-off loop between units of work (a shard +#: or an arm) — e.g. while a release stage needs the machine's memory. +PAUSE_FILE = Path("/Users/maxghenis/PolicyEngine/_bakeoff-support-mix/PAUSE") + + +def wait_while_paused() -> None: + while PAUSE_FILE.exists(): + log(f"paused: {PAUSE_FILE} exists") + time.sleep(120) + + +def wait_for_memory(min_available_gb: float) -> None: + """Block until the host has ``min_available_gb`` free (a shared laptop).""" + import psutil + + wait_while_paused() + while psutil.virtual_memory().available / 2**30 < min_available_gb: + log( + f"waiting for memory: {psutil.virtual_memory().available / 2**30:.1f} GiB " + f"available < {min_available_gb} GiB" + ) + time.sleep(120) + + +def release_tool(): + name = "build_us_fiscal_refresh_release" + if name in sys.modules: + return sys.modules[name] + spec = importlib.util.spec_from_file_location(name, TOOLS / f"{name}.py") + module = importlib.util.module_from_spec(spec) + sys.modules[name] = module + spec.loader.exec_module(module) + return module + + +def acs_local_tool(): + name = "build_us_acs_local_release" + if name in sys.modules: + return sys.modules[name] + spec = importlib.util.spec_from_file_location(name, TOOLS / f"{name}.py") + module = importlib.util.module_from_spec(spec) + sys.modules[name] = module + spec.loader.exec_module(module) + return module + + +# ------------------------------------------------------------------ compile + +INCOME_SOURCES = { + "adjusted_gross_income", "employment_income", "self_employment_income", + "capital_gains", "capital_gains_gross", "capital_gains_losses", + "qualified_dividend_income", "ordinary_dividends", "taxable_interest_income", + "tax_exempt_interest_income", "rent_and_royalty_net_income", + "rent_and_royalty_net_losses", "partnership_s_corp_income", + "partnership_s_corp_losses", "estate_income", "estate_losses", + "taxable_pension_income", "total_pension_income", "taxable_ira_distributions", + "taxable_social_security", "total_social_security", "unemployment_compensation", + "business_net_profits", "business_net_losses", "non_sch_d_capital_gains", + "count", +} + + +def dimension_of(family: str, metadata: dict) -> tuple[str, str]: + """(dimension group, dimension) for one registry target.""" + if family in {"usda_snap", "cms_medicaid", "cms_aca", "ssa", "hhs_acf_tanf", + "hhs_acf_liheap", "cms_medicare"}: + return "cps_native", "program_receipt" + if family in {"state_income_tax", "jct"}: + return "cps_native", "tax_items" + if family == "census_population": + return "acs_native", "demographics_pep" + if family in {"bea", "cbo"}: + return "cps_native", "income_components" + if family == "federal_reserve": + return "other", "wealth" + if family == "irs_soi": + source = metadata.get("source_variable", metadata.get("variable", "")) + role = metadata.get("target_role", "") + if source in INCOME_SOURCES and "aca" not in role: + return "cps_native", "income_components" + return "cps_native", "tax_items" + return "other", family + + +def _concept_key(tool, spec) -> tuple[tuple, list[str]]: + """Geography-free value key of one spec, from the release tool's helpers.""" + + def bound(value): + v = tool._as_bound(str(value)) + return "inf" if v == math.inf else ("-inf" if v == -math.inf else repr(float(v))) + + def filing(name): + status = tool.FILING_STATUS_MAP[name] + if status is None: + return "ALL" + return status if isinstance(status, str) else "|".join(sorted(status)) + + def child(filter_): + if filter_ is None: + return None + mask = tool._eitc_child_count_mask(np.arange(0, 6, dtype=float), filter_) + return "".join("1" if x else "0" for x in mask) + + m = spec.metadata + notes: list[str] = [] + if spec.family == "jct": + return ("jct",), ["excluded:reform_simulation"] + if spec.family == "state_income_tax": + return ("state_income_tax",), notes + materializer = m.get("materializer") + if spec.family == "irs_soi": + source = m.get("source_variable", m.get("variable")) + if tool._unsupported_soi_ledger_filters(m): + notes.append("excluded:unsupported_soi_filter") + mode = "count" if source == "count" else ( + "indicator" if m.get("measure_mode") == "indicator_sum" else "amount" + ) + key = ("irs_soi", source, mode, bound(m["agi_lower_bound"]), + bound(m["agi_upper_bound"]), filing(m["filing_status"]), + child(tool._soi_eitc_child_count_filter(m)), + bool(tool._soi_requires_positive_eitc_filter(m)), + m.get("itemized_only") == "true", m.get("taxable_only") == "true") + return key, notes + if materializer == "population_age": + return ("population_age", bound(m.get("age_lower_bound", "-inf")), + bound(m.get("age_upper_bound", "inf"))), notes + if materializer == "policyengine_variable": + base = tool._base_variables_from_metadata(m) + less_than = tool._less_than_from_metadata(m) + mode = m.get("measure_mode", "sum") + low, high = m.get("age_lower_bound"), m.get("age_upper_bound") + if low is not None or high is not None: + if m.get("state_fips") or m.get("congressional_district_geoid"): + notes.append("age_banded_geographic_spec") + return ("pe_var_age", base, mode, bound(low if low is not None else "-inf"), + bound(high if high is not None else "inf")), notes + return ("pe_var", base, mode, m.get("indicator_map_to"), + m.get("indicator_filter_variable"), + None if less_than is None else repr(less_than)), notes + return ("direct", spec.measure), ["direct_measure"] + + +def do_compile(args) -> None: + started = time.time() + tool = release_tool() + from microcosm.build.ledger_artifact import load_ledger_consumer_artifact + from microcosm.build.us_runtime import ( + apply_us_medicaid_enrollment_substitutions, + compile_us_fiscal_target_registry, + default_congressional_district_vintage_crosswalk_path, + load_congressional_district_vintage_crosswalk, + ) + from microcosm.calibrate.registry import TargetSpec + + feed_sha = sha256_file(args.feed) + if feed_sha != FEED_SHA256: + raise SystemExit(f"feed sha256 {feed_sha} != pinned {FEED_SHA256}") + artifact = load_ledger_consumer_artifact(args.feed) + registry = compile_us_fiscal_target_registry( + artifact.facts, + target_period=PERIOD, + congressional_district_vintage_crosswalk=load_congressional_district_vintage_crosswalk( + default_congressional_district_vintage_crosswalk_path() + ), + age_targets=True, + ) + registry, substitutions = apply_us_medicaid_enrollment_substitutions(registry) + specs = tuple(registry.specs) + national_state, surface_receipt = tool._select_target_surface( + specs, tool.TARGET_SURFACE_NATIONAL_STATE + ) + national_state_names = {spec.name for spec in national_state} + loss_weights = np.asarray(tool._fiscal_target_loss_weights(registry), dtype=np.float64) + + concept_ids: dict[tuple, int] = {} + concept_specs = [] + rows = [] + for index, spec in enumerate(specs): + key, notes = _concept_key(tool, spec) + excluded = next((n for n in notes if n.startswith("excluded:")), None) + m = dict(spec.metadata) + concept_id = -1 + measure = None + if key == ("state_income_tax",): + measure = "state_income_tax" + elif excluded is None: + if key not in concept_ids: + concept_ids[key] = len(concept_ids) + cid = concept_ids[key] + stripped = { + k: v for k, v in m.items() + if k not in {"state_fips", "congressional_district_geoid", + "hierarchy_parent_target_name"} + } + stripped["ledger_geography_level"] = "country" + stripped["ledger_geography_id"] = "US" + concept_measure = ( + spec.measure if key[0] == "direct" else f"bakeoff_concept_{cid:05d}" + ) + concept_specs.append( + dataclasses.replace( + spec, + name=f"bakeoff.concept.{cid:05d}", + measure=concept_measure, + metadata=stripped, + hierarchy=None, + ) + ) + concept_id = concept_ids[key] + measure = concept_specs[concept_id].measure + level = m.get("ledger_geography_level", "") + group, dimension = dimension_of(spec.family, m) + group_key = target_split_group_key(spec.name, m.get("hierarchy_parent_target_name")) + rows.append({ + "target_index": index, + "name": spec.name, + "period": str(spec.period), + "family": spec.family, + "level": {"country": "national", "congressional_district": "cd"}.get(level, level), + "state_fips": int(m["state_fips"]) if m.get("state_fips") else -1, + "cd_geoid": int(m["congressional_district_geoid"]) if m.get("congressional_district_geoid") else -1, + "value": float(spec.value), + "measure": measure, + "concept_id": concept_id, + "concept_key": json.dumps(key, default=str), + "excluded": excluded, + "notes": ";".join(n for n in notes if not n.startswith("excluded:")), + "in_national_state": spec.name in national_state_names, + "loss_weight": float(loss_weights[index]), + "group_key": group_key, + "role": target_split_role(group_key), + "dimension_group": group, + "dimension": dimension, + "value_basis": tool._fiscal_target_value_basis(spec), + }) + for name, metadata in REPORT_SPECS.items(): + concept_specs.append( + TargetSpec( + name=f"bakeoff.{name}", + entity="household", + value=1.0, + measure=f"bakeoff_{name.replace('.', '_')}", + source="support-mix bake-off report-only measure (never calibrated)", + family="bakeoff_report", + metadata={"materializer": "policyengine_variable", **metadata}, + ) + ) + targets = pd.DataFrame(rows) + args.out.mkdir(parents=True, exist_ok=True) + targets.to_parquet(args.out / "targets.parquet", index=False) + with open(args.out / "concept_specs.pkl", "wb") as handle: + pickle.dump(tuple(concept_specs), handle) + receipt = { + "feed": str(args.feed), + "feed_sha256": feed_sha, + "registry_version": registry.version, + "n_specs": len(specs), + "n_concepts": len(concept_ids), + "n_report_concepts": len(REPORT_SPECS), + "medicaid_substitutions": len(substitutions), + "national_state_surface": surface_receipt, + "excluded": dict(Counter(r["excluded"] for r in rows if r["excluded"])), + "notes": dict(Counter(n for r in rows for n in r["notes"].split(";") if n)), + "roles": dict(Counter(r["role"] for r in rows)), + "roles_by_level": { + level: dict(Counter(r["role"] for r in rows if r["level"] == level)) + for level in sorted({r["level"] for r in rows}) + }, + "dimension_counts": dict(Counter(f"{r['dimension_group']}/{r['dimension']}/{r['level']}" for r in rows)), + "split_note": ( + "Mirrors the unmerged us-target-roles-holdout split (salts, \\x1f " + "hash, group keys) without its pins; see support_mix.py." + ), + "wall_s": round(time.time() - started, 1), + "peak_rss_gb": round(peak_rss_gb(), 2), + } + write_json(args.out / "compile.json", receipt) + log(json.dumps({k: receipt[k] for k in ("n_specs", "n_concepts", "roles", "excluded")})) + + +# ------------------------------------------------------------------ shard + + +class _FixedStore: + """Row-sliced reads of a pandas ``fixed``-format HDF5 frame store.""" + + def __init__(self, path: Path): + import h5py + import tables + + self.h5 = h5py.File(path, "r") + self.tb = tables.open_file(str(path), mode="r") + self.layout = {} + for entity in ENTITIES: + group = self.h5[entity] + blocks, i = [], 0 + while f"block{i}_items" in group: + items = [x.decode() for x in group[f"block{i}_items"][()]] + blocks.append((i, items, str(group[f"block{i}_values"].dtype))) + i += 1 + self.layout[entity] = { + "nrows": int(group["axis1"].shape[0]), + "blocks": blocks, + "columns": [item for _, items, _ in blocks for item in items], + } + self._objects: dict[tuple[str, int], np.ndarray] = {} + + def rows(self, entity: str) -> int: + return self.layout[entity]["nrows"] + + def read(self, entity: str, start: int, stop: int, columns=None) -> pd.DataFrame: + columns = self.layout[entity]["columns"] if columns is None else list(columns) + out = {} + group = self.h5[entity] + for i, items, dtype in self.layout[entity]["blocks"]: + wanted = [(j, c) for j, c in enumerate(items) if c in columns] + if not wanted: + continue + if dtype == "object": + key = (entity, i) + if key not in self._objects: + node = self.tb.get_node(f"/{entity}/block{i}_values") + array = np.asarray(node[0], dtype=object) + self._objects[key] = array.reshape(1, -1) if array.ndim == 1 else array.T + block = self._objects[key] + for j, c in wanted: + out[c] = block[j, start:stop] + else: + values = group[f"block{i}_values"][start:stop, :] + for j, c in wanted: + out[c] = values[:, j] + return pd.DataFrame({c: out[c] for c in columns}) + + def read_positions(self, entity: str, positions: np.ndarray) -> pd.DataFrame: + positions = np.asarray(positions, dtype=np.int64) + if not len(positions): + return self.read(entity, 0, 0) + low, high = int(positions.min()), int(positions.max()) + 1 + if high - low > 4 * len(positions) + 10_000: + raise RuntimeError( + f"{entity}: rows for a shard span {high - low:,} for {len(positions):,} rows; " + "the store is not in household order." + ) + frame = self.read(entity, low, high) + return frame.iloc[positions - low].reset_index(drop=True) + + +def _write_shard(path: Path, tables: dict[str, pd.DataFrame], weights: np.ndarray) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + tmp = path.with_suffix(".tmp") + with open(tmp, "wb") as handle: + pickle.dump({"tables": tables, "household_weight": weights}, handle, protocol=5) + tmp.replace(path) + + +def _row_index_columns(tables: dict[str, pd.DataFrame], source: str) -> pd.DataFrame: + """Per-household identity, geography and ACS-native evaluation columns.""" + hh = tables["household"] + person = tables["person"] + positions = pd.Series(np.arange(len(hh)), index=hh["household_id"].to_numpy()) + person_position = positions.reindex(person["person_household_id"].to_numpy()).to_numpy() + n = len(hh) + + def per_household(values) -> np.ndarray: + return np.bincount(person_position, weights=np.asarray(values, dtype=np.float64), minlength=n) + + age = pd.to_numeric(person["age"], errors="coerce").fillna(0).to_numpy() + male = person["is_male"].astype(bool).to_numpy() if "is_male" in person else np.zeros(len(person), bool) + rent = pd.to_numeric(person.get("pre_subsidy_rent", 0.0), errors="coerce").fillna(0.0) + taxes = pd.to_numeric(person.get("real_estate_taxes", 0.0), errors="coerce").fillna(0.0) + tenure = hh["tenure_type"].astype(str).to_numpy() + out = pd.DataFrame({ + "household_id": hh["household_id"].to_numpy(), + "state_fips": pd.to_numeric(hh["state_fips"]).to_numpy().astype(np.int64), + "cd_geoid": pd.to_numeric(hh["congressional_district_geoid"]).to_numpy().astype(np.int64), + "county_fips": pd.to_numeric(hh["county_fips"]).to_numpy().astype(np.int64), + "persons": per_household(np.ones(len(person))), + "persons_0_17": per_household(age < 18), + "persons_18_64": per_household((age >= 18) & (age < 65)), + "persons_65p": per_household(age >= 65), + "persons_male": per_household(male), + "rent_annual": per_household(rent), + "real_estate_taxes": per_household(taxes), + "owner": np.isin(tenure, ["OWNED_WITH_MORTGAGE", "OWNED_OUTRIGHT"]).astype(np.float64), + "renter": (tenure == "RENTED").astype(np.float64), + }) + if source == "cps": + peridnum = person["PERIDNUM"].astype(str).str[:20].to_numpy() + first = pd.Series(peridnum).groupby(person_position).first() + out["unit_key"] = "cps:" + first.reindex(np.arange(n)).to_numpy().astype(str) + year = pd.Series(pd.to_numeric(person["source_year"]).to_numpy()).groupby(person_position).first() + out["income_year"] = year.reindex(np.arange(n)).to_numpy().astype(np.int64) + out["source_key"] = out["income_year"].astype(str) + "|" + out["unit_key"] + out["channel"] = hh["household_support_channel"].astype(str).to_numpy() + out["clone_index"] = pd.to_numeric(hh["household_support_clone_index"]).to_numpy() + out["group_quarters"] = False + else: + out["unit_key"] = "acs:" + hh["SERIALNO"].astype(str).to_numpy() + out["income_year"] = -1 + out["source_key"] = out["unit_key"] + out["channel"] = "acs" + out["clone_index"] = 0 + out["group_quarters"] = pd.to_numeric(hh["TYPEHUGQ"], errors="coerce").fillna(1).to_numpy() != 1 + return out + + +def do_shard(args) -> None: + started = time.time() + out_dir = args.out / "shards" / args.source + out_dir.mkdir(parents=True, exist_ok=True) + index_parts = [] + if args.source == "cps": + from microcosm.build.us_runtime.h5_io import read_frame_table + + with pd.HDFStore(args.h5, mode="r") as store: + tables = {entity: read_frame_table(store, entity) for entity in ENTITIES} + with pd.HDFStore(args.design_h5, mode="r") as store: + design = store.select("household", columns=["household_id", "household_weight"]) + if not np.array_equal(design["household_id"].to_numpy(), tables["household"]["household_id"].to_numpy()): + raise SystemExit("design-weight base and CPS export disagree on household ids/order") + tables["household"] = tables["household"].drop(columns=["household_weight"]) + weights_all = design["household_weight"].to_numpy(np.float64) + households = tables["household"] + person_household = tables["person"]["person_household_id"].to_numpy() + position = pd.Series(np.arange(len(households)), index=households["household_id"].to_numpy()) + person_position = position.reindex(person_household).to_numpy() + n = len(households) + for shard, low in enumerate(range(0, n, args.households_per_shard)): + high = min(low + args.households_per_shard, n) + person_mask = (person_position >= low) & (person_position < high) + part = {"household": households.iloc[low:high].reset_index(drop=True), + "person": tables["person"].loc[person_mask].reset_index(drop=True)} + for entity, (id_col, person_col) in GROUP_ID.items(): + ids = np.unique(part["person"][person_col].to_numpy()) + table = tables[entity] + part[entity] = table.loc[table[id_col].isin(ids)].reset_index(drop=True) + weights = weights_all[low:high] + _write_shard(out_dir / f"shard_{shard:03d}.pkl", part, weights) + index = _row_index_columns(part, "cps") + index["design_weight"] = weights + index["shard"] = shard + index["position"] = np.arange(high - low) + index_parts.append(index) + log(f"cps shard {shard}: {high - low} households") + else: + store = _FixedStore(args.h5) + hh_ids = store.read("household", 0, store.rows("household"), ["household_id", "household_spine"]) + acs_positions = np.flatnonzero(hh_ids["household_spine"].astype(str).to_numpy() == "acs_2024_1yr") + if not len(acs_positions) or not np.array_equal( + acs_positions, np.arange(acs_positions[0], acs_positions[-1] + 1) + ): + raise SystemExit("ACS spine rows are not one contiguous household range") + household_position = pd.Series(np.arange(len(hh_ids)), index=hh_ids["household_id"].to_numpy()) + person_ids = store.read("person", 0, store.rows("person"), + ["person_household_id", *[c for _, c in GROUP_ID.values()]]) + person_position = household_position.reindex(person_ids["person_household_id"].to_numpy()).to_numpy() + group_positions = {} + for entity, (id_col, _) in GROUP_ID.items(): + ids = store.read(entity, 0, store.rows(entity), [id_col])[id_col].to_numpy() + group_positions[entity] = pd.Series(np.arange(len(ids)), index=ids) + first, last = int(acs_positions[0]), int(acs_positions[-1]) + 1 + for shard, low in enumerate(range(first, last, args.households_per_shard)): + high = min(low + args.households_per_shard, last) + wait_for_memory(args.min_available_gb) + persons = np.flatnonzero((person_position >= low) & (person_position < high)) + part = {"household": store.read("household", low, high), + "person": store.read_positions("person", persons)} + for entity, (_id_col, person_col) in GROUP_ID.items(): + ids = np.unique(person_ids[person_col].to_numpy()[persons]) + rows = np.sort(group_positions[entity].reindex(ids).to_numpy().astype(np.int64)) + part[entity] = store.read_positions(entity, rows) + weights = part["household"].pop("household_weight").to_numpy(np.float64) + _write_shard(out_dir / f"shard_{shard:03d}.pkl", part, weights) + index = _row_index_columns(part, "acs") + index["design_weight"] = weights + index["shard"] = shard + index["position"] = np.arange(high - low) + index_parts.append(index) + log(f"acs shard {shard}: {high - low} households, peak {peak_rss_gb():.1f} GB") + del part + gc.collect() + index = pd.concat(index_parts, ignore_index=True) + index["source"] = args.source + index.to_parquet(args.out / f"rows_{args.source}.parquet", index=False) + write_json(out_dir / "shard.json", { + "source": args.source, "h5": str(args.h5), "h5_sha256": sha256_file(args.h5), + "design_h5": str(args.design_h5) if args.design_h5 else None, + "shards": len(index_parts), "households": len(index), + "wall_s": round(time.time() - started, 1), "peak_rss_gb": round(peak_rss_gb(), 2), + }) + + +# ------------------------------------------------------------------ materialize + + +def _load_shard_frame(path: Path): + from microcosm.build.serialization_dtypes import canonicalize_frame_string_dtypes + from microcosm.frame import Frame, WeightKind, Weights + from microcosm.frame.units import US_SCHEMA + + with open(path, "rb") as handle: + payload = pickle.load(handle) + frame = Frame( + payload["tables"], + US_SCHEMA, + {"household": Weights(np.asarray(payload["household_weight"]), WeightKind.CALIBRATED)}, + ) + return canonicalize_frame_string_dtypes(frame, boundary="support-mix shard load", in_place=True) + + +#: Engine inputs the Sep-23 ACS staging carries as all-null on ACS rows and +#: its reviewed-null register predates. The production ACS local release at +#: 767312d6 had no such column, so the engine used the variable's default; +#: filling with that default reproduces it. Counted in every receipt. +DEFAULT_FILLED_INPUTS = (("person", "is_spm_independent_minor_role"),) + + +def _fill_with_engine_default(frame) -> dict[str, int]: + from policyengine_us import CountryTaxBenefitSystem + + system = CountryTaxBenefitSystem() + filled = {} + for entity, column in DEFAULT_FILLED_INPUTS: + table = frame.table(entity) + if column not in table.columns: + continue + missing = table[column].isna() + if missing.any(): + default = system.variables[column].default_value + table[column] = table[column].where(~missing, default).astype(type(default)) + filled[f"{entity}.{column}"] = int(missing.sum()) + return filled + + +def _materialize_frame(frame, concept_specs, *, summary_path: Path | None, batch: int): + tool = release_tool() + acs = acs_local_tool() + projected, dropped = acs.project_input_only(frame, period=PERIOD) + default_filled = _fill_with_engine_default(projected) + if summary_path is not None: + acs.fill_reviewed_nulls(projected, summary_path, period=PERIOD) + target_frame, registry, compilation = tool._materialize_target_frame( + projected, + tuple(concept_specs), + maximum_microsim_batch_size=batch, + refuse_population_aggregates=True, + ) + household = target_frame.table("household") + compilation = {**compilation, "default_filled_inputs": default_filled} + return household, [spec.measure for spec in registry.specs], compilation, dropped + + +def acs_rank(work: Path) -> np.ndarray: + """Each ACS row's position in the fixed salted selection order (cached).""" + path = work / "acs_rank.npy" + if path.exists(): + return np.load(path) + rows = pd.read_parquet(work / "rows_acs.parquet", columns=["unit_key"]) + order = acs_selection_order(rows["unit_key"].tolist(), salt=ACS_SELECTION_SALT) + rank = np.empty(len(order), dtype=np.int64) + rank[order] = np.arange(len(order)) + np.save(path, rank) + return rank + + +def do_materialize(args) -> None: + with open(args.work / "concept_specs.pkl", "rb") as handle: + concept_specs = pickle.load(handle) + measures = [spec.measure for spec in concept_specs] + ["state_income_tax"] + shard_dir = args.work / "shards" / args.source + out_dir = args.work / "concepts" / args.source + out_dir.mkdir(parents=True, exist_ok=True) + rows = pd.read_parquet(args.work / f"rows_{args.source}.parquet", columns=["shard", "household_id"]) + rows["row"] = np.arange(len(rows)) + low, high = 0, len(rows) + if args.rank_range: + low, high = (int(x) for x in args.rank_range.split(",")) + rows["rank"] = acs_rank(args.work) + shards = sorted(shard_dir.glob("shard_*.pkl")) + if args.only: + wanted = {int(x) for x in args.only.split(",") if x.strip()} + shards = [s for s in shards if int(s.stem.split("_")[1]) in wanted] + suffix = f".r{low}-{high}" if args.rank_range else "" + for shard_path in shards: + out = out_dir / f"{shard_path.stem}{suffix}.npz" + if out.exists(): + continue + shard_rows = rows[rows["shard"] == int(shard_path.stem.split("_")[1])] + if args.rank_range: + shard_rows = shard_rows[(shard_rows["rank"] >= low) & (shard_rows["rank"] < high)] + if shard_rows.empty: + continue + wait_for_memory(args.min_available_gb) + started = time.time() + frame = _load_shard_frame(shard_path) + if len(shard_rows) < frame.n("household"): + keep = np.isin(frame.table("person")["person_household_id"].to_numpy(), + shard_rows["household_id"].to_numpy()) + frame = frame.select(keep) + household, compiled, compilation, _ = _materialize_frame( + frame, concept_specs, summary_path=args.summary, batch=args.batch + ) + position = pd.Series(shard_rows["row"].to_numpy(), index=shard_rows["household_id"].to_numpy()) + row_positions = position.reindex(household["household_id"].to_numpy()).to_numpy() + if np.isnan(row_positions.astype(float)).any(): + raise RuntimeError(f"{shard_path.name}: materialized households missing from the row index") + missing = [m for m in measures if m not in household.columns] + matrix = np.zeros((len(household), len(measures)), dtype=np.float32) + for j, measure in enumerate(measures): + if measure in household.columns: + matrix[:, j] = household[measure].to_numpy(dtype=np.float32) + csr = sp.csr_matrix(matrix) + np.save(out.with_suffix(".rows.npy"), row_positions.astype(np.int64)) + sp.save_npz(out.with_suffix(".tmp.npz"), csr) + out.with_suffix(".tmp.npz").replace(out) + write_json(out.with_suffix(".json"), { + "shard": shard_path.name, "rank_range": [low, high] if args.rank_range else None, + "households": len(household), "nnz": int(csr.nnz), + "missing_measures": missing, "compiled_concepts": len(compiled), + "batching": compilation.get("target_materialization_batching"), + "default_filled_inputs": compilation.get("default_filled_inputs"), + "wall_s": round(time.time() - started, 1), "peak_rss_gb": round(peak_rss_gb(), 2), + "cpu_s": round(resource.getrusage(resource.RUSAGE_SELF).ru_utime, 1), + }) + log(f"{args.source} {out.name}: {len(household)} hh, nnz {csr.nnz:,}, " + f"missing {len(missing)}, {time.time() - started:.0f}s, peak {peak_rss_gb():.1f} GB") + del frame, household, matrix, csr + gc.collect() + write_json(out_dir / "measures.json", measures) + + +# ------------------------------------------------------------------ diffcheck + + +def do_diffcheck(args) -> None: + """Differential: production per-spec columns vs concept x geography mask.""" + started = time.time() + from microcosm.build.ledger_artifact import load_ledger_consumer_artifact + from microcosm.build.us_runtime import ( + apply_us_medicaid_enrollment_substitutions, + compile_us_fiscal_target_registry, + default_congressional_district_vintage_crosswalk_path, + load_congressional_district_vintage_crosswalk, + ) + + targets = pd.read_parquet(args.work / "targets.parquet") + with open(args.work / "concept_specs.pkl", "rb") as handle: + concept_specs = pickle.load(handle) + artifact = load_ledger_consumer_artifact(args.feed) + registry = compile_us_fiscal_target_registry( + artifact.facts, target_period=PERIOD, + congressional_district_vintage_crosswalk=load_congressional_district_vintage_crosswalk( + default_congressional_district_vintage_crosswalk_path()), + age_targets=True) + registry, _ = apply_us_medicaid_enrollment_substitutions(registry) + specs = registry.specs + usable = targets[targets["excluded"].isna() & (targets["level"] != "national")] + rng = np.random.default_rng(20260928) + sample = [] + for _key, group in usable.groupby(["family", "level"]): + take = min(len(group), args.per_group) + sample.extend(rng.choice(group["target_index"].to_numpy(), take, replace=False).tolist()) + sample_specs = [specs[i] for i in sorted(sample)] + results = {} + previous = json.loads((args.work / "diffcheck.json").read_text())["results"] \ + if (args.work / "diffcheck.json").exists() else {} + for source in args.sources.split(","): + frame = _load_shard_frame(args.work / "shards" / source / "shard_000.pkl") + hh_ids = frame.table("household")["household_id"].to_numpy()[: args.households] + person_mask = np.isin(frame.table("person")["person_household_id"].to_numpy(), hh_ids) + frame = frame.select(person_mask) + summary = args.summary if source == "acs" else None + direct, _, _, _ = _materialize_frame(frame, sample_specs, summary_path=summary, batch=args.batch) + concept, _, _, _ = _materialize_frame(frame, concept_specs, summary_path=summary, batch=args.batch) + state = pd.to_numeric(direct["state_fips"]).to_numpy() + cd = pd.to_numeric(direct["congressional_district_geoid"]).to_numpy() + worst, checked, skipped = 0.0, 0, 0 + per_family = {} + by_name = targets.set_index("name") + for spec in sample_specs: + row = by_name.loc[spec.name] + if spec.measure not in direct.columns or row["measure"] not in concept.columns: + skipped += 1 + continue + mask = np.ones(len(direct), bool) + if row["state_fips"] >= 0: + mask &= state == row["state_fips"] + if row["cd_geoid"] >= 0: + mask &= cd == row["cd_geoid"] + expected = direct[spec.measure].to_numpy(np.float64) + got = concept[row["measure"]].to_numpy(np.float64) * mask + scale = max(1.0, float(np.abs(expected).max())) + diff = float(np.abs(expected - got).max()) / scale + worst = max(worst, diff) + key = f"{spec.family}/{row['level']}" + per_family[key] = max(per_family.get(key, 0.0), diff) + checked += 1 + results[source] = {"households": len(direct), "specs_checked": checked, + "specs_skipped": skipped, "max_scaled_abs_diff": worst, + "per_family_level": per_family} + log(f"diffcheck {source}: {json.dumps(results[source])}") + write_json(args.work / "diffcheck.json", { + "results": {**previous, **results}, "sample_size": len(sample_specs), + "wall_s": round(time.time() - started, 1), "peak_rss_gb": round(peak_rss_gb(), 2)}) + + +# ------------------------------------------------------------------ truth + +ACS_TRUTH_CELLS = { # ACS 2024 1-year table-based summary file cells (E = estimate) + "households": ["B25003_E001"], + "owner": ["B25003_E002"], + "renter": ["B25003_E003"], + "rent_contract_monthly_aggregate": ["B25060_E001"], + "rent_gross_monthly_aggregate": ["B25065_E001"], + "real_estate_taxes_aggregate": ["B25090_E001"], + "persons_in_households": ["B25008_E001"], + "persons_total": ["B01003_E001"], + "persons_male": ["B01001_E002"], + "persons_0_17": [f"B01001_E{i:03d}" for i in (3, 4, 5, 6, 27, 28, 29, 30)], + "persons_65p": [f"B01001_E{i:03d}" for i in (*range(20, 26), *range(44, 50))], +} +SUMMARY_LEVELS = {"0100000US": "national", "0400000US": "state", "0500000US": "county", "5001900US": "cd"} + + +def do_truth(args) -> None: + """Long truth table from the ACS 2024 1-year table-based summary file.""" + tables = sorted({cell.split("_")[0] for cells in ACS_TRUTH_CELLS.values() for cell in cells}) + frames, digests = {}, {} + for table in tables: + path = args.sf_dir / f"acsdt1y2024-{table.lower()}.dat" + digests[path.name] = sha256_file(path) + frames[table] = pd.read_csv(path, sep="|", dtype=str).set_index("GEO_ID") + records = [] + for measure, cells in ACS_TRUTH_CELLS.items(): + table = cells[0].split("_")[0] + frame = frames[table] + values = frame[cells].apply(pd.to_numeric, errors="coerce") + total = values.sum(axis=1, min_count=len(cells)) + for geo_id, value in total.items(): + prefix, code = geo_id[:9], geo_id[9:] + level = SUMMARY_LEVELS.get(prefix) + if level is None or not np.isfinite(value) or value < 0: + continue + if level == "national": + geo = 0 + elif level == "cd": + district = code[2:] + geo = int(code[:2]) * 100 + (0 if district == "98" else int(district)) + else: + geo = int(code) + if level in ("state", "county", "cd") and int(code[:2]) == 72: + continue # Puerto Rico is outside the pool + records.append((level, geo, measure, float(value))) + truth = pd.DataFrame(records, columns=["level", "geo", "measure", "value"]) + wide = truth.pivot_table(index=["level", "geo"], columns="measure", values="value").reset_index() + wide["persons_18_64"] = wide["persons_total"] - wide["persons_0_17"] - wide["persons_65p"] + wide["rent_contract_annual_aggregate"] = 12 * wide.pop("rent_contract_monthly_aggregate") + wide["rent_gross_annual_aggregate"] = 12 * wide.pop("rent_gross_monthly_aggregate") + truth = wide.melt(id_vars=["level", "geo"], var_name="measure", value_name="value").dropna() + args.out.parent.mkdir(parents=True, exist_ok=True) + truth.to_parquet(args.out, index=False) + write_json(args.out.with_suffix(".json"), { + "source": "ACS 2024 1-year table-based summary file (Census), " + "https://www2.census.gov/programs-surveys/acs/summary_file/2024/table-based-SF/", + "files_sha256": digests, "cells": ACS_TRUTH_CELLS, + "rows_by_level": truth.groupby("level").size().to_dict(), + }) + log(f"truth: {truth.groupby('level').size().to_dict()}") + + +def truth_table(path: Path) -> pd.DataFrame: + return pd.read_parquet(path) + + +# ------------------------------------------------------------------ arms + +BUDGETS = (300_000, 600_000, 1_200_000) +YEAR_SETS = ((2024,), (2023, 2024), (2022, 2023, 2024)) + + +def arm_grid(include_largest: bool = True) -> list[SupportMixArm]: + arms: list[SupportMixArm] = [] + for years in YEAR_SETS: + arms.append(SupportMixArm(budget=None, cps_income_years=years)) + for budget in BUDGETS if include_largest else BUDGETS[:2]: + for years in YEAR_SETS: + arms.append(SupportMixArm(budget=budget, cps_income_years=years, acs_fill_share=1.0)) + arms.append(SupportMixArm(budget=budget, cps_income_years=years, acs_fill_share=0.0)) + arms.append(SupportMixArm(budget=budget, cps_income_years=(), acs_fill_share=1.0)) + for years in ((2024,), (2022, 2023, 2024)): + arms.append(SupportMixArm(budget=600_000, cps_income_years=years, acs_fill_share=0.5)) + for seed in (1, 2): + arms.append(SupportMixArm(budget=300_000, cps_income_years=years, acs_fill_share=1.0, seed=seed)) + return arms + + +def parse_arm(label: str) -> SupportMixArm: + budget, years, acs, seed = label.split(".") + return SupportMixArm( + budget=None if budget == "natural" else int(budget[1:-1]) * 1000, + cps_income_years=() if years == "cps0" else tuple(int(y) for y in years[3:].split("-")), + acs_fill_share=int(acs[3:]) / 100, + seed=int(seed[1:]), + ) + + +class _ConceptStore: + """Row-addressable concept values for one source (CSR, float32). + + Each materialized part carries its rows' global positions; rows never + materialized are all-zero and flagged, and an arm refuses to use them. + """ + + def __init__(self, work: Path, source: str): + directory = work / "concepts" / source + n_rows = len(pd.read_parquet(work / f"rows_{source}.parquet", columns=["shard"])) + shard_of = pd.read_parquet(work / f"rows_{source}.parquet", columns=["shard"])["shard"].to_numpy() + self.measures = json.loads((directory / "measures.json").read_text()) + rows_parts, parts = [], [] + for path in sorted(directory.glob("shard_*.npz")): + if path.name.endswith(".tmp.npz"): + continue + rows_path = path.with_suffix(".rows.npy") + rows = (np.load(rows_path) if rows_path.exists() + else np.flatnonzero(shard_of == int(path.stem.split("_")[1].split(".")[0]))) + part = sp.load_npz(path).tocoo() + rows_parts.append(rows[part.row]) + parts.append(part) + self.materialized = np.zeros(n_rows, dtype=bool) + for path in sorted(directory.glob("shard_*.rows.npy")): + self.materialized[np.load(path)] = True + for path in sorted(directory.glob("shard_*.npz")): + if not path.with_suffix(".rows.npy").exists() and not path.name.endswith(".tmp.npz"): + self.materialized[shard_of == int(path.stem.split("_")[1].split(".")[0])] = True + self.matrix = sp.csr_matrix( + (np.concatenate([p.data for p in parts]).astype(np.float32), + (np.concatenate(rows_parts), np.concatenate([p.col for p in parts]))), + shape=(n_rows, len(self.measures)), + ) + + +class _SparseOperator: + """``A @ w`` with a precomputed transpose for the backward pass. + + Duck-types the torch tensor ``_optimize`` expects: it reads ``.layout`` + (not sparse CSR, so ``_apply_constraint`` calls ``matrix @ weights``) and + ``@``. Forward and backward are one CSR SpMV each. + """ + + def __init__(self, matrix: sp.csr_matrix): + import torch + + self.torch = torch + self.layout = torch.strided + self.shape = matrix.shape + self.A = self._tensor(matrix) + self.AT = self._tensor(matrix.T.tocsr()) + + def _tensor(self, m): + torch = self.torch + m = m.astype(np.float32) + return torch.sparse_csr_tensor( + torch.from_numpy(m.indptr.astype(np.int64)), + torch.from_numpy(m.indices.astype(np.int64)), + torch.from_numpy(m.data), + size=m.shape, + ) + + def __matmul__(self, weights): + return _SpMV.apply(weights, self) + + +def _spmv_class(): + import torch + + class SpMV(torch.autograd.Function): + @staticmethod + def forward(ctx, weights, operator): + ctx.operator = operator + return (operator.A @ weights.unsqueeze(1)).squeeze(1) + + @staticmethod + def backward(ctx, grad): + return (ctx.operator.AT @ grad.unsqueeze(1)).squeeze(1), None + + return SpMV + + +_SpMV = None + + +def _assemble(values: sp.csr_matrix, geo: dict[str, np.ndarray], lookup: dict[str, np.ndarray], + n_targets: int) -> sp.csr_matrix: + """Targets x rows: each nonzero concept value lands in its geography's target.""" + coo = values.tocoo() + rows_parts, cols_parts, data_parts = [], [], [] + for level, table in lookup.items(): + if level == "national": + target = table[coo.col] + else: + codes = geo[level][coo.row] + target = table[coo.col, codes] + keep = target >= 0 + rows_parts.append(target[keep]) + cols_parts.append(coo.row[keep]) + data_parts.append(coo.data[keep]) + return sp.csr_matrix( + (np.concatenate(data_parts), (np.concatenate(rows_parts), np.concatenate(cols_parts))), + shape=(n_targets, values.shape[0]), + ) + + +def do_arm(args) -> None: + global _SpMV + started = time.time() + arm = parse_arm(args.arm) + out = args.work / "arms" / args.product / f"{arm.label}.json" + if out.exists() and not args.force: + log(f"{out} exists") + return + wait_for_memory(args.min_available_gb) + import torch + + torch.set_num_threads(args.threads) + _SpMV = _spmv_class() + from microcosm.calibrate.solve import _optimize, default_target_loss_scales + + targets = pd.read_parquet(args.work / "targets.parquet") + rows_cps = pd.read_parquet(args.work / "rows_cps.parquet") + rows_acs = pd.read_parquet(args.work / "rows_acs.parquet") + # "row" is the position in the source's concept store; it survives filters. + rows_cps["row"] = np.arange(len(rows_cps)) + rows_acs["row"] = np.arange(len(rows_acs)) + if args.exclude_gq: + rows_acs = rows_acs[~rows_acs["group_quarters"]].reset_index(drop=True) + # ---------------- rows + cps_hh = rows_cps[rows_cps["channel"] == "asec"].groupby("income_year").size().to_dict() + counts = plan_arm_counts(arm, cps_households_by_year=cps_hh, acs_households=len(rows_acs)) + cps_rows = rows_cps[rows_cps["income_year"].isin(arm.cps_income_years)].reset_index(drop=True) + source_keys = cps_rows["source_key"].drop_duplicates().to_numpy() + copies_by_source = dict(zip(source_keys, clone_copies( + list(source_keys), counts.clones, salt=f"{CLONE_SALT}.s{arm.seed}"), strict=True)) + cps_copies = cps_rows["source_key"].map(copies_by_source).fillna(0).to_numpy(np.int64) \ + if len(cps_rows) else np.zeros(0, np.int64) + # One fixed order; replicate r takes the r-th disjoint block of it, so + # replicates are independent draws and seed 0 arms are nested by budget. + rank = acs_rank(args.work)[rows_acs["row"].to_numpy()] + order = np.argsort(rank, kind="stable") + block = order[arm.seed * counts.acs:(arm.seed + 1) * counts.acs] + if len(block) < counts.acs: + raise SystemExit(f"{arm.label}: replicate block exceeds the ACS rows available") + acs_rows = rows_acs.iloc[np.sort(block)].reset_index(drop=True) + total_mass = float(rows_cps.loc[rows_cps["income_year"] == 2024, "design_weight"].sum() * 3) + cps_w, acs_w = arm_initial_weights( + cps_design_weights=cps_rows["design_weight"].to_numpy(), + cps_income_year=cps_rows["income_year"].to_numpy(), + cps_copies=cps_copies, + acs_design_weights=acs_rows["design_weight"].to_numpy(), + counts=counts, + total_mass=total_mass, + ) + # Expand CPS copies; copy 0 keeps its own geography, copy k>0 draws a new + # (district, county) within its state in proportion to ACS households. + repeat = 1 + cps_copies + cps_expanded = cps_rows.loc[cps_rows.index.repeat(repeat)].reset_index(drop=True) + copy_number = np.concatenate([np.arange(r) for r in repeat]) if len(repeat) else np.zeros(0, int) + cps_expanded["copy"] = copy_number + w_cps = np.repeat(cps_w, repeat) + if counts.clones: + geo_pool = rows_acs[["state_fips", "cd_geoid", "county_fips", "design_weight"]] + for state, group in cps_expanded[cps_expanded["copy"] > 0].groupby("state_fips"): + pool = geo_pool[geo_pool["state_fips"] == state] + cum = np.cumsum(pool["design_weight"].to_numpy()) + draws = np.array([ + hash_uniform(f"{k}|{r}|{c}", salt=f"{CLONE_GEO_SALT}.s{arm.seed}") + for k, r, c in zip(group["source_key"], group["row"], group["copy"], strict=True) + ]) + pick = np.searchsorted(cum, draws * cum[-1], side="right") + cps_expanded.loc[group.index, "cd_geoid"] = pool["cd_geoid"].to_numpy()[pick] + cps_expanded.loc[group.index, "county_fips"] = pool["county_fips"].to_numpy()[pick] + selected = pd.concat([cps_expanded.assign(source="cps"), acs_rows.assign(source="acs", copy=0)], + ignore_index=True) + w0 = np.concatenate([w_cps, acs_w]) + # The release's base population mass repair: rescale so the weighted + # person count equals the Census benchmark before a conserved solve. + benchmark = float(release_tool().US_BASE_PERSON_POPULATION_BENCHMARK) + mass_factor = benchmark / float(selected["persons"].to_numpy() @ w0) + w0 = w0 * mass_factor + # ---------------- concept values for the selected rows + stores = {} + blocks = [] + for source, frame in (("cps", cps_expanded), ("acs", acs_rows)): + if not len(frame): + continue + if source not in stores: + stores[source] = _ConceptStore(args.work, source) + needed = frame["row"].to_numpy() + unmaterialized = int((~stores[source].materialized[needed]).sum()) + if unmaterialized: + raise SystemExit(f"{arm.label}: {unmaterialized} {source} rows are not materialized yet") + blocks.append(stores[source].matrix[needed]) + measures = next(iter(stores.values())).measures + values = sp.vstack(blocks, format="csr") + del stores + gc.collect() + # ---------------- targets and lookup tables + measure_col = {m: j for j, m in enumerate(measures)} + usable = targets[targets["excluded"].isna() & targets["measure"].isin(measure_col)].copy() + usable["col"] = usable["measure"].map(measure_col) + if args.product == "national": + usable = usable[usable["in_national_state"]] + train = usable[usable["role"] == "train"].reset_index(drop=True) + holdout = usable[usable["role"] == "holdout"].reset_index(drop=True) + states = np.unique(selected["state_fips"]) + cds = np.unique(np.concatenate([selected["cd_geoid"].to_numpy(), usable.loc[usable["cd_geoid"] >= 0, "cd_geoid"].to_numpy()])) + state_code = {s: i for i, s in enumerate(np.unique(np.concatenate([states, usable["state_fips"][usable["state_fips"] >= 0]])))} + cd_code = {c: i for i, c in enumerate(cds)} + geo = {"state": selected["state_fips"].map(state_code).to_numpy(), + "cd": selected["cd_geoid"].map(cd_code).to_numpy()} + + def lookup_for(frame: pd.DataFrame) -> dict[str, np.ndarray]: + tables = {"national": np.full(len(measures), -1, np.int64), + "state": np.full((len(measures), len(state_code)), -1, np.int64), + "cd": np.full((len(measures), len(cd_code)), -1, np.int64)} + for i, row in enumerate(frame.itertuples(index=False)): + if row.level == "national": + tables["national"][row.col] = i + elif row.level == "state": + tables["state"][row.col, state_code[row.state_fips]] = i + elif row.level == "cd": + tables["cd"][row.col, cd_code[row.cd_geoid]] = i + return tables + + a_train = _assemble(values, geo, lookup_for(train), len(train)) + a_hold = _assemble(values, geo, lookup_for(holdout), len(holdout)) + b_train = train["value"].to_numpy(np.float64) + loss_w = train["loss_weight"].to_numpy(np.float64) + # Local product: district household populations are trained, as in the + # ACS local release (never scored). + truth = truth_table(args.truth) + extra_train = 0 + if args.product == "local": + cd_truth = truth[(truth["level"] == "cd") & (truth["measure"] == "persons_total")] + cd_truth = cd_truth[cd_truth["geo"].isin(cd_code)] + persons = selected["persons"].to_numpy(np.float64) + codes = selected["cd_geoid"].map({g: i for i, g in enumerate(cd_truth["geo"])}).fillna(-1).to_numpy().astype(np.int64) + keep = codes >= 0 + pop = sp.csr_matrix((persons[keep], (codes[keep], np.flatnonzero(keep))), shape=(len(cd_truth), len(selected))) + a_train = sp.vstack([a_train, pop], format="csr") + b_train = np.concatenate([b_train, cd_truth["value"].to_numpy(np.float64)]) + loss_w = np.concatenate([loss_w, np.ones(len(cd_truth))]) + extra_train = len(cd_truth) + # Drop training rows no selected household can move (zero rows). + nonzero = np.diff(a_train.indptr) > 0 + a_train, b_train, loss_w = a_train[nonzero], b_train[nonzero], loss_w[nonzero] + scales = default_target_loss_scales(b_train) + operator = _SparseOperator(a_train) + solve_started = time.time() + weights, trajectory = _optimize( + operator, + torch.tensor(b_train, dtype=torch.float32), + torch.tensor(loss_w, dtype=torch.float32), + torch.tensor(scales, dtype=torch.float32), + 1.0, + w0, + epochs=args.epochs, + learning_rate=0.02, + conserve_mass=True, + max_weight_ratio=5.0, + l0_lambda=0.0, + l2_lambda=0.0, + target_records=None, + init_mean=0.999, + temperature=0.25, + ) + solve_s = time.time() - solve_started + del operator + gc.collect() + # ---------------- scoring + def errors(matrix, target_values, w): + est = matrix @ w + rel = np.abs(est - target_values) / np.maximum(np.abs(target_values), 1.0) + return est, rel + + result_targets = [] + est0, rel0 = errors(a_hold, holdout["value"].to_numpy(), w0) + est1, rel1 = errors(a_hold, holdout["value"].to_numpy(), weights) + supported = np.diff(a_hold.indptr) > 0 + for i, row in enumerate(holdout.itertuples(index=False)): + result_targets.append({ + "name": row.name, "family": row.family, "level": row.level, + "dimension_group": row.dimension_group, "dimension": row.dimension, + "loss_weight": row.loss_weight, "target": row.value, + "estimate_initial": float(est0[i]), "estimate": float(est1[i]), + "rel_error_initial": float(rel0[i]), "rel_error": float(rel1[i]), + "supported": bool(supported[i]), + }) + # ACS-native evaluation and report-only measures from row columns. + acs_eval = [] + household_rows = ~selected["group_quarters"].astype(bool).to_numpy() + measures_row = { + "households": household_rows.astype(float), + "owner": selected["owner"].to_numpy() * household_rows, + "renter": selected["renter"].to_numpy() * household_rows, + "rent_contract_annual_aggregate": selected["rent_annual"].to_numpy() * household_rows, + "real_estate_taxes_aggregate": selected["real_estate_taxes"].to_numpy() * household_rows * selected["owner"].to_numpy(), + "persons_in_households": selected["persons"].to_numpy() * household_rows, + "persons_total": selected["persons"].to_numpy(), + "persons_0_17": selected["persons_0_17"].to_numpy(), + "persons_18_64": selected["persons_18_64"].to_numpy(), + "persons_65p": selected["persons_65p"].to_numpy(), + "persons_male": selected["persons_male"].to_numpy(), + } + geo_cols = {"national": np.zeros(len(selected), np.int64), + "state": selected["state_fips"].to_numpy(np.int64), + "cd": selected["cd_geoid"].to_numpy(np.int64), + "county": selected["county_fips"].to_numpy(np.int64)} + for level, codes in geo_cols.items(): + level_truth = truth[truth["level"] == level] + uniq, inverse = np.unique(codes, return_inverse=True) + for measure, vec in measures_row.items(): + t = level_truth[level_truth["measure"] == measure] + if t.empty: + continue + e0 = np.bincount(inverse, weights=vec * w0, minlength=len(uniq)) + e1 = np.bincount(inverse, weights=vec * weights, minlength=len(uniq)) + est0_map = dict(zip(uniq, e0, strict=True)) + est1_map = dict(zip(uniq, e1, strict=True)) + for geo_code, value in zip(t["geo"], t["value"], strict=True): + if (level == "cd" and args.product == "local" and measure == "persons_total"): + continue # trained + acs_eval.append((level, measure, int(geo_code), float(value), + float(est0_map.get(geo_code, 0.0)), float(est1_map.get(geo_code, 0.0)))) + acs_eval = pd.DataFrame(acs_eval, columns=["level", "measure", "geo", "truth", "estimate_initial", "estimate"]) + report = {} + for name in REPORT_SPECS: + measure = f"bakeoff_{name.replace('.', '_')}" + if measure in measure_col: + col = values[:, measure_col[measure]].toarray().ravel() + report[name] = {"initial": float(col @ w0), "calibrated": float(col @ weights)} + persons = selected["persons"].to_numpy() + children = selected["persons_0_17"].to_numpy() + if "report.spm_poor_persons" in report: + report["spm_rate"] = {k: report["report.spm_poor_persons"][k] / float(persons @ w) for k, w in (("initial", w0), ("calibrated", weights))} + report["spm_child_rate"] = {k: report["report.spm_poor_children"][k] / float(children @ w) for k, w in (("initial", w0), ("calibrated", weights))} + # ---------------- ESS and receipt + units = selected["unit_key"].to_numpy() + source_units = (selected["source_key"].astype(str) + "#" + selected["copy"].astype(str)).to_numpy() + cd_ess = [] + for _cd, idx in pd.Series(np.arange(len(selected))).groupby(selected["cd_geoid"].to_numpy()): + cd_ess.append(distinct_unit_ess(weights[idx.to_numpy()], units[idx.to_numpy()])) + receipt = { + "arm": arm.label, "product": args.product, + "counts": dataclasses.asdict(counts), + "rows": {"cps_physical": int(len(cps_expanded)), "acs": int(len(acs_rows)), "total": int(len(selected))}, + "distinct_households": int(pd.Series(units).nunique()), + "ess": { + "rows_initial": kish_ess(w0), "rows": kish_ess(weights), + "distinct_households_initial": distinct_unit_ess(w0, units), + "distinct_households": distinct_unit_ess(weights, units), + "source_records": distinct_unit_ess(weights, source_units), + "cd_distinct_median": float(np.median(cd_ess)), "cd_distinct_p10": float(np.percentile(cd_ess, 10)), + }, + "train": {"targets": int(a_train.shape[0]), "cd_population_targets": extra_train, + "nnz": int(a_train.nnz), + "loss_initial": float(trajectory[0]), "loss_final": float(trajectory[-1]), + "loss_at": {str(e): float(trajectory[min(e, len(trajectory)) - 1]) for e in (100, 250, 500, 1000, len(trajectory))}}, + "holdout_targets": result_targets, + "acs_native": acs_eval.to_dict(orient="records"), + "report_only": report, + "weights": {"mass": float(weights.sum()), "population_mass_factor": mass_factor, "max_ratio": float((weights / w0).max()), + "min_ratio": float((weights / w0).min())}, + "runtime": {"wall_s": round(time.time() - started, 1), "solve_s": round(solve_s, 1), + "epochs": args.epochs, "threads": args.threads, + "peak_rss_gb": round(peak_rss_gb(), 2)}, + } + write_json(out, receipt) + np.save(out.with_suffix(".weights.npy"), weights.astype(np.float32)) + log(f"{args.product} {arm.label}: rows {len(selected):,} train {a_train.shape[0]} " + f"loss {trajectory[0]:.4f}->{trajectory[-1]:.4f} solve {solve_s:.0f}s peak {peak_rss_gb():.1f} GB") + + +def do_run_grid(args) -> None: + """Run every missing (arm, product) receipt, one subprocess each.""" + import subprocess + + arms = [a.label for a in arm_grid(not args.no_largest)] + if args.only: + arms = [a for a in arms if any(token in a for token in args.only.split(","))] + for product in args.products.split(","): + for label in arms: + out = args.work / "arms" / product / f"{label}.json" + if out.exists(): + continue + wait_for_memory(args.min_available_gb) + command = [sys.executable, str(Path(__file__).resolve()), "arm", "--work", str(args.work), + "--arm", label, "--product", product, "--truth", str(args.truth), + "--epochs", str(args.epochs), "--threads", str(args.threads), + "--min-available-gb", str(args.min_available_gb)] + log(f"run {product} {label}") + result = subprocess.run(command, check=False) + if result.returncode: + log(f"FAILED {product} {label}: exit {result.returncode}") + + +# ------------------------------------------------------------------ report + + +def do_report(args) -> None: + records, acs_records, summary = [], [], [] + for path in sorted((args.work / "arms").glob("*/*.json")): + receipt = json.loads(path.read_text()) + base = {"arm": receipt["arm"], "product": receipt["product"]} + arm = parse_arm(receipt["arm"]) + base.update({"budget": arm.budget or 0, "cps_years": len(arm.cps_income_years), + "acs_fill_share": arm.acs_fill_share, "seed": arm.seed}) + for t in receipt["holdout_targets"]: + records.append({**base, **t}) + for a in receipt["acs_native"]: + acs_records.append({**base, **a}) + summary.append({**base, **receipt["counts"], **{f"rows_{k}": v for k, v in receipt["rows"].items()}, + "distinct_households": receipt["distinct_households"], + **{f"ess_{k}": v for k, v in receipt["ess"].items()}, + "train_loss_final": receipt["train"]["loss_final"], + "train_targets": receipt["train"]["targets"], + **{f"runtime_{k}": v for k, v in receipt["runtime"].items()}, + **{f"report_{k}": (v["calibrated"] if isinstance(v, dict) else v) + for k, v in receipt["report_only"].items()}}) + holdout = pd.DataFrame(records) + acs_native = pd.DataFrame(acs_records) + arms = pd.DataFrame(summary) + args.out.mkdir(parents=True, exist_ok=True) + arms.to_csv(args.out / "arms.csv", index=False) + if not holdout.empty: + holdout["capped"] = holdout["rel_error"].clip(upper=1.0) + holdout["capped_initial"] = holdout["rel_error_initial"].clip(upper=1.0) + grouped = holdout[holdout["supported"]].groupby( + ["product", "arm", "dimension_group", "dimension", "level"]) + table = grouped.apply(lambda g: pd.Series({ + "targets": len(g), + "capped_mean": g["capped"].mean(), + "weighted_capped_mean": np.average(g["capped"], weights=g["loss_weight"]), + "median_rel": g["rel_error"].median(), + "capped_mean_initial": g["capped_initial"].mean(), + })).reset_index() + table.to_csv(args.out / "holdout_by_dimension_level.csv", index=False) + unsupported = holdout[~holdout["supported"]].groupby(["product", "arm"]).size() + unsupported.to_csv(args.out / "holdout_unsupported.csv") + if not acs_native.empty: + acs_native["rel"] = (acs_native["estimate"] - acs_native["truth"]).abs() / acs_native["truth"].clip(lower=1.0) + acs_native["rel_initial"] = (acs_native["estimate_initial"] - acs_native["truth"]).abs() / acs_native["truth"].clip(lower=1.0) + acs_table = acs_native.groupby(["product", "arm", "level", "measure"]).agg( + geos=("geo", "size"), mean_rel=("rel", lambda s: s.clip(upper=1.0).mean()), + median_rel=("rel", "median"), mean_rel_initial=("rel_initial", lambda s: s.clip(upper=1.0).mean()), + ).reset_index() + acs_table.to_csv(args.out / "acs_native_by_level_measure.csv", index=False) + log(f"report: {len(arms)} arm receipts") + + +# ------------------------------------------------------------------ main + + +def main(argv=None) -> None: + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + sub = parser.add_subparsers(dest="command", required=True) + c = sub.add_parser("compile") + c.add_argument("--feed", type=Path, required=True) + c.add_argument("--out", type=Path, required=True) + s = sub.add_parser("shard") + s.add_argument("--source", choices=("cps", "acs"), required=True) + s.add_argument("--h5", type=Path, required=True) + s.add_argument("--design-h5", type=Path) + s.add_argument("--out", type=Path, required=True) + s.add_argument("--households-per-shard", type=int, default=50_000) + s.add_argument("--min-available-gb", type=float, default=20.0) + m = sub.add_parser("materialize") + m.add_argument("--work", type=Path, required=True) + m.add_argument("--source", choices=("cps", "acs"), required=True) + m.add_argument("--summary", type=Path) + m.add_argument("--batch", type=int, default=5_000) + m.add_argument("--only") + m.add_argument("--rank-range", help="ACS only: materialize rows whose selection rank is in [LO,HI)") + m.add_argument("--min-available-gb", type=float, default=20.0) + d = sub.add_parser("diffcheck") + d.add_argument("--work", type=Path, required=True) + d.add_argument("--feed", type=Path, required=True) + d.add_argument("--summary", type=Path, required=True) + d.add_argument("--households", type=int, default=4_000) + d.add_argument("--per-group", type=int, default=40) + d.add_argument("--batch", type=int, default=5_000) + d.add_argument("--sources", default="cps,acs") + t = sub.add_parser("truth") + t.add_argument("--sf-dir", type=Path, required=True) + t.add_argument("--out", type=Path, required=True) + a = sub.add_parser("arm") + a.add_argument("--work", type=Path, required=True) + a.add_argument("--arm", required=True) + a.add_argument("--product", choices=("national", "local"), required=True) + a.add_argument("--truth", type=Path, required=True) + a.add_argument("--epochs", type=int, default=1_500) + a.add_argument("--threads", type=int, default=6) + a.add_argument("--exclude-gq", action="store_true") + a.add_argument("--force", action="store_true") + a.add_argument("--min-available-gb", type=float, default=20.0) + g = sub.add_parser("grid") + g.add_argument("--no-largest", action="store_true") + rg = sub.add_parser("run-grid") + rg.add_argument("--work", type=Path, required=True) + rg.add_argument("--truth", type=Path, required=True) + rg.add_argument("--products", default="national,local") + rg.add_argument("--epochs", type=int, default=1_500) + rg.add_argument("--threads", type=int, default=6) + rg.add_argument("--only") + rg.add_argument("--no-largest", action="store_true") + rg.add_argument("--min-available-gb", type=float, default=20.0) + r = sub.add_parser("report") + r.add_argument("--work", type=Path, required=True) + r.add_argument("--out", type=Path, required=True) + args = parser.parse_args(argv) + { + "compile": do_compile, "shard": do_shard, "materialize": do_materialize, + "diffcheck": do_diffcheck, "truth": do_truth, "arm": do_arm, "report": do_report, + "run-grid": do_run_grid, + "grid": lambda a: print("\n".join(arm.label for arm in arm_grid(not a.no_largest))), + }[args.command](args) + + +if __name__ == "__main__": + main() From 0a1c5c808cd658c5a4a45d787351be88ab2e0230 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Mon, 28 Sep 2026 17:17:55 -0400 Subject: [PATCH 02/15] Fix review findings: multi-target cells, unsupported holdout scoring, national_state loss weights, GQ-consistent district population, part-overlap and cache guards Co-Authored-By: Claude Opus 5.5 --- .../microcosm/build/us_runtime/support_mix.py | 61 ++++++++- .../engine_free/us/test_us_support_mix.py | 29 ++++ tools/bakeoff_us_support_mix.py | 126 ++++++++++-------- 3 files changed, 160 insertions(+), 56 deletions(-) diff --git a/packages/microcosm-build/src/microcosm/build/us_runtime/support_mix.py b/packages/microcosm-build/src/microcosm/build/us_runtime/support_mix.py index 649f640f6d..62799663ba 100644 --- a/packages/microcosm-build/src/microcosm/build/us_runtime/support_mix.py +++ b/packages/microcosm-build/src/microcosm/build/us_runtime/support_mix.py @@ -43,6 +43,7 @@ "SupportMixArm", "acs_selection_order", "arm_initial_weights", + "assemble_target_matrix", "clone_copies", "distinct_unit_ess", "hash_uniform", @@ -127,8 +128,10 @@ class SupportMixArm: acs_fill_share: Share of the fill (``budget`` minus the CPS source households) taken by ACS households; the rest are CPS location clones. ``1.0`` fills with ACS only, ``0.0`` with clones only. - seed: Salt suffix for the ACS order and clone draws, so replicate - arms differ only in which households fill. + seed: Replicate index. The bake-off driver takes the ``seed``-th + disjoint block of one fixed ACS order (so seed 0 arms are nested + across budgets and replicates are independent draws) and salts + the clone draws with it. """ budget: int | None @@ -341,3 +344,57 @@ def distinct_unit_ess(weights: np.ndarray, unit_codes: Iterable) -> float: _, inverse = np.unique(codes, return_inverse=True) unit_weight = np.bincount(inverse.ravel(), weights=w) return kish_ess(unit_weight) + + +def assemble_target_matrix( + values, + row_geography: Mapping[str, np.ndarray], + target_concept: np.ndarray, + target_level: Sequence[str], + target_geography: np.ndarray, +): + """Targets x rows: ``A[t, i] = values[i, concept(t)]`` where row ``i`` is + in target ``t``'s geography, else 0. + + ``values`` is a rows x concepts sparse matrix. ``row_geography`` maps each + level (``"state"``, ``"cd"``) to one integer code per row; ``"national"`` + needs none. Several targets may share a (concept, level, geography) cell + (the same concept published by two sources); each receives the cell's + values. + """ + import scipy.sparse as sp + + coo = sp.coo_matrix(values) + concept = np.asarray(target_concept, dtype=np.int64) + level = np.asarray(target_level, dtype=object) + geography = np.asarray(target_geography, dtype=np.int64) + n_targets, n_rows = len(concept), coo.shape[0] + rows_parts, cols_parts, data_parts = [], [], [] + for name in np.unique(level): + sel = np.flatnonzero(level == name) + if name == "national": + row_geo = np.zeros(n_rows, dtype=np.int64) + target_geo = np.zeros(len(sel), dtype=np.int64) + else: + row_geo = np.asarray(row_geography[name], dtype=np.int64) + target_geo = geography[sel] + span = int(max(row_geo.max(initial=0), target_geo.max(initial=0))) + 1 + cell = concept[sel] * span + target_geo + order = np.argsort(cell, kind="stable") + cells_sorted, targets_sorted = cell[order], sel[order] + entry = coo.col.astype(np.int64) * span + row_geo[coo.row] + low = np.searchsorted(cells_sorted, entry, "left") + count = np.searchsorted(cells_sorted, entry, "right") - low + keep = count > 0 + repeat = count[keep] + starts = np.repeat(low[keep], repeat) + offsets = np.arange(int(repeat.sum())) - np.repeat(np.cumsum(repeat) - repeat, repeat) + rows_parts.append(targets_sorted[starts + offsets]) + cols_parts.append(np.repeat(coo.row[keep], repeat)) + data_parts.append(np.repeat(coo.data[keep], repeat)) + if not rows_parts: + return sp.csr_matrix((n_targets, n_rows), dtype=np.float64) + return sp.csr_matrix( + (np.concatenate(data_parts), (np.concatenate(rows_parts), np.concatenate(cols_parts))), + shape=(n_targets, n_rows), + ) diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py b/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py index 9b0d68ea58..24d23feed7 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py @@ -13,6 +13,8 @@ source households; a row's copies sum back to its per-year weight; - ESS: distinct-unit ESS never exceeds the row ESS or the number of distinct units, and equals the row ESS when every unit is distinct; +- assembly (differential): the sparse target matrix equals a naive dense + construction, including cells that carry several targets; - split: the role is a pure function of the group key, district children share their parent's role, vintage tokens never change a role, and the hash matches the pending release primitive byte for byte. @@ -36,6 +38,7 @@ SupportMixArm, acs_selection_order, arm_initial_weights, + assemble_target_matrix, clone_copies, distinct_unit_ess, hash_uniform, @@ -222,3 +225,29 @@ def test_arm_validation() -> None: arm = SupportMixArm(budget=600_000, cps_income_years=(2024, 2022), acs_fill_share=0.5, seed=2) assert arm.cps_income_years == (2022, 2024) assert arm.label == "b600k.cps2022-2024.acs050.s2" + + +@settings(max_examples=120, deadline=None) +@given(data=st.data()) +def test_assemble_matches_naive_dense_construction(data) -> None: + import scipy.sparse as sp + + n_rows = data.draw(st.integers(1, 30)) + n_concepts = data.draw(st.integers(1, 6)) + dense = np.array(data.draw(st.lists( + st.lists(st.sampled_from([0.0, 0.0, 1.5, -2.0, 7.0]), min_size=n_concepts, max_size=n_concepts), + min_size=n_rows, max_size=n_rows))) + state = np.array(data.draw(st.lists(st.integers(0, 3), min_size=n_rows, max_size=n_rows))) + cd = np.array(data.draw(st.lists(st.integers(0, 5), min_size=n_rows, max_size=n_rows))) + targets = data.draw(st.lists(st.tuples( + st.integers(0, n_concepts - 1), st.sampled_from(["national", "state", "cd"]), st.integers(0, 5)), + min_size=1, max_size=25)) + concept = np.array([t[0] for t in targets]) + level = [t[1] for t in targets] + geo = np.array([0 if t[1] == "national" else (t[2] % 4 if t[1] == "state" else t[2]) for t in targets]) + got = assemble_target_matrix(sp.csr_matrix(dense), {"state": state, "cd": cd}, concept, level, geo).toarray() + expected = np.zeros((len(targets), n_rows)) + for t, (c, lv, g) in enumerate(zip(concept, level, geo, strict=True)): + member = np.ones(n_rows, bool) if lv == "national" else ((state if lv == "state" else cd) == g) + expected[t] = dense[:, c] * member + np.testing.assert_array_equal(got, expected) diff --git a/tools/bakeoff_us_support_mix.py b/tools/bakeoff_us_support_mix.py index ced0ba5500..baa0327c35 100644 --- a/tools/bakeoff_us_support_mix.py +++ b/tools/bakeoff_us_support_mix.py @@ -48,6 +48,7 @@ SupportMixArm, acs_selection_order, arm_initial_weights, + assemble_target_matrix, clone_copies, distinct_unit_ess, hash_uniform, @@ -281,6 +282,15 @@ def do_compile(args) -> None: ) national_state_names = {spec.name for spec in national_state} loss_weights = np.asarray(tool._fiscal_target_loss_weights(registry), dtype=np.float64) + # The release computes weights on the surface it calibrates, so the + # national product gets its own vector over the national_state specs. + from types import SimpleNamespace + + national_state_weights = dict(zip( + (spec.name for spec in national_state), + np.asarray(tool._fiscal_target_loss_weights(SimpleNamespace(specs=tuple(national_state))), dtype=np.float64), + strict=True, + )) concept_ids: dict[tuple, int] = {} concept_specs = [] @@ -337,6 +347,7 @@ def do_compile(args) -> None: "notes": ";".join(n for n in notes if not n.startswith("excluded:")), "in_national_state": spec.name in national_state_names, "loss_weight": float(loss_weights[index]), + "loss_weight_national_state": float(national_state_weights.get(spec.name, np.nan)), "group_key": group_key, "role": target_split_role(group_key), "dimension_group": group, @@ -496,6 +507,8 @@ def per_household(values) -> np.ndarray: }) if source == "cps": peridnum = person["PERIDNUM"].astype(str).str[:20].to_numpy() + if (pd.Series(peridnum).groupby(person_position).nunique() != 1).any(): + raise RuntimeError("persons of one CPS household disagree on PERIDNUM[:20] (H_IDNUM)") first = pd.Series(peridnum).groupby(person_position).first() out["unit_key"] = "cps:" + first.reindex(np.arange(n)).to_numpy().astype(str) year = pd.Series(pd.to_numeric(person["source_year"]).to_numpy()).groupby(person_position).first() @@ -661,15 +674,18 @@ def _materialize_frame(frame, concept_specs, *, summary_path: Path | None, batch def acs_rank(work: Path) -> np.ndarray: - """Each ACS row's position in the fixed salted selection order (cached).""" - path = work / "acs_rank.npy" - if path.exists(): - return np.load(path) + """Each ACS row's position in the fixed salted selection order (cached, + keyed by a digest of the row index's unit-key sequence).""" rows = pd.read_parquet(work / "rows_acs.parquet", columns=["unit_key"]) + digest = hashlib.sha256("\n".join(rows["unit_key"]).encode()).hexdigest() + path, key = work / "acs_rank.npy", work / "acs_rank.key" + if path.exists() and key.exists() and key.read_text() == digest: + return np.load(path) order = acs_selection_order(rows["unit_key"].tolist(), salt=ACS_SELECTION_SALT) rank = np.empty(len(order), dtype=np.int64) rank[order] = np.arange(len(order)) np.save(path, rank) + key.write_text(digest) return rank @@ -919,29 +935,30 @@ class _ConceptStore: Each materialized part carries its rows' global positions; rows never materialized are all-zero and flagged, and an arm refuses to use them. + Parts must not overlap: a row materialized twice would be summed. """ def __init__(self, work: Path, source: str): directory = work / "concepts" / source - n_rows = len(pd.read_parquet(work / f"rows_{source}.parquet", columns=["shard"])) shard_of = pd.read_parquet(work / f"rows_{source}.parquet", columns=["shard"])["shard"].to_numpy() + n_rows = len(shard_of) self.measures = json.loads((directory / "measures.json").read_text()) rows_parts, parts = [], [] + self.materialized = np.zeros(n_rows, dtype=bool) for path in sorted(directory.glob("shard_*.npz")): if path.name.endswith(".tmp.npz"): continue + part = sp.load_npz(path).tocoo() rows_path = path.with_suffix(".rows.npy") rows = (np.load(rows_path) if rows_path.exists() else np.flatnonzero(shard_of == int(path.stem.split("_")[1].split(".")[0]))) - part = sp.load_npz(path).tocoo() + if part.shape[0] != len(rows): + raise RuntimeError(f"{path.name}: {part.shape[0]} rows but {len(rows)} positions") + if self.materialized[rows].any(): + raise RuntimeError(f"{path.name}: overlaps rows already materialized by another part") + self.materialized[rows] = True rows_parts.append(rows[part.row]) parts.append(part) - self.materialized = np.zeros(n_rows, dtype=bool) - for path in sorted(directory.glob("shard_*.rows.npy")): - self.materialized[np.load(path)] = True - for path in sorted(directory.glob("shard_*.npz")): - if not path.with_suffix(".rows.npy").exists() and not path.name.endswith(".tmp.npz"): - self.materialized[shard_of == int(path.stem.split("_")[1].split(".")[0])] = True self.matrix = sp.csr_matrix( (np.concatenate([p.data for p in parts]).astype(np.float32), (np.concatenate(rows_parts), np.concatenate([p.col for p in parts]))), @@ -999,25 +1016,17 @@ def backward(ctx, grad): _SpMV = None -def _assemble(values: sp.csr_matrix, geo: dict[str, np.ndarray], lookup: dict[str, np.ndarray], - n_targets: int) -> sp.csr_matrix: - """Targets x rows: each nonzero concept value lands in its geography's target.""" - coo = values.tocoo() - rows_parts, cols_parts, data_parts = [], [], [] - for level, table in lookup.items(): - if level == "national": - target = table[coo.col] - else: - codes = geo[level][coo.row] - target = table[coo.col, codes] - keep = target >= 0 - rows_parts.append(target[keep]) - cols_parts.append(coo.row[keep]) - data_parts.append(coo.data[keep]) - return sp.csr_matrix( - (np.concatenate(data_parts), (np.concatenate(rows_parts), np.concatenate(cols_parts))), - shape=(n_targets, values.shape[0]), - ) +def _assemble(values: sp.csr_matrix, geo: dict[str, np.ndarray], frame: pd.DataFrame, + state_code: dict, cd_code: dict) -> sp.csr_matrix: + """Targets x rows for a target frame (see ``assemble_target_matrix``).""" + levels = frame["level"].to_numpy() + target_geo = np.zeros(len(frame), dtype=np.int64) + is_state, is_cd = levels == "state", levels == "cd" + target_geo[is_state] = [state_code[x] for x in frame["state_fips"].to_numpy()[is_state]] + target_geo[is_cd] = [cd_code[x] for x in frame["cd_geoid"].to_numpy()[is_cd]] + return assemble_target_matrix( + values, geo, frame["col"].to_numpy(), levels, target_geo + ).tocsr() def do_arm(args) -> None: @@ -1044,7 +1053,15 @@ def do_arm(args) -> None: if args.exclude_gq: rows_acs = rows_acs[~rows_acs["group_quarters"]].reset_index(drop=True) # ---------------- rows - cps_hh = rows_cps[rows_cps["channel"] == "asec"].groupby("income_year").size().to_dict() + asec = rows_cps[rows_cps["channel"] == "asec"] + cps_hh = asec.groupby("income_year").size().to_dict() + if (asec.groupby("source_key").size() != 1).any() or rows_cps["unit_key"].str.endswith("nan").any(): + raise SystemExit("CPS source keys are not one ASEC row per source household") + if rows_cps.groupby("income_year")["source_key"].nunique().to_dict() != cps_hh: + raise SystemExit("CPS source keys disagree with ASEC household counts") + for name, frame in (("cps", rows_cps), ("acs", rows_acs)): + if not (frame["owner"].mean() > 0.3 and frame["renter"].mean() > 0.1): + raise SystemExit(f"{name} tenure columns look unparsed (owner/renter shares)") counts = plan_arm_counts(arm, cps_households_by_year=cps_hh, acs_households=len(rows_acs)) cps_rows = rows_cps[rows_cps["income_year"].isin(arm.cps_income_years)].reset_index(drop=True) source_keys = cps_rows["source_key"].drop_duplicates().to_numpy() @@ -1077,7 +1094,8 @@ def do_arm(args) -> None: cps_expanded["copy"] = copy_number w_cps = np.repeat(cps_w, repeat) if counts.clones: - geo_pool = rows_acs[["state_fips", "cd_geoid", "county_fips", "design_weight"]] + geo_pool = rows_acs.loc[~rows_acs["group_quarters"].astype(bool), + ["state_fips", "cd_geoid", "county_fips", "design_weight"]] for state, group in cps_expanded[cps_expanded["copy"] > 0].groupby("state_fips"): pool = geo_pool[geo_pool["state_fips"] == state] cum = np.cumsum(pool["design_weight"].to_numpy()) @@ -1128,33 +1146,23 @@ def do_arm(args) -> None: geo = {"state": selected["state_fips"].map(state_code).to_numpy(), "cd": selected["cd_geoid"].map(cd_code).to_numpy()} - def lookup_for(frame: pd.DataFrame) -> dict[str, np.ndarray]: - tables = {"national": np.full(len(measures), -1, np.int64), - "state": np.full((len(measures), len(state_code)), -1, np.int64), - "cd": np.full((len(measures), len(cd_code)), -1, np.int64)} - for i, row in enumerate(frame.itertuples(index=False)): - if row.level == "national": - tables["national"][row.col] = i - elif row.level == "state": - tables["state"][row.col, state_code[row.state_fips]] = i - elif row.level == "cd": - tables["cd"][row.col, cd_code[row.cd_geoid]] = i - return tables - - a_train = _assemble(values, geo, lookup_for(train), len(train)) - a_hold = _assemble(values, geo, lookup_for(holdout), len(holdout)) + a_train = _assemble(values, geo, train, state_code, cd_code) + a_hold = _assemble(values, geo, holdout, state_code, cd_code) b_train = train["value"].to_numpy(np.float64) - loss_w = train["loss_weight"].to_numpy(np.float64) + loss_w = train["loss_weight_national_state" if args.product == "national" else "loss_weight"].to_numpy(np.float64) # Local product: district household populations are trained, as in the # ACS local release (never scored). truth = truth_table(args.truth) extra_train = 0 if args.product == "local": - cd_truth = truth[(truth["level"] == "cd") & (truth["measure"] == "persons_total")] + # Household population (B25008): group-quarters rows neither count + # toward nor can be pushed by it, so CPS-only arms are not forced to + # inflate households to stand in for dorms and nursing homes. + cd_truth = truth[(truth["level"] == "cd") & (truth["measure"] == "persons_in_households")] cd_truth = cd_truth[cd_truth["geo"].isin(cd_code)] - persons = selected["persons"].to_numpy(np.float64) + persons = selected["persons"].to_numpy(np.float64) * ~selected["group_quarters"].astype(bool).to_numpy() codes = selected["cd_geoid"].map({g: i for i, g in enumerate(cd_truth["geo"])}).fillna(-1).to_numpy().astype(np.int64) - keep = codes >= 0 + keep = (codes >= 0) & (persons > 0) pop = sp.csr_matrix((persons[keep], (codes[keep], np.flatnonzero(keep))), shape=(len(cd_truth), len(selected))) a_train = sp.vstack([a_train, pop], format="csr") b_train = np.concatenate([b_train, cd_truth["value"].to_numpy(np.float64)]) @@ -1213,6 +1221,7 @@ def errors(matrix, target_values, w): "owner": selected["owner"].to_numpy() * household_rows, "renter": selected["renter"].to_numpy() * household_rows, "rent_contract_annual_aggregate": selected["rent_annual"].to_numpy() * household_rows, + "rent_gross_annual_aggregate": selected["rent_annual"].to_numpy() * household_rows, "real_estate_taxes_aggregate": selected["real_estate_taxes"].to_numpy() * household_rows * selected["owner"].to_numpy(), "persons_in_households": selected["persons"].to_numpy() * household_rows, "persons_total": selected["persons"].to_numpy(), @@ -1237,7 +1246,7 @@ def errors(matrix, target_values, w): est0_map = dict(zip(uniq, e0, strict=True)) est1_map = dict(zip(uniq, e1, strict=True)) for geo_code, value in zip(t["geo"], t["value"], strict=True): - if (level == "cd" and args.product == "local" and measure == "persons_total"): + if (level == "cd" and args.product == "local" and measure == "persons_in_households"): continue # trained acs_eval.append((level, measure, int(geo_code), float(value), float(est0_map.get(geo_code, 0.0)), float(est1_map.get(geo_code, 0.0)))) @@ -1344,7 +1353,15 @@ def do_report(args) -> None: if not holdout.empty: holdout["capped"] = holdout["rel_error"].clip(upper=1.0) holdout["capped_initial"] = holdout["rel_error_initial"].clip(upper=1.0) - grouped = holdout[holdout["supported"]].groupby( + # Unsupported targets (no row can move them) are scored as misses + # (estimate 0 -> capped error 1), so every arm is averaged over the + # same held-out set; an intersection table is written as well. + supported_everywhere = holdout.groupby(["product", "name"])["supported"].transform("all") + holdout[supported_everywhere].groupby( + ["product", "arm", "dimension_group", "dimension", "level"] + ).agg(targets=("capped", "size"), capped_mean=("capped", "mean")).reset_index().to_csv( + args.out / "holdout_by_dimension_level_common_support.csv", index=False) + grouped = holdout.groupby( ["product", "arm", "dimension_group", "dimension", "level"]) table = grouped.apply(lambda g: pd.Series({ "targets": len(g), @@ -1352,6 +1369,7 @@ def do_report(args) -> None: "weighted_capped_mean": np.average(g["capped"], weights=g["loss_weight"]), "median_rel": g["rel_error"].median(), "capped_mean_initial": g["capped_initial"].mean(), + "unsupported": int((~g["supported"]).sum()), })).reset_index() table.to_csv(args.out / "holdout_by_dimension_level.csv", index=False) unsupported = holdout[~holdout["supported"]].groupby(["product", "arm"]).size() From 24760e0ebd3dd1a355b6a22a2495edf935575b91 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Mon, 28 Sep 2026 17:18:40 -0400 Subject: [PATCH 03/15] Align the bake-off memo design section with the reviewed harness Co-Authored-By: Claude Opus 5.5 --- docs/us-support-mix-bakeoff.md | 57 ++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/docs/us-support-mix-bakeoff.md b/docs/us-support-mix-bakeoff.md index 5d864c9aae..28dde9eca8 100644 --- a/docs/us-support-mix-bakeoff.md +++ b/docs/us-support-mix-bakeoff.md @@ -37,8 +37,11 @@ the budget with: larger arm's; - **CPS location clones** (`acs000`): copies of the arm's own CPS households, each physical row drawing a new (district, county) within its state in - proportion to ACS household weight, the way Route A draws rows - independently; + proportion to ACS household weight (group-quarters rows excluded), the way + Route A draws rows independently. A clone keeps its source row's engine + values, so anything that varies by county within a state (ACA benchmark + premiums by rating area) is carried from the origin county. Re-running the + engine per clone would remove this approximation; - a 50/50 mix (`acs050`, at 600k only). | Budget | CPS years | Fills | @@ -46,14 +49,26 @@ the budget with: | natural size | 2024; 2023–24; 2022–24 | none | | 300k, 600k, 1.2M | 2024; 2023–24; 2022–24 | ACS; clones | | 300k, 600k, 1.2M | none | ACS only | -| 600k | 2024; 2022–24 | 50/50; ACS with seeds 1 and 2 (replicates) | +| 600k | 2024; 2022–24 | 50/50 | +| 300k | 2024; 2022–24 | ACS, replicates 1 and 2 | That is 30 arms. Each is calibrated twice, once per product: -- **national compact**: the release's `national_state` surface (national and - state targets, 5,694 in all, before the split); -- **local**: the full surface (adding 24,340 district targets) plus district - total population from the ACS, as the ACS local release trains. +- **national compact**: the release's `national_state` surface (5,683 + usable national and state targets before the split), with loss weights + computed on that surface as the release does; +- **local**: the full surface, which adds 27,148 targets the release + classifies as district targets (24,340 district-level, plus 2,808 state + and national totals from the SOI district file), plus district household + population (ACS B25008). The ACS local release trains district population + from its PUMA ladder instead; household population is used here so that + group-quarters rows, which only the ACS has, neither count toward nor are + pushed by the district total. + +Replicate arms take the next disjoint blocks of the one fixed ACS order, so +they are independent draws; seed-0 arms are nested across budgets. +Group-quarters households (12% of ACS records) stay in the ACS side, as in +the ACS local release; the CPS has none. **Five CPS years were not run.** Income years 2020 and 2021 pass the response-quality check below, but main pins ASEC role and person sources @@ -92,7 +107,7 @@ into 419 such concepts, and `materialize` runs the release tool's own 5 GB). Every arm's target matrix is then concept value × geography mask, assembled sparse. `diffcheck` verifies the identity on real rows: production per-target columns and concept × mask agree exactly on sampled state and -district targets of every family (receipt below). The 11 JCT tax-expenditure +district targets of every family (see Evidence). The 11 JCT tax-expenditure targets need reform simulations and are excluded from every arm. ### Holdout @@ -101,8 +116,10 @@ The US holdout ("Port the UK holdout to US release targets") has not merged. The bake-off mirrors its pending `target_split` spec byte for byte: SHA-256 of `salt + "\x1f" + key`, sealed if below 0.05 on the sealed salt, otherwise held out if below 0.10 on the holdout salt. District children take their -state parent's key, and vintage tokens are dropped, so a held-out group is -held out at every level it appears. The pending spec's pins, which force +state parent's key, so a held-out state total is held out with all its +districts; national and state targets are drawn independently, so a +held-out national total can still be pinned by trained state targets. +Vintage tokens are dropped from keys. The pending spec's pins, which force some groups to train, were not yet written and are not mirrored, so the bake-off split differs from the eventual release split for pinned groups. Sealed targets are neither trained nor scored. @@ -125,10 +142,12 @@ ACS-native scores as consistency with the published ACS, not as truth. ### Calibration Every arm uses the production optimizer, `microcosm.calibrate.solve._optimize`, -with the fiscal release's settings: Adam on log-weights, learning rate 0.02, +with the fiscal release's optimizer settings: Adam on log-weights, learning rate 0.02, capped relative error (cap 1.0), mass conserved, max weight ratio 5, the -release's concept-budget loss weights computed once on the full registry -(so train and holdout keep fixed weights), no L0 pruning (so the row budget +release's concept-budget loss weights computed once per surface (the +national_state surface for the national product, the full registry for the +local one) before the split, so train and holdout keep fixed weights; district +household-population rows weigh 1 each; no L0 pruning (so the row budget stays fixed). A sparse operator with a precomputed transpose replaces the torch sparse-CSR backward pass, which was the bottleneck; the objective and projections are unchanged. @@ -153,10 +172,14 @@ with concept × mask. - **Registry holdout**: capped relative error `min(|est − target| / max(|target|, 1), 1)`, mean and loss-weighted mean, by dimension (CPS-native: income components, tax items, program receipt; ACS-native: PEP - demographics) and level. Unsupported targets (no row in the arm can move - them) are counted separately. -- **ACS-native**: households, tenure, aggregate rent and real-estate taxes, - household population and age and sex bands, by level including county. + demographics) and level. A target no row in the arm can move scores as a + miss (error 1), so every arm is averaged over the same held-out set; a + common-support table is reported too. +- **ACS-native**: households, tenure, aggregate rent (the model's + `pre_subsidy_rent`, scored against both contract rent B25060 and gross rent + B25065) and real-estate taxes, household population (B25008) and total + population, age and sex (B01003, B01001; these include group quarters), by + level including county. Household measures exclude group-quarters rows. - **ESS** over distinct households: weights summed within each household unit (an ASEC housing unit, `H_IDNUM`, counted once across rotation years, PUF clone rows and location clones; an ACS `SERIALNO`), then Kish; also the From 2d4fdab424591cc6d1f1435c9006f15c8359ed4f Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Mon, 28 Sep 2026 17:57:57 -0400 Subject: [PATCH 04/15] Derive sex from is_female, add the headline report table, resume guards Co-Authored-By: Claude Opus 5.5 --- tools/bakeoff_us_support_mix.py | 39 ++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/tools/bakeoff_us_support_mix.py b/tools/bakeoff_us_support_mix.py index baa0327c35..ff14be7cae 100644 --- a/tools/bakeoff_us_support_mix.py +++ b/tools/bakeoff_us_support_mix.py @@ -486,7 +486,7 @@ def per_household(values) -> np.ndarray: return np.bincount(person_position, weights=np.asarray(values, dtype=np.float64), minlength=n) age = pd.to_numeric(person["age"], errors="coerce").fillna(0).to_numpy() - male = person["is_male"].astype(bool).to_numpy() if "is_male" in person else np.zeros(len(person), bool) + male = ~pd.to_numeric(person["is_female"]).fillna(0).astype(bool).to_numpy() rent = pd.to_numeric(person.get("pre_subsidy_rent", 0.0), errors="coerce").fillna(0.0) taxes = pd.to_numeric(person.get("real_estate_taxes", 0.0), errors="coerce").fillna(0.0) tenure = hh["tenure_type"].astype(str).to_numpy() @@ -1382,9 +1382,46 @@ def do_report(args) -> None: median_rel=("rel", "median"), mean_rel_initial=("rel_initial", lambda s: s.clip(upper=1.0).mean()), ).reset_index() acs_table.to_csv(args.out / "acs_native_by_level_measure.csv", index=False) + if not holdout.empty and not acs_native.empty: + _write_headline(args.out, arms, holdout, acs_native) log(f"report: {len(arms)} arm receipts") +HEADLINE_ACS_MEASURES = ( + "households", "owner", "renter", "rent_contract_annual_aggregate", + "real_estate_taxes_aggregate", "persons_in_households", "persons_0_17", "persons_65p", +) + + +def _write_headline(out: Path, arms: pd.DataFrame, holdout: pd.DataFrame, acs_native: pd.DataFrame) -> None: + """One markdown table per product: held-out error by dimension and level.""" + cps = holdout[holdout["dimension_group"] == "cps_native"].groupby(["product", "arm", "level"])["capped"].mean() + pep = holdout[holdout["dimension_group"] == "acs_native"].groupby(["product", "arm"])["capped"].mean() + acs = acs_native[acs_native["measure"].isin(HEADLINE_ACS_MEASURES)].copy() + acs["capped"] = acs["rel"].clip(upper=1.0) + acs = acs.groupby(["product", "arm", "level"])["capped"].mean() + lines = [] + for product, frame in arms.sort_values(["budget", "cps_years", "acs_fill_share", "seed"]).groupby("product", sort=False): + lines += [f"### {product} product", "", + "| Arm | Rows | Distinct hh | ESS (distinct) | CPS-native nat | state | CD | PEP demog | ACS-native state | CD | county | Solve min | Peak GB |", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|"] + for row in frame.itertuples(index=False): + key = (product, row.arm) + + def cell(series, level=None, key=key): + index = (*key, level) if level else key + return f"{series.get(index, float('nan')):.3f}" + + lines.append( + f"| {row.arm} | {row.rows_total:,} | {row.distinct_households:,} | {row.ess_distinct_households:,.0f} | " + f"{cell(cps, 'national')} | {cell(cps, 'state')} | {cell(cps, 'cd')} | {cell(pep)} | " + f"{cell(acs, 'state')} | {cell(acs, 'cd')} | {cell(acs, 'county')} | " + f"{row.runtime_solve_s / 60:.1f} | {row.runtime_peak_rss_gb:.1f} |" + ) + lines.append("") + (out / "headline.md").write_text("\n".join(lines)) + + # ------------------------------------------------------------------ main From c7ba96b1ac8d70fad3e9a60864a18074de9119f2 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Tue, 29 Sep 2026 06:36:55 -0400 Subject: [PATCH 05/15] Exclude SPM zero-adult group-quarters records, derive the SPM role from household structure, score every holdout level for both products, rescore saved weights Co-Authored-By: Claude Opus 5.5 --- tools/bakeoff_us_support_mix.py | 130 ++++++++++++++++++++------------ 1 file changed, 81 insertions(+), 49 deletions(-) diff --git a/tools/bakeoff_us_support_mix.py b/tools/bakeoff_us_support_mix.py index ff14be7cae..f73cfe8b9e 100644 --- a/tools/bakeoff_us_support_mix.py +++ b/tools/bakeoff_us_support_mix.py @@ -632,34 +632,41 @@ def _load_shard_frame(path: Path): #: Engine inputs the Sep-23 ACS staging carries as all-null on ACS rows and -#: its reviewed-null register predates. The production ACS local release at -#: 767312d6 had no such column, so the engine used the variable's default; -#: filling with that default reproduces it. Counted in every receipt. -DEFAULT_FILLED_INPUTS = (("person", "is_spm_independent_minor_role"),) - - -def _fill_with_engine_default(frame) -> dict[str, int]: - from policyengine_us import CountryTaxBenefitSystem - - system = CountryTaxBenefitSystem() - filled = {} - for entity, column in DEFAULT_FILLED_INPUTS: - table = frame.table(entity) +#: its reviewed-null register predates. ``is_spm_independent_minor_role`` has +#: a formula (``is_household_head | is_household_spouse``, spm_calculator's +#: policyengine adapter); a column that is entirely null is dropped so the +#: engine derives the role from household structure, as it did for the +#: production ACS local release, whose staging had no such column. A +#: partially null column is an error. Counted in every receipt. +FORMULA_DERIVED_WHEN_ALL_NULL = (("person", "is_spm_independent_minor_role"),) + + +def _drop_all_null_formula_inputs(frame): + from microcosm.frame import Frame + + dropped = {} + tables = {entity: frame.table(entity) for entity in frame.entities} + for entity, column in FORMULA_DERIVED_WHEN_ALL_NULL: + table = tables[entity] if column not in table.columns: continue missing = table[column].isna() - if missing.any(): - default = system.variables[column].default_value - table[column] = table[column].where(~missing, default).astype(type(default)) - filled[f"{entity}.{column}"] = int(missing.sum()) - return filled + if missing.all(): + tables[entity] = table.drop(columns=[column]) + dropped[f"{entity}.{column}"] = int(missing.sum()) + elif missing.any(): + raise RuntimeError(f"{entity}.{column} is partially null ({int(missing.sum())} rows)") + if not dropped: + return frame, dropped + weights = {entity: frame.weights_for(entity) for entity in frame.weighted_entities} + return Frame(tables, frame.schema, weights, frame.strata, mass_log=frame.mass_log), dropped def _materialize_frame(frame, concept_specs, *, summary_path: Path | None, batch: int): tool = release_tool() acs = acs_local_tool() projected, dropped = acs.project_input_only(frame, period=PERIOD) - default_filled = _fill_with_engine_default(projected) + projected, formula_derived = _drop_all_null_formula_inputs(projected) if summary_path is not None: acs.fill_reviewed_nulls(projected, summary_path, period=PERIOD) target_frame, registry, compilation = tool._materialize_target_frame( @@ -669,7 +676,7 @@ def _materialize_frame(frame, concept_specs, *, summary_path: Path | None, batch refuse_population_aggregates=True, ) household = target_frame.table("household") - compilation = {**compilation, "default_filled_inputs": default_filled} + compilation = {**compilation, "formula_derived_inputs": formula_derived} return household, [spec.measure for spec in registry.specs], compilation, dropped @@ -696,12 +703,17 @@ def do_materialize(args) -> None: shard_dir = args.work / "shards" / args.source out_dir = args.work / "concepts" / args.source out_dir.mkdir(parents=True, exist_ok=True) - rows = pd.read_parquet(args.work / f"rows_{args.source}.parquet", columns=["shard", "household_id"]) + rows = pd.read_parquet(args.work / f"rows_{args.source}.parquet") rows["row"] = np.arange(len(rows)) + if "spm_zero_adult_unit" in rows: + # Group-quarters records whose SPM unit has no classified adult: the + # pinned engine refuses them, and Census puts ACS group quarters + # outside the SPM universe (us_runtime/spm_universe_source.py). + rows = rows[~rows["spm_zero_adult_unit"]] low, high = 0, len(rows) if args.rank_range: low, high = (int(x) for x in args.rank_range.split(",")) - rows["rank"] = acs_rank(args.work) + rows["rank"] = acs_rank(args.work)[rows["row"].to_numpy()] shards = sorted(shard_dir.glob("shard_*.pkl")) if args.only: wanted = {int(x) for x in args.only.split(",") if x.strip()} @@ -744,7 +756,7 @@ def do_materialize(args) -> None: "households": len(household), "nnz": int(csr.nnz), "missing_measures": missing, "compiled_concepts": len(compiled), "batching": compilation.get("target_materialization_batching"), - "default_filled_inputs": compilation.get("default_filled_inputs"), + "formula_derived_inputs": compilation.get("formula_derived_inputs"), "wall_s": round(time.time() - started, 1), "peak_rss_gb": round(peak_rss_gb(), 2), "cpu_s": round(resource.getrusage(resource.RUSAGE_SELF).ru_utime, 1), }) @@ -792,7 +804,12 @@ def do_diffcheck(args) -> None: if (args.work / "diffcheck.json").exists() else {} for source in args.sources.split(","): frame = _load_shard_frame(args.work / "shards" / source / "shard_000.pkl") - hh_ids = frame.table("household")["household_id"].to_numpy()[: args.households] + hh_ids = frame.table("household")["household_id"].to_numpy() + index = pd.read_parquet(args.work / f"rows_{source}.parquet") + if "spm_zero_adult_unit" in index: + flagged = index.loc[(index["shard"] == 0) & index["spm_zero_adult_unit"], "household_id"] + hh_ids = hh_ids[~np.isin(hh_ids, flagged.to_numpy())] + hh_ids = hh_ids[: args.households] person_mask = np.isin(frame.table("person")["person_household_id"].to_numpy(), hh_ids) frame = frame.select(person_mask) summary = args.summary if source == "acs" else None @@ -1034,9 +1051,11 @@ def do_arm(args) -> None: started = time.time() arm = parse_arm(args.arm) out = args.work / "arms" / args.product / f"{arm.label}.json" - if out.exists() and not args.force: + previous = json.loads(out.read_text()) if out.exists() else None + if previous is not None and previous.get("scored_all_levels") and not args.force: log(f"{out} exists") return + rescore = previous is not None and out.with_suffix(".weights.npy").exists() and not args.force wait_for_memory(args.min_available_gb) import torch @@ -1052,6 +1071,8 @@ def do_arm(args) -> None: rows_acs["row"] = np.arange(len(rows_acs)) if args.exclude_gq: rows_acs = rows_acs[~rows_acs["group_quarters"]].reset_index(drop=True) + if "spm_zero_adult_unit" in rows_acs: + rows_acs = rows_acs[~rows_acs["spm_zero_adult_unit"]].reset_index(drop=True) # ---------------- rows asec = rows_cps[rows_cps["channel"] == "asec"] cps_hh = asec.groupby("income_year").size().to_dict() @@ -1135,10 +1156,12 @@ def do_arm(args) -> None: measure_col = {m: j for j, m in enumerate(measures)} usable = targets[targets["excluded"].isna() & targets["measure"].isin(measure_col)].copy() usable["col"] = usable["measure"].map(measure_col) + # Both products are scored on every held-out target (national, state and + # district); the national product trains on its surface only. + holdout = usable[usable["role"] == "holdout"].reset_index(drop=True) if args.product == "national": usable = usable[usable["in_national_state"]] train = usable[usable["role"] == "train"].reset_index(drop=True) - holdout = usable[usable["role"] == "holdout"].reset_index(drop=True) states = np.unique(selected["state_fips"]) cds = np.unique(np.concatenate([selected["cd_geoid"].to_numpy(), usable.loc[usable["cd_geoid"] >= 0, "cd_geoid"].to_numpy()])) state_code = {s: i for i, s in enumerate(np.unique(np.concatenate([states, usable["state_fips"][usable["state_fips"] >= 0]])))} @@ -1172,27 +1195,34 @@ def do_arm(args) -> None: nonzero = np.diff(a_train.indptr) > 0 a_train, b_train, loss_w = a_train[nonzero], b_train[nonzero], loss_w[nonzero] scales = default_target_loss_scales(b_train) - operator = _SparseOperator(a_train) solve_started = time.time() - weights, trajectory = _optimize( - operator, - torch.tensor(b_train, dtype=torch.float32), - torch.tensor(loss_w, dtype=torch.float32), - torch.tensor(scales, dtype=torch.float32), - 1.0, - w0, - epochs=args.epochs, - learning_rate=0.02, - conserve_mass=True, - max_weight_ratio=5.0, - l0_lambda=0.0, - l2_lambda=0.0, - target_records=None, - init_mean=0.999, - temperature=0.25, - ) - solve_s = time.time() - solve_started - del operator + if rescore: + # Re-score saved weights (a scoring change, no re-solve). + weights = np.load(out.with_suffix(".weights.npy")).astype(np.float64) + if len(weights) != len(w0): + raise SystemExit(f"{arm.label}: saved weights do not match the arm's rows") + trajectory = np.array([previous["train"]["loss_initial"], previous["train"]["loss_final"]]) + else: + operator = _SparseOperator(a_train) + weights, trajectory = _optimize( + operator, + torch.tensor(b_train, dtype=torch.float32), + torch.tensor(loss_w, dtype=torch.float32), + torch.tensor(scales, dtype=torch.float32), + 1.0, + w0, + epochs=args.epochs, + learning_rate=0.02, + conserve_mass=True, + max_weight_ratio=5.0, + l0_lambda=0.0, + l2_lambda=0.0, + target_records=None, + init_mean=0.999, + temperature=0.25, + ) + del operator + solve_s = time.time() - solve_started if not rescore else previous["runtime"]["solve_s"] gc.collect() # ---------------- scoring def errors(matrix, target_values, w): @@ -1269,7 +1299,8 @@ def errors(matrix, target_values, w): for _cd, idx in pd.Series(np.arange(len(selected))).groupby(selected["cd_geoid"].to_numpy()): cd_ess.append(distinct_unit_ess(weights[idx.to_numpy()], units[idx.to_numpy()])) receipt = { - "arm": arm.label, "product": args.product, + "arm": arm.label, "product": args.product, "scored_all_levels": True, + "rescored": bool(rescore), "counts": dataclasses.asdict(counts), "rows": {"cps_physical": int(len(cps_expanded)), "acs": int(len(acs_rows)), "total": int(len(selected))}, "distinct_households": int(pd.Series(units).nunique()), @@ -1283,7 +1314,8 @@ def errors(matrix, target_values, w): "train": {"targets": int(a_train.shape[0]), "cd_population_targets": extra_train, "nnz": int(a_train.nnz), "loss_initial": float(trajectory[0]), "loss_final": float(trajectory[-1]), - "loss_at": {str(e): float(trajectory[min(e, len(trajectory)) - 1]) for e in (100, 250, 500, 1000, len(trajectory))}}, + "loss_at": (previous["train"]["loss_at"] if rescore else + {str(e): float(trajectory[min(e, len(trajectory)) - 1]) for e in (100, 250, 500, 1000, len(trajectory))})}, "holdout_targets": result_targets, "acs_native": acs_eval.to_dict(orient="records"), "report_only": report, @@ -1309,7 +1341,7 @@ def do_run_grid(args) -> None: for product in args.products.split(","): for label in arms: out = args.work / "arms" / product / f"{label}.json" - if out.exists(): + if out.exists() and json.loads(out.read_text()).get("scored_all_levels"): continue wait_for_memory(args.min_available_gb) command = [sys.executable, str(Path(__file__).resolve()), "arm", "--work", str(args.work), From 3cfedf9bd7b10a9c10f1c059b400ce14b34cd7eb Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Tue, 29 Sep 2026 18:45:37 -0400 Subject: [PATCH 06/15] Classify support_mix.py as a reviewed non-registry runtime module Co-Authored-By: Claude Opus 5.5 --- .../tests/engine_free/us/test_us_spine_blindness.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_spine_blindness.py b/packages/microcosm-build/tests/engine_free/us/test_us_spine_blindness.py index dd04866beb..3bdc2f1d44 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_spine_blindness.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_spine_blindness.py @@ -334,6 +334,9 @@ # record type and no population attribute. Provenance owner above. "spm_universe_source.py", "stacked_spine.py", # Provenance owner (#578 revision); see owners list. + # Bake-off arm accounting, split mirror and ESS; evaluates support mixes, + # never transforms a population. + "support_mix.py", "support_provenance.py", "take_up.py", "take_up_contract.py", From ecd35fe883517cefa7dc8050368100696e2c546e Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 30 Sep 2026 02:27:47 -0400 Subject: [PATCH 07/15] Report held-out error by dimension and the replicate spread Co-Authored-By: Claude Opus 5.5 --- tools/bakeoff_us_support_mix.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tools/bakeoff_us_support_mix.py b/tools/bakeoff_us_support_mix.py index f73cfe8b9e..88f591a3a2 100644 --- a/tools/bakeoff_us_support_mix.py +++ b/tools/bakeoff_us_support_mix.py @@ -1416,9 +1416,41 @@ def do_report(args) -> None: acs_table.to_csv(args.out / "acs_native_by_level_measure.csv", index=False) if not holdout.empty and not acs_native.empty: _write_headline(args.out, arms, holdout, acs_native) + _write_dimensions(args.out, arms, holdout, acs_native) log(f"report: {len(arms)} arm receipts") +DIMENSION_COLUMNS = ( + ("income_components", "state"), ("income_components", "cd"), + ("tax_items", "state"), ("tax_items", "cd"), + ("program_receipt", "state"), ("demographics_pep", "state"), +) + + +def _write_dimensions(out: Path, arms: pd.DataFrame, holdout: pd.DataFrame, acs_native: pd.DataFrame) -> None: + """Per-dimension held-out error (seed-0 arms; replicate spread alongside).""" + by_dim = holdout.groupby(["product", "arm", "dimension", "level"])["capped"].mean() + acs = acs_native[acs_native["measure"].isin(HEADLINE_ACS_MEASURES)].copy() + acs["capped"] = acs["rel"].clip(upper=1.0) + acs = acs.groupby(["product", "arm", "level"])["capped"].mean() + rows = [] + for record in arms.itertuples(index=False): + row = {"product": record.product, "arm": record.arm, "budget": record.budget, + "cps_years": record.cps_years, "acs_fill_share": record.acs_fill_share, + "seed": record.seed, "rows": record.rows_total, + "ess_distinct": record.ess_distinct_households} + for dimension, level in DIMENSION_COLUMNS: + row[f"{dimension}.{level}"] = by_dim.get((record.product, record.arm, dimension, level), np.nan) + for level in ("state", "cd", "county"): + row[f"acs_native.{level}"] = acs.get((record.product, record.arm, level), np.nan) + rows.append(row) + table = pd.DataFrame(rows).sort_values(["product", "budget", "cps_years", "acs_fill_share", "seed"]) + table.to_csv(out / "dimensions_by_arm.csv", index=False) + replicate = table[table["arm"].str.contains("b300k") & table["acs_fill_share"].eq(1.0) & table["cps_years"].gt(0)] + spread = replicate.groupby(["product", "cps_years"])[[c for c in table.columns if "." in c]].std() + spread.to_csv(out / "replicate_spread.csv") + + HEADLINE_ACS_MEASURES = ( "households", "owner", "renter", "rent_contract_annual_aggregate", "real_estate_taxes_aggregate", "persons_in_households", "persons_0_17", "persons_65p", From 9e431a4c0abfc66589772f9d77bfac404c63a8ed Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 30 Sep 2026 07:11:23 -0400 Subject: [PATCH 08/15] Support-mix bake-off results: verdict, tables, cost, caveats and receipts Co-Authored-By: Claude Opus 5.5 --- docs/us-support-mix-bakeoff.md | 201 +- .../us-support-mix-bakeoff-20260930/README.md | 23 + .../acs_native_by_level_measure.csv | 2851 +++++++++++++++++ .../acs_truth.json | 71 + .../us-support-mix-bakeoff-20260930/arms.csv | 61 + .../compile.json | 57 + .../diffcheck.json | 43 + .../dimensions_by_arm.csv | 61 + .../headline.md | 69 + .../holdout_by_dimension_level.csv | 601 ++++ ...dout_by_dimension_level_common_support.csv | 601 ++++ .../holdout_unsupported.csv | 61 + .../replicate_spread.csv | 7 + tools/bakeoff_us_support_mix.py | 2 +- 14 files changed, 4695 insertions(+), 14 deletions(-) create mode 100644 experiments/us-support-mix-bakeoff-20260930/README.md create mode 100644 experiments/us-support-mix-bakeoff-20260930/acs_native_by_level_measure.csv create mode 100644 experiments/us-support-mix-bakeoff-20260930/acs_truth.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/arms.csv create mode 100644 experiments/us-support-mix-bakeoff-20260930/compile.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/diffcheck.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/dimensions_by_arm.csv create mode 100644 experiments/us-support-mix-bakeoff-20260930/headline.md create mode 100644 experiments/us-support-mix-bakeoff-20260930/holdout_by_dimension_level.csv create mode 100644 experiments/us-support-mix-bakeoff-20260930/holdout_by_dimension_level_common_support.csv create mode 100644 experiments/us-support-mix-bakeoff-20260930/holdout_unsupported.csv create mode 100644 experiments/us-support-mix-bakeoff-20260930/replicate_spread.csv diff --git a/docs/us-support-mix-bakeoff.md b/docs/us-support-mix-bakeoff.md index 28dde9eca8..15ee1a9a84 100644 --- a/docs/us-support-mix-bakeoff.md +++ b/docs/us-support-mix-bakeoff.md @@ -1,7 +1,9 @@ # US support mix: CPS years vs ACS rows at a fixed row budget -Status: bake-off run 2026-09-28 on main `bda72cb02`, policyengine-us 2.2.1, -pinned Chronicle feed `b8543739` (32,842 targets). Tool: +Status: bake-off run 2026-09-28 to 2026-09-30 on main `bda72cb02`, +policyengine-us 2.2.1, pinned Chronicle feed `b8543739` (32,842 targets); 30 +arms × 2 products, all scored. Receipts: +[`experiments/us-support-mix-bakeoff-20260930/`](../experiments/us-support-mix-bakeoff-20260930/). Tool: [`tools/bakeoff_us_support_mix.py`](../tools/bakeoff_us_support_mix.py); primitives and invariants: [`us_runtime/support_mix.py`](../packages/microcosm-build/src/microcosm/build/us_runtime/support_mix.py). @@ -16,7 +18,118 @@ household budget we can afford to build and serve, which mix gives the best held-out accuracy, for the national compact file and for the CD and county local file? - +## Verdict + +- **National compact file: pool the newest three CPS years and fill to + 300,000 source households with ACS.** With 2022–2024 that is 168,852 CPS + households plus 131,148 ACS households, 484,080 physical rows. Against the + three-year CPS file alone (352,932 rows), held-out state income error falls + from 0.250 to 0.218 and state program-receipt error from 0.208 to 0.184; + district and county measures improve throughout; state tax items cost 0.008 + (0.103 to 0.111). Larger ACS fills keep improving local measures but give + back national program receipt (0.184 at 300k, 0.225 at 600k, 0.239 at + 1.2M), so the compact file stops at 300k. +- **CD and county local file: pool the newest three CPS years and fill to + 1.2M source households with ACS households, not CPS location clones.** That + is 1,384,080 physical rows, 13% fewer than today's 1,588,854-row ACS local + file. At 1.2M, the ACS fill matches clones on held-out district income and + tax items (0.248 and 0.189 against 0.248 and 0.185) with 55% of the clones' + rows, and cuts ACS-native error by 40% in districts (0.123 against 0.206) + and 28% in counties (0.166 against 0.229). Against an ACS-only file of the + same size (today's local file is 57,240 CPS rows plus every ACS household), + the three CPS years cut state program-receipt error from 0.318 to 0.256 and + state tax items from 0.127 to 0.117, and ACS-native error is no worse + (0.069 / 0.123 / 0.166 against 0.074 / 0.128 / 0.172). +- **More CPS years help whenever the fill is ACS.** At 300k in the national + product, one, two and three years give state income error 0.249, 0.236 and + 0.218, program receipt 0.260, 0.217 and 0.184, and tax items 0.133, 0.124 + and 0.111. Income years 2020 and 2021 pass the response-quality check, so a + five-year pool is the next arm to run (see Follow-ups); it was not run here. +- **Clones add geography and nothing else.** In the national product they + leave every state measure where the CPS-only file had it. In both products + they improve district and county measures slowly (national-product district + income 0.378, 0.362, 0.337 and 0.324 from no clones to 1.2M), at about + twice the physical rows of an ACS fill of the same budget. + +The pattern matches the design note's reasoning. ACS rows carry real +variation in what the ACS observes, so income components (the ACS records +wages, self-employment, Social Security, retirement and investment income), +housing and local demographics improve as ACS rows enter. Program receipt on +ACS rows is imputed from CPS donors, so it degrades as the ACS share rises: +state program-receipt error is 0.208 with no ACS, 0.184 with 131k ACS +households beside three CPS years, and 0.303 with ACS alone at 300k. + +## Results + +All errors are mean capped relative error on held-out targets, `min(|est − +target| / max(|target|, 1), 1)`; lower is better. "ACS-native" averages +households, tenure, contract rent, real-estate taxes, household population and +two age bands against the ACS 2024 1-year tables. Rows are physical household +rows (a CPS household carries its PUF tax-detail clone rows); ESS is Kish over +distinct households (an ASEC housing unit counted once across rotation years, +PUF rows and clones). Seed 0 throughout. + +### National product (trained on the 5,683 national and state targets) + +| Arm | Rows | ESS | Income, state | Tax items, state | Program receipt, state | Income, CD | Tax items, CD | ACS-native state / CD / county | +|---|---|---|---|---|---|---|---|---| +| CPS 2022–24 only | 352,932 | 44,943 | 0.250 | 0.103 | 0.208 | 0.378 | 0.420 | 0.112 / 0.219 / 0.298 | +| CPS 2022–24 + clones to 300k | 627,089 | 44,984 | 0.250 | 0.103 | 0.208 | 0.362 | 0.393 | 0.112 / 0.208 / 0.272 | +| CPS 2024 + ACS to 300k | 361,228 | 63,297 | 0.249 | 0.133 | 0.260 | 0.353 | 0.367 | 0.075 / 0.160 / 0.253 | +| CPS 2023–24 + ACS to 300k | 422,543 | 65,908 | 0.236 | 0.124 | 0.217 | 0.341 | 0.361 | 0.084 / 0.165 / 0.250 | +| **CPS 2022–24 + ACS to 300k** | **484,080** | **69,065** | **0.218** | **0.111** | **0.184** | **0.343** | **0.356** | **0.094 / 0.174 / 0.253** | +| ACS only, 300k | 300,000 | 60,492 | 0.261 | 0.151 | 0.303 | 0.351 | 0.358 | 0.083 / 0.166 / 0.273 | +| CPS 2022–24 + 50/50 to 600k | 1,019,084 | 77,830 | 0.213 | 0.112 | 0.187 | 0.319 | 0.332 | 0.096 / 0.165 / 0.223 | +| CPS 2022–24 + ACS to 600k | 784,080 | 113,041 | 0.221 | 0.116 | 0.225 | 0.326 | 0.326 | 0.084 / 0.151 / 0.221 | +| CPS 2022–24 + ACS to 1.2M | 1,384,080 | 222,920 | 0.217 | 0.118 | 0.239 | 0.300 | 0.301 | 0.072 / 0.124 / 0.182 | +| Spread across 3 ACS draws (SD) | | | 0.007 | 0.002 | 0.014 | 0.007 | 0.005 | 0.000 / 0.001 / 0.000 | + +### Local product (adds the 27,148 district-classified targets and district household population) + +| Arm | Rows | ESS | Income, state | Tax items, state | Program receipt, state | Income, CD | Tax items, CD | ACS-native state / CD / county | +|---|---|---|---|---|---|---|---|---| +| CPS 2022–24 only | 352,932 | 52,074 | 0.217 | 0.101 | 0.220 | 0.292 | 0.240 | 0.111 / 0.219 / 0.284 | +| CPS 2022–24 + clones to 600k | 1,254,039 | 54,305 | 0.211 | 0.097 | 0.221 | 0.257 | 0.198 | 0.111 / 0.209 / 0.241 | +| CPS 2022–24 + clones to 1.2M | 2,508,197 | 54,292 | 0.214 | 0.096 | 0.218 | 0.248 | 0.185 | 0.112 / 0.206 / 0.229 | +| CPS 2022–24 + 50/50 to 600k | 1,019,084 | 91,100 | 0.226 | 0.096 | 0.243 | 0.261 | 0.195 | 0.095 / 0.173 / 0.216 | +| CPS 2022–24 + ACS to 600k | 784,080 | 150,595 | 0.228 | 0.109 | 0.267 | 0.262 | 0.199 | 0.079 / 0.142 / 0.198 | +| **CPS 2022–24 + ACS to 1.2M** | **1,384,080** | **276,474** | **0.206** | **0.117** | **0.256** | **0.248** | **0.189** | **0.069 / 0.123 / 0.166** | +| CPS 2024 + ACS to 1.2M | 1,261,228 | 281,840 | 0.204 | 0.123 | 0.278 | 0.245 | 0.191 | 0.065 / 0.121 / 0.167 | +| ACS only, 1.2M | 1,200,000 | 272,607 | 0.206 | 0.127 | 0.318 | 0.244 | 0.193 | 0.074 / 0.128 / 0.172 | +| Spread across 3 ACS draws (SD) | | | 0.007 | 0.002 | 0.006 | 0.002 | 0.002 | 0.000 / 0.001 / 0.001 | + +The spread row comes from three disjoint ACS draws of the 300k arms with +three CPS years. Differences under about 0.01 (0.03 for program receipt, +which has 53 held-out targets) are within draw-to-draw noise. National-level +held-out targets (36) are noisier still and are left out of the tables; they +are in the receipts. + +**Where the local file gives ground.** Program receipt and state tax items +are the two dimensions an ACS fill worsens. If program-receipt accuracy +matters more than local housing and demographics, the 50/50 fill at 600k is +the middle choice: program receipt 0.243 and tax items 0.096, at district +ACS-native 0.173. + +**Report only: SPM poverty** (never calibrated or gated). In the national +product the SPM rate is 12.8% for the three-year CPS file, 12.2% for the +recommended 300k mix and 12.3% for ACS only; child SPM poverty is 14.7%, 13.6% +and 12.3%. ACS rows' SPM resources rest on imputed CPS-only inputs, so these +differences are a property of the imputation as much as of the support. + +## Cost + +| | Measured | +|---|---| +| Engine pass (all 419 concepts), wall time per household on the shared host | CPS rows about 25 ms, ACS rows about 50 ms; 5,000-household engine batches, peak 16–23 GB per 50,000-household shard | +| Calibration, national recommendation (484k rows, 1,500 epochs) | 22 min, 6.2 GB peak | +| Calibration, local recommendation (1.38M rows, 1,500 epochs) | 36 min, 15.9 GB peak | +| Calibration, local clones to 1.2M (2.51M rows) | 55–210 min, 18–28 GB peak | +| Serving | proportional to physical rows: 484k national (+37% over CPS only), 1.38M local (−13% against today's local file) | + +Wall times were measured with the host at load 10 to 400 and are comparable +only within this run. Training loss still fell a median 5.5% between epochs +1,000 and 1,500; every arm had the same budget. + ## Design @@ -68,15 +181,21 @@ That is 30 arms. Each is calibrated twice, once per product: Replicate arms take the next disjoint blocks of the one fixed ACS order, so they are independent draws; seed-0 arms are nested across budgets. Group-quarters households (12% of ACS records) stay in the ACS side, as in -the ACS local release; the CPS has none. +the ACS local release; the CPS has none. The 5,246 group-quarters records +(0.34% of ACS records, all group quarters) whose SPM unit has no member the +pinned engine classifies as an adult are excluded: policyengine-us 2.2.1 +refuses them, and Census puts ACS group quarters outside the SPM universe +(`us_runtime/spm_universe_source.py`). **Five CPS years were not run.** Income years 2020 and 2021 pass the -response-quality check below, but main pins ASEC role and person sources -only for 2022–2024 and refuses other years. The pipeline stages that would -build them peak at 72–80 GB, above this task's 60 GB ceiling, while a Route A -release waits for memory on the same machine. The tool takes more years as -more rows, so a 5-year arm is a rerun once the pins and a base build land (see -Follow-ups). +response-quality check below, but main pinned ASEC role and person sources +only for 2022–2024 when this ran, and the base and release stages that would +enrich two more years peaked at 72–80 GB in recorded runs, above this task's +60 GB ceiling, while a Route A release held the machine. The tool takes more +years as more rows, so a five-year arm is a rerun once a Route A export with +those years exists (see Follow-ups). The same holds for the newest three +years (2023–2025): the 2025 ASEC was pinned on 2026-09-29 +(PolicyEngine/microcosm#1044), after these CPS rows were built. ### Superpool: one engine pass, many arms @@ -90,7 +209,9 @@ reweights subsets: - **ACS rows**: the 2026-09-23 ACS local staging (1,531,614 ACS 2024 1-year households with CPS-only inputs transferred from the 57,240-household receipt-qualified donor spine). The staging's own 57,240 donor rows are not - used. + used. The staging carries `is_spm_independent_minor_role` as all-null on + ACS rows; the column is dropped so the engine derives the role from + household structure (its formula), as the production ACS local build did. Both carry the same PolicyEngine input schema (141 and 140 person inputs). Imputations are fixed across arms: an ACS row's CPS-only variables come from @@ -103,8 +224,8 @@ target's household column as a geography-free value times an indicator of the household's own state or district (`_base_simulation_household_columns`). `compile` groups the 32,842 targets into 419 such concepts, and `materialize` runs the release tool's own -`_materialize_target_frame` on them in 50,000-household shards (peak about -5 GB). Every arm's target matrix is then concept value × geography mask, +`_materialize_target_frame` on them in 50,000-household shards (peak 16–23 +GB). Every arm's target matrix is then concept value × geography mask, assembled sparse. `diffcheck` verifies the identity on real rows: production per-target columns and concept × mask agree exactly on sampled state and district targets of every family (see Evidence). The 11 JCT tax-expenditure @@ -232,3 +353,57 @@ smaller household sample). Rotation overlap: a housing unit appears in at most two adjacent files, so 2022–2024 has 130,294 distinct units in 168,852 households (77.2%), and 2020–2024 would have 211,834 in 290,850 (72.8%). + +## Caveats + +- **CPS rows are income years 2022–2024**, the Route A export available when + this ran. The recommendation is stated for "the newest three years"; the + 2023–2025 export is the rerun. +- **Imputations are held fixed.** ACS rows' CPS-only inputs come from one + 57,240-household donor spine in every arm. A production one-year build + would also impute from a thinner donor pool, which would widen the + one-year arms' program-receipt gap. +- **Clones keep their origin row's engine values**, including anything that + varies by county within a state. +- **The holdout mirrors the unmerged US split without its pins**, and holds out + district children with their state parent but national and state targets + independently. Scores are comparable across arms, not with the eventual + release split. +- **ACS-native truth is the published ACS 2024 1-year**, the same survey year + as the ACS rows. Read it as consistency with the published ACS. +- **Older CPS years are not uprated**, as in Route A: calibration absorbs the + 2022–2024 nominal income gap. +- **Group-quarters minors with no SPM adult are out of the ACS support** (5,246 + records), pending the engine's SPM-universe input (policyengine-us#9462). +- **JCT tax-expenditure targets are excluded** (they need reform simulations). + +## Follow-ups + +- Rerun the CPS-involving arms on the newest three years (2023–2025) once a + Route A export on main at or after `5187fce25` exists: shard it, run + `materialize --source cps`, delete the CPS receipts and rerun the grid. The + ACS concepts are reused. +- Add five-year arms (2020–2024 or 2021–2025) once those years have Route A + enrichment. +- Swap the split mirror for `microcosm.build.us_runtime.target_split` when it + merges, and rescore from the saved weights (`arm` re-scores a receipt whose + weights exist without re-solving). + +## Evidence + +- Differential: production per-target materialization against concept × + mask, 4,000 households from each source, 349 state and district targets + across nine family-level groups: maximum scaled difference 0.0 for both CPS + and ACS rows (`diffcheck.json`). +- Property and differential tests: `test_us_support_mix.py` (14 tests). +- Independent review (Opus 5.5, Subfleet): three high-severity and six + medium-severity findings, all fixed before the grid ran. +- Receipts (in `experiments/us-support-mix-bakeoff-20260930/`): + `dimensions_by_arm.csv`, `headline.md`, `arms.csv`, + `holdout_by_dimension_level.csv`, `holdout_by_dimension_level_common_support.csv`, + `replicate_spread.csv`, `compile.json`, `diffcheck.json`, `acs_truth.json`. + +Reproduce: `compile`, `shard` (both sources), `truth`, `materialize` (both +sources; ACS by rank range), `diffcheck`, `run-grid --products national` and +`--products local`, `report`. Each step writes a receipt with wall time and +peak RSS. diff --git a/experiments/us-support-mix-bakeoff-20260930/README.md b/experiments/us-support-mix-bakeoff-20260930/README.md new file mode 100644 index 0000000000..e2350aeb9c --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/README.md @@ -0,0 +1,23 @@ +# Support-mix bake-off receipts (2026-09-30) + +Outputs of `tools/bakeoff_us_support_mix.py report` over the 60 arm receipts +(30 arms × national and local products), plus the compile and differential +receipts. The design, verdict and caveats are in +[`docs/us-support-mix-bakeoff.md`](../../docs/us-support-mix-bakeoff.md). + +| File | What | +|---|---| +| `dimensions_by_arm.csv` | One row per arm and product: rows, distinct-household ESS, held-out error by dimension and level, ACS-native error by level | +| `headline.md` | The same, as markdown tables by product | +| `arms.csv` | Per-arm counts, ESS variants, training loss, solve time, peak RSS, report-only SPM rates | +| `holdout_by_dimension_level.csv` | Held-out error by product, arm, dimension group, dimension and level (unsupported targets score as misses) | +| `holdout_by_dimension_level_common_support.csv` | The same over targets every arm supports | +| `holdout_unsupported.csv` | Held-out targets no row in an arm can move | +| `replicate_spread.csv` | SD across three disjoint ACS draws (300k arms) | +| `acs_native_by_level_measure.csv` | ACS-native error by product, arm, level and measure | +| `compile.json` | Registry compile: 32,842 specs, 419 concepts, split roles by level | +| `diffcheck.json` | Production per-target columns vs concept × mask on 4,000 households per source: max scaled difference 0.0 | +| `acs_truth.json` | ACS 2024 1-year summary-file cells and their SHA-256 | + +Per-arm receipts (with every held-out target's estimate) and saved weights +stay in the run's work directory; they are 10–15 MB each. diff --git a/experiments/us-support-mix-bakeoff-20260930/acs_native_by_level_measure.csv b/experiments/us-support-mix-bakeoff-20260930/acs_native_by_level_measure.csv new file mode 100644 index 0000000000..0d80fcb4a8 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/acs_native_by_level_measure.csv @@ -0,0 +1,2851 @@ +product,arm,level,measure,geos,mean_rel,median_rel,mean_rel_initial +local,b1200k.cps0.acs100.s0,cd,households,436,0.04427301978229049,0.03438499070140905,0.016911495924950226 +local,b1200k.cps0.acs100.s0,cd,owner,436,0.07221493495841956,0.05565673921806366,0.027389507466497036 +local,b1200k.cps0.acs100.s0,cd,persons_0_17,436,0.09530518962962953,0.08639572136848075,0.06654691908238346 +local,b1200k.cps0.acs100.s0,cd,persons_18_64,436,0.05343013429622955,0.043124630347296036,0.030189007725320485 +local,b1200k.cps0.acs100.s0,cd,persons_65p,436,0.07083138454791808,0.059586512309557804,0.03557104609681045 +local,b1200k.cps0.acs100.s0,cd,persons_male,436,0.03339279937223124,0.023859344556897335,0.03622902588748794 +local,b1200k.cps0.acs100.s0,cd,persons_total,436,0.017674242298261592,0.007315229136467999,0.028675723791477488 +local,b1200k.cps0.acs100.s0,cd,real_estate_taxes_aggregate,436,0.1478134742237319,0.11512662042900623,0.10122144808323005 +local,b1200k.cps0.acs100.s0,cd,rent_contract_annual_aggregate,436,0.32692481095378284,0.2707260630452516,0.31736926347378935 +local,b1200k.cps0.acs100.s0,cd,rent_gross_annual_aggregate,436,0.2882776051782837,0.2501562390667819,0.27748145721184314 +local,b1200k.cps0.acs100.s0,cd,renter,436,0.13920190037099026,0.13353980168716928,0.06711358591432277 +local,b1200k.cps0.acs100.s0,county,households,850,0.08479741210000857,0.061642705606277486,0.04022659235624308 +local,b1200k.cps0.acs100.s0,county,owner,850,0.10733061917970887,0.07397453938049325,0.05181320521507365 +local,b1200k.cps0.acs100.s0,county,persons_0_17,850,0.168484420061009,0.11676165353981811,0.11612417671617863 +local,b1200k.cps0.acs100.s0,county,persons_18_64,850,0.1062927270724857,0.07996488211831002,0.062008162383127195 +local,b1200k.cps0.acs100.s0,county,persons_65p,850,0.1313665379592045,0.09229974735524163,0.07428653610579898 +local,b1200k.cps0.acs100.s0,county,persons_in_households,850,0.08705165365553381,0.05807207390696298,0.05780813581478426 +local,b1200k.cps0.acs100.s0,county,persons_male,850,0.09522152532603957,0.06818776275177599,0.06327159961501264 +local,b1200k.cps0.acs100.s0,county,persons_total,850,0.08577145789280034,0.05662192392393692,0.05559416595186459 +local,b1200k.cps0.acs100.s0,county,real_estate_taxes_aggregate,850,0.19619959787392507,0.1297638903585985,0.14261841373325493 +local,b1200k.cps0.acs100.s0,county,rent_contract_annual_aggregate,850,0.39997174424202137,0.3213450018106754,0.3952170587464888 +local,b1200k.cps0.acs100.s0,county,rent_gross_annual_aggregate,850,0.344812152365374,0.285404808119163,0.32378289924857434 +local,b1200k.cps0.acs100.s0,county,renter,850,0.20382909800016993,0.167336252691561,0.1188825367351446 +local,b1200k.cps0.acs100.s0,national,households,1,0.007434925251567506,0.007434925251567506,0.00012716099964809008 +local,b1200k.cps0.acs100.s0,national,owner,1,0.049609524745631815,0.049609524745631815,0.0007317503461692467 +local,b1200k.cps0.acs100.s0,national,persons_0_17,1,0.08538541333707152,0.08538541333707152,0.037687584363355786 +local,b1200k.cps0.acs100.s0,national,persons_18_64,1,0.05050980146309542,0.05050980146309542,0.018638293933160584 +local,b1200k.cps0.acs100.s0,national,persons_65p,1,0.002989548911857183,0.002989548911857183,0.011035015710395802 +local,b1200k.cps0.acs100.s0,national,persons_in_households,1,0.008616414665094864,0.008616414665094864,0.017428446304894415 +local,b1200k.cps0.acs100.s0,national,persons_male,1,0.027853571076861393,0.027853571076861393,0.028831067096646904 +local,b1200k.cps0.acs100.s0,national,persons_total,1,0.011736201781802002,0.011736201781802002,0.017379591291828728 +local,b1200k.cps0.acs100.s0,national,real_estate_taxes_aggregate,1,0.11171387907502785,0.11171387907502785,0.016208821369269332 +local,b1200k.cps0.acs100.s0,national,rent_contract_annual_aggregate,1,0.1411351588986137,0.1411351588986137,0.1313430482891693 +local,b1200k.cps0.acs100.s0,national,rent_gross_annual_aggregate,1,0.24550894175841056,0.24550894175841056,0.23690682004777663 +local,b1200k.cps0.acs100.s0,national,renter,1,0.12050023329682552,0.12050023329682552,0.0493118006082098 +local,b1200k.cps0.acs100.s0,state,households,51,0.0261149426357419,0.020224442939404987,0.006340511853583996 +local,b1200k.cps0.acs100.s0,state,owner,51,0.04226254446330702,0.03863608876169431,0.007269437556433841 +local,b1200k.cps0.acs100.s0,state,persons_0_17,51,0.07781405134002749,0.08167234271462306,0.03864460240960343 +local,b1200k.cps0.acs100.s0,state,persons_18_64,51,0.05112823319220194,0.04383455545703196,0.021234174699764987 +local,b1200k.cps0.acs100.s0,state,persons_65p,51,0.013391319876276588,0.006075469260708913,0.016713799694230005 +local,b1200k.cps0.acs100.s0,state,persons_in_households,51,0.013492788124963104,0.01057947275338239,0.017791336343165817 +local,b1200k.cps0.acs100.s0,state,persons_male,51,0.029590284938556807,0.027031979405427557,0.025371236158061715 +local,b1200k.cps0.acs100.s0,state,persons_total,51,0.01714308222067046,0.011395755052325322,0.01756616344174996 +local,b1200k.cps0.acs100.s0,state,real_estate_taxes_aggregate,51,0.08143662187283232,0.07684256342802845,0.021820775325743013 +local,b1200k.cps0.acs100.s0,state,rent_contract_annual_aggregate,51,0.1974558579308067,0.16850082111710196,0.1980296977894466 +local,b1200k.cps0.acs100.s0,state,rent_gross_annual_aggregate,51,0.23856212492889373,0.19012901510541358,0.21777165814576163 +local,b1200k.cps0.acs100.s0,state,renter,51,0.14190661554317982,0.14313912310291732,0.06036941203737398 +local,b1200k.cps2022-2023-2024.acs000.s0,cd,households,436,0.069047881470985,0.05050555087673955,0.04518524883062504 +local,b1200k.cps2022-2023-2024.acs000.s0,cd,owner,436,0.12520165569337727,0.07059814825807703,0.1404255430161006 +local,b1200k.cps2022-2023-2024.acs000.s0,cd,persons_0_17,436,0.08505360085935257,0.06300136431262499,0.11965151863731681 +local,b1200k.cps2022-2023-2024.acs000.s0,cd,persons_18_64,436,0.04539559222704012,0.03788262549387429,0.05732985391201939 +local,b1200k.cps2022-2023-2024.acs000.s0,cd,persons_65p,436,0.09288995095172602,0.07234892081608701,0.12667758978290083 +local,b1200k.cps2022-2023-2024.acs000.s0,cd,persons_male,436,0.040893566595769926,0.03543914610579385,0.0589791545885527 +local,b1200k.cps2022-2023-2024.acs000.s0,cd,persons_total,436,0.0262403138798725,0.020370644477683893,0.04942042985000886 +local,b1200k.cps2022-2023-2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.5160473335852018,0.5466787625691101,0.5765496463852601 +local,b1200k.cps2022-2023-2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.3113737725839132,0.255085776749404,0.31374362377056914 +local,b1200k.cps2022-2023-2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.2890066092350935,0.2653573840915736,0.2865611639180526 +local,b1200k.cps2022-2023-2024.acs000.s0,cd,renter,436,0.24502593115577462,0.18768166786271062,0.22171063149334405 +local,b1200k.cps2022-2023-2024.acs000.s0,county,households,850,0.08254936528501279,0.05845286016695979,0.06351266137919379 +local,b1200k.cps2022-2023-2024.acs000.s0,county,owner,850,0.13574830527729653,0.09899943583256016,0.1350622630923501 +local,b1200k.cps2022-2023-2024.acs000.s0,county,persons_0_17,850,0.15656239170034128,0.11190688982764949,0.15380407717060152 +local,b1200k.cps2022-2023-2024.acs000.s0,county,persons_18_64,850,0.0919161055138269,0.06594138371341711,0.09274177961645999 +local,b1200k.cps2022-2023-2024.acs000.s0,county,persons_65p,850,0.15403333328716418,0.11551704718184279,0.15379855358052308 +local,b1200k.cps2022-2023-2024.acs000.s0,county,persons_in_households,850,0.07269200972224081,0.048369690125710206,0.07819523906848598 +local,b1200k.cps2022-2023-2024.acs000.s0,county,persons_male,850,0.08018326316852016,0.05763070971102535,0.08118995883186989 +local,b1200k.cps2022-2023-2024.acs000.s0,county,persons_total,850,0.06961858566581294,0.04781197000302429,0.0716431515359234 +local,b1200k.cps2022-2023-2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.5162438993712757,0.5461745193585448,0.5481905154373263 +local,b1200k.cps2022-2023-2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.39195115674852765,0.3034040453549717,0.39448468761155026 +local,b1200k.cps2022-2023-2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.3360511703613626,0.28433783311676236,0.3343185758806215 +local,b1200k.cps2022-2023-2024.acs000.s0,county,renter,850,0.31916394555059,0.23726415841783602,0.29234951692374417 +local,b1200k.cps2022-2023-2024.acs000.s0,national,households,1,0.040387780111331,0.040387780111331,0.040387780113526596 +local,b1200k.cps2022-2023-2024.acs000.s0,national,owner,1,0.03357858408267326,0.03357858408267326,0.04504294266257366 +local,b1200k.cps2022-2023-2024.acs000.s0,national,persons_0_17,1,0.049308676209858064,0.049308676209858064,0.02109426309361929 +local,b1200k.cps2022-2023-2024.acs000.s0,national,persons_18_64,1,0.0246225072209167,0.0246225072209167,0.026748636553088446 +local,b1200k.cps2022-2023-2024.acs000.s0,national,persons_65p,1,0.031433972996498145,0.031433972996498145,0.018547026346188787 +local,b1200k.cps2022-2023-2024.acs000.s0,national,persons_in_households,1,0.015038946572494154,0.015038946572494154,0.007468807604379701 +local,b1200k.cps2022-2023-2024.acs000.s0,national,persons_male,1,0.023872286683585965,0.023872286683585965,0.030890456469098288 +local,b1200k.cps2022-2023-2024.acs000.s0,national,persons_total,1,0.009996163644612055,0.009996163644612055,0.017379591290894465 +local,b1200k.cps2022-2023-2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.5775229769203329,0.5775229769203329,0.6659411721508772 +local,b1200k.cps2022-2023-2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.133663487617987,0.133663487617987,0.13110826309010554 +local,b1200k.cps2022-2023-2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.23894526735753024,0.23894526735753024,0.2367005671837359 +local,b1200k.cps2022-2023-2024.acs000.s0,national,renter,1,0.019651153335989803,0.019651153335989803,0.002244212836202863 +local,b1200k.cps2022-2023-2024.acs000.s0,state,households,51,0.04168106974774076,0.022896189053178962,0.038818772971576876 +local,b1200k.cps2022-2023-2024.acs000.s0,state,owner,51,0.03948769039104629,0.0342401745854921,0.0493736484367394 +local,b1200k.cps2022-2023-2024.acs000.s0,state,persons_0_17,51,0.057034421046596416,0.048602844972185914,0.0512512979358941 +local,b1200k.cps2022-2023-2024.acs000.s0,state,persons_18_64,51,0.029182394667022712,0.025198248138175477,0.02908260558134452 +local,b1200k.cps2022-2023-2024.acs000.s0,state,persons_65p,51,0.026976965624160403,0.009241879478656055,0.033742093722682054 +local,b1200k.cps2022-2023-2024.acs000.s0,state,persons_in_households,51,0.018360548126327814,0.017012541478905387,0.020461498374014224 +local,b1200k.cps2022-2023-2024.acs000.s0,state,persons_male,51,0.026710155421557608,0.02186889418466467,0.030540574782717666 +local,b1200k.cps2022-2023-2024.acs000.s0,state,persons_total,51,0.015037490672895672,0.013782890537052348,0.017719590215260896 +local,b1200k.cps2022-2023-2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.47045561292598304,0.45335044693996196,0.5512094530501032 +local,b1200k.cps2022-2023-2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.15055004442883715,0.14511023272786083,0.14685647166608887 +local,b1200k.cps2022-2023-2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.23792044114864602,0.23306018687729513,0.23190637634799482 +local,b1200k.cps2022-2023-2024.acs000.s0,state,renter,51,0.08950569746242691,0.08130359799445902,0.0587400793962271 +local,b1200k.cps2022-2023-2024.acs100.s0,cd,households,436,0.05033663345949752,0.03872338918832381,0.022072086987933517 +local,b1200k.cps2022-2023-2024.acs100.s0,cd,owner,436,0.0800394089743498,0.05354706630452265,0.04119741442822208 +local,b1200k.cps2022-2023-2024.acs100.s0,cd,persons_0_17,436,0.08699245500928138,0.0720094793897201,0.06407429334169583 +local,b1200k.cps2022-2023-2024.acs100.s0,cd,persons_18_64,436,0.046625853235814065,0.04028539741595516,0.029576337882797 +local,b1200k.cps2022-2023-2024.acs100.s0,cd,persons_65p,436,0.07049582256943826,0.057286370487826754,0.0434547563822687 +local,b1200k.cps2022-2023-2024.acs100.s0,cd,persons_male,436,0.029285320495004027,0.022977191834417245,0.034858214194812345 +local,b1200k.cps2022-2023-2024.acs100.s0,cd,persons_total,436,0.01492332807761046,0.009141253666360092,0.027570366598346125 +local,b1200k.cps2022-2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.11973728281403613,0.10955118393036242,0.1073369274538778 +local,b1200k.cps2022-2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3193227641622278,0.2620268719550337,0.3112882414289057 +local,b1200k.cps2022-2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.2801301035735802,0.24557330869373642,0.2727051118203135 +local,b1200k.cps2022-2023-2024.acs100.s0,cd,renter,436,0.13429554693835505,0.11707844229710793,0.07244212156029424 +local,b1200k.cps2022-2023-2024.acs100.s0,county,households,850,0.08358765476474253,0.060875251128713226,0.04623431398270421 +local,b1200k.cps2022-2023-2024.acs100.s0,county,owner,850,0.10727432243562716,0.07643019238756477,0.06286937117629632 +local,b1200k.cps2022-2023-2024.acs100.s0,county,persons_0_17,850,0.15597346095635714,0.10883541412015561,0.11212966185436829 +local,b1200k.cps2022-2023-2024.acs100.s0,county,persons_18_64,850,0.09931665005091224,0.07637679718183411,0.0629789352653305 +local,b1200k.cps2022-2023-2024.acs100.s0,county,persons_65p,850,0.1256395362323489,0.09173213843839803,0.08174509207721281 +local,b1200k.cps2022-2023-2024.acs100.s0,county,persons_in_households,850,0.08184941219532303,0.05762064435866421,0.057486963759458595 +local,b1200k.cps2022-2023-2024.acs100.s0,county,persons_male,850,0.0881232800702021,0.06309521163356041,0.06365689945447187 +local,b1200k.cps2022-2023-2024.acs100.s0,county,persons_total,850,0.08062007640722303,0.05633570468590887,0.056121061356943086 +local,b1200k.cps2022-2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.18844777008577143,0.15531365407430953,0.1441357392419482 +local,b1200k.cps2022-2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.4018415720761538,0.30920657337738766,0.3908362320336901 +local,b1200k.cps2022-2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.3399882882758326,0.28431800997918355,0.32001474708529537 +local,b1200k.cps2022-2023-2024.acs100.s0,county,renter,850,0.18262529596015187,0.1485895454542121,0.11658787580125685 +local,b1200k.cps2022-2023-2024.acs100.s0,national,households,1,0.01921157357424606,0.01921157357424606,0.005732790784073824 +local,b1200k.cps2022-2023-2024.acs100.s0,national,owner,1,0.050563556129256365,0.050563556129256365,0.006959414264278527 +local,b1200k.cps2022-2023-2024.acs100.s0,national,persons_0_17,1,0.07494785130421898,0.07494785130421898,0.03563993224750431 +local,b1200k.cps2022-2023-2024.acs100.s0,national,persons_18_64,1,0.0424995025119307,0.0424995025119307,0.019905132411002127 +local,b1200k.cps2022-2023-2024.acs100.s0,national,persons_65p,1,0.003686172021639524,0.003686172021639524,0.012856450490533357 +local,b1200k.cps2022-2023-2024.acs100.s0,national,persons_in_households,1,0.0012142039072195177,0.0012142039072195177,0.013839414143941027 +local,b1200k.cps2022-2023-2024.acs100.s0,national,persons_male,1,0.02546911713744286,0.02546911713744286,0.02887160484491514 +local,b1200k.cps2022-2023-2024.acs100.s0,national,persons_total,1,0.010326216608868816,0.010326216608868816,0.017379591296109748 +local,b1200k.cps2022-2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.08789782739600065,0.08789782739600065,0.0817794119248525 +local,b1200k.cps2022-2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.13022246502631346,0.13022246502631346,0.13162350159042394 +local,b1200k.cps2022-2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.23592241596999916,0.23592241596999916,0.2371531911854979 +local,b1200k.cps2022-2023-2024.acs100.s0,national,renter,1,0.08654648233389382,0.08654648233389382,0.04215922834937168 +local,b1200k.cps2022-2023-2024.acs100.s0,state,households,51,0.02669892704441823,0.021286281792827676,0.008128965882120278 +local,b1200k.cps2022-2023-2024.acs100.s0,state,owner,51,0.044193092411662326,0.036755476214100934,0.010166682506037894 +local,b1200k.cps2022-2023-2024.acs100.s0,state,persons_0_17,51,0.07195889625305034,0.06846175517125037,0.03951583348206128 +local,b1200k.cps2022-2023-2024.acs100.s0,state,persons_18_64,51,0.044122403435575754,0.037339273199125445,0.021553838014691296 +local,b1200k.cps2022-2023-2024.acs100.s0,state,persons_65p,51,0.011377534930114655,0.006771900709924348,0.01929052988991131 +local,b1200k.cps2022-2023-2024.acs100.s0,state,persons_in_households,51,0.009369319115184746,0.005921373320017101,0.015489999611270629 +local,b1200k.cps2022-2023-2024.acs100.s0,state,persons_male,51,0.02682046524629821,0.023509475300571816,0.02459271957332012 +local,b1200k.cps2022-2023-2024.acs100.s0,state,persons_total,51,0.015515630264381986,0.01086381073308733,0.017107951769455565 +local,b1200k.cps2022-2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.1031037557804877,0.1081146484287335,0.06472528643643173 +local,b1200k.cps2022-2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.17291321667144863,0.13431714327517985,0.1831818536384398 +local,b1200k.cps2022-2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.22089349062798153,0.19151707096284634,0.2117863175680653 +local,b1200k.cps2022-2023-2024.acs100.s0,state,renter,51,0.11370167226840043,0.11045873150101593,0.056837507657463315 +local,b1200k.cps2023-2024.acs000.s0,cd,households,436,0.06823630625827151,0.0513314243928471,0.044564574207843 +local,b1200k.cps2023-2024.acs000.s0,cd,owner,436,0.12372657081128881,0.07262364948156792,0.14153227525093334 +local,b1200k.cps2023-2024.acs000.s0,cd,persons_0_17,436,0.08685969552550799,0.06438630503168968,0.12293927498450163 +local,b1200k.cps2023-2024.acs000.s0,cd,persons_18_64,436,0.04587626690319968,0.037621228671312,0.06042594908692552 +local,b1200k.cps2023-2024.acs000.s0,cd,persons_65p,436,0.08892503463673175,0.07058639178583384,0.1287992584404723 +local,b1200k.cps2023-2024.acs000.s0,cd,persons_male,436,0.042648098848131775,0.0353516181589049,0.06182140406886844 +local,b1200k.cps2023-2024.acs000.s0,cd,persons_total,436,0.025819633584924617,0.020160422786727993,0.051768503933713614 +local,b1200k.cps2023-2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.5109924048994318,0.5554029356082184,0.567240671218558 +local,b1200k.cps2023-2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.31471680804439256,0.26921925607656655,0.3167342940476949 +local,b1200k.cps2023-2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.28730361455997916,0.2544565835722675,0.28658779645383037 +local,b1200k.cps2023-2024.acs000.s0,cd,renter,436,0.2502072468472576,0.19928669619302652,0.2215426684768285 +local,b1200k.cps2023-2024.acs000.s0,county,households,850,0.08227707651771957,0.05708435627653949,0.06282201659937088 +local,b1200k.cps2023-2024.acs000.s0,county,owner,850,0.1365513448559776,0.10027913776026155,0.1364383464137909 +local,b1200k.cps2023-2024.acs000.s0,county,persons_0_17,850,0.1550747486871637,0.11080915714771708,0.1551641847716341 +local,b1200k.cps2023-2024.acs000.s0,county,persons_18_64,850,0.09284813370461804,0.06690700356047218,0.09394595132377956 +local,b1200k.cps2023-2024.acs000.s0,county,persons_65p,850,0.1547150990782576,0.11231837432941377,0.1551185502768662 +local,b1200k.cps2023-2024.acs000.s0,county,persons_in_households,850,0.07285485683579301,0.04710556785699737,0.07986795721353147 +local,b1200k.cps2023-2024.acs000.s0,county,persons_male,850,0.08231025595134485,0.061443635968005936,0.08350473885300172 +local,b1200k.cps2023-2024.acs000.s0,county,persons_total,850,0.07036676827465319,0.049970688623287046,0.0730137023744197 +local,b1200k.cps2023-2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.5100151051727887,0.5389719213468258,0.5407990038976922 +local,b1200k.cps2023-2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.4003477775566855,0.32089936466070845,0.40129323930771454 +local,b1200k.cps2023-2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.3342906185107772,0.2885282817415071,0.3348004185410823 +local,b1200k.cps2023-2024.acs000.s0,county,renter,850,0.3236367136838645,0.2511300876641732,0.2964990840290454 +local,b1200k.cps2023-2024.acs000.s0,national,households,1,0.04063176077417863,0.04063176077417863,0.04063176077459197 +local,b1200k.cps2023-2024.acs000.s0,national,owner,1,0.02668735471636629,0.02668735471636629,0.042345165726567116 +local,b1200k.cps2023-2024.acs000.s0,national,persons_0_17,1,0.050165281051242086,0.050165281051242086,0.027390231881011307 +local,b1200k.cps2023-2024.acs000.s0,national,persons_18_64,1,0.02535449644263056,0.02535449644263056,0.026805015070826117 +local,b1200k.cps2023-2024.acs000.s0,national,persons_65p,1,0.027253251343840143,0.027253251343840143,0.026233676447592717 +local,b1200k.cps2023-2024.acs000.s0,national,persons_in_households,1,0.015544724434704456,0.015544724434704456,0.00746880760318086 +local,b1200k.cps2023-2024.acs000.s0,national,persons_male,1,0.02512630084872017,0.02512630084872017,0.030408793666069425 +local,b1200k.cps2023-2024.acs000.s0,national,persons_total,1,0.009502860382089346,0.009502860382089346,0.017379591292063738 +local,b1200k.cps2023-2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.5730728368453866,0.5730728368453866,0.6562268648260605 +local,b1200k.cps2023-2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.12169961923298694,0.12169961923298694,0.12227496863453662 +local,b1200k.cps2023-2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.22843531132430123,0.22843531132430123,0.2289407412337119 +local,b1200k.cps2023-2024.acs000.s0,national,renter,1,0.03094853731435451,0.03094853731435451,0.0025205865938268818 +local,b1200k.cps2023-2024.acs000.s0,state,households,51,0.04300917388043082,0.028267608939989496,0.040169481760378004 +local,b1200k.cps2023-2024.acs000.s0,state,owner,51,0.03536385498716099,0.022638393308355476,0.047575326212757944 +local,b1200k.cps2023-2024.acs000.s0,state,persons_0_17,51,0.05815685747513437,0.046424369824549366,0.05483953711216453 +local,b1200k.cps2023-2024.acs000.s0,state,persons_18_64,51,0.030029523382629673,0.02560453248883065,0.03073725927409112 +local,b1200k.cps2023-2024.acs000.s0,state,persons_65p,51,0.02463443118446185,0.010466984175165055,0.03958899754100444 +local,b1200k.cps2023-2024.acs000.s0,state,persons_in_households,51,0.018935722287930026,0.016961583043392573,0.019558544514569513 +local,b1200k.cps2023-2024.acs000.s0,state,persons_male,51,0.02939568631759411,0.025882439974876797,0.031232583282332423 +local,b1200k.cps2023-2024.acs000.s0,state,persons_total,51,0.01503874676303471,0.014329320578572877,0.018964847449251816 +local,b1200k.cps2023-2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.46567602625174936,0.45958977901821174,0.5416227019420768 +local,b1200k.cps2023-2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.14519540520012447,0.1345490865702917,0.1416029247645683 +local,b1200k.cps2023-2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.22700239776654763,0.22151881209702406,0.2199685049241693 +local,b1200k.cps2023-2024.acs000.s0,state,renter,51,0.08866100355154378,0.0798515893412378,0.06435477021533238 +local,b1200k.cps2023-2024.acs100.s0,cd,households,436,0.04840291468980343,0.037682359850653414,0.020154341983230194 +local,b1200k.cps2023-2024.acs100.s0,cd,owner,436,0.07575224567715635,0.05223534722239018,0.03577675830490396 +local,b1200k.cps2023-2024.acs100.s0,cd,persons_0_17,436,0.08901853399561867,0.07495092069542766,0.0654114033746476 +local,b1200k.cps2023-2024.acs100.s0,cd,persons_18_64,436,0.0489178963243679,0.04275858806816561,0.029571705565789384 +local,b1200k.cps2023-2024.acs100.s0,cd,persons_65p,436,0.06837095589954867,0.05368913601230747,0.039860944908416435 +local,b1200k.cps2023-2024.acs100.s0,cd,persons_male,436,0.030269121529739332,0.023447714798054985,0.035369958291775805 +local,b1200k.cps2023-2024.acs100.s0,cd,persons_total,436,0.015509260934857064,0.008455891598493349,0.028067183549150776 +local,b1200k.cps2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.10195119873094961,0.08437662765663728,0.09845020440267864 +local,b1200k.cps2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.32088254062477856,0.2717499181378628,0.31361045161538365 +local,b1200k.cps2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.27898251579399685,0.24823638444438675,0.2737845094027156 +local,b1200k.cps2023-2024.acs100.s0,cd,renter,436,0.1317651837980077,0.1206504278183243,0.06823628106225212 +local,b1200k.cps2023-2024.acs100.s0,county,households,850,0.08407567252452944,0.058786355331609544,0.04371191414055543 +local,b1200k.cps2023-2024.acs100.s0,county,owner,850,0.10569652618913603,0.0727035265494301,0.05878768843480771 +local,b1200k.cps2023-2024.acs100.s0,county,persons_0_17,850,0.1609674381293341,0.11013953295976499,0.11046384351569767 +local,b1200k.cps2023-2024.acs100.s0,county,persons_18_64,850,0.10300110464382223,0.08181851960551409,0.06312088019806363 +local,b1200k.cps2023-2024.acs100.s0,county,persons_65p,850,0.12309298735508256,0.09103330423310793,0.07924608197981975 +local,b1200k.cps2023-2024.acs100.s0,county,persons_in_households,850,0.08381264564726133,0.05394361035238168,0.0573049693189195 +local,b1200k.cps2023-2024.acs100.s0,county,persons_male,850,0.09137703409369415,0.06420590400466467,0.06325689573472675 +local,b1200k.cps2023-2024.acs100.s0,county,persons_total,850,0.08265158863744038,0.055410636527994925,0.055813629157630655 +local,b1200k.cps2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.17550785461243032,0.1307373485414577,0.1380272770547855 +local,b1200k.cps2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.4039224879425764,0.3183990937052586,0.3929387851111985 +local,b1200k.cps2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.34117374752371477,0.28407123105914334,0.3211877374058415 +local,b1200k.cps2023-2024.acs100.s0,county,renter,850,0.1846084800599118,0.14809598285625203,0.11243008690078864 +local,b1200k.cps2023-2024.acs100.s0,national,households,1,0.01595867596830234,0.01595867596830234,0.0037640638990095875 +local,b1200k.cps2023-2024.acs100.s0,national,owner,1,0.048736712187690746,0.048736712187690746,0.004551321624416254 +local,b1200k.cps2023-2024.acs100.s0,national,persons_0_17,1,0.07868373605408166,0.07868373605408166,0.0372720265406491 +local,b1200k.cps2023-2024.acs100.s0,national,persons_18_64,1,0.04501411774873171,0.04501411774873171,0.01944243097417546 +local,b1200k.cps2023-2024.acs100.s0,national,persons_65p,1,0.0013115493360290138,0.0013115493360290138,0.013244079503840643 +local,b1200k.cps2023-2024.acs100.s0,national,persons_in_households,1,0.0032755926029794133,0.0032755926029794133,0.015085609209046204 +local,b1200k.cps2023-2024.acs100.s0,national,persons_male,1,0.025823371900619136,0.025823371900619136,0.028723425850529456 +local,b1200k.cps2023-2024.acs100.s0,national,persons_total,1,0.010620123176580091,0.010620123176580091,0.017379591291671177 +local,b1200k.cps2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.032632087661508984,0.032632087661508984,0.048095512197352995 +local,b1200k.cps2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.13053750727559332,0.13053750727559332,0.1302302441270425 +local,b1200k.cps2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.2361991726244515,0.2361991726244515,0.23592924971340132 +local,b1200k.cps2023-2024.acs100.s0,national,renter,1,0.09348036321971608,0.09348036321971608,0.04412479300143794 +local,b1200k.cps2023-2024.acs100.s0,state,households,51,0.025897817079565403,0.02453825475231082,0.007366472441886084 +local,b1200k.cps2023-2024.acs100.s0,state,owner,51,0.04185070202577952,0.03732080479692035,0.008502929987951028 +local,b1200k.cps2023-2024.acs100.s0,state,persons_0_17,51,0.0741553309023377,0.07142870092339089,0.040353336543008406 +local,b1200k.cps2023-2024.acs100.s0,state,persons_18_64,51,0.0466570961098337,0.04033399327374196,0.021963235988107524 +local,b1200k.cps2023-2024.acs100.s0,state,persons_65p,51,0.011631330933119343,0.007189042982982841,0.017674882541369112 +local,b1200k.cps2023-2024.acs100.s0,state,persons_in_households,51,0.010680112959660338,0.0073078626904282485,0.016703247134444904 +local,b1200k.cps2023-2024.acs100.s0,state,persons_male,51,0.028252386999057067,0.024607169623923824,0.02456790941781729 +local,b1200k.cps2023-2024.acs100.s0,state,persons_total,51,0.016492835915775248,0.012087375300734938,0.017474487339868436 +local,b1200k.cps2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.061344046137656115,0.05157626485079917,0.03822292357876195 +local,b1200k.cps2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.17757474874509294,0.15688487403070306,0.18859795684214398 +local,b1200k.cps2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.2230417230264341,0.1915804151735081,0.21413141669053612 +local,b1200k.cps2023-2024.acs100.s0,state,renter,51,0.11841935590620671,0.11620559782159323,0.05758225115104507 +local,b1200k.cps2024.acs000.s0,cd,households,436,0.07061945499342524,0.054447615296628074,0.04621848016869883 +local,b1200k.cps2024.acs000.s0,cd,owner,436,0.12208907880508253,0.07136555045320586,0.14132672189037712 +local,b1200k.cps2024.acs000.s0,cd,persons_0_17,436,0.08928444070922048,0.06604086280709831,0.12785088140978082 +local,b1200k.cps2024.acs000.s0,cd,persons_18_64,436,0.04680255428764767,0.03914806296293263,0.06359121804798824 +local,b1200k.cps2024.acs000.s0,cd,persons_65p,436,0.08745341350057936,0.06843779518737446,0.13469387628308355 +local,b1200k.cps2024.acs000.s0,cd,persons_male,436,0.0467475539067713,0.03945874019726592,0.06364368304459218 +local,b1200k.cps2024.acs000.s0,cd,persons_total,436,0.026136647367809716,0.020378041309458146,0.053907086393193346 +local,b1200k.cps2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.5136946291264611,0.5507457229011867,0.5521107010770457 +local,b1200k.cps2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.32226693727663036,0.2650347953889744,0.3200859517806284 +local,b1200k.cps2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.2879375936367882,0.25571669300392197,0.2843673506925899 +local,b1200k.cps2024.acs000.s0,cd,renter,436,0.2597683673389378,0.1994911140374569,0.22713797865020413 +local,b1200k.cps2024.acs000.s0,county,households,850,0.08500416390249613,0.05986353034027067,0.06359084601637403 +local,b1200k.cps2024.acs000.s0,county,owner,850,0.13832147218972188,0.1033648904596967,0.13749341851081417 +local,b1200k.cps2024.acs000.s0,county,persons_0_17,850,0.15874757812623363,0.11110751870459776,0.1592650909236374 +local,b1200k.cps2024.acs000.s0,county,persons_18_64,850,0.09647536331995574,0.06985646320402139,0.09714335564405126 +local,b1200k.cps2024.acs000.s0,county,persons_65p,850,0.15662198718630954,0.12076302578328352,0.15816236579282392 +local,b1200k.cps2024.acs000.s0,county,persons_in_households,850,0.0773272839057035,0.051243129852990746,0.08228200333288341 +local,b1200k.cps2024.acs000.s0,county,persons_male,850,0.08670908893747,0.060433700363205736,0.08637137279811688 +local,b1200k.cps2024.acs000.s0,county,persons_total,850,0.07382269604012116,0.04949474803491896,0.0760483537975984 +local,b1200k.cps2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.5085380449322112,0.5456383327989675,0.5248335872991333 +local,b1200k.cps2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.40387738945572943,0.3203761441059867,0.40502530981820684 +local,b1200k.cps2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.34138160996641065,0.2912980981530274,0.33851544114425125 +local,b1200k.cps2024.acs000.s0,county,renter,850,0.3280486564340045,0.24111800116666388,0.30275767867549086 +local,b1200k.cps2024.acs000.s0,national,households,1,0.04250326677483191,0.04250326677483191,0.042503266232915296 +local,b1200k.cps2024.acs000.s0,national,owner,1,0.018497025877870728,0.018497025877870728,0.04010859549407332 +local,b1200k.cps2024.acs000.s0,national,persons_0_17,1,0.0529098872300116,0.0529098872300116,0.03288093308337006 +local,b1200k.cps2024.acs000.s0,national,persons_18_64,1,0.027186266639073375,0.027186266639073375,0.028643647199660546 +local,b1200k.cps2024.acs000.s0,national,persons_65p,1,0.028122324928439996,0.028122324928439996,0.03895423703646453 +local,b1200k.cps2024.acs000.s0,national,persons_in_households,1,0.014850491703266876,0.014850491703266876,0.007468807605125023 +local,b1200k.cps2024.acs000.s0,national,persons_male,1,0.0296574753233379,0.0296574753233379,0.030150509781627526 +local,b1200k.cps2024.acs000.s0,national,persons_total,1,0.010179970427735854,0.010179970427735854,0.017379591290167525 +local,b1200k.cps2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.5734096210909452,0.5734096210909452,0.6395411932654765 +local,b1200k.cps2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.10512361643159428,0.10512361643159428,0.09886944608007787 +local,b1200k.cps2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.21387371176109132,0.21387371176109132,0.20837958115855362 +local,b1200k.cps2024.acs000.s0,national,renter,1,0.052680114395864,0.052680114395864,0.012242781550688111 +local,b1200k.cps2024.acs000.s0,state,households,51,0.04509446137444519,0.035591398316802865,0.041131832400175525 +local,b1200k.cps2024.acs000.s0,state,owner,51,0.03735779135747842,0.0328148458904881,0.047374454375478325 +local,b1200k.cps2024.acs000.s0,state,persons_0_17,51,0.0608430465769432,0.05925565294492145,0.05938231280038761 +local,b1200k.cps2024.acs000.s0,state,persons_18_64,51,0.032236174547928695,0.028585606009608588,0.03622043144079596 +local,b1200k.cps2024.acs000.s0,state,persons_65p,51,0.026866327734650825,0.009907943655028936,0.05328853265489556 +local,b1200k.cps2024.acs000.s0,state,persons_in_households,51,0.01952012057169996,0.016475247629454556,0.01986143555982169 +local,b1200k.cps2024.acs000.s0,state,persons_male,51,0.03410085358804972,0.03223740330041886,0.03069101486431141 +local,b1200k.cps2024.acs000.s0,state,persons_total,51,0.01647040865920467,0.01455562626142054,0.01840903075160598 +local,b1200k.cps2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.46846268457971546,0.4458535292488854,0.5260015221555049 +local,b1200k.cps2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.12988412655697323,0.10772283514220297,0.12759779821473768 +local,b1200k.cps2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.21017842010863508,0.21588794454882224,0.2025211568796707 +local,b1200k.cps2024.acs000.s0,state,renter,51,0.08980259398304453,0.0775690992009007,0.07151289876278223 +local,b1200k.cps2024.acs100.s0,cd,households,436,0.046274654721472366,0.03574221851605327,0.01853937197230943 +local,b1200k.cps2024.acs100.s0,cd,owner,436,0.07326928615038059,0.051809614720535246,0.031085600049497085 +local,b1200k.cps2024.acs100.s0,cd,persons_0_17,436,0.09287279893063863,0.0828143539740732,0.06602954734043533 +local,b1200k.cps2024.acs100.s0,cd,persons_18_64,436,0.05124578291564259,0.04364605009904164,0.030278548769655505 +local,b1200k.cps2024.acs100.s0,cd,persons_65p,436,0.06941074787589568,0.060294530530786566,0.03688986989816291 +local,b1200k.cps2024.acs100.s0,cd,persons_male,436,0.032307011354175144,0.024619955414711663,0.0358491426487685 +local,b1200k.cps2024.acs100.s0,cd,persons_total,436,0.016409115483998666,0.007938841542176112,0.02858447871974891 +local,b1200k.cps2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.10530242189777947,0.07326368418659021,0.09657477627699504 +local,b1200k.cps2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.324012917272704,0.2701136395841787,0.3160250987957435 +local,b1200k.cps2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.2808662477301605,0.2512192577565679,0.27600633235071437 +local,b1200k.cps2024.acs100.s0,cd,renter,436,0.13277144787225295,0.12347808007696831,0.06636123665010386 +local,b1200k.cps2024.acs100.s0,county,households,850,0.08484494902731046,0.05813715321045412,0.04220600709712167 +local,b1200k.cps2024.acs100.s0,county,owner,850,0.10629675717950073,0.07359410254361885,0.055121571185418446 +local,b1200k.cps2024.acs100.s0,county,persons_0_17,850,0.16397524760057663,0.11615400378329434,0.11295370503489499 +local,b1200k.cps2024.acs100.s0,county,persons_18_64,850,0.10614320565408297,0.08386267837286268,0.06288397767703105 +local,b1200k.cps2024.acs100.s0,county,persons_65p,850,0.12447708453398447,0.08742965801432043,0.07549011338819409 +local,b1200k.cps2024.acs100.s0,county,persons_in_households,850,0.08682741883721051,0.05911538542050879,0.058172003679532666 +local,b1200k.cps2024.acs100.s0,county,persons_male,850,0.09267370108962866,0.06550410058409162,0.06346029685686085 +local,b1200k.cps2024.acs100.s0,county,persons_total,850,0.08580026053541374,0.060207398927061964,0.055873629804155465 +local,b1200k.cps2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.17570527031902322,0.1176186370343222,0.1371770062939914 +local,b1200k.cps2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.40287335280107234,0.3321260980525405,0.39405333793325886 +local,b1200k.cps2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.3411549237699652,0.27895779674664,0.3227460175817711 +local,b1200k.cps2024.acs100.s0,county,renter,850,0.18954024808511383,0.15306329357186033,0.11310100408398117 +local,b1200k.cps2024.acs100.s0,national,households,1,0.012175309980062282,0.012175309980062282,0.0019178984047857172 +local,b1200k.cps2024.acs100.s0,national,owner,1,0.04856891926099594,0.04856891926099594,0.002702343456393556 +local,b1200k.cps2024.acs100.s0,national,persons_0_17,1,0.08277958140016241,0.08277958140016241,0.03753367808220693 +local,b1200k.cps2024.acs100.s0,national,persons_18_64,1,0.04788893231237839,0.04788893231237839,0.019149152886607755 +local,b1200k.cps2024.acs100.s0,national,persons_65p,1,0.0005424384587267072,0.0005424384587267072,0.012569504039505151 +local,b1200k.cps2024.acs100.s0,national,persons_in_households,1,0.00577856031282373,0.00577856031282373,0.01627147507773764 +local,b1200k.cps2024.acs100.s0,national,persons_male,1,0.02747550133788194,0.02747550133788194,0.028829333555351742 +local,b1200k.cps2024.acs100.s0,national,persons_total,1,0.011148696973136012,0.011148696973136012,0.01737959129184257 +local,b1200k.cps2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.033535177487716485,0.033535177487716485,0.014576211930611994 +local,b1200k.cps2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.1333578711342095,0.1333578711342095,0.13006231605995777 +local,b1200k.cps2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.23867679099986996,0.23867679099986996,0.23578172915023476 +local,b1200k.cps2024.acs100.s0,national,renter,1,0.10451380892859144,0.10451380892859144,0.046599562576231456 +local,b1200k.cps2024.acs100.s0,state,households,51,0.02527393100391429,0.021351601722417936,0.007309502108102353 +local,b1200k.cps2024.acs100.s0,state,owner,51,0.041011366064243354,0.03732301354518479,0.007956445746875313 +local,b1200k.cps2024.acs100.s0,state,persons_0_17,51,0.07597817693527859,0.07266306676477217,0.03983615145369346 +local,b1200k.cps2024.acs100.s0,state,persons_18_64,51,0.04900786566752914,0.04139923129218852,0.02119995268528968 +local,b1200k.cps2024.acs100.s0,state,persons_65p,51,0.012303310947646074,0.0066299788378516,0.01696312975849606 +local,b1200k.cps2024.acs100.s0,state,persons_in_households,51,0.012152720338799713,0.009137363537071739,0.017392141152719524 +local,b1200k.cps2024.acs100.s0,state,persons_male,51,0.029264363553987895,0.025656909556303658,0.025028450815249407 +local,b1200k.cps2024.acs100.s0,state,persons_total,51,0.01696487521330179,0.011673851200797255,0.017679885233477 +local,b1200k.cps2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.04150212207820046,0.03091992557990538,0.016998214718637855 +local,b1200k.cps2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.1854452793757492,0.15848143452435748,0.19275625998480928 +local,b1200k.cps2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.22689553118972805,0.18183869711975348,0.21524820360835026 +local,b1200k.cps2024.acs100.s0,state,renter,51,0.12684943879680874,0.1277888035276366,0.059164123927165455 +local,b300k.cps0.acs100.s0,cd,households,436,0.04529626140083762,0.03368807031822692,0.04322853287263069 +local,b300k.cps0.acs100.s0,cd,owner,436,0.0762801250618267,0.05972208304540799,0.05213620225582097 +local,b300k.cps0.acs100.s0,cd,persons_0_17,436,0.093022494177217,0.07910073529552594,0.10494720762950266 +local,b300k.cps0.acs100.s0,cd,persons_18_64,436,0.06089857692307905,0.05454950464744529,0.05613597472362423 +local,b300k.cps0.acs100.s0,cd,persons_65p,436,0.09265128757862515,0.07331616736114019,0.0744767392215725 +local,b300k.cps0.acs100.s0,cd,persons_male,436,0.04523877504616321,0.03538528642133471,0.06214293608612152 +local,b300k.cps0.acs100.s0,cd,persons_total,436,0.024944595207809343,0.01026823528330732,0.05440944235155279 +local,b300k.cps0.acs100.s0,cd,real_estate_taxes_aggregate,436,0.15014060330399664,0.11265871298405572,0.12557570281482808 +local,b300k.cps0.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3412483185404294,0.29203537637449073,0.33380481079299806 +local,b300k.cps0.acs100.s0,cd,rent_gross_annual_aggregate,436,0.2996997451984493,0.27391399132463157,0.2927730536848693 +local,b300k.cps0.acs100.s0,cd,renter,436,0.1423737411598221,0.13099962357474376,0.09526001317840402 +local,b300k.cps0.acs100.s0,county,households,850,0.12660267295148706,0.08184826184910457,0.09540659716234932 +local,b300k.cps0.acs100.s0,county,owner,850,0.16114805764124418,0.11503227315676215,0.11321934454813151 +local,b300k.cps0.acs100.s0,county,persons_0_17,850,0.24945855196699787,0.18499993573883894,0.21053173939356262 +local,b300k.cps0.acs100.s0,county,persons_18_64,850,0.15094470065613297,0.10951646398937681,0.11934210248312367 +local,b300k.cps0.acs100.s0,county,persons_65p,850,0.2061940591333088,0.15201651481805306,0.15262937809432847 +local,b300k.cps0.acs100.s0,county,persons_in_households,850,0.13902608495755045,0.09106285901195135,0.11398849291446916 +local,b300k.cps0.acs100.s0,county,persons_male,850,0.14930508229761727,0.1024187376555585,0.12052437142125733 +local,b300k.cps0.acs100.s0,county,persons_total,850,0.13567904575421638,0.09049099475039414,0.11074687174432955 +local,b300k.cps0.acs100.s0,county,real_estate_taxes_aggregate,850,0.23838814848167827,0.1662169833801253,0.19720544801317863 +local,b300k.cps0.acs100.s0,county,rent_contract_annual_aggregate,850,0.4231897897295854,0.3542291734952697,0.4110532876094806 +local,b300k.cps0.acs100.s0,county,rent_gross_annual_aggregate,850,0.37382184448635813,0.32120879223113785,0.3504890761247458 +local,b300k.cps0.acs100.s0,county,renter,850,0.2538214087371311,0.202607740078541,0.20812164238219566 +local,b300k.cps0.acs100.s0,national,households,1,0.008196546387598057,0.008196546387598057,0.002684358353721325 +local,b300k.cps0.acs100.s0,national,owner,1,0.04120798093656324,0.04120798093656324,0.003712530185146309 +local,b300k.cps0.acs100.s0,national,persons_0_17,1,0.0711949985414438,0.0711949985414438,0.04130804089676926 +local,b300k.cps0.acs100.s0,national,persons_18_64,1,0.056550622594234906,0.056550622594234906,0.01854102618658787 +local,b300k.cps0.acs100.s0,national,persons_65p,1,0.03474183633722827,0.03474183633722827,0.015019101065131464 +local,b300k.cps0.acs100.s0,national,persons_in_households,1,0.010601845054150263,0.010601845054150263,0.017586017401617055 +local,b300k.cps0.acs100.s0,national,persons_male,1,0.028142052192689414,0.028142052192689414,0.028762420524748044 +local,b300k.cps0.acs100.s0,national,persons_total,1,0.012718952398975698,0.012718952398975698,0.017379591291668196 +local,b300k.cps0.acs100.s0,national,real_estate_taxes_aggregate,1,0.08931545551836428,0.08931545551836428,0.019553269229985203 +local,b300k.cps0.acs100.s0,national,rent_contract_annual_aggregate,1,0.13647438679518464,0.13647438679518464,0.12783482357053205 +local,b300k.cps0.acs100.s0,national,rent_gross_annual_aggregate,1,0.2414145712495077,0.2414145712495077,0.2338249332899958 +local,b300k.cps0.acs100.s0,national,renter,1,0.1002923329998615,0.1002923329998615,0.04561075648522626 +local,b300k.cps0.acs100.s0,state,households,51,0.0245538417474022,0.01957488338296766,0.019712368503882405 +local,b300k.cps0.acs100.s0,state,owner,51,0.043096053309859585,0.036447396977640496,0.021826389522271242 +local,b300k.cps0.acs100.s0,state,persons_0_17,51,0.06789457804655752,0.0669733304258783,0.06665709446074423 +local,b300k.cps0.acs100.s0,state,persons_18_64,51,0.0546424544684552,0.05666087765509634,0.029220181226598585 +local,b300k.cps0.acs100.s0,state,persons_65p,51,0.04127864769718796,0.027012319952938395,0.03404049733309985 +local,b300k.cps0.acs100.s0,state,persons_in_households,51,0.017824039482263406,0.013153553600407661,0.02891261494934966 +local,b300k.cps0.acs100.s0,state,persons_male,51,0.03178908433977666,0.030162177333585793,0.03837719133159759 +local,b300k.cps0.acs100.s0,state,persons_total,51,0.0203020184947375,0.01604779094062004,0.027728537498343205 +local,b300k.cps0.acs100.s0,state,real_estate_taxes_aggregate,51,0.08011002565280907,0.07254521640560685,0.04023456724448698 +local,b300k.cps0.acs100.s0,state,rent_contract_annual_aggregate,51,0.2086998349863273,0.18029149843866682,0.20541271712243428 +local,b300k.cps0.acs100.s0,state,rent_gross_annual_aggregate,51,0.22919215159296444,0.20588378431655924,0.2238207675554527 +local,b300k.cps0.acs100.s0,state,renter,51,0.11750032765197312,0.12399652707351162,0.062139979965687715 +local,b300k.cps2022-2023-2024.acs000.s0,cd,households,436,0.07176582320103521,0.055382221874655885,0.05903095626619854 +local,b300k.cps2022-2023-2024.acs000.s0,cd,owner,436,0.13077464482944798,0.07697896579552113,0.14579026036401566 +local,b300k.cps2022-2023-2024.acs000.s0,cd,persons_0_17,436,0.09628588245716772,0.07628887530976575,0.11811895800745933 +local,b300k.cps2022-2023-2024.acs000.s0,cd,persons_18_64,436,0.04864365408667055,0.03839781021908569,0.055343312515888345 +local,b300k.cps2022-2023-2024.acs000.s0,cd,persons_65p,436,0.10439839129893135,0.08549345350214588,0.13779353565170702 +local,b300k.cps2022-2023-2024.acs000.s0,cd,persons_male,436,0.04674785178599,0.03918142201407894,0.05510136386003589 +local,b300k.cps2022-2023-2024.acs000.s0,cd,persons_total,436,0.027833358305226572,0.019914221038084653,0.04517911961156129 +local,b300k.cps2022-2023-2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.5198337567161706,0.5571267795776436,0.5783161755374594 +local,b300k.cps2022-2023-2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.32163411234953027,0.2668222716656969,0.3109979078913162 +local,b300k.cps2022-2023-2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.30205483763376745,0.27679432700871776,0.2851390393194523 +local,b300k.cps2022-2023-2024.acs000.s0,cd,renter,436,0.2575302699970738,0.2072335112269349,0.23258087301847485 +local,b300k.cps2022-2023-2024.acs000.s0,county,households,850,0.11582953967656374,0.08311806443685628,0.09016678093400855 +local,b300k.cps2022-2023-2024.acs000.s0,county,owner,850,0.1667762703522567,0.12580151553324326,0.15121786449626848 +local,b300k.cps2022-2023-2024.acs000.s0,county,persons_0_17,850,0.20210999256961815,0.14393247296356437,0.17027315603983867 +local,b300k.cps2022-2023-2024.acs000.s0,county,persons_18_64,850,0.12382653022476457,0.09009110279635756,0.10153917823357125 +local,b300k.cps2022-2023-2024.acs000.s0,county,persons_65p,850,0.2164276218762821,0.15677834494043436,0.18187007262415478 +local,b300k.cps2022-2023-2024.acs000.s0,county,persons_in_households,850,0.10008815880426034,0.06265290447408381,0.08501889085740987 +local,b300k.cps2022-2023-2024.acs000.s0,county,persons_male,850,0.10970965736658474,0.07460187564956655,0.09207474532446963 +local,b300k.cps2022-2023-2024.acs000.s0,county,persons_total,850,0.09577953545809842,0.061354217511304716,0.08103649104870823 +local,b300k.cps2022-2023-2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.5399055977781078,0.5750091080706756,0.5670911784296876 +local,b300k.cps2022-2023-2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.41634158341113225,0.32651414462158634,0.4047348718273917 +local,b300k.cps2022-2023-2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.37345180629685526,0.3253628235141467,0.3496081604080735 +local,b300k.cps2022-2023-2024.acs000.s0,county,renter,850,0.3481660668884695,0.2624264100491089,0.30806271992692164 +local,b300k.cps2022-2023-2024.acs000.s0,national,households,1,0.04038778054745855,0.04038778054745855,0.04038778011161412 +local,b300k.cps2022-2023-2024.acs000.s0,national,owner,1,0.031769843059361966,0.031769843059361966,0.04504294266327352 +local,b300k.cps2022-2023-2024.acs000.s0,national,persons_0_17,1,0.05335275616355593,0.05335275616355593,0.021094263093460124 +local,b300k.cps2022-2023-2024.acs000.s0,national,persons_18_64,1,0.02210265804869515,0.02210265804869515,0.02674863655274084 +local,b300k.cps2022-2023-2024.acs000.s0,national,persons_65p,1,0.02695231188264303,0.02695231188264303,0.018547026346138182 +local,b300k.cps2022-2023-2024.acs000.s0,national,persons_in_households,1,0.01831982579957464,0.01831982579957464,0.007468807603606707 +local,b300k.cps2022-2023-2024.acs000.s0,national,persons_male,1,0.022848910490086145,0.022848910490086145,0.03089045646952046 +local,b300k.cps2022-2023-2024.acs000.s0,national,persons_total,1,0.006796204635752092,0.006796204635752092,0.017379591291648393 +local,b300k.cps2022-2023-2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.5791275545736061,0.5791275545736061,0.6659411721508932 +local,b300k.cps2022-2023-2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.13271291569831403,0.13271291569831403,0.1311082630902956 +local,b300k.cps2022-2023-2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.23811021394832432,0.23811021394832432,0.23670056718390284 +local,b300k.cps2022-2023-2024.acs000.s0,national,renter,1,0.022678066957787082,0.022678066957787082,0.00224421283630985 +local,b300k.cps2022-2023-2024.acs000.s0,state,households,51,0.040794298365157716,0.025714019289378613,0.038818772971577764 +local,b300k.cps2022-2023-2024.acs000.s0,state,owner,51,0.037679213089049646,0.03576370522836516,0.0493736484367459 +local,b300k.cps2022-2023-2024.acs000.s0,state,persons_0_17,51,0.058690577317008864,0.05453619096108028,0.05125129793589482 +local,b300k.cps2022-2023-2024.acs000.s0,state,persons_18_64,51,0.026591511456142,0.021865890099081187,0.02908260558133954 +local,b300k.cps2022-2023-2024.acs000.s0,state,persons_65p,51,0.023683561381602998,0.008105949099810756,0.033742093722682526 +local,b300k.cps2022-2023-2024.acs000.s0,state,persons_in_households,51,0.021503972768861762,0.020185985857752338,0.020461498374014835 +local,b300k.cps2022-2023-2024.acs000.s0,state,persons_male,51,0.026084316564972832,0.02209434328105044,0.030540574782717347 +local,b300k.cps2022-2023-2024.acs000.s0,state,persons_total,51,0.013478996606520343,0.012611569576091799,0.017719590215262444 +local,b300k.cps2022-2023-2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.4707246640806276,0.4609390162143502,0.5512094530501027 +local,b300k.cps2022-2023-2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.1464880057283141,0.13772725735714203,0.1468564716660885 +local,b300k.cps2022-2023-2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.23682799150974748,0.22741714367495747,0.23190637634799505 +local,b300k.cps2022-2023-2024.acs000.s0,state,renter,51,0.08619150219716405,0.07013086790757052,0.05874007939622599 +local,b300k.cps2022-2023-2024.acs100.s0,cd,households,436,0.06410231959784335,0.049336763766036185,0.054962073532234944 +local,b300k.cps2022-2023-2024.acs100.s0,cd,owner,436,0.10815086206599014,0.06832574180324097,0.10415262407300314 +local,b300k.cps2022-2023-2024.acs100.s0,cd,persons_0_17,436,0.0913922054659029,0.07247535900327852,0.09819552657666308 +local,b300k.cps2022-2023-2024.acs100.s0,cd,persons_18_64,436,0.04569269944266278,0.03904616241698438,0.049531410622278046 +local,b300k.cps2022-2023-2024.acs100.s0,cd,persons_65p,436,0.08973887150077262,0.07377186151167636,0.09944979837866572 +local,b300k.cps2022-2023-2024.acs100.s0,cd,persons_male,436,0.03820442989257093,0.031830101469290537,0.05434137605234831 +local,b300k.cps2022-2023-2024.acs100.s0,cd,persons_total,436,0.020100928563813396,0.015005646744144407,0.04628623078305049 +local,b300k.cps2022-2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.3338387001872945,0.3548285245742132,0.3120468833971771 +local,b300k.cps2022-2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.32417204465147254,0.27497601770786456,0.31339907708977893 +local,b300k.cps2022-2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.28620281442467804,0.25498455070230475,0.2751987054799509 +local,b300k.cps2022-2023-2024.acs100.s0,cd,renter,436,0.1943201993769533,0.15794086287580683,0.15814508010758657 +local,b300k.cps2022-2023-2024.acs100.s0,county,households,850,0.12351968709514116,0.091307275608778,0.09608167916716849 +local,b300k.cps2022-2023-2024.acs100.s0,county,owner,850,0.1605704435244487,0.11926345673198596,0.13072067032095197 +local,b300k.cps2022-2023-2024.acs100.s0,county,persons_0_17,850,0.21106737982308207,0.14222230119658347,0.1785360378394958 +local,b300k.cps2022-2023-2024.acs100.s0,county,persons_18_64,850,0.1380127026257903,0.10145571015639177,0.10923617451481231 +local,b300k.cps2022-2023-2024.acs100.s0,county,persons_65p,850,0.19680587081828343,0.14421457065579762,0.16056855475526624 +local,b300k.cps2022-2023-2024.acs100.s0,county,persons_in_households,850,0.11930547919112955,0.08034834606499225,0.09869100340395388 +local,b300k.cps2022-2023-2024.acs100.s0,county,persons_male,850,0.12908530415467306,0.09094281036679805,0.10897061665601862 +local,b300k.cps2022-2023-2024.acs100.s0,county,persons_total,850,0.1163407669896022,0.08297568535775585,0.09736080084638134 +local,b300k.cps2022-2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.39206289625989366,0.38681417828896036,0.3344464462788473 +local,b300k.cps2022-2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.41770124075168724,0.33082458695654515,0.39866580565532195 +local,b300k.cps2022-2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.37319737906153977,0.31135486016599756,0.33975327300886676 +local,b300k.cps2022-2023-2024.acs100.s0,county,renter,850,0.2900297219552528,0.22829939490470114,0.23413376933474014 +local,b300k.cps2022-2023-2024.acs100.s0,national,households,1,0.031789861527650794,0.031789861527650794,0.02283118810246568 +local,b300k.cps2022-2023-2024.acs100.s0,national,owner,1,0.046265263320552724,0.046265263320552724,0.028899582704201544 +local,b300k.cps2022-2023-2024.acs100.s0,national,persons_0_17,1,0.06241040313488423,0.06241040313488423,0.030152749524834207 +local,b300k.cps2022-2023-2024.acs100.s0,national,persons_18_64,1,0.031678724065861065,0.031678724065861065,0.02321466788614161 +local,b300k.cps2022-2023-2024.acs100.s0,national,persons_65p,1,0.014220160036119076,0.014220160036119076,0.017450720137209847 +local,b300k.cps2022-2023-2024.acs100.s0,national,persons_in_households,1,0.009483156388690349,0.009483156388690349,0.0033497610583094885 +local,b300k.cps2022-2023-2024.acs100.s0,national,persons_male,1,0.02170356681211316,0.02170356681211316,0.0292731874081316 +local,b300k.cps2022-2023-2024.acs100.s0,national,persons_total,1,0.008359542265213817,0.008359542265213817,0.017379591291877446 +local,b300k.cps2022-2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.36121002256050494,0.36121002256050494,0.366073693434801 +local,b300k.cps2022-2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.11763834935069972,0.11763834935069972,0.12904528661128503 +local,b300k.cps2022-2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.2248675883664466,0.2248675883664466,0.23488829448127344 +local,b300k.cps2022-2023-2024.acs100.s0,national,renter,1,0.035648901384613255,0.035648901384613255,0.027006558627955594 +local,b300k.cps2022-2023-2024.acs100.s0,state,households,51,0.03333224958564468,0.023820372179265307,0.029729572260914973 +local,b300k.cps2022-2023-2024.acs100.s0,state,owner,51,0.04265957497176886,0.03843249381497831,0.03673584714925406 +local,b300k.cps2022-2023-2024.acs100.s0,state,persons_0_17,51,0.0618055880525289,0.05828886740708684,0.05180045120449306 +local,b300k.cps2022-2023-2024.acs100.s0,state,persons_18_64,51,0.033874273142902034,0.030843809939928996,0.03150866407221119 +local,b300k.cps2022-2023-2024.acs100.s0,state,persons_65p,51,0.016318849915561,0.008180190048629158,0.034800252184436976 +local,b300k.cps2022-2023-2024.acs100.s0,state,persons_in_households,51,0.012480357336173063,0.010452888511227033,0.022383242660041925 +local,b300k.cps2022-2023-2024.acs100.s0,state,persons_male,51,0.023308729392955144,0.017969092001214486,0.03616090096195592 +local,b300k.cps2022-2023-2024.acs100.s0,state,persons_total,51,0.013918473754918686,0.012341934397470066,0.02558194529369862 +local,b300k.cps2022-2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.3336344503566154,0.33230610815861905,0.30258258161320495 +local,b300k.cps2022-2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.14521945498721503,0.11521576685408129,0.1534614967585407 +local,b300k.cps2022-2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.21030231322232512,0.2087067182984353,0.20861372659058267 +local,b300k.cps2022-2023-2024.acs100.s0,state,renter,51,0.09087132769143302,0.0830592292789683,0.05765325898984831 +local,b300k.cps2022-2023-2024.acs100.s1,cd,households,436,0.06382090142668864,0.04909639050120458,0.05460589124685475 +local,b300k.cps2022-2023-2024.acs100.s1,cd,owner,436,0.10489526962976212,0.0644851335293008,0.10271980464673341 +local,b300k.cps2022-2023-2024.acs100.s1,cd,persons_0_17,436,0.08998191071840292,0.0712902176763402,0.09835007215083932 +local,b300k.cps2022-2023-2024.acs100.s1,cd,persons_18_64,436,0.04508827057615641,0.0372283807178165,0.05350098165738256 +local,b300k.cps2022-2023-2024.acs100.s1,cd,persons_65p,436,0.09333571383289092,0.07453477042574619,0.09995627300453121 +local,b300k.cps2022-2023-2024.acs100.s1,cd,persons_male,436,0.03666435662525591,0.03091816862465344,0.05356780667765004 +local,b300k.cps2022-2023-2024.acs100.s1,cd,persons_total,436,0.01965332505736181,0.014377296237290588,0.04381525638626839 +local,b300k.cps2022-2023-2024.acs100.s1,cd,real_estate_taxes_aggregate,436,0.3428186262755417,0.3509631657991412,0.3232398494938278 +local,b300k.cps2022-2023-2024.acs100.s1,cd,rent_contract_annual_aggregate,436,0.3201798428523723,0.2554380307164411,0.31229202196557954 +local,b300k.cps2022-2023-2024.acs100.s1,cd,rent_gross_annual_aggregate,436,0.2856250925121632,0.25581336162302404,0.27677378801964936 +local,b300k.cps2022-2023-2024.acs100.s1,cd,renter,436,0.19436431759993406,0.15872965092331814,0.15646844286840492 +local,b300k.cps2022-2023-2024.acs100.s1,county,households,850,0.12080870588992883,0.09172824287972159,0.09421033365906543 +local,b300k.cps2022-2023-2024.acs100.s1,county,owner,850,0.15387854766605982,0.11343371228237287,0.12898361874265155 +local,b300k.cps2022-2023-2024.acs100.s1,county,persons_0_17,850,0.21769026228973878,0.14883056171623799,0.18004659071278442 +local,b300k.cps2022-2023-2024.acs100.s1,county,persons_18_64,850,0.1334820678421939,0.09687295005598147,0.10409935096726328 +local,b300k.cps2022-2023-2024.acs100.s1,county,persons_65p,850,0.19418071622631433,0.14647729139604307,0.15894869564486916 +local,b300k.cps2022-2023-2024.acs100.s1,county,persons_in_households,850,0.11412897336064316,0.07558454323112376,0.09567362504185346 +local,b300k.cps2022-2023-2024.acs100.s1,county,persons_male,850,0.1215978160564806,0.087339683792924,0.10051269033781333 +local,b300k.cps2022-2023-2024.acs100.s1,county,persons_total,850,0.11154770952088373,0.07443857078583661,0.0933225358182413 +local,b300k.cps2022-2023-2024.acs100.s1,county,real_estate_taxes_aggregate,850,0.39461591541436253,0.3947566889119156,0.34138997462800813 +local,b300k.cps2022-2023-2024.acs100.s1,county,rent_contract_annual_aggregate,850,0.4235099795957325,0.3357115000119607,0.40099376211959503 +local,b300k.cps2022-2023-2024.acs100.s1,county,rent_gross_annual_aggregate,850,0.3770441938138787,0.3193072704969941,0.3395631844898292 +local,b300k.cps2022-2023-2024.acs100.s1,county,renter,850,0.29388393280761055,0.228404509883612,0.2394566484896744 +local,b300k.cps2022-2023-2024.acs100.s1,national,households,1,0.03335312640392665,0.03335312640392665,0.024794395277488928 +local,b300k.cps2022-2023-2024.acs100.s1,national,owner,1,0.04345167164685532,0.04345167164685532,0.025324766647941036 +local,b300k.cps2022-2023-2024.acs100.s1,national,persons_0_17,1,0.06066740748189807,0.06066740748189807,0.028992087919649804 +local,b300k.cps2022-2023-2024.acs100.s1,national,persons_18_64,1,0.031117253500857537,0.031117253500857537,0.023429146172018255 +local,b300k.cps2022-2023-2024.acs100.s1,national,persons_65p,1,0.015229516937032322,0.015229516937032322,0.016789814262298818 +local,b300k.cps2022-2023-2024.acs100.s1,national,persons_in_households,1,0.009112508147761062,0.009112508147761062,0.003339386531063656 +local,b300k.cps2022-2023-2024.acs100.s1,national,persons_male,1,0.022359371022443772,0.022359371022443772,0.030230184394261766 +local,b300k.cps2022-2023-2024.acs100.s1,national,persons_total,1,0.00857507954847087,0.00857507954847087,0.017379591291576717 +local,b300k.cps2022-2023-2024.acs100.s1,national,real_estate_taxes_aggregate,1,0.3652531192482867,0.3652531192482867,0.3748400477187738 +local,b300k.cps2022-2023-2024.acs100.s1,national,rent_contract_annual_aggregate,1,0.11316868512762504,0.11316868512762504,0.12851951123017968 +local,b300k.cps2022-2023-2024.acs100.s1,national,rent_gross_annual_aggregate,1,0.2209411013008827,0.2209411013008827,0.23442641409602114 +local,b300k.cps2022-2023-2024.acs100.s1,national,renter,1,0.02782926308754271,0.02782926308754271,0.0163427118127628 +local,b300k.cps2022-2023-2024.acs100.s1,state,households,51,0.03472601032313385,0.027525279046360485,0.02735163381759662 +local,b300k.cps2022-2023-2024.acs100.s1,state,owner,51,0.04372686386036193,0.045076292922304376,0.03220854081813725 +local,b300k.cps2022-2023-2024.acs100.s1,state,persons_0_17,51,0.0607745254072715,0.057302183987789045,0.05355871315044963 +local,b300k.cps2022-2023-2024.acs100.s1,state,persons_18_64,51,0.03408413598365645,0.02906039692463441,0.027238197395543753 +local,b300k.cps2022-2023-2024.acs100.s1,state,persons_65p,51,0.016914618225337838,0.006938390054620743,0.028673572469027384 +local,b300k.cps2022-2023-2024.acs100.s1,state,persons_in_households,51,0.013876969399054166,0.008952359569620611,0.021890576690053367 +local,b300k.cps2022-2023-2024.acs100.s1,state,persons_male,51,0.026060599112983612,0.021145906545648577,0.03131112356940419 +local,b300k.cps2022-2023-2024.acs100.s1,state,persons_total,51,0.015305372136508299,0.013829445000667325,0.02182359813314486 +local,b300k.cps2022-2023-2024.acs100.s1,state,real_estate_taxes_aggregate,51,0.32950746153531424,0.34276744394045655,0.3088903056845426 +local,b300k.cps2022-2023-2024.acs100.s1,state,rent_contract_annual_aggregate,51,0.14312654170374017,0.10635901904063909,0.16091490576517956 +local,b300k.cps2022-2023-2024.acs100.s1,state,rent_gross_annual_aggregate,51,0.21228838211284484,0.21508262316151394,0.2182614080634859 +local,b300k.cps2022-2023-2024.acs100.s1,state,renter,51,0.0925583071915544,0.08465932385937773,0.05324485130069417 +local,b300k.cps2022-2023-2024.acs100.s2,cd,households,436,0.0630346459213504,0.0456596296915949,0.05387121687949212 +local,b300k.cps2022-2023-2024.acs100.s2,cd,owner,436,0.10367401100759448,0.06263116204154726,0.10084961118595076 +local,b300k.cps2022-2023-2024.acs100.s2,cd,persons_0_17,436,0.08980396059636538,0.06573002872335616,0.10396800122316771 +local,b300k.cps2022-2023-2024.acs100.s2,cd,persons_18_64,436,0.04640006684032941,0.041121780858236485,0.05002635961526946 +local,b300k.cps2022-2023-2024.acs100.s2,cd,persons_65p,436,0.09312171862940918,0.0805747167651438,0.0985697921326312 +local,b300k.cps2022-2023-2024.acs100.s2,cd,persons_male,436,0.03863138744355694,0.03240505845377299,0.05523679661015942 +local,b300k.cps2022-2023-2024.acs100.s2,cd,persons_total,436,0.020661893438217244,0.015488871812135013,0.046462729275332286 +local,b300k.cps2022-2023-2024.acs100.s2,cd,real_estate_taxes_aggregate,436,0.3389105839554088,0.3569072627879908,0.31624422336631874 +local,b300k.cps2022-2023-2024.acs100.s2,cd,rent_contract_annual_aggregate,436,0.3182340110271937,0.2549142640916314,0.31155462308682835 +local,b300k.cps2022-2023-2024.acs100.s2,cd,rent_gross_annual_aggregate,436,0.2854922864892294,0.25289370925876486,0.27553400138773404 +local,b300k.cps2022-2023-2024.acs100.s2,cd,renter,436,0.18739668980059243,0.15336602313827913,0.15632248233515425 +local,b300k.cps2022-2023-2024.acs100.s2,county,households,850,0.12581022785265425,0.09515719102598036,0.09378508463464962 +local,b300k.cps2022-2023-2024.acs100.s2,county,owner,850,0.15620333303445397,0.11280657094969924,0.12610930452147198 +local,b300k.cps2022-2023-2024.acs100.s2,county,persons_0_17,850,0.2091670509386031,0.14699501166703793,0.18145174594691854 +local,b300k.cps2022-2023-2024.acs100.s2,county,persons_18_64,850,0.1376698544840719,0.1008623439709173,0.11049728350658153 +local,b300k.cps2022-2023-2024.acs100.s2,county,persons_65p,850,0.20335896423360683,0.14987545190496396,0.15756992656357788 +local,b300k.cps2022-2023-2024.acs100.s2,county,persons_in_households,850,0.11646066159339061,0.07676379809247888,0.0990745995105983 +local,b300k.cps2022-2023-2024.acs100.s2,county,persons_male,850,0.12428782220902371,0.08899711209104938,0.10514594684137929 +local,b300k.cps2022-2023-2024.acs100.s2,county,persons_total,850,0.11467034616430814,0.07426979998227112,0.09693953272037091 +local,b300k.cps2022-2023-2024.acs100.s2,county,real_estate_taxes_aggregate,850,0.3935715393540174,0.38954831682455887,0.33610850282071913 +local,b300k.cps2022-2023-2024.acs100.s2,county,rent_contract_annual_aggregate,850,0.4226972851582002,0.35013027869635016,0.4034052375814544 +local,b300k.cps2022-2023-2024.acs100.s2,county,rent_gross_annual_aggregate,850,0.3807108438128755,0.32367742622990525,0.34459933569726914 +local,b300k.cps2022-2023-2024.acs100.s2,county,renter,850,0.2918944750478307,0.23207556370689936,0.23085167418015046 +local,b300k.cps2022-2023-2024.acs100.s2,national,households,1,0.03128599730374296,0.03128599730374296,0.022425462343745668 +local,b300k.cps2022-2023-2024.acs100.s2,national,owner,1,0.04355530780625999,0.04355530780625999,0.02487343325459565 +local,b300k.cps2022-2023-2024.acs100.s2,national,persons_0_17,1,0.060507400202351326,0.060507400202351326,0.02493795042771259 +local,b300k.cps2022-2023-2024.acs100.s2,national,persons_18_64,1,0.0317721910689583,0.0317721910689583,0.024373101349739155 +local,b300k.cps2022-2023-2024.acs100.s2,national,persons_65p,1,0.015799979547139725,0.015799979547139725,0.015136287219120487 +local,b300k.cps2022-2023-2024.acs100.s2,national,persons_in_households,1,0.00881395970257263,0.00881395970257263,0.0032116078586647066 +local,b300k.cps2022-2023-2024.acs100.s2,national,persons_male,1,0.021579336188993894,0.021579336188993894,0.028793888062225634 +local,b300k.cps2022-2023-2024.acs100.s2,national,persons_total,1,0.009108678437864098,0.009108678437864098,0.017379591291621404 +local,b300k.cps2022-2023-2024.acs100.s2,national,real_estate_taxes_aggregate,1,0.36311681819421365,0.36311681819421365,0.36958236939275463 +local,b300k.cps2022-2023-2024.acs100.s2,national,rent_contract_annual_aggregate,1,0.12724124226547387,0.12724124226547387,0.1319312994116549 +local,b300k.cps2022-2023-2024.acs100.s2,national,rent_gross_annual_aggregate,1,0.23330348711409754,0.23330348711409754,0.23742358379298573 +local,b300k.cps2022-2023-2024.acs100.s2,national,renter,1,0.03330648701622636,0.03330648701622636,0.022082308540014823 +local,b300k.cps2022-2023-2024.acs100.s2,state,households,51,0.032788583094206986,0.02536491488794872,0.023725680491648735 +local,b300k.cps2022-2023-2024.acs100.s2,state,owner,51,0.04193377417189355,0.0357987269642112,0.029002895268317442 +local,b300k.cps2022-2023-2024.acs100.s2,state,persons_0_17,51,0.06169586389246413,0.0562726467258595,0.05567407681743994 +local,b300k.cps2022-2023-2024.acs100.s2,state,persons_18_64,51,0.033958416509746236,0.03162033419204518,0.029783437644543102 +local,b300k.cps2022-2023-2024.acs100.s2,state,persons_65p,51,0.017436453318553785,0.007109287685573199,0.029325220378664408 +local,b300k.cps2022-2023-2024.acs100.s2,state,persons_in_households,51,0.01320152555504123,0.009864661233196341,0.022200252461611364 +local,b300k.cps2022-2023-2024.acs100.s2,state,persons_male,51,0.025796754664306698,0.02001737850646812,0.032881620970388825 +local,b300k.cps2022-2023-2024.acs100.s2,state,persons_total,51,0.015197888904040911,0.01373881984371734,0.025249273649564613 +local,b300k.cps2022-2023-2024.acs100.s2,state,real_estate_taxes_aggregate,51,0.33303192111156854,0.33392759737425276,0.30670737513987084 +local,b300k.cps2022-2023-2024.acs100.s2,state,rent_contract_annual_aggregate,51,0.1505433477516905,0.11249815699958567,0.16133794028836196 +local,b300k.cps2022-2023-2024.acs100.s2,state,rent_gross_annual_aggregate,51,0.22387474484441955,0.21652357297584077,0.21528276283846245 +local,b300k.cps2022-2023-2024.acs100.s2,state,renter,51,0.08863316784748716,0.07178491423072017,0.05241661969934416 +local,b300k.cps2023-2024.acs000.s0,cd,households,436,0.07122282901813373,0.05445348444808632,0.053614520750817074 +local,b300k.cps2023-2024.acs000.s0,cd,owner,436,0.12873081842503145,0.07917785067267252,0.1444815335505615 +local,b300k.cps2023-2024.acs000.s0,cd,persons_0_17,436,0.09565917490159295,0.0696329361548251,0.12478861103159995 +local,b300k.cps2023-2024.acs000.s0,cd,persons_18_64,436,0.04914125974625012,0.039733870988383255,0.058743708228535384 +local,b300k.cps2023-2024.acs000.s0,cd,persons_65p,436,0.09861195596488724,0.08003176792263321,0.13699227201391515 +local,b300k.cps2023-2024.acs000.s0,cd,persons_male,436,0.04783607829452808,0.04025317999736433,0.05884683651812112 +local,b300k.cps2023-2024.acs000.s0,cd,persons_total,436,0.027225827787365285,0.019971907121036827,0.04886493140741495 +local,b300k.cps2023-2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.5184537428124052,0.5547905281135597,0.5698652645724244 +local,b300k.cps2023-2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.32578206767232565,0.27909645257908267,0.31469264573928035 +local,b300k.cps2023-2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.29729126683000245,0.2694469815314571,0.2838529241053794 +local,b300k.cps2023-2024.acs000.s0,cd,renter,436,0.26254507611148464,0.2049320345298002,0.22968050589278796 +local,b300k.cps2023-2024.acs000.s0,county,households,850,0.11188685114858413,0.07967628640521403,0.08498367212326344 +local,b300k.cps2023-2024.acs000.s0,county,owner,850,0.16155119934760737,0.12249236395190756,0.15082548224521902 +local,b300k.cps2023-2024.acs000.s0,county,persons_0_17,850,0.20534740078316477,0.15141274359379978,0.1761961413648731 +local,b300k.cps2023-2024.acs000.s0,county,persons_18_64,850,0.12226941499081925,0.08647227101431904,0.10700797062471092 +local,b300k.cps2023-2024.acs000.s0,county,persons_65p,850,0.2064037857990984,0.15416112908510038,0.18115346083985567 +local,b300k.cps2023-2024.acs000.s0,county,persons_in_households,850,0.10000746153771713,0.0663127228934346,0.08877408961987057 +local,b300k.cps2023-2024.acs000.s0,county,persons_male,850,0.10663839418686838,0.07349748006131988,0.09538987885247817 +local,b300k.cps2023-2024.acs000.s0,county,persons_total,850,0.09540618797808244,0.05996171956358029,0.08495552849814238 +local,b300k.cps2023-2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.5292304709602085,0.5582253757889771,0.5565735457281109 +local,b300k.cps2023-2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.4155687381426945,0.3385746595029875,0.40679322886452596 +local,b300k.cps2023-2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.3628740985809136,0.31088223508081414,0.3478483126845342 +local,b300k.cps2023-2024.acs000.s0,county,renter,850,0.3509354366789933,0.26882928829753144,0.3152559717195768 +local,b300k.cps2023-2024.acs000.s0,national,households,1,0.04063176124869034,0.04063176124869034,0.04063176077374351 +local,b300k.cps2023-2024.acs000.s0,national,owner,1,0.024417012006406853,0.024417012006406853,0.042345165727939324 +local,b300k.cps2023-2024.acs000.s0,national,persons_0_17,1,0.05537492484615529,0.05537492484615529,0.027390231881220944 +local,b300k.cps2023-2024.acs000.s0,national,persons_18_64,1,0.023834100317264247,0.023834100317264247,0.0268050150704322 +local,b300k.cps2023-2024.acs000.s0,national,persons_65p,1,0.02400154467270538,0.02400154467270538,0.026233676447505128 +local,b300k.cps2023-2024.acs000.s0,national,persons_in_households,1,0.018234299368889085,0.018234299368889085,0.007468807603602755 +local,b300k.cps2023-2024.acs000.s0,national,persons_male,1,0.023741892974788334,0.023741892974788334,0.030408793666099887 +local,b300k.cps2023-2024.acs000.s0,national,persons_total,1,0.00687962162657239,0.00687962162657239,0.017379591291652247 +local,b300k.cps2023-2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.5774613187452756,0.5774613187452756,0.6562268648260717 +local,b300k.cps2023-2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.12257561797004438,0.12257561797004438,0.1222749686343984 +local,b300k.cps2023-2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.2292048540771437,0.2292048540771437,0.22894074123359048 +local,b300k.cps2023-2024.acs000.s0,national,renter,1,0.034919986286847816,0.034919986286847816,0.0025205865935754137 +local,b300k.cps2023-2024.acs000.s0,state,households,51,0.041962774796204666,0.030574426319391675,0.04016948176038674 +local,b300k.cps2023-2024.acs000.s0,state,owner,51,0.03492225640947477,0.031439240577629056,0.04757532621275756 +local,b300k.cps2023-2024.acs000.s0,state,persons_0_17,51,0.06095889189836722,0.0526779065558116,0.05483953711216335 +local,b300k.cps2023-2024.acs000.s0,state,persons_18_64,51,0.028450067750215163,0.02435395058572903,0.03073725927409018 +local,b300k.cps2023-2024.acs000.s0,state,persons_65p,51,0.021976683145644948,0.008423916736110251,0.039588997541003985 +local,b300k.cps2023-2024.acs000.s0,state,persons_in_households,51,0.021469303095219383,0.019962687231678402,0.01955854451458431 +local,b300k.cps2023-2024.acs000.s0,state,persons_male,51,0.029324847266300396,0.025065071353276378,0.031232583282333352 +local,b300k.cps2023-2024.acs000.s0,state,persons_total,51,0.013956183473796515,0.01179112146793636,0.018964847449261527 +local,b300k.cps2023-2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.4697578746444747,0.4576411595277243,0.5416227019420784 +local,b300k.cps2023-2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.14521139057114885,0.12972367255020312,0.14160292476457162 +local,b300k.cps2023-2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.2280476962108802,0.22132591724723205,0.2199685049241719 +local,b300k.cps2023-2024.acs000.s0,state,renter,51,0.08539305519562446,0.07053415585112134,0.06435477021533259 +local,b300k.cps2023-2024.acs100.s0,cd,households,436,0.059421473053437195,0.04550369198527472,0.04810264997891757 +local,b300k.cps2023-2024.acs100.s0,cd,owner,436,0.0971033262097222,0.060697773846224524,0.08310383827346488 +local,b300k.cps2023-2024.acs100.s0,cd,persons_0_17,436,0.09044049645776298,0.0717742140590408,0.10115797654787498 +local,b300k.cps2023-2024.acs100.s0,cd,persons_18_64,436,0.04762768445510206,0.04204547224612972,0.050864185115396025 +local,b300k.cps2023-2024.acs100.s0,cd,persons_65p,436,0.08368978129194105,0.06601431198047798,0.08461932860175533 +local,b300k.cps2023-2024.acs100.s0,cd,persons_male,436,0.03764405224368487,0.029336185871946162,0.055839076005064214 +local,b300k.cps2023-2024.acs100.s0,cd,persons_total,436,0.018296684986297693,0.012566605003781137,0.0485463192051605 +local,b300k.cps2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.2564567348914509,0.2686816326185809,0.2102526769439945 +local,b300k.cps2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.33504748711189325,0.28190999135515327,0.3202053889884849 +local,b300k.cps2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.2836056831442782,0.2533337066304112,0.27860549586486605 +local,b300k.cps2023-2024.acs100.s0,cd,renter,436,0.17181311101756505,0.14154574952156035,0.12801205780457262 +local,b300k.cps2023-2024.acs100.s0,county,households,850,0.12172802103756751,0.08599948248097233,0.09369935551642367 +local,b300k.cps2023-2024.acs100.s0,county,owner,850,0.15103693681884625,0.10884360417732974,0.11978550005293273 +local,b300k.cps2023-2024.acs100.s0,county,persons_0_17,850,0.22855267175109428,0.1622760916583218,0.19000776698181512 +local,b300k.cps2023-2024.acs100.s0,county,persons_18_64,850,0.13742418562655975,0.09890531177051105,0.11135210001064201 +local,b300k.cps2023-2024.acs100.s0,county,persons_65p,850,0.1932808482000384,0.14199736803563223,0.15311411284075127 +local,b300k.cps2023-2024.acs100.s0,county,persons_in_households,850,0.12008987713869741,0.07867587270838658,0.10472957916788693 +local,b300k.cps2023-2024.acs100.s0,county,persons_male,850,0.13267744819653582,0.09335261745718329,0.11200379817229747 +local,b300k.cps2023-2024.acs100.s0,county,persons_total,850,0.11711736010481581,0.07650176471756495,0.10265556765772516 +local,b300k.cps2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.32472671529985436,0.30793662851455295,0.24968300885360645 +local,b300k.cps2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.42140607859951373,0.33248733060681934,0.4031064691966803 +local,b300k.cps2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.371031844053087,0.313619294161821,0.3395014437392735 +local,b300k.cps2023-2024.acs100.s0,county,renter,850,0.27103972578732094,0.20586463996856044,0.21072750235659535 +local,b300k.cps2023-2024.acs100.s0,national,households,1,0.028444465658123967,0.028444465658123967,0.01622813986048555 +local,b300k.cps2023-2024.acs100.s0,national,owner,1,0.040979099356415964,0.040979099356415964,0.0185637728817818 +local,b300k.cps2023-2024.acs100.s0,national,persons_0_17,1,0.06570934648084932,0.06570934648084932,0.037168881908996844 +local,b300k.cps2023-2024.acs100.s0,national,persons_18_64,1,0.036461354265737135,0.036461354265737135,0.021405258145536843 +local,b300k.cps2023-2024.acs100.s0,national,persons_65p,1,0.006114493120364322,0.006114493120364322,0.019721236033055835 +local,b300k.cps2023-2024.acs100.s0,national,persons_in_households,1,0.005302886307644536,0.005302886307644536,0.008086271457001712 +local,b300k.cps2023-2024.acs100.s0,national,persons_male,1,0.023453762329567574,0.023453762329567574,0.028695428893634082 +local,b300k.cps2023-2024.acs100.s0,national,persons_total,1,0.009088404597104811,0.009088404597104811,0.017379591291705 +local,b300k.cps2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.27169620195596483,0.27169620195596483,0.2345658564217346 +local,b300k.cps2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.10810154811825258,0.10810154811825258,0.1242698815104491 +local,b300k.cps2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.21648974949149452,0.21648974949149452,0.23069322178107815 +local,b300k.cps2023-2024.acs100.s0,national,renter,1,0.03990741023627707,0.03990741023627707,0.029848196630025862 +local,b300k.cps2023-2024.acs100.s0,state,households,51,0.030165536909506286,0.022877371047466483,0.025384052373917356 +local,b300k.cps2023-2024.acs100.s0,state,owner,51,0.03825147074669324,0.032906146918039114,0.028873511573039103 +local,b300k.cps2023-2024.acs100.s0,state,persons_0_17,51,0.06423186389956909,0.06130094765956486,0.057898369342281576 +local,b300k.cps2023-2024.acs100.s0,state,persons_18_64,51,0.03803652419648801,0.03699216908963536,0.03114044991340005 +local,b300k.cps2023-2024.acs100.s0,state,persons_65p,51,0.011633012660147558,0.005437173395582616,0.03431761949732328 +local,b300k.cps2023-2024.acs100.s0,state,persons_in_households,51,0.010400908952785332,0.006578137526621315,0.024100213806170213 +local,b300k.cps2023-2024.acs100.s0,state,persons_male,51,0.02683768240122439,0.02322610724634671,0.03638023804000716 +local,b300k.cps2023-2024.acs100.s0,state,persons_total,51,0.01557068128220288,0.011677438268582786,0.026083135523212342 +local,b300k.cps2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.2571665715813046,0.2610918651772177,0.19667184532866613 +local,b300k.cps2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.15034201910303266,0.12599877374602794,0.1688786671295249 +local,b300k.cps2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.20102721198453644,0.18281317504164724,0.20586815296275546 +local,b300k.cps2023-2024.acs100.s0,state,renter,51,0.09023651314634132,0.08670365922098693,0.054246188130893436 +local,b300k.cps2024.acs000.s0,cd,households,436,0.07228325930772087,0.057943529129053144,0.05325389470712396 +local,b300k.cps2024.acs000.s0,cd,owner,436,0.1272978883971911,0.07844686688044047,0.14077060356552817 +local,b300k.cps2024.acs000.s0,cd,persons_0_17,436,0.10233307312783137,0.07763417328121466,0.1311649722369435 +local,b300k.cps2024.acs000.s0,cd,persons_18_64,436,0.0530837844412484,0.0439811468432365,0.0634839506501305 +local,b300k.cps2024.acs000.s0,cd,persons_65p,436,0.09923880200918955,0.08152374920384567,0.13998017631797427 +local,b300k.cps2024.acs000.s0,cd,persons_male,436,0.05190493480907868,0.043104940822452836,0.06229145930936586 +local,b300k.cps2024.acs000.s0,cd,persons_total,436,0.02916701759557991,0.02109846639500746,0.05264424882012382 +local,b300k.cps2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.522275459695462,0.5539156596333725,0.5528534080004882 +local,b300k.cps2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.3302079061830655,0.2764327778520755,0.3179372350717971 +local,b300k.cps2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.2962073474653854,0.2733534045919597,0.2829032167660115 +local,b300k.cps2024.acs000.s0,cd,renter,436,0.27081398769929566,0.20993899250120052,0.23473340185005617 +local,b300k.cps2024.acs000.s0,county,households,850,0.10919693234952894,0.08010944315564165,0.0832784674286999 +local,b300k.cps2024.acs000.s0,county,owner,850,0.16013748621397125,0.11865639019618132,0.1498085561133901 +local,b300k.cps2024.acs000.s0,county,persons_0_17,850,0.20155127222514774,0.14565038326507374,0.18566076860806963 +local,b300k.cps2024.acs000.s0,county,persons_18_64,850,0.12162941434854813,0.08564090913930761,0.11424708179130634 +local,b300k.cps2024.acs000.s0,county,persons_65p,850,0.19596847085286484,0.1478061452216176,0.1836137625425742 +local,b300k.cps2024.acs000.s0,county,persons_in_households,850,0.10031404803362494,0.06915797161829003,0.09485734865046187 +local,b300k.cps2024.acs000.s0,county,persons_male,850,0.1115952994107755,0.0808424832485558,0.09915657570484801 +local,b300k.cps2024.acs000.s0,county,persons_total,850,0.09603745361785149,0.06511124590463963,0.09014898316489524 +local,b300k.cps2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.537152061988621,0.5702281636374589,0.5446751934509556 +local,b300k.cps2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.41371568625859784,0.3377755132258514,0.403997187213267 +local,b300k.cps2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.3537925135968278,0.29701539017545187,0.3407041948901364 +local,b300k.cps2024.acs000.s0,county,renter,850,0.35063114808939844,0.2665083154563561,0.3116467943447933 +local,b300k.cps2024.acs000.s0,national,households,1,0.04250326676390603,0.04250326676390603,0.04250326623243594 +local,b300k.cps2024.acs000.s0,national,owner,1,0.017353816166007077,0.017353816166007077,0.04010859549596169 +local,b300k.cps2024.acs000.s0,national,persons_0_17,1,0.06460219834591083,0.06460219834591083,0.03288093308214637 +local,b300k.cps2024.acs000.s0,national,persons_18_64,1,0.02706185905180554,0.02706185905180554,0.028643647198409762 +local,b300k.cps2024.acs000.s0,national,persons_65p,1,0.020051302589138113,0.020051302589138113,0.03895423703662803 +local,b300k.cps2024.acs000.s0,national,persons_in_households,1,0.018988422041065312,0.018988422041065312,0.007468807603647675 +local,b300k.cps2024.acs000.s0,national,persons_male,1,0.02722168355197946,0.02722168355197946,0.03015050978084711 +local,b300k.cps2024.acs000.s0,national,persons_total,1,0.0061440987768748,0.0061440987768748,0.017379591291608435 +local,b300k.cps2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.5806068644369377,0.5806068644369377,0.6395411932654282 +local,b300k.cps2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.10442361057506373,0.10442361057506373,0.09886944608010037 +local,b300k.cps2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.2132587743062157,0.2132587743062157,0.2083795811585734 +local,b300k.cps2024.acs000.s0,national,renter,1,0.05451575266312578,0.05451575266312578,0.01224278155079332 +local,b300k.cps2024.acs000.s0,state,households,51,0.04426851542494705,0.035905526900568654,0.04113183240018178 +local,b300k.cps2024.acs000.s0,state,owner,51,0.03572940059284864,0.03159131548295778,0.0473744543754758 +local,b300k.cps2024.acs000.s0,state,persons_0_17,51,0.06952917901246436,0.0691322419909257,0.05938231280038831 +local,b300k.cps2024.acs000.s0,state,persons_18_64,51,0.03296569062381486,0.030217489863789127,0.03622043144079565 +local,b300k.cps2024.acs000.s0,state,persons_65p,51,0.022232490808574853,0.013921469536885774,0.05328853265489987 +local,b300k.cps2024.acs000.s0,state,persons_in_households,51,0.022335657786048065,0.019274563862044267,0.019861435559825554 +local,b300k.cps2024.acs000.s0,state,persons_male,51,0.032503874536105266,0.030642144296799685,0.03069101486430921 +local,b300k.cps2024.acs000.s0,state,persons_total,51,0.015827028214039817,0.014033408217703993,0.01840903075160705 +local,b300k.cps2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.4736976783191567,0.46740158227106465,0.5260015221555048 +local,b300k.cps2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.1250666604301183,0.10404752009718551,0.12759779821473954 +local,b300k.cps2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.2067198313404033,0.20211528485715094,0.2025211568796703 +local,b300k.cps2024.acs000.s0,state,renter,51,0.08583683545270428,0.08244708347186404,0.07151289876278501 +local,b300k.cps2024.acs100.s0,cd,households,436,0.05208398954989582,0.0399526147169474,0.0445186582648168 +local,b300k.cps2024.acs100.s0,cd,owner,436,0.0795746974647526,0.05174805149210723,0.06408132108321789 +local,b300k.cps2024.acs100.s0,cd,persons_0_17,436,0.0952483317036049,0.07774602767681336,0.1011149875638067 +local,b300k.cps2024.acs100.s0,cd,persons_18_64,436,0.050634669926959815,0.044113877823526534,0.053087998847227875 +local,b300k.cps2024.acs100.s0,cd,persons_65p,436,0.08249509187740686,0.06895168254603284,0.07579294253113192 +local,b300k.cps2024.acs100.s0,cd,persons_male,436,0.03820912358411058,0.030622914254916832,0.05742995594700321 +local,b300k.cps2024.acs100.s0,cd,persons_total,436,0.017792060225309558,0.009589211879171694,0.05020954772082696 +local,b300k.cps2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.15890234732855235,0.1466123896735694,0.138503910174953 +local,b300k.cps2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3338379717995298,0.2842094450185937,0.3277378477880494 +local,b300k.cps2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.2880909346188736,0.26504156491779324,0.2850439607136127 +local,b300k.cps2024.acs100.s0,cd,renter,436,0.14978089316351892,0.12533564092353647,0.10562970911566646 +local,b300k.cps2024.acs100.s0,county,households,850,0.12437122307703412,0.08696270892106069,0.09604511971690513 +local,b300k.cps2024.acs100.s0,county,owner,850,0.14843366001124506,0.10174989119192966,0.11549907454876397 +local,b300k.cps2024.acs100.s0,county,persons_0_17,850,0.23766675224809172,0.16464254596582362,0.1968736402180397 +local,b300k.cps2024.acs100.s0,county,persons_18_64,850,0.14584222619157436,0.10494875282394336,0.1152949893009183 +local,b300k.cps2024.acs100.s0,county,persons_65p,850,0.18328225619397456,0.1332486844621427,0.14765770582025672 +local,b300k.cps2024.acs100.s0,county,persons_in_households,850,0.1300538155427436,0.08970361194921861,0.11037454032549172 +local,b300k.cps2024.acs100.s0,county,persons_male,850,0.14002375594550695,0.0991073702148601,0.11540155756888201 +local,b300k.cps2024.acs100.s0,county,persons_total,850,0.12647938513580415,0.08780010938309593,0.10711382447994193 +local,b300k.cps2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.25042977652818493,0.21105588504330303,0.2025009679662354 +local,b300k.cps2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.42824550242054304,0.3387368188587754,0.4115667347806425 +local,b300k.cps2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.3773619895341284,0.3233593215358127,0.34975265949333967 +local,b300k.cps2024.acs100.s0,county,renter,850,0.25611290509662193,0.18385427145939065,0.20593617007171544 +local,b300k.cps2024.acs100.s0,national,households,1,0.02091352614166951,0.02091352614166951,0.009405048708776023 +local,b300k.cps2024.acs100.s0,national,owner,1,0.03668283188854364,0.03668283188854364,0.011149148171989243 +local,b300k.cps2024.acs100.s0,national,persons_0_17,1,0.07488081962189512,0.07488081962189512,0.03934535382767289 +local,b300k.cps2024.acs100.s0,national,persons_18_64,1,0.0427477880586083,0.0427477880586083,0.020760608153350738 +local,b300k.cps2024.acs100.s0,national,persons_65p,1,0.0017445376311779107,0.0017445376311779107,0.020145296515002298 +local,b300k.cps2024.acs100.s0,national,persons_in_households,1,0.00021721594099950213,0.00021721594099950213,0.012887804579998606 +local,b300k.cps2024.acs100.s0,national,persons_male,1,0.025932922322135548,0.025932922322135548,0.028825524095141112 +local,b300k.cps2024.acs100.s0,national,persons_total,1,0.009512994593500447,0.009512994593500447,0.017379591291554284 +local,b300k.cps2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.138672297813476,0.138672297813476,0.10519850185068137 +local,b300k.cps2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.11482351837133756,0.11482351837133756,0.12122007030868508 +local,b300k.cps2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.22239483048562952,0.22239483048562952,0.22801403971314627 +local,b300k.cps2024.acs100.s0,national,renter,1,0.055272339819343784,0.055272339819343784,0.03793725868236157 +local,b300k.cps2024.acs100.s0,state,households,51,0.026890301769934205,0.021209608240871387,0.023801392273112943 +local,b300k.cps2024.acs100.s0,state,owner,51,0.03551048068762924,0.031200153210801045,0.026253475518179904 +local,b300k.cps2024.acs100.s0,state,persons_0_17,51,0.06997459893832415,0.06827787625057027,0.060576324539654995 +local,b300k.cps2024.acs100.s0,state,persons_18_64,51,0.04313398744205638,0.03802388110130734,0.02961978201893944 +local,b300k.cps2024.acs100.s0,state,persons_65p,51,0.013960198059091513,0.005874988903060145,0.036465302363331495 +local,b300k.cps2024.acs100.s0,state,persons_in_households,51,0.011548226082214449,0.006737202908635657,0.02595010544588405 +local,b300k.cps2024.acs100.s0,state,persons_male,51,0.030256117225281275,0.025520842230080852,0.03638472546612089 +local,b300k.cps2024.acs100.s0,state,persons_total,51,0.016957280123489522,0.012963060110691323,0.02698706008569942 +local,b300k.cps2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.14229168180780657,0.13177606693704091,0.09423245701524154 +local,b300k.cps2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.17168618608863595,0.13743750283422457,0.18470102376411873 +local,b300k.cps2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.20268330139208438,0.17069731078013797,0.2070420821336953 +local,b300k.cps2024.acs100.s0,state,renter,51,0.09172075211778666,0.09159812615617859,0.05772056447604141 +local,b300k.cps2024.acs100.s1,cd,households,436,0.050256104144942366,0.039619102706861184,0.043666327344408395 +local,b300k.cps2024.acs100.s1,cd,owner,436,0.07883596562020644,0.053094894245417835,0.06446595871546629 +local,b300k.cps2024.acs100.s1,cd,persons_0_17,436,0.09616703391028766,0.07897352130681715,0.10131289177297828 +local,b300k.cps2024.acs100.s1,cd,persons_18_64,436,0.04999904245821185,0.042915995382444415,0.05527546733560979 +local,b300k.cps2024.acs100.s1,cd,persons_65p,436,0.08605020222565828,0.07297527466674437,0.0749841921549136 +local,b300k.cps2024.acs100.s1,cd,persons_male,436,0.03923357031851476,0.03161750878629356,0.059876637977190415 +local,b300k.cps2024.acs100.s1,cd,persons_total,436,0.018741035908028468,0.010017090778441592,0.050658066765181003 +local,b300k.cps2024.acs100.s1,cd,real_estate_taxes_aggregate,436,0.16011544476120926,0.15418074242266533,0.13922265124603075 +local,b300k.cps2024.acs100.s1,cd,rent_contract_annual_aggregate,436,0.3238223241532976,0.25753468138891117,0.3144112076841177 +local,b300k.cps2024.acs100.s1,cd,rent_gross_annual_aggregate,436,0.2799793334456679,0.24317387179786082,0.27424807769698756 +local,b300k.cps2024.acs100.s1,cd,renter,436,0.14637249857446868,0.12400563096322866,0.10866752087198374 +local,b300k.cps2024.acs100.s1,county,households,850,0.12022744339854113,0.08129938407139797,0.09244479905077944 +local,b300k.cps2024.acs100.s1,county,owner,850,0.14711114376008705,0.10624410516184174,0.10829972908532866 +local,b300k.cps2024.acs100.s1,county,persons_0_17,850,0.23674338687331953,0.17348640753263506,0.21066372424798901 +local,b300k.cps2024.acs100.s1,county,persons_18_64,850,0.1406477858217345,0.09863183896146585,0.11697017284834327 +local,b300k.cps2024.acs100.s1,county,persons_65p,850,0.18684965385210472,0.13553887780956325,0.14874591163846015 +local,b300k.cps2024.acs100.s1,county,persons_in_households,850,0.123704048965285,0.0832271476994933,0.110588593691157 +local,b300k.cps2024.acs100.s1,county,persons_male,850,0.13114091829657265,0.09017933893949476,0.11910281121417693 +local,b300k.cps2024.acs100.s1,county,persons_total,850,0.1214430512174932,0.08404395592515691,0.10785239755419546 +local,b300k.cps2024.acs100.s1,county,real_estate_taxes_aggregate,850,0.24885283534410546,0.20866081544017825,0.19817254415613586 +local,b300k.cps2024.acs100.s1,county,rent_contract_annual_aggregate,850,0.42407876100927805,0.3490597502772549,0.40114437891484006 +local,b300k.cps2024.acs100.s1,county,rent_gross_annual_aggregate,850,0.368782630526894,0.3185856765027671,0.344211001664788 +local,b300k.cps2024.acs100.s1,county,renter,850,0.25310238753614855,0.1948663899171929,0.20313929769454747 +local,b300k.cps2024.acs100.s1,national,households,1,0.01855606269740465,0.01855606269740465,0.007135480860673591 +local,b300k.cps2024.acs100.s1,national,owner,1,0.03493649966150303,0.03493649966150303,0.006760642135513097 +local,b300k.cps2024.acs100.s1,national,persons_0_17,1,0.07402785523229914,0.07402785523229914,0.03239665815108548 +local,b300k.cps2024.acs100.s1,national,persons_18_64,1,0.043619730396583276,0.043619730396583276,0.0220436135717044 +local,b300k.cps2024.acs100.s1,national,persons_65p,1,0.0015535304966949447,0.0015535304966949447,0.016185055455979563 +local,b300k.cps2024.acs100.s1,national,persons_in_households,1,0.0008738065428089663,0.0008738065428089663,0.012745124341986979 +local,b300k.cps2024.acs100.s1,national,persons_male,1,0.027005682714336843,0.027005682714336843,0.028988409494756603 +local,b300k.cps2024.acs100.s1,national,persons_total,1,0.010258248529065574,0.010258248529065574,0.017379591291681866 +local,b300k.cps2024.acs100.s1,national,real_estate_taxes_aggregate,1,0.14244043661994973,0.14244043661994973,0.10788924995015199 +local,b300k.cps2024.acs100.s1,national,rent_contract_annual_aggregate,1,0.1226793986555704,0.1226793986555704,0.12613857323223815 +local,b300k.cps2024.acs100.s1,national,rent_gross_annual_aggregate,1,0.22929602278670125,0.22929602278670125,0.23233482023432472 +local,b300k.cps2024.acs100.s1,national,renter,1,0.05988685592811738,0.05988685592811738,0.03680538251027018 +local,b300k.cps2024.acs100.s1,state,households,51,0.024856379651074203,0.02089422546403683,0.016509876960375154 +local,b300k.cps2024.acs100.s1,state,owner,51,0.03739516674582131,0.03280302454104196,0.01776575510010848 +local,b300k.cps2024.acs100.s1,state,persons_0_17,51,0.0741490778498965,0.07163908777080553,0.05779517814902032 +local,b300k.cps2024.acs100.s1,state,persons_18_64,51,0.04620513761385528,0.04432327303714027,0.03303962043118999 +local,b300k.cps2024.acs100.s1,state,persons_65p,51,0.014863564168590205,0.0070882432598845715,0.0328039014021689 +local,b300k.cps2024.acs100.s1,state,persons_in_households,51,0.012279117879535251,0.009454667416270988,0.025786709402797463 +local,b300k.cps2024.acs100.s1,state,persons_male,51,0.02941979835261487,0.02717513637246874,0.03465236347769676 +local,b300k.cps2024.acs100.s1,state,persons_total,51,0.0170243745529964,0.014198209337842152,0.026587166511169637 +local,b300k.cps2024.acs100.s1,state,real_estate_taxes_aggregate,51,0.1478621250265546,0.15279521408969463,0.09775079182205315 +local,b300k.cps2024.acs100.s1,state,rent_contract_annual_aggregate,51,0.17182588432815854,0.12584939421341665,0.1858112142185224 +local,b300k.cps2024.acs100.s1,state,rent_gross_annual_aggregate,51,0.21265527618112387,0.20457035444353971,0.21231117244279066 +local,b300k.cps2024.acs100.s1,state,renter,51,0.09424102336107078,0.09677070422873378,0.059409183848200924 +local,b300k.cps2024.acs100.s2,cd,households,436,0.052375890766634965,0.042241001353118285,0.04331851304134574 +local,b300k.cps2024.acs100.s2,cd,owner,436,0.0769097868837753,0.05408478711050134,0.06209214806116888 +local,b300k.cps2024.acs100.s2,cd,persons_0_17,436,0.09640829819672701,0.08125069998384504,0.10342165829279419 +local,b300k.cps2024.acs100.s2,cd,persons_18_64,436,0.05074428729176619,0.042602493585576176,0.05272373485245502 +local,b300k.cps2024.acs100.s2,cd,persons_65p,436,0.08102956858547522,0.06887572605760736,0.07597605451221584 +local,b300k.cps2024.acs100.s2,cd,persons_male,436,0.03992331798998311,0.03209525120290731,0.05751957426886549 +local,b300k.cps2024.acs100.s2,cd,persons_total,436,0.019662740449780596,0.010524297643569167,0.047740968379590465 +local,b300k.cps2024.acs100.s2,cd,real_estate_taxes_aggregate,436,0.15501215320842837,0.14727123061148178,0.13228862206640338 +local,b300k.cps2024.acs100.s2,cd,rent_contract_annual_aggregate,436,0.3250516992900199,0.27618772453876816,0.31819942924787176 +local,b300k.cps2024.acs100.s2,cd,rent_gross_annual_aggregate,436,0.288909068751206,0.25099667640845646,0.28118437560497095 +local,b300k.cps2024.acs100.s2,cd,renter,436,0.1458775076229155,0.13058306073692888,0.1065898955736187 +local,b300k.cps2024.acs100.s2,county,households,850,0.11992961299474034,0.08308894291128693,0.09529876221809666 +local,b300k.cps2024.acs100.s2,county,owner,850,0.14570334717609726,0.10469857633291157,0.11440609929049368 +local,b300k.cps2024.acs100.s2,county,persons_0_17,850,0.24190414757802012,0.1730776884089647,0.2042996714476425 +local,b300k.cps2024.acs100.s2,county,persons_18_64,850,0.14143634702543442,0.10347110541319082,0.11326194007444529 +local,b300k.cps2024.acs100.s2,county,persons_65p,850,0.18226364199800174,0.1329920272079482,0.1485364586129691 +local,b300k.cps2024.acs100.s2,county,persons_in_households,850,0.1243727886670147,0.08199950156429005,0.10562303715711137 +local,b300k.cps2024.acs100.s2,county,persons_male,850,0.13214356435032135,0.08401879174386084,0.11606407051368871 +local,b300k.cps2024.acs100.s2,county,persons_total,850,0.12184967425451228,0.07916159408903775,0.10342246146173768 +local,b300k.cps2024.acs100.s2,county,real_estate_taxes_aggregate,850,0.25004774424778775,0.2078762094906707,0.2012923720797865 +local,b300k.cps2024.acs100.s2,county,rent_contract_annual_aggregate,850,0.41641073152039193,0.33502977017564206,0.4198081193231573 +local,b300k.cps2024.acs100.s2,county,rent_gross_annual_aggregate,850,0.3645433157467302,0.3075916904683519,0.3598222288063871 +local,b300k.cps2024.acs100.s2,county,renter,850,0.2575849164202483,0.1989263594194099,0.21394875331770885 +local,b300k.cps2024.acs100.s2,national,households,1,0.020459073379147222,0.020459073379147222,0.009413301953973515 +local,b300k.cps2024.acs100.s2,national,owner,1,0.037714839716001716,0.037714839716001716,0.009173457161656365 +local,b300k.cps2024.acs100.s2,national,persons_0_17,1,0.07537946032449894,0.07537946032449894,0.041448735400090655 +local,b300k.cps2024.acs100.s2,national,persons_18_64,1,0.042495116017933966,0.042495116017933966,0.020082445625907344 +local,b300k.cps2024.acs100.s2,national,persons_65p,1,0.002026781832412868,0.002026781832412868,0.02036963746209138 +local,b300k.cps2024.acs100.s2,national,persons_in_households,1,7.548689569514204e-05,7.548689569514204e-05,0.012728549890750515 +local,b300k.cps2024.acs100.s2,national,persons_male,1,0.025913404118726367,0.025913404118726367,0.028652397462910772 +local,b300k.cps2024.acs100.s2,national,persons_total,1,0.009202254800806829,0.009202254800806829,0.017379591291678886 +local,b300k.cps2024.acs100.s2,national,real_estate_taxes_aggregate,1,0.1341307986253545,0.1341307986253545,0.10864498173634508 +local,b300k.cps2024.acs100.s2,national,rent_contract_annual_aggregate,1,0.12115040393212904,0.12115040393212904,0.12946497246197944 +local,b300k.cps2024.acs100.s2,national,rent_gross_annual_aggregate,1,0.22795283956190454,0.22795283956190454,0.23525697789508435 +local,b300k.cps2024.acs100.s2,national,renter,1,0.06089502019172249,0.06089502019172249,0.0360035549662605 +local,b300k.cps2024.acs100.s2,state,households,51,0.025100773638766456,0.015028006146782055,0.01901002835770843 +local,b300k.cps2024.acs100.s2,state,owner,51,0.03796910804481595,0.03227595640117272,0.020465468366677945 +local,b300k.cps2024.acs100.s2,state,persons_0_17,51,0.07385525471883074,0.07328213097842243,0.06185684002766886 +local,b300k.cps2024.acs100.s2,state,persons_18_64,51,0.04413858988862866,0.04263886823418591,0.03214162327583207 +local,b300k.cps2024.acs100.s2,state,persons_65p,51,0.012276367405546298,0.006076411437692115,0.037406340913297025 +local,b300k.cps2024.acs100.s2,state,persons_in_households,51,0.012474676686658512,0.008782331569204245,0.025402788785354857 +local,b300k.cps2024.acs100.s2,state,persons_male,51,0.028655384067299533,0.028251720350637402,0.03649148102859059 +local,b300k.cps2024.acs100.s2,state,persons_total,51,0.017315824185406267,0.012719663425555194,0.026426138315958702 +local,b300k.cps2024.acs100.s2,state,real_estate_taxes_aggregate,51,0.12941799903066367,0.13013707250996231,0.0804511919488555 +local,b300k.cps2024.acs100.s2,state,rent_contract_annual_aggregate,51,0.16071831641056197,0.1321890836624861,0.17336608078593066 +local,b300k.cps2024.acs100.s2,state,rent_gross_annual_aggregate,51,0.2126311229127064,0.1970382469560087,0.20851901486314603 +local,b300k.cps2024.acs100.s2,state,renter,51,0.09872782318636404,0.09095726693445913,0.0697055944503938 +local,b600k.cps0.acs100.s0,cd,households,436,0.04283598315525621,0.031731558787751496,0.029131914349442446 +local,b600k.cps0.acs100.s0,cd,owner,436,0.07105049102862779,0.053076641755306964,0.04051540121109158 +local,b600k.cps0.acs100.s0,cd,persons_0_17,436,0.09436113992978248,0.08411099416030471,0.08208722591935363 +local,b600k.cps0.acs100.s0,cd,persons_18_64,436,0.055655159641184775,0.048500208816629545,0.040825249109997776 +local,b600k.cps0.acs100.s0,cd,persons_65p,436,0.07653055413552765,0.06160273067759359,0.05276132280332941 +local,b600k.cps0.acs100.s0,cd,persons_male,436,0.03673497375847362,0.028206193135407225,0.046373344829246 +local,b600k.cps0.acs100.s0,cd,persons_total,436,0.019866263584922387,0.008138988941197548,0.03991902722308742 +local,b600k.cps0.acs100.s0,cd,real_estate_taxes_aggregate,436,0.14709966918534542,0.11630978053856403,0.11040149519824126 +local,b600k.cps0.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3278598371064132,0.26336654975546864,0.3172776952532818 +local,b600k.cps0.acs100.s0,cd,rent_gross_annual_aggregate,436,0.2871942242444503,0.2529291203637214,0.2794535424362954 +local,b600k.cps0.acs100.s0,cd,renter,436,0.13830411895371494,0.1252159980533113,0.07627181026553721 +local,b600k.cps0.acs100.s0,county,households,850,0.10378256226045053,0.07380805411047356,0.06554917480320599 +local,b600k.cps0.acs100.s0,county,owner,850,0.12816810597846762,0.08886904101693438,0.08017899518063644 +local,b600k.cps0.acs100.s0,county,persons_0_17,850,0.20781729586058603,0.14734307680260056,0.15566370071385557 +local,b600k.cps0.acs100.s0,county,persons_18_64,850,0.1269209171479997,0.1000688229450015,0.08602364741400081 +local,b600k.cps0.acs100.s0,county,persons_65p,850,0.16578939924340957,0.12144504699715192,0.10686977334736653 +local,b600k.cps0.acs100.s0,county,persons_in_households,850,0.11168226415244333,0.07754419800294819,0.08255564542316682 +local,b600k.cps0.acs100.s0,county,persons_male,850,0.12203272645290039,0.08966182028453912,0.08761508069603569 +local,b600k.cps0.acs100.s0,county,persons_total,850,0.10888243171323858,0.0748151933330983,0.07963123059554887 +local,b600k.cps0.acs100.s0,county,real_estate_taxes_aggregate,850,0.21380625072278886,0.13849353092032557,0.16370180319595093 +local,b600k.cps0.acs100.s0,county,rent_contract_annual_aggregate,850,0.407066753581971,0.32391253827392774,0.3984796007607794 +local,b600k.cps0.acs100.s0,county,rent_gross_annual_aggregate,850,0.35741170590228794,0.3001752740096502,0.3316674139615876 +local,b600k.cps0.acs100.s0,county,renter,850,0.22526068909703892,0.18303501940483255,0.15085102425283922 +local,b600k.cps0.acs100.s0,national,households,1,0.006422591343137454,0.006422591343137454,5.938114703318635e-05 +local,b600k.cps0.acs100.s0,national,owner,1,0.043357836808508944,0.043357836808508944,0.0019768920071729147 +local,b600k.cps0.acs100.s0,national,persons_0_17,1,0.08024699953252984,0.08024699953252984,0.036576349200425594 +local,b600k.cps0.acs100.s0,national,persons_18_64,1,0.052549780660943624,0.052549780660943624,0.01945871613649533 +local,b600k.cps0.acs100.s0,national,persons_65p,1,0.013807160382450742,0.013807160382450742,0.01247044340014511 +local,b600k.cps0.acs100.s0,national,persons_in_households,1,0.009668300822164107,0.009668300822164107,0.01760172242520067 +local,b600k.cps0.acs100.s0,national,persons_male,1,0.02723740569087617,0.02723740569087617,0.02802336143491234 +local,b600k.cps0.acs100.s0,national,persons_total,1,0.012125249102794305,0.012125249102794305,0.01737959129143231 +local,b600k.cps0.acs100.s0,national,real_estate_taxes_aggregate,1,0.09675221116084491,0.09675221116084491,0.017499562552654998 +local,b600k.cps0.acs100.s0,national,rent_contract_annual_aggregate,1,0.13952009005184818,0.13952009005184818,0.13137360530288825 +local,b600k.cps0.acs100.s0,national,rent_gross_annual_aggregate,1,0.2440901445914821,0.2440901445914821,0.23693366361211204 +local,b600k.cps0.acs100.s0,national,renter,1,0.11071287212764896,0.11071287212764896,0.050253109583821384 +local,b600k.cps0.acs100.s0,state,households,51,0.022733643835094294,0.01731772592906667,0.012233601743234922 +local,b600k.cps0.acs100.s0,state,owner,51,0.04239174712903326,0.03680436039937813,0.014361305690807256 +local,b600k.cps0.acs100.s0,state,persons_0_17,51,0.07742208389501914,0.07226036840745625,0.04112786132694817 +local,b600k.cps0.acs100.s0,state,persons_18_64,51,0.05396762550269301,0.049616542386352595,0.02441474410562478 +local,b600k.cps0.acs100.s0,state,persons_65p,51,0.01908811155348217,0.00910710267362902,0.027109918630514686 +local,b600k.cps0.acs100.s0,state,persons_in_households,51,0.01574936391453503,0.012328906957608764,0.020857298561184786 +local,b600k.cps0.acs100.s0,state,persons_male,51,0.03044955670182639,0.02876965845575111,0.02713622544399762 +local,b600k.cps0.acs100.s0,state,persons_total,51,0.019144486350313225,0.01442771911713793,0.02027053840681421 +local,b600k.cps0.acs100.s0,state,real_estate_taxes_aggregate,51,0.07991842399942357,0.07970300949492891,0.03325181722010736 +local,b600k.cps0.acs100.s0,state,rent_contract_annual_aggregate,51,0.19861949772748802,0.16524877561722454,0.19724700364051598 +local,b600k.cps0.acs100.s0,state,rent_gross_annual_aggregate,51,0.22694557516088912,0.192857271619551,0.21690873070493952 +local,b600k.cps0.acs100.s0,state,renter,51,0.1255753940373777,0.1299412535910635,0.05752235131944817 +local,b600k.cps2022-2023-2024.acs000.s0,cd,households,436,0.06986150057149461,0.051856060705313484,0.04801722281360067 +local,b600k.cps2022-2023-2024.acs000.s0,cd,owner,436,0.125902352895834,0.07437713082005368,0.13969944664351838 +local,b600k.cps2022-2023-2024.acs000.s0,cd,persons_0_17,436,0.08867188977262523,0.06555745344884656,0.11894334403780951 +local,b600k.cps2022-2023-2024.acs000.s0,cd,persons_18_64,436,0.04665650198438637,0.03652070001380932,0.05613206137225359 +local,b600k.cps2022-2023-2024.acs000.s0,cd,persons_65p,436,0.09587905390777221,0.07295307586818728,0.128341874121303 +local,b600k.cps2022-2023-2024.acs000.s0,cd,persons_male,436,0.04267172786424647,0.03646617810293392,0.05638393934796342 +local,b600k.cps2022-2023-2024.acs000.s0,cd,persons_total,436,0.026523116913908504,0.020488073869718536,0.0464902838324475 +local,b600k.cps2022-2023-2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.5162524531767372,0.5504785248251383,0.5765731026475934 +local,b600k.cps2022-2023-2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.31748876685482225,0.2689766480804896,0.31623224000001665 +local,b600k.cps2022-2023-2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.2961726022448764,0.25804976222821735,0.2882616247944339 +local,b600k.cps2022-2023-2024.acs000.s0,cd,renter,436,0.25051340808580536,0.1909364691017087,0.22575486338826894 +local,b600k.cps2022-2023-2024.acs000.s0,county,households,850,0.09393190018523796,0.06708055413927932,0.07079583003375713 +local,b600k.cps2022-2023-2024.acs000.s0,county,owner,850,0.14306228539142163,0.10306888168019016,0.13838716902434267 +local,b600k.cps2022-2023-2024.acs000.s0,county,persons_0_17,850,0.17408295082683112,0.12494339148047821,0.16096348049085904 +local,b600k.cps2022-2023-2024.acs000.s0,county,persons_18_64,850,0.10213373217081423,0.07125631092343737,0.09531176868706699 +local,b600k.cps2022-2023-2024.acs000.s0,county,persons_65p,850,0.1724850189481204,0.12688328909404897,0.16230870184838916 +local,b600k.cps2022-2023-2024.acs000.s0,county,persons_in_households,850,0.08114135449564329,0.05444366400069514,0.07866774822280603 +local,b600k.cps2022-2023-2024.acs000.s0,county,persons_male,850,0.088315557126945,0.06305309896143829,0.08335934248251217 +local,b600k.cps2022-2023-2024.acs000.s0,county,persons_total,850,0.077432563317541,0.05090036840446606,0.0736315251376632 +local,b600k.cps2022-2023-2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.5286906152213942,0.5575914070152916,0.5552760703819513 +local,b600k.cps2022-2023-2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.39999575008495386,0.31692818374355175,0.40070703161679877 +local,b600k.cps2022-2023-2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.34944522750380314,0.29452341044371133,0.3405721258724111 +local,b600k.cps2022-2023-2024.acs000.s0,county,renter,850,0.33379978151507644,0.25204098191358004,0.3028016551040578 +local,b600k.cps2022-2023-2024.acs000.s0,national,households,1,0.04038778065147569,0.04038778065147569,0.04038778011268734 +local,b600k.cps2022-2023-2024.acs000.s0,national,owner,1,0.03309061569468434,0.03309061569468434,0.04504294266356592 +local,b600k.cps2022-2023-2024.acs000.s0,national,persons_0_17,1,0.05092190452383326,0.05092190452383326,0.02109426309349261 +local,b600k.cps2022-2023-2024.acs000.s0,national,persons_18_64,1,0.023343436400840283,0.023343436400840283,0.026748636552436502 +local,b600k.cps2022-2023-2024.acs000.s0,national,persons_65p,1,0.03021178674860203,0.03021178674860203,0.018547026346196087 +local,b600k.cps2022-2023-2024.acs000.s0,national,persons_in_households,1,0.016413324569034066,0.016413324569034066,0.00746880760395044 +local,b600k.cps2022-2023-2024.acs000.s0,national,persons_male,1,0.02329094506558218,0.02329094506558218,0.030890456469041976 +local,b600k.cps2022-2023-2024.acs000.s0,national,persons_total,1,0.00865568356375265,0.00865568356375265,0.01737959129131314 +local,b600k.cps2022-2023-2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.5769375126367852,0.5769375126367852,0.6659411721508722 +local,b600k.cps2022-2023-2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.1335071676256076,0.1335071676256076,0.13110826309034238 +local,b600k.cps2022-2023-2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.23880794419464071,0.23880794419464071,0.23670056718394392 +local,b600k.cps2022-2023-2024.acs000.s0,national,renter,1,0.020331348722926718,0.020331348722926718,0.0022442128363200317 +local,b600k.cps2022-2023-2024.acs000.s0,state,households,51,0.04112096348712272,0.02599655107859757,0.038818772971578756 +local,b600k.cps2022-2023-2024.acs000.s0,state,owner,51,0.038722897942976654,0.03430984141963821,0.04937364843674589 +local,b600k.cps2022-2023-2024.acs000.s0,state,persons_0_17,51,0.05796338737023173,0.054194255332552996,0.051251297935895425 +local,b600k.cps2022-2023-2024.acs000.s0,state,persons_18_64,51,0.027831449401020527,0.02494105351571082,0.029082605581341018 +local,b600k.cps2022-2023-2024.acs000.s0,state,persons_65p,51,0.0260334373235759,0.012599399084434222,0.033742093722682706 +local,b600k.cps2022-2023-2024.acs000.s0,state,persons_in_households,51,0.019623180790037522,0.018190484800399098,0.020461498374015723 +local,b600k.cps2022-2023-2024.acs000.s0,state,persons_male,51,0.026273321423532222,0.022362405705899206,0.030540574782716375 +local,b600k.cps2022-2023-2024.acs000.s0,state,persons_total,51,0.01453357225437533,0.013987016572997958,0.01771959021526217 +local,b600k.cps2022-2023-2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.4689637900258441,0.4507537842003275,0.5512094530501028 +local,b600k.cps2022-2023-2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.14963860693379205,0.14386666188483221,0.1468564716660872 +local,b600k.cps2022-2023-2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.2377350974741274,0.22660699697607184,0.2319063763479941 +local,b600k.cps2022-2023-2024.acs000.s0,state,renter,51,0.08757859570746938,0.07585961189107311,0.058740079396225546 +local,b600k.cps2022-2023-2024.acs050.s0,cd,households,436,0.06329653983850206,0.046568472928454174,0.04076660944068676 +local,b600k.cps2022-2023-2024.acs050.s0,cd,owner,436,0.10780772305619193,0.06403329313977504,0.10309806957703438 +local,b600k.cps2022-2023-2024.acs050.s0,cd,persons_0_17,436,0.08419664905072079,0.05922425969373292,0.09416791053042188 +local,b600k.cps2022-2023-2024.acs050.s0,cd,persons_18_64,436,0.04398820792390024,0.03798950061980745,0.045930432415639405 +local,b600k.cps2022-2023-2024.acs050.s0,cd,persons_65p,436,0.08288344989001785,0.06590310714501901,0.09371557363276464 +local,b600k.cps2022-2023-2024.acs050.s0,cd,persons_male,436,0.035113417111247484,0.02753710401811322,0.04798835098337538 +local,b600k.cps2022-2023-2024.acs050.s0,cd,persons_total,436,0.020513082373792766,0.016121457797198945,0.03878063239127864 +local,b600k.cps2022-2023-2024.acs050.s0,cd,real_estate_taxes_aggregate,436,0.36238853378353914,0.37770553089137354,0.36210372447109174 +local,b600k.cps2022-2023-2024.acs050.s0,cd,rent_contract_annual_aggregate,436,0.32002145069313326,0.26549458100372103,0.31345895784069233 +local,b600k.cps2022-2023-2024.acs050.s0,cd,rent_gross_annual_aggregate,436,0.28057299399991564,0.25300050878437996,0.27504990828074793 +local,b600k.cps2022-2023-2024.acs050.s0,cd,renter,436,0.19236714951714695,0.14845765859436233,0.15967464680644824 +local,b600k.cps2022-2023-2024.acs050.s0,county,households,850,0.09518027816770123,0.0680120125926823,0.07282913072759298 +local,b600k.cps2022-2023-2024.acs050.s0,county,owner,850,0.13305435690941553,0.09950716351716594,0.11646523216809596 +local,b600k.cps2022-2023-2024.acs050.s0,county,persons_0_17,850,0.17742279717039333,0.12072422836820287,0.14915435274988675 +local,b600k.cps2022-2023-2024.acs050.s0,county,persons_18_64,850,0.11036787657552151,0.08275256249341607,0.0885193849220127 +local,b600k.cps2022-2023-2024.acs050.s0,county,persons_65p,850,0.16173271697759245,0.11983327472355981,0.13962343544320704 +local,b600k.cps2022-2023-2024.acs050.s0,county,persons_in_households,850,0.09129796378119356,0.06422811716508983,0.07782725672079106 +local,b600k.cps2022-2023-2024.acs050.s0,county,persons_male,850,0.09796570410375709,0.0684033613933624,0.08404599951802504 +local,b600k.cps2022-2023-2024.acs050.s0,county,persons_total,850,0.08865003957888735,0.06402374878390721,0.07530376871577389 +local,b600k.cps2022-2023-2024.acs050.s0,county,real_estate_taxes_aggregate,850,0.3956470898734026,0.4010885580645871,0.35876215059500544 +local,b600k.cps2022-2023-2024.acs050.s0,county,rent_contract_annual_aggregate,850,0.40748209283832254,0.30741262665235664,0.3952793971545376 +local,b600k.cps2022-2023-2024.acs050.s0,county,rent_gross_annual_aggregate,850,0.3501312797877488,0.2955638381167027,0.3307980790519032 +local,b600k.cps2022-2023-2024.acs050.s0,county,renter,850,0.2693164819134235,0.20934674978801715,0.22587235478886497 +local,b600k.cps2022-2023-2024.acs050.s0,national,households,1,0.03346224569099015,0.03346224569099015,0.02654951890742389 +local,b600k.cps2022-2023-2024.acs050.s0,national,owner,1,0.04277961402308975,0.04277961402308975,0.030642047718378935 +local,b600k.cps2022-2023-2024.acs050.s0,national,persons_0_17,1,0.05961394393076167,0.05961394393076167,0.02843698537315832 +local,b600k.cps2022-2023-2024.acs050.s0,national,persons_18_64,1,0.031604205429160794,0.031604205429160794,0.02401883189545691 +local,b600k.cps2022-2023-2024.acs050.s0,national,persons_65p,1,0.020914131384621077,0.020914131384621077,0.01811162226616691 +local,b600k.cps2022-2023-2024.acs050.s0,national,persons_in_households,1,0.008812037084036835,0.008812037084036835,0.0013977685137549069 +local,b600k.cps2022-2023-2024.acs050.s0,national,persons_male,1,0.022636835451741572,0.022636835451741572,0.02998682446234174 +local,b600k.cps2022-2023-2024.acs050.s0,national,persons_total,1,0.010119473386582149,0.010119473386582149,0.017379591291606683 +local,b600k.cps2022-2023-2024.acs050.s0,national,real_estate_taxes_aggregate,1,0.39187156464350564,0.39187156464350564,0.42226202267962937 +local,b600k.cps2022-2023-2024.acs050.s0,national,rent_contract_annual_aggregate,1,0.118027531378056,0.118027531378056,0.1294539567926372 +local,b600k.cps2022-2023-2024.acs050.s0,national,rent_gross_annual_aggregate,1,0.22520947494232751,0.22520947494232751,0.23524730090794793 +local,b600k.cps2022-2023-2024.acs050.s0,national,renter,1,0.02300281722600223,0.02300281722600223,0.019179098677224803 +local,b600k.cps2022-2023-2024.acs050.s0,state,households,51,0.03457562717924209,0.021635942166484658,0.029996373805502928 +local,b600k.cps2022-2023-2024.acs050.s0,state,owner,51,0.04090401034467487,0.038259690215607225,0.03478868669108088 +local,b600k.cps2022-2023-2024.acs050.s0,state,persons_0_17,51,0.060044480274040996,0.053934439010063076,0.04757777527998962 +local,b600k.cps2022-2023-2024.acs050.s0,state,persons_18_64,51,0.03409772562587803,0.030544981251818544,0.027509490333724632 +local,b600k.cps2022-2023-2024.acs050.s0,state,persons_65p,51,0.020130895911566627,0.009041969009142484,0.02919642305626463 +local,b600k.cps2022-2023-2024.acs050.s0,state,persons_in_households,51,0.01294776714003517,0.008868890248086025,0.01794596655497512 +local,b600k.cps2022-2023-2024.acs050.s0,state,persons_male,51,0.024565841861093264,0.019919788203849455,0.030145794013306495 +local,b600k.cps2022-2023-2024.acs050.s0,state,persons_total,51,0.015525668489994789,0.01318532022382571,0.018901079284208228 +local,b600k.cps2022-2023-2024.acs050.s0,state,real_estate_taxes_aggregate,51,0.3606063763978691,0.3649455630141956,0.350556825426126 +local,b600k.cps2022-2023-2024.acs050.s0,state,rent_contract_annual_aggregate,51,0.13987419847758958,0.11054424056921952,0.15280228479458702 +local,b600k.cps2022-2023-2024.acs050.s0,state,rent_gross_annual_aggregate,51,0.21071866478313125,0.21720683846163796,0.21406906286509106 +local,b600k.cps2022-2023-2024.acs050.s0,state,renter,51,0.0884159972270845,0.07943818476676681,0.05134947943147949 +local,b600k.cps2022-2023-2024.acs100.s0,cd,households,436,0.055547320023101,0.04106756449377638,0.03506520730176734 +local,b600k.cps2022-2023-2024.acs100.s0,cd,owner,436,0.09036917635309506,0.05675898758064961,0.06384594718594004 +local,b600k.cps2022-2023-2024.acs100.s0,cd,persons_0_17,436,0.08467210495880087,0.06653006003789709,0.07749915796910463 +local,b600k.cps2022-2023-2024.acs100.s0,cd,persons_18_64,436,0.04510605187882289,0.04046159670427159,0.0393318807368864 +local,b600k.cps2022-2023-2024.acs100.s0,cd,persons_65p,436,0.07613502367669127,0.0580402245689551,0.06486340081137254 +local,b600k.cps2022-2023-2024.acs100.s0,cd,persons_male,436,0.03269614997622842,0.02636580761775399,0.0443238019796366 +local,b600k.cps2022-2023-2024.acs100.s0,cd,persons_total,436,0.01627176371789309,0.011356731190521413,0.03631302649441157 +local,b600k.cps2022-2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.20810740147035095,0.20774943506553503,0.1659213056597975 +local,b600k.cps2022-2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3221537471480247,0.2747769059401564,0.31245072840633165 +local,b600k.cps2022-2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.2796923745829313,0.24479254814625961,0.2731156193254158 +local,b600k.cps2022-2023-2024.acs100.s0,cd,renter,436,0.1535408074446866,0.1203649537725098,0.10015830093827033 +local,b600k.cps2022-2023-2024.acs100.s0,county,households,850,0.10101557670559981,0.07249464087163004,0.07022295455240964 +local,b600k.cps2022-2023-2024.acs100.s0,county,owner,850,0.13137673997094465,0.09609988917039677,0.09120412403910466 +local,b600k.cps2022-2023-2024.acs100.s0,county,persons_0_17,850,0.1871400938061126,0.13072997643504375,0.14930389281148404 +local,b600k.cps2022-2023-2024.acs100.s0,county,persons_18_64,850,0.11489929381971524,0.08386885278808653,0.08464531723176698 +local,b600k.cps2022-2023-2024.acs100.s0,county,persons_65p,850,0.15633835581674463,0.11082357090282924,0.11514056128954414 +local,b600k.cps2022-2023-2024.acs100.s0,county,persons_in_households,850,0.09868039697001332,0.06555973685925431,0.07930916467963997 +local,b600k.cps2022-2023-2024.acs100.s0,county,persons_male,850,0.10693662405891359,0.07691971338277356,0.08247131400907916 +local,b600k.cps2022-2023-2024.acs100.s0,county,persons_total,850,0.09646060978521388,0.06325845449492463,0.07734309998358456 +local,b600k.cps2022-2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.2678292958115343,0.24380175755800154,0.19722729789148571 +local,b600k.cps2022-2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.41214851232429683,0.322863314182977,0.39346589899240614 +local,b600k.cps2022-2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.3572183647108037,0.30687382209606445,0.3286331922752514 +local,b600k.cps2022-2023-2024.acs100.s0,county,renter,850,0.23037085849929018,0.17934792962031626,0.16162469496419019 +local,b600k.cps2022-2023-2024.acs100.s0,national,households,1,0.026256912663399166,0.026256912663399166,0.011916986562554879 +local,b600k.cps2022-2023-2024.acs100.s0,national,owner,1,0.05049734566513279,0.05049734566513279,0.014413246770240463 +local,b600k.cps2022-2023-2024.acs100.s0,national,persons_0_17,1,0.06780692702141795,0.06780692702141795,0.03192184197385389 +local,b600k.cps2022-2023-2024.acs100.s0,national,persons_18_64,1,0.03861991881003687,0.03861991881003687,0.021832260889236167 +local,b600k.cps2022-2023-2024.acs100.s0,national,persons_65p,1,0.006366670114642772,0.006366670114642772,0.014908986136342239 +local,b600k.cps2022-2023-2024.acs100.s0,national,persons_in_households,1,0.0029427711227806206,0.0029427711227806206,0.010370673031291317 +local,b600k.cps2022-2023-2024.acs100.s0,national,persons_male,1,0.024003078337584246,0.024003078337584246,0.028618045204852963 +local,b600k.cps2022-2023-2024.acs100.s0,national,persons_total,1,0.009991040958027341,0.009991040958027341,0.017379591291674157 +local,b600k.cps2022-2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.2137812430508628,0.2137812430508628,0.17769908558937333 +local,b600k.cps2022-2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.12281267541267184,0.12281267541267184,0.1296810222713484 +local,b600k.cps2022-2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.22941310304973253,0.22941310304973253,0.23544677219274665 +local,b600k.cps2022-2023-2024.acs100.s0,national,renter,1,0.06416503608726166,0.06416503608726166,0.03589758252028333 +local,b600k.cps2022-2023-2024.acs100.s0,state,households,51,0.029862275409777296,0.0226987183140945,0.0169975748768794 +local,b600k.cps2022-2023-2024.acs100.s0,state,owner,51,0.0435227923987912,0.040730674576925724,0.019295694410602426 +local,b600k.cps2022-2023-2024.acs100.s0,state,persons_0_17,51,0.0666068089758976,0.06155131583919419,0.04707282476037992 +local,b600k.cps2022-2023-2024.acs100.s0,state,persons_18_64,51,0.04005537351594874,0.03696980130384427,0.023794807114982382 +local,b600k.cps2022-2023-2024.acs100.s0,state,persons_65p,51,0.010931974818271071,0.006256386388282518,0.02611831638512562 +local,b600k.cps2022-2023-2024.acs100.s0,state,persons_in_households,51,0.009510241400457921,0.004259039248474283,0.0173595699878346 +local,b600k.cps2022-2023-2024.acs100.s0,state,persons_male,51,0.023851950573478217,0.020408125711716064,0.02845235826373236 +local,b600k.cps2022-2023-2024.acs100.s0,state,persons_total,51,0.015180944631579018,0.011979553620894487,0.018551922555122165 +local,b600k.cps2022-2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.21109831789190578,0.20861127862534765,0.14846945183719518 +local,b600k.cps2022-2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.16341222551285803,0.11994060301269956,0.17508609473163061 +local,b600k.cps2022-2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.21169179694702486,0.19171108789603564,0.20840159791979437 +local,b600k.cps2022-2023-2024.acs100.s0,state,renter,51,0.09731635318044043,0.0943497889311714,0.049236075039910135 +local,b600k.cps2023-2024.acs000.s0,cd,households,436,0.07011996505914017,0.053783151487293235,0.04757020470526813 +local,b600k.cps2023-2024.acs000.s0,cd,owner,436,0.12542314062706622,0.07673967250679505,0.1419669757238363 +local,b600k.cps2023-2024.acs000.s0,cd,persons_0_17,436,0.08901404834361157,0.06466898737929005,0.12400367196258869 +local,b600k.cps2023-2024.acs000.s0,cd,persons_18_64,436,0.04752138286498946,0.039995874669340604,0.05876189764179027 +local,b600k.cps2023-2024.acs000.s0,cd,persons_65p,436,0.09714553731908339,0.0818158676433356,0.13165846430457087 +local,b600k.cps2023-2024.acs000.s0,cd,persons_male,436,0.04452373150019259,0.03605226855864009,0.06047215373767997 +local,b600k.cps2023-2024.acs000.s0,cd,persons_total,436,0.026443908764703976,0.019869350751594052,0.05023260618751336 +local,b600k.cps2023-2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.5167515852507631,0.5593959355242026,0.5676811076228979 +local,b600k.cps2023-2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.3189956444266703,0.27158098335476666,0.3153573695476941 +local,b600k.cps2023-2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.2920289111874504,0.26745396636236485,0.2843506848649899 +local,b600k.cps2023-2024.acs000.s0,cd,renter,436,0.2551015647398671,0.2111861629909423,0.22450938418467437 +local,b600k.cps2023-2024.acs000.s0,county,households,850,0.0930720268049594,0.062467564908482605,0.07000860107884044 +local,b600k.cps2023-2024.acs000.s0,county,owner,850,0.14698631243997987,0.10743176483846906,0.143311577796287 +local,b600k.cps2023-2024.acs000.s0,county,persons_0_17,850,0.17241305762303802,0.12282368901035791,0.1628470211171628 +local,b600k.cps2023-2024.acs000.s0,county,persons_18_64,850,0.10237957128599029,0.07169281515357272,0.09830799978136316 +local,b600k.cps2023-2024.acs000.s0,county,persons_65p,850,0.17623430353788702,0.1306627610509663,0.1647273008511208 +local,b600k.cps2023-2024.acs000.s0,county,persons_in_households,850,0.08258895963241955,0.05643208730925613,0.0806695740889332 +local,b600k.cps2023-2024.acs000.s0,county,persons_male,850,0.09018356274055762,0.06611713568818174,0.08569271421999052 +local,b600k.cps2023-2024.acs000.s0,county,persons_total,850,0.07873027002826892,0.05378296245039157,0.07497035879383328 +local,b600k.cps2023-2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.5201564265483738,0.5541731291944676,0.5480828336968154 +local,b600k.cps2023-2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.4048779772373883,0.33010595404078413,0.39961295150573706 +local,b600k.cps2023-2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.3450019383102263,0.2964932740217967,0.3377649518117794 +local,b600k.cps2023-2024.acs000.s0,county,renter,850,0.3334909975545844,0.256560012718306,0.3030451079437595 +local,b600k.cps2023-2024.acs000.s0,national,households,1,0.04063176137588887,0.04063176137588887,0.04063176077450957 +local,b600k.cps2023-2024.acs000.s0,national,owner,1,0.02528173134009962,0.02528173134009962,0.04234516572802962 +local,b600k.cps2023-2024.acs000.s0,national,persons_0_17,1,0.05177674746115352,0.05177674746115352,0.027390231881040526 +local,b600k.cps2023-2024.acs000.s0,national,persons_18_64,1,0.024912436206717563,0.024912436206717563,0.02680501507024841 +local,b600k.cps2023-2024.acs000.s0,national,persons_65p,1,0.02509792766283101,0.02509792766283101,0.026233676447590164 +local,b600k.cps2023-2024.acs000.s0,national,persons_in_households,1,0.016571374450058005,0.016571374450058005,0.007468807603687385 +local,b600k.cps2023-2024.acs000.s0,national,persons_male,1,0.024452909294381067,0.024452909294381067,0.030408793665966896 +local,b600k.cps2023-2024.acs000.s0,national,persons_total,1,0.008501531854522605,0.008501531854522605,0.017379591291569706 +local,b600k.cps2023-2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.57762932464208,0.57762932464208,0.6562268648260858 +local,b600k.cps2023-2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.12352193817258843,0.12352193817258843,0.12227496863436776 +local,b600k.cps2023-2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.23003617246029842,0.23003617246029842,0.22894074123356356 +local,b600k.cps2023-2024.acs000.s0,national,renter,1,0.03331421164382839,0.03331421164382839,0.0025205865936245436 +local,b600k.cps2023-2024.acs000.s0,state,households,51,0.04204723286192365,0.027891217250972305,0.04016948176038709 +local,b600k.cps2023-2024.acs000.s0,state,owner,51,0.03445202932135316,0.023948343088771754,0.047575326212758874 +local,b600k.cps2023-2024.acs000.s0,state,persons_0_17,51,0.05921316789103704,0.04853369266345101,0.05483953711216379 +local,b600k.cps2023-2024.acs000.s0,state,persons_18_64,51,0.02955175870186121,0.026857103648531246,0.030737259274090257 +local,b600k.cps2023-2024.acs000.s0,state,persons_65p,51,0.022996068430338485,0.009673951009198017,0.03958899754100455 +local,b600k.cps2023-2024.acs000.s0,state,persons_in_households,51,0.01992604499301162,0.018072662960564714,0.019558544514582006 +local,b600k.cps2023-2024.acs000.s0,state,persons_male,51,0.029295673326408787,0.025851816679351877,0.031232583282334508 +local,b600k.cps2023-2024.acs000.s0,state,persons_total,51,0.014578525804312221,0.013653679655175444,0.018964847449262308 +local,b600k.cps2023-2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.4693592216257568,0.4663987833207823,0.541622701942078 +local,b600k.cps2023-2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.14569300467042268,0.1315081858642453,0.1416029247645714 +local,b600k.cps2023-2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.2285781129670461,0.22585702277922173,0.21996850492417253 +local,b600k.cps2023-2024.acs000.s0,state,renter,51,0.08779063825268991,0.08010337854496208,0.06435477021533302 +local,b600k.cps2023-2024.acs100.s0,cd,households,436,0.051720346407848165,0.039563447848038114,0.03201891814786413 +local,b600k.cps2023-2024.acs100.s0,cd,owner,436,0.08043947633140777,0.05491388959800669,0.05429203104563203 +local,b600k.cps2023-2024.acs100.s0,cd,persons_0_17,436,0.08785111784226801,0.0716390911910455,0.07857924097754165 +local,b600k.cps2023-2024.acs100.s0,cd,persons_18_64,436,0.04738258497330894,0.038854378970561876,0.04069222534409441 +local,b600k.cps2023-2024.acs100.s0,cd,persons_65p,436,0.07328656305475142,0.05732332738273331,0.05900141255712118 +local,b600k.cps2023-2024.acs100.s0,cd,persons_male,436,0.032617899007524105,0.026704040028513835,0.045321618142586624 +local,b600k.cps2023-2024.acs100.s0,cd,persons_total,436,0.01541211101048625,0.009540765040016618,0.03817866115212427 +local,b600k.cps2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.15044019614294882,0.14049665400143205,0.1283149673485505 +local,b600k.cps2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3233243039031593,0.26233500639670004,0.31389979158479325 +local,b600k.cps2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.2772592176856028,0.23980965116244718,0.27326254525660193 +local,b600k.cps2023-2024.acs100.s0,cd,renter,436,0.14200054637280407,0.11840750428643537,0.08687767837826281 +local,b600k.cps2023-2024.acs100.s0,county,households,850,0.10058108528083204,0.07293873305797768,0.06786876691051111 +local,b600k.cps2023-2024.acs100.s0,county,owner,850,0.12690365250699623,0.09083886102461666,0.08533779859957384 +local,b600k.cps2023-2024.acs100.s0,county,persons_0_17,850,0.19354936288107857,0.14000899366386108,0.15092560849272915 +local,b600k.cps2023-2024.acs100.s0,county,persons_18_64,850,0.11726635850042497,0.08500997993657661,0.08535920677713327 +local,b600k.cps2023-2024.acs100.s0,county,persons_65p,850,0.15242008491407255,0.1083336299095451,0.11181692901151243 +local,b600k.cps2023-2024.acs100.s0,county,persons_in_households,850,0.10058897231620476,0.07003217444527395,0.07974345026069395 +local,b600k.cps2023-2024.acs100.s0,county,persons_male,850,0.10762388426024239,0.0808333122769244,0.0848549067859619 +local,b600k.cps2023-2024.acs100.s0,county,persons_total,850,0.09815909306743173,0.06780365642011268,0.07768986651702461 +local,b600k.cps2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.22829485781014247,0.1975291754274667,0.17081468563330832 +local,b600k.cps2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.41327147832933586,0.338711401488017,0.3921769114729371 +local,b600k.cps2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.35812608782529787,0.30803039253765085,0.32672405393682935 +local,b600k.cps2023-2024.acs100.s0,county,renter,850,0.21839647315018162,0.16976417317981063,0.15205682831065692 +local,b600k.cps2023-2024.acs100.s0,national,households,1,0.02175483236876062,0.02175483236876062,0.007898100092096693 +local,b600k.cps2023-2024.acs100.s0,national,owner,1,0.044596132815276364,0.044596132815276364,0.009375892152526346 +local,b600k.cps2023-2024.acs100.s0,national,persons_0_17,1,0.07308313805107025,0.07308313805107025,0.03465086915036744 +local,b600k.cps2023-2024.acs100.s0,national,persons_18_64,1,0.04179063555257215,0.04179063555257215,0.021099151615868166 +local,b600k.cps2023-2024.acs100.s0,national,persons_65p,1,0.001713554994911737,0.001713554994911737,0.01569357216696269 +local,b600k.cps2023-2024.acs100.s0,national,persons_in_households,1,0.0003833277244357812,0.0003833277244357812,0.012787431015813356 +local,b600k.cps2023-2024.acs100.s0,national,persons_male,1,0.02509134506256006,0.02509134506256006,0.028925993511865398 +local,b600k.cps2023-2024.acs100.s0,national,persons_total,1,0.009941628214364655,0.009941628214364655,0.01737959129168467 +local,b600k.cps2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.13651549207437016,0.13651549207437016,0.11048028880911435 +local,b600k.cps2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.12245273715892654,0.12245273715892654,0.1281570822615306 +local,b600k.cps2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.22909690638993951,0.22909690638993951,0.23410802940612888 +local,b600k.cps2023-2024.acs100.s0,national,renter,1,0.06825472444363605,0.06825472444363605,0.039266486957245474 +local,b600k.cps2023-2024.acs100.s0,state,households,51,0.027618888221235597,0.020825909866345575,0.014483036257314095 +local,b600k.cps2023-2024.acs100.s0,state,owner,51,0.04028339717032344,0.035985404856207055,0.016025862707060336 +local,b600k.cps2023-2024.acs100.s0,state,persons_0_17,51,0.06994337144014993,0.06196146192421074,0.041562306128017895 +local,b600k.cps2023-2024.acs100.s0,state,persons_18_64,51,0.043364990055289473,0.03758035436090752,0.023431882857797973 +local,b600k.cps2023-2024.acs100.s0,state,persons_65p,51,0.010152185763692298,0.0055810815884605085,0.0283621353351104 +local,b600k.cps2023-2024.acs100.s0,state,persons_in_households,51,0.009817082945746434,0.00487832211664343,0.017972250831526402 +local,b600k.cps2023-2024.acs100.s0,state,persons_male,51,0.027653614799856025,0.023811199888998383,0.02784736053088848 +local,b600k.cps2023-2024.acs100.s0,state,persons_total,51,0.01593890399355602,0.012079911855745789,0.01888189852316395 +local,b600k.cps2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.1426368546554541,0.13883226736658516,0.09512214865337698 +local,b600k.cps2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.1705399904259491,0.13076503441815215,0.18348344571762085 +local,b600k.cps2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.2117669607250461,0.20003334404320594,0.21014181331630405 +local,b600k.cps2023-2024.acs100.s0,state,renter,51,0.09763444955652427,0.1008291519284661,0.04939571988322804 +local,b600k.cps2024.acs000.s0,cd,households,436,0.07101683468910915,0.05492096404610681,0.04860373422342944 +local,b600k.cps2024.acs000.s0,cd,owner,436,0.12350313053924501,0.07320348080813363,0.14086797245473626 +local,b600k.cps2024.acs000.s0,cd,persons_0_17,436,0.09384706855143109,0.0679998901367497,0.1287218736419662 +local,b600k.cps2024.acs000.s0,cd,persons_18_64,436,0.04824765441692262,0.04001012131280943,0.06368655569089146 +local,b600k.cps2024.acs000.s0,cd,persons_65p,436,0.08987463713472517,0.06852105795066257,0.13475217085653052 +local,b600k.cps2024.acs000.s0,cd,persons_male,436,0.048205546051955955,0.03952534513886438,0.06347128608512126 +local,b600k.cps2024.acs000.s0,cd,persons_total,436,0.026784926728010014,0.020085763171557247,0.053441021977624 +local,b600k.cps2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.5141233087889496,0.5563091894764101,0.5512385370971004 +local,b600k.cps2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.3267187139843856,0.27793667269950006,0.32027836579887575 +local,b600k.cps2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.2918632511306088,0.2588791148140167,0.28394427611551737 +local,b600k.cps2024.acs000.s0,cd,renter,436,0.2636297680104132,0.2092766078622619,0.2296633622834789 +local,b600k.cps2024.acs000.s0,county,households,850,0.09353289779421271,0.06453045229280577,0.07032960345071332 +local,b600k.cps2024.acs000.s0,county,owner,850,0.1456058626159746,0.10513286462783322,0.14217725774268836 +local,b600k.cps2024.acs000.s0,county,persons_0_17,850,0.17059362940533737,0.1180238473590544,0.1679169791612588 +local,b600k.cps2024.acs000.s0,county,persons_18_64,850,0.10420872697323377,0.07160230505652204,0.101923904001775 +local,b600k.cps2024.acs000.s0,county,persons_65p,850,0.16793095369318076,0.12556462051081807,0.16532852292906403 +local,b600k.cps2024.acs000.s0,county,persons_in_households,850,0.08625154452366118,0.05760849223509885,0.08620704438537921 +local,b600k.cps2024.acs000.s0,county,persons_male,850,0.0962580615070451,0.06595458893685094,0.08967680931621032 +local,b600k.cps2024.acs000.s0,county,persons_total,850,0.08272117679852185,0.055007075583373734,0.07962418337759103 +local,b600k.cps2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.5207489426790778,0.5535797101619722,0.5307062105782046 +local,b600k.cps2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.408274776293562,0.3336581903453002,0.40670800802871676 +local,b600k.cps2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.34486805252212527,0.29569782703896996,0.33684740200907715 +local,b600k.cps2024.acs000.s0,county,renter,850,0.3356599384165806,0.2481263267442784,0.30476853363678535 +local,b600k.cps2024.acs000.s0,national,households,1,0.042503266822223204,0.042503266822223204,0.042503266231344095 +local,b600k.cps2024.acs000.s0,national,owner,1,0.017766487632581013,0.017766487632581013,0.04010859549479916 +local,b600k.cps2024.acs000.s0,national,persons_0_17,1,0.05743120464399337,0.05743120464399337,0.03288093308216741 +local,b600k.cps2024.acs000.s0,national,persons_18_64,1,0.026622572089607364,0.026622572089607364,0.028643647199171115 +local,b600k.cps2024.acs000.s0,national,persons_65p,1,0.02481881489640197,0.02481881489640197,0.03895423703662267 +local,b600k.cps2024.acs000.s0,national,persons_in_households,1,0.016804372845702714,0.016804372845702714,0.007468807602916907 +local,b600k.cps2024.acs000.s0,national,persons_male,1,0.02882598026481602,0.02882598026481602,0.03015050978129372 +local,b600k.cps2024.acs000.s0,national,persons_total,1,0.008274280174838965,0.008274280174838965,0.01737959129232118 +local,b600k.cps2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.5740593539857844,0.5740593539857844,0.6395411932654015 +local,b600k.cps2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.10515479394011774,0.10515479394011774,0.098869446080184 +local,b600k.cps2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.21390110041443175,0.21390110041443175,0.20837958115864685 +local,b600k.cps2024.acs000.s0,national,renter,1,0.05380383953114939,0.05380383953114939,0.012242781551081959 +local,b600k.cps2024.acs000.s0,state,households,51,0.04468651342811599,0.035192630703291525,0.0411318324001774 +local,b600k.cps2024.acs000.s0,state,owner,51,0.036111985731305224,0.029461252272424774,0.04737445437548185 +local,b600k.cps2024.acs000.s0,state,persons_0_17,51,0.06416483727000125,0.06502865147162053,0.05938231280038855 +local,b600k.cps2024.acs000.s0,state,persons_18_64,51,0.0317478287893274,0.02850081563333349,0.03622043144080088 +local,b600k.cps2024.acs000.s0,state,persons_65p,51,0.024840920171219385,0.010187637884290609,0.053288532654899204 +local,b600k.cps2024.acs000.s0,state,persons_in_households,51,0.0209906024661828,0.018900562498929557,0.01986143555982416 +local,b600k.cps2024.acs000.s0,state,persons_male,51,0.03320302577851159,0.030565099023747894,0.03069101486431198 +local,b600k.cps2024.acs000.s0,state,persons_total,51,0.015828165554551174,0.011707263789104081,0.018409030751611464 +local,b600k.cps2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.46959172415734196,0.4620702345215907,0.526001522155504 +local,b600k.cps2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.1277358365402559,0.1076841079047712,0.12759779821473993 +local,b600k.cps2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.2082278531656918,0.21647805023827668,0.20252115687966885 +local,b600k.cps2024.acs000.s0,state,renter,51,0.08718835882870808,0.07864588736876549,0.07151289876278472 +local,b600k.cps2024.acs050.s0,cd,households,436,0.06021883787644275,0.042976061285940434,0.0378119201009434 +local,b600k.cps2024.acs050.s0,cd,owner,436,0.0970491640462925,0.06076528360939331,0.08940336052967823 +local,b600k.cps2024.acs050.s0,cd,persons_0_17,436,0.08371364341152365,0.057744343993788444,0.09558272273817567 +local,b600k.cps2024.acs050.s0,cd,persons_18_64,436,0.04511810786497216,0.03798891795659751,0.0492840182173179 +local,b600k.cps2024.acs050.s0,cd,persons_65p,436,0.07722630655776277,0.05775498589666836,0.08642160122209239 +local,b600k.cps2024.acs050.s0,cd,persons_male,436,0.03456547368467813,0.028394015586692502,0.05095400388283775 +local,b600k.cps2024.acs050.s0,cd,persons_total,436,0.018644305737130547,0.014413897455800333,0.04227227158393402 +local,b600k.cps2024.acs050.s0,cd,real_estate_taxes_aggregate,436,0.3175581378533248,0.3400668093505594,0.2935751668108753 +local,b600k.cps2024.acs050.s0,cd,rent_contract_annual_aggregate,436,0.3304352513297145,0.27651374635816045,0.31815952267130265 +local,b600k.cps2024.acs050.s0,cd,rent_gross_annual_aggregate,436,0.2824901941921084,0.24411240637245554,0.2756038510261207 +local,b600k.cps2024.acs050.s0,cd,renter,436,0.18499827451019782,0.14029090205025418,0.1439488670291109 +local,b600k.cps2024.acs050.s0,county,households,850,0.09783130823413608,0.06800125414769595,0.07134703071043064 +local,b600k.cps2024.acs050.s0,county,owner,850,0.13477906949113072,0.10137689436216675,0.10953933697417954 +local,b600k.cps2024.acs050.s0,county,persons_0_17,850,0.1828703846666254,0.12862693075471004,0.15324594300906216 +local,b600k.cps2024.acs050.s0,county,persons_18_64,850,0.11496823266351937,0.08543549895437119,0.09387407087829701 +local,b600k.cps2024.acs050.s0,county,persons_65p,850,0.1555519567803619,0.11104351936914139,0.13138329285662573 +local,b600k.cps2024.acs050.s0,county,persons_in_households,850,0.09528248675848576,0.06047012983898152,0.08305863152062937 +local,b600k.cps2024.acs050.s0,county,persons_male,850,0.10393354313242668,0.06980999447546561,0.08620642395998672 +local,b600k.cps2024.acs050.s0,county,persons_total,850,0.09297528349753134,0.058774679952861814,0.07985714392887511 +local,b600k.cps2024.acs050.s0,county,real_estate_taxes_aggregate,850,0.3571769482059081,0.3573592047279689,0.30599337024901835 +local,b600k.cps2024.acs050.s0,county,rent_contract_annual_aggregate,850,0.40784640905344843,0.31034772381714526,0.39561522450692965 +local,b600k.cps2024.acs050.s0,county,rent_gross_annual_aggregate,850,0.35053528555173097,0.29028633049620245,0.32499046551842276 +local,b600k.cps2024.acs050.s0,county,renter,850,0.26231275319925407,0.1995853528054346,0.212857145745422 +local,b600k.cps2024.acs050.s0,national,households,1,0.032336353512029924,0.032336353512029924,0.024115482131001297 +local,b600k.cps2024.acs050.s0,national,owner,1,0.03457175248002986,0.03457175248002986,0.023264152060971526 +local,b600k.cps2024.acs050.s0,national,persons_0_17,1,0.06125774499788046,0.06125774499788046,0.03600752374625699 +local,b600k.cps2024.acs050.s0,national,persons_18_64,1,0.03494936996010198,0.03494936996010198,0.02417241595557154 +local,b600k.cps2024.acs050.s0,national,persons_65p,1,0.014764778868733246,0.014764778868733246,0.027642849392773294 +local,b600k.cps2024.acs050.s0,national,persons_in_households,1,0.006399865536524447,0.006399865536524447,0.00375341199422468 +local,b600k.cps2024.acs050.s0,national,persons_male,1,0.024654647101105733,0.024654647101105733,0.02929129328905722 +local,b600k.cps2024.acs050.s0,national,persons_total,1,0.010685144634787137,0.010685144634787137,0.017379591291849055 +local,b600k.cps2024.acs050.s0,national,real_estate_taxes_aggregate,1,0.3447151413040628,0.3447151413040628,0.3442077419912742 +local,b600k.cps2024.acs050.s0,national,rent_contract_annual_aggregate,1,0.09585074832836171,0.09585074832836171,0.11117040245830881 +local,b600k.cps2024.acs050.s0,national,rent_gross_annual_aggregate,1,0.2057277314702102,0.2057277314702102,0.21918566047517046 +local,b600k.cps2024.acs050.s0,national,renter,1,0.012865278922286031,0.012865278922286031,0.014194095837008477 +local,b600k.cps2024.acs050.s0,state,households,51,0.032007194916043466,0.025283081464900832,0.027163858774878504 +local,b600k.cps2024.acs050.s0,state,owner,51,0.03507593863574291,0.027582378261767848,0.02920626243099388 +local,b600k.cps2024.acs050.s0,state,persons_0_17,51,0.06189155700480338,0.05562028234945782,0.05148227764742262 +local,b600k.cps2024.acs050.s0,state,persons_18_64,51,0.03764758137430317,0.03547104971311619,0.029377604727982252 +local,b600k.cps2024.acs050.s0,state,persons_65p,51,0.01807447718105968,0.008724502963032456,0.038644476717323954 +local,b600k.cps2024.acs050.s0,state,persons_in_households,51,0.010489661344786702,0.005948596636565114,0.017402341813074974 +local,b600k.cps2024.acs050.s0,state,persons_male,51,0.02713557265966572,0.02427982274682227,0.02993045326881342 +local,b600k.cps2024.acs050.s0,state,persons_total,51,0.015889715996366037,0.014700276623316796,0.01932238423550864 +local,b600k.cps2024.acs050.s0,state,real_estate_taxes_aggregate,51,0.3167952158327863,0.3288416033139848,0.2831545117659953 +local,b600k.cps2024.acs050.s0,state,rent_contract_annual_aggregate,51,0.13502763616971852,0.09327678382807174,0.14725449826944895 +local,b600k.cps2024.acs050.s0,state,rent_gross_annual_aggregate,51,0.19071034262987832,0.1824313960088848,0.1951523975767883 +local,b600k.cps2024.acs050.s0,state,renter,51,0.08494412911540479,0.07245132192589954,0.05321330049212731 +local,b600k.cps2024.acs100.s0,cd,households,436,0.04631328952904988,0.03440322982697022,0.030061419843700195 +local,b600k.cps2024.acs100.s0,cd,owner,436,0.07264797649338368,0.053488306755058015,0.04509465449094906 +local,b600k.cps2024.acs100.s0,cd,persons_0_17,436,0.09252031857929835,0.08205764236636257,0.07972314206638158 +local,b600k.cps2024.acs100.s0,cd,persons_18_64,436,0.05063277428533783,0.042188068739634946,0.040270052483086245 +local,b600k.cps2024.acs100.s0,cd,persons_65p,436,0.07411385130460797,0.060358812544985076,0.0553797197180921 +local,b600k.cps2024.acs100.s0,cd,persons_male,436,0.03478025018968345,0.026583735272594645,0.044717927558343314 +local,b600k.cps2024.acs100.s0,cd,persons_total,436,0.01698517546355097,0.008570494351923579,0.038299130155592116 +local,b600k.cps2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.10834989208267094,0.0861561598965066,0.10919882484157147 +local,b600k.cps2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3235496662222627,0.25624658839149095,0.3160626471752382 +local,b600k.cps2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.2794925873475555,0.24996955876717364,0.27585730257839186 +local,b600k.cps2024.acs100.s0,cd,renter,436,0.13445157375760514,0.12003657388111987,0.07901117774209547 +local,b600k.cps2024.acs100.s0,county,households,850,0.10098075378540407,0.0729988401875985,0.06689653047543878 +local,b600k.cps2024.acs100.s0,county,owner,850,0.12353509916452822,0.08792597038851821,0.08065964061352399 +local,b600k.cps2024.acs100.s0,county,persons_0_17,850,0.2010060991339971,0.1424213738856326,0.15509941710625452 +local,b600k.cps2024.acs100.s0,county,persons_18_64,850,0.1230526714349211,0.08934952418918088,0.08543760291011471 +local,b600k.cps2024.acs100.s0,county,persons_65p,850,0.1526957535834495,0.11446000046959678,0.10929178763468612 +local,b600k.cps2024.acs100.s0,county,persons_in_households,850,0.10616710847472154,0.0710325215458587,0.08135099465475124 +local,b600k.cps2024.acs100.s0,county,persons_male,850,0.1133099209881395,0.08329374196308785,0.08556084387389476 +local,b600k.cps2024.acs100.s0,county,persons_total,850,0.10388914886128885,0.07020871231587511,0.07847623406391573 +local,b600k.cps2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.1960317632558816,0.14354287967453427,0.16153074306399925 +local,b600k.cps2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.4117596201201114,0.3361553669615458,0.3958742716723528 +local,b600k.cps2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.3545257355090801,0.3018909279678914,0.3284680199300558 +local,b600k.cps2024.acs100.s0,county,renter,850,0.21552802752843056,0.17530040251694484,0.1488208730998836 +local,b600k.cps2024.acs100.s0,national,households,1,0.015332003170950863,0.015332003170950863,0.004032550306107907 +local,b600k.cps2024.acs100.s0,national,owner,1,0.04174945712942085,0.04174945712942085,0.005330971097048906 +local,b600k.cps2024.acs100.s0,national,persons_0_17,1,0.0777450749554749,0.0777450749554749,0.036277025047341385 +local,b600k.cps2024.acs100.s0,national,persons_18_64,1,0.04623676462692728,0.04623676462692728,0.020396038644001573 +local,b600k.cps2024.acs100.s0,national,persons_65p,1,0.0018840053042606967,0.0018840053042606967,0.015265749505787189 +local,b600k.cps2024.acs100.s0,national,persons_in_households,1,0.004105271987092934,0.004105271987092934,0.015181688429502196 +local,b600k.cps2024.acs100.s0,national,persons_male,1,0.027036860957599752,0.027036860957599752,0.028476246299673852 +local,b600k.cps2024.acs100.s0,national,persons_total,1,0.010986270563683809,0.010986270563683809,0.017379591291975412 +local,b600k.cps2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.041290201885559555,0.041290201885559555,0.0444345280130821 +local,b600k.cps2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.12721404802805134,0.12721404802805134,0.12799956725070355 +local,b600k.cps2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.23327959766375667,0.23327959766375667,0.2339696564497328 +local,b600k.cps2024.acs100.s0,national,renter,1,0.08184506225627963,0.08184506225627963,0.04398605432062964 +local,b600k.cps2024.acs100.s0,state,households,51,0.024653060248897258,0.020801671120720674,0.012551797889670965 +local,b600k.cps2024.acs100.s0,state,owner,51,0.03687949686926419,0.03370304162692925,0.01450316633318095 +local,b600k.cps2024.acs100.s0,state,persons_0_17,51,0.07420822934963915,0.06571109607763753,0.0418250264669515 +local,b600k.cps2024.acs100.s0,state,persons_18_64,51,0.04770688849995638,0.040316089636483914,0.024308408417819696 +local,b600k.cps2024.acs100.s0,state,persons_65p,51,0.012177951648235475,0.008324491139790502,0.02918024219017552 +local,b600k.cps2024.acs100.s0,state,persons_in_households,51,0.012176529005499651,0.008521794872012841,0.018703698460971988 +local,b600k.cps2024.acs100.s0,state,persons_male,51,0.029620086441041447,0.027414430034714908,0.026977597799269778 +local,b600k.cps2024.acs100.s0,state,persons_total,51,0.01754532975028096,0.013476681938521778,0.019067969513008286 +local,b600k.cps2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.06968032907050212,0.06586335176081728,0.04640083779828414 +local,b600k.cps2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.18259177273153981,0.15308353141938646,0.1896387156641729 +local,b600k.cps2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.21323882998205757,0.2043009251108927,0.2128487121032932 +local,b600k.cps2024.acs100.s0,state,renter,51,0.1046959744060641,0.11637787966366468,0.05368877525129426 +local,natural.cps2022-2023-2024.acs100.s0,cd,households,436,0.07540511234566043,0.057845579379849604,0.07702745456319936 +local,natural.cps2022-2023-2024.acs100.s0,cd,owner,436,0.13392787644101564,0.07883907365354922,0.1551484793891346 +local,natural.cps2022-2023-2024.acs100.s0,cd,persons_0_17,436,0.10327641910264818,0.0761772508676021,0.12072268393512044 +local,natural.cps2022-2023-2024.acs100.s0,cd,persons_18_64,436,0.05217585634143512,0.04360086463856078,0.05917639471386573 +local,natural.cps2022-2023-2024.acs100.s0,cd,persons_65p,436,0.11405603656598653,0.09358719221846742,0.14635989769733457 +local,natural.cps2022-2023-2024.acs100.s0,cd,persons_male,436,0.049577588918087334,0.04246466368143162,0.0586641436442937 +local,natural.cps2022-2023-2024.acs100.s0,cd,persons_total,436,0.029006630796119065,0.019729382879163794,0.05043010613657911 +local,natural.cps2022-2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.5213357066415857,0.5533734129912201,0.5774003843679367 +local,natural.cps2022-2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3197761785188397,0.27290534315769616,0.31082246755836407 +local,natural.cps2022-2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.29909666618326336,0.27770106667944133,0.28236030841940746 +local,natural.cps2022-2023-2024.acs100.s0,cd,renter,436,0.2664604163398467,0.21024887088190963,0.24081713613269728 +local,natural.cps2022-2023-2024.acs100.s0,county,households,850,0.13892983421829347,0.10277606672560821,0.11263403490092005 +local,natural.cps2022-2023-2024.acs100.s0,county,owner,850,0.18462971974091738,0.13678644385230898,0.167805318211452 +local,natural.cps2022-2023-2024.acs100.s0,county,persons_0_17,850,0.23413128747932224,0.17628670934662571,0.1809033074472681 +local,natural.cps2022-2023-2024.acs100.s0,county,persons_18_64,850,0.14967617234564762,0.10646173861368621,0.11595858180255403 +local,natural.cps2022-2023-2024.acs100.s0,county,persons_65p,850,0.24675285365419614,0.1746943296593832,0.20499269577599868 +local,natural.cps2022-2023-2024.acs100.s0,county,persons_in_households,850,0.125685981792034,0.08519151638436506,0.09871282288235243 +local,natural.cps2022-2023-2024.acs100.s0,county,persons_male,850,0.13560739685250875,0.0935963958921555,0.1072620855597396 +local,natural.cps2022-2023-2024.acs100.s0,county,persons_total,850,0.12110473884808991,0.07702166865169473,0.09804707185198311 +local,natural.cps2022-2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.5573923338166573,0.6018280239215406,0.5759967143315385 +local,natural.cps2022-2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.4224663984853271,0.3457273169740376,0.40674062383306964 +local,natural.cps2022-2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.3896932783559318,0.33728533625635815,0.3555046169024228 +local,natural.cps2022-2023-2024.acs100.s0,county,renter,850,0.3623826276332879,0.28197750306034625,0.31997071274398775 +local,natural.cps2022-2023-2024.acs100.s0,national,households,1,0.040387780448345845,0.040387780448345845,0.04038778011146347 +local,natural.cps2022-2023-2024.acs100.s0,national,owner,1,0.03176726865794991,0.03176726865794991,0.045042942663381706 +local,natural.cps2022-2023-2024.acs100.s0,national,persons_0_17,1,0.057697567601836725,0.057697567601836725,0.02109426309341987 +local,natural.cps2022-2023-2024.acs100.s0,national,persons_18_64,1,0.021869549647768823,0.021869549647768823,0.02674863655270408 +local,natural.cps2022-2023-2024.acs100.s0,national,persons_65p,1,0.024725659600010715,0.024725659600010715,0.01854702634614402 +local,natural.cps2022-2023-2024.acs100.s0,national,persons_in_households,1,0.019830852845274777,0.019830852845274777,0.007468807603571669 +local,natural.cps2022-2023-2024.acs100.s0,national,persons_male,1,0.022053808449748885,0.022053808449748885,0.030890456469580847 +local,natural.cps2022-2023-2024.acs100.s0,national,persons_total,1,0.005322445843410969,0.005322445843410969,0.017379591291682567 +local,natural.cps2022-2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.5806503342459348,0.5806503342459348,0.6659411721508848 +local,natural.cps2022-2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.13041730803118715,0.13041730803118715,0.13110826309032833 +local,natural.cps2022-2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.23609358062583674,0.23609358062583674,0.2367005671839316 +local,natural.cps2022-2023-2024.acs100.s0,national,renter,1,0.021920793185649746,0.021920793185649746,0.0022442128363368394 +local,natural.cps2022-2023-2024.acs100.s0,state,households,51,0.040646021516202904,0.025697944519990693,0.03881877297157921 +local,natural.cps2022-2023-2024.acs100.s0,state,owner,51,0.03665772336911784,0.03468317012378691,0.04937364843674731 +local,natural.cps2022-2023-2024.acs100.s0,state,persons_0_17,51,0.06031545366067818,0.05533990952109531,0.0512512979358957 +local,natural.cps2022-2023-2024.acs100.s0,state,persons_18_64,51,0.026433447088128954,0.020384168162733904,0.029082605581339526 +local,natural.cps2022-2023-2024.acs100.s0,state,persons_65p,51,0.022193028231726267,0.00996048907388512,0.033742093722682304 +local,natural.cps2022-2023-2024.acs100.s0,state,persons_in_households,51,0.02246442308562832,0.02333037575470418,0.02046149837401532 +local,natural.cps2022-2023-2024.acs100.s0,state,persons_male,51,0.026117854826033682,0.023004462175212688,0.030540574782716583 +local,natural.cps2022-2023-2024.acs100.s0,state,persons_total,51,0.012988246829486103,0.011175024432290112,0.017719590215261614 +local,natural.cps2022-2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.4731924914507492,0.46643698668248323,0.5512094530501028 +local,natural.cps2022-2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.1473850051072991,0.12311573761125603,0.146856471666088 +local,natural.cps2022-2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.23832652109429667,0.23459411488311963,0.23190637634799494 +local,natural.cps2022-2023-2024.acs100.s0,state,renter,51,0.08451060885800271,0.06617752905694989,0.058740079396226365 +local,natural.cps2023-2024.acs100.s0,cd,households,436,0.07614943208765626,0.062257226419604905,0.08277502694406316 +local,natural.cps2023-2024.acs100.s0,cd,owner,436,0.13365399160896327,0.08155264798912604,0.15894818149309695 +local,natural.cps2023-2024.acs100.s0,cd,persons_0_17,436,0.11558849712032289,0.08074575413758144,0.1314240580340637 +local,natural.cps2023-2024.acs100.s0,cd,persons_18_64,436,0.05718696265138407,0.04545943428920939,0.06701928843575958 +local,natural.cps2023-2024.acs100.s0,cd,persons_65p,436,0.12162413445613415,0.10124961728616372,0.15607458611058003 +local,natural.cps2023-2024.acs100.s0,cd,persons_male,436,0.053332516573297926,0.04270358684181585,0.06519931740039178 +local,natural.cps2023-2024.acs100.s0,cd,persons_total,436,0.03217426974725061,0.020807847118753834,0.05778904881748221 +local,natural.cps2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.5225040040726696,0.5566138452096581,0.5708461692628187 +local,natural.cps2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.327167843623451,0.2842748416257859,0.31372344832396415 +local,natural.cps2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.3024096789676448,0.26655756456749785,0.2819052309567561 +local,natural.cps2023-2024.acs100.s0,cd,renter,436,0.2729518499862507,0.21199670954151234,0.24063252735457533 +local,natural.cps2023-2024.acs100.s0,county,households,850,0.15522651612438146,0.10916796146972804,0.12839005773406914 +local,natural.cps2023-2024.acs100.s0,county,owner,850,0.19959654324938664,0.14835342409146113,0.18183632780875766 +local,natural.cps2023-2024.acs100.s0,county,persons_0_17,850,0.2688627376154944,0.2034855108866506,0.20671475325314057 +local,natural.cps2023-2024.acs100.s0,county,persons_18_64,850,0.16348032104483065,0.1113906442517216,0.13482870982268952 +local,natural.cps2023-2024.acs100.s0,county,persons_65p,850,0.27412133599403926,0.20808263003406513,0.22583543516884713 +local,natural.cps2023-2024.acs100.s0,county,persons_in_households,850,0.14557323798754077,0.09469196199206104,0.11802989076874319 +local,natural.cps2023-2024.acs100.s0,county,persons_male,850,0.15895506138802581,0.11102208812640453,0.12467915689743747 +local,natural.cps2023-2024.acs100.s0,county,persons_total,850,0.14089594199753924,0.091040619624878,0.1159027429880289 +local,natural.cps2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.5739859142061494,0.6128820810857272,0.5805521226553558 +local,natural.cps2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.43591801889029935,0.37737061302728225,0.4183083479274824 +local,natural.cps2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.40028974591529787,0.3424993859238299,0.36442305605289327 +local,natural.cps2023-2024.acs100.s0,county,renter,850,0.3832705341144995,0.30525923548666345,0.3377028256883096 +local,natural.cps2023-2024.acs100.s0,national,households,1,0.04063176112255874,0.04063176112255874,0.04063176077420849 +local,natural.cps2023-2024.acs100.s0,national,owner,1,0.022545526445586706,0.022545526445586706,0.04234516572780774 +local,natural.cps2023-2024.acs100.s0,national,persons_0_17,1,0.06560880747203571,0.06560880747203571,0.027390231881191725 +local,natural.cps2023-2024.acs100.s0,national,persons_18_64,1,0.024210841015624488,0.024210841015624488,0.026805015070435673 +local,natural.cps2023-2024.acs100.s0,national,persons_65p,1,0.01815893615253982,0.01815893615253982,0.026233676447537487 +local,natural.cps2023-2024.acs100.s0,national,persons_in_households,1,0.021329048231944196,0.021329048231944196,0.007468807603658995 +local,natural.cps2023-2024.acs100.s0,national,persons_male,1,0.020676054440222417,0.020676054440222417,0.030408793665987435 +local,natural.cps2023-2024.acs100.s0,national,persons_total,1,0.003861202227664904,0.003861202227664904,0.017379591291597395 +local,natural.cps2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.5829667255713036,0.5829667255713036,0.6562268648260742 +local,natural.cps2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.11963730763422183,0.11963730763422183,0.1222749686344348 +local,natural.cps2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.22662362270216502,0.22662362270216502,0.22894074123362246 +local,natural.cps2023-2024.acs100.s0,national,renter,1,0.03785996198865447,0.03785996198865447,0.0025205865935970695 +local,natural.cps2023-2024.acs100.s0,state,households,51,0.04198503930902408,0.03228674226874621,0.04016948176038618 +local,natural.cps2023-2024.acs100.s0,state,owner,51,0.03308553809866008,0.027205084526144098,0.0475753262127579 +local,natural.cps2023-2024.acs100.s0,state,persons_0_17,51,0.06819003717423872,0.061511846444112415,0.05483953711216384 +local,natural.cps2023-2024.acs100.s0,state,persons_18_64,51,0.028754070959068546,0.02600944299238805,0.030737259274090486 +local,natural.cps2023-2024.acs100.s0,state,persons_65p,51,0.01990092740353616,0.010851741559137944,0.039588997541004305 +local,natural.cps2023-2024.acs100.s0,state,persons_in_households,51,0.024196195064285705,0.024117340144685143,0.019558544514582797 +local,natural.cps2023-2024.acs100.s0,state,persons_male,51,0.027369181098441855,0.022261538368759468,0.031232583282333474 +local,natural.cps2023-2024.acs100.s0,state,persons_total,51,0.014241481090268038,0.012343450398292573,0.01896484744926104 +local,natural.cps2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.4737531646398597,0.47074482833320913,0.5416227019420785 +local,natural.cps2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.14236716628209123,0.127486835248893,0.14160292476457131 +local,natural.cps2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.22789334394021554,0.21285280860011313,0.2199685049241719 +local,natural.cps2023-2024.acs100.s0,state,renter,51,0.08421971743159207,0.08235674530928502,0.06435477021533247 +local,natural.cps2024.acs100.s0,cd,households,436,0.08220366814853361,0.0631339164515669,0.09485650794965793 +local,natural.cps2024.acs100.s0,cd,owner,436,0.1434525866770899,0.0966895693762451,0.16382697748832892 +local,natural.cps2024.acs100.s0,cd,persons_0_17,436,0.14834450821242634,0.10916112048929648,0.14777727883399977 +local,natural.cps2024.acs100.s0,cd,persons_18_64,436,0.06974197391139507,0.057753905585046575,0.08294160725513632 +local,natural.cps2024.acs100.s0,cd,persons_65p,436,0.13919514820262557,0.1128015228071915,0.18024911975409463 +local,natural.cps2024.acs100.s0,cd,persons_male,436,0.06796369607541229,0.05330903140045172,0.07885285265254408 +local,natural.cps2024.acs100.s0,cd,persons_total,436,0.04234683405409704,0.027297789606765065,0.06848544826429406 +local,natural.cps2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.531037740642254,0.5828653566141992,0.5633972274948349 +local,natural.cps2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3453958337508021,0.28766505332603265,0.3259537712970768 +local,natural.cps2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.3144300142391268,0.2768072751657581,0.28928162032719945 +local,natural.cps2024.acs100.s0,cd,renter,436,0.28851684242352316,0.23420011327154236,0.26236095878741444 +local,natural.cps2024.acs100.s0,county,households,850,0.18340329827082166,0.1318779279255276,0.15704041939673816 +local,natural.cps2024.acs100.s0,county,owner,850,0.23441396517079885,0.17672790400157856,0.2061870685621213 +local,natural.cps2024.acs100.s0,county,persons_0_17,850,0.3110320637632594,0.23813975886672878,0.2581973448995865 +local,natural.cps2024.acs100.s0,county,persons_18_64,850,0.19726147487562953,0.14253368825513285,0.17287164263315008 +local,natural.cps2024.acs100.s0,county,persons_65p,850,0.30991792900951187,0.2345160224239607,0.2717549856453685 +local,natural.cps2024.acs100.s0,county,persons_in_households,850,0.17343080084395257,0.11983388976278656,0.14800136876415262 +local,natural.cps2024.acs100.s0,county,persons_male,850,0.18985370347430827,0.1310520767534153,0.15951010376184974 +local,natural.cps2024.acs100.s0,county,persons_total,850,0.16954231027465563,0.11118258922455701,0.1444797641695114 +local,natural.cps2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.5980137421440218,0.6351943541487559,0.5894351449274059 +local,natural.cps2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.45320674094233765,0.3929571053765445,0.44581404382435347 +local,natural.cps2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.42179788658900635,0.3732401694738438,0.4024978514520762 +local,natural.cps2024.acs100.s0,county,renter,850,0.4110610856933404,0.35009284832573473,0.3615559908221512 +local,natural.cps2024.acs100.s0,national,households,1,0.04250326644314316,0.04250326644314316,0.042503266232261264 +local,natural.cps2024.acs100.s0,national,owner,1,0.01440351750882893,0.01440351750882893,0.040108595495469086 +local,natural.cps2024.acs100.s0,national,persons_0_17,1,0.08496761329639906,0.08496761329639906,0.03288093308224219 +local,natural.cps2024.acs100.s0,national,persons_18_64,1,0.02974559765005693,0.02974559765005693,0.02864364719867025 +local,natural.cps2024.acs100.s0,national,persons_65p,1,0.012489195784942396,0.012489195784942396,0.03895423703666744 +local,natural.cps2024.acs100.s0,national,persons_in_households,1,0.023195854213774996,0.023195854213774996,0.007468807603635457 +local,natural.cps2024.acs100.s0,national,persons_male,1,0.023788730861614666,0.023788730861614666,0.030150509780975852 +local,natural.cps2024.acs100.s0,national,persons_total,1,0.0020404394973437146,0.0020404394973437146,0.017379591291620353 +local,natural.cps2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.5879131540785364,0.5879131540785364,0.639541193265433 +local,natural.cps2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.09088139489565485,0.09088139489565485,0.09886944608012654 +local,natural.cps2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.20136228006180068,0.20136228006180068,0.2083795811585964 +local,natural.cps2024.acs100.s0,national,renter,1,0.058752316297939255,0.058752316297939255,0.012242781550831461 +local,natural.cps2024.acs100.s0,state,households,51,0.04436222493936667,0.03202795952669077,0.04113183240017889 +local,natural.cps2024.acs100.s0,state,owner,51,0.03435769419899883,0.027190169343451618,0.04737445437547842 +local,natural.cps2024.acs100.s0,state,persons_0_17,51,0.08637521734525148,0.08106642236178443,0.05938231280038797 +local,natural.cps2024.acs100.s0,state,persons_18_64,51,0.03776363982985699,0.03662854367125631,0.036220431440798125 +local,natural.cps2024.acs100.s0,state,persons_65p,51,0.02095727416815766,0.012429624152864891,0.05328853265490045 +local,natural.cps2024.acs100.s0,state,persons_in_households,51,0.024172264172288047,0.021393504939839953,0.019861435559825478 +local,natural.cps2024.acs100.s0,state,persons_male,51,0.03256569993799309,0.02668356596447052,0.030691014864309484 +local,natural.cps2024.acs100.s0,state,persons_total,51,0.01761588051050974,0.015439013390945106,0.018409030751607942 +local,natural.cps2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.48314861955557775,0.48796264044038046,0.5260015221555046 +local,natural.cps2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.1181146554481196,0.09008305650773704,0.1275977982147394 +local,natural.cps2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.19700328389446067,0.18923332449842212,0.20252115687966973 +local,natural.cps2024.acs100.s0,state,renter,51,0.08309865598041244,0.07655892242684272,0.0715128987627851 +national,b1200k.cps0.acs100.s0,cd,households,436,0.06546793875483832,0.054173142604860315,0.016911495924950226 +national,b1200k.cps0.acs100.s0,cd,owner,436,0.08443946777482256,0.06358701707880085,0.027389507466497036 +national,b1200k.cps0.acs100.s0,cd,persons_0_17,436,0.1169496587934543,0.09192561608134726,0.06654691908238346 +national,b1200k.cps0.acs100.s0,cd,persons_18_64,436,0.07225207122715917,0.06081269681548772,0.030189007725320485 +national,b1200k.cps0.acs100.s0,cd,persons_65p,436,0.0998200485692092,0.07855984754662149,0.03557104609681045 +national,b1200k.cps0.acs100.s0,cd,persons_in_households,436,0.06701733094604381,0.04906508679343942,0.029365614160002666 +national,b1200k.cps0.acs100.s0,cd,persons_male,436,0.07005592850904079,0.05260624743872369,0.03622902588748794 +national,b1200k.cps0.acs100.s0,cd,persons_total,436,0.06559762185698083,0.04877150119357489,0.028675723791477488 +national,b1200k.cps0.acs100.s0,cd,real_estate_taxes_aggregate,436,0.1869510322206518,0.14121382622288814,0.10122144808323005 +national,b1200k.cps0.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3366728240012871,0.2741018721266164,0.31736926347378935 +national,b1200k.cps0.acs100.s0,cd,rent_gross_annual_aggregate,436,0.2966479759042343,0.2642582100269653,0.27748145721184314 +national,b1200k.cps0.acs100.s0,cd,renter,436,0.13953953919524628,0.1251801998749738,0.06711358591432277 +national,b1200k.cps0.acs100.s0,county,households,850,0.10634842009063332,0.07745041404102722,0.04022659235624308 +national,b1200k.cps0.acs100.s0,county,owner,850,0.13250258107792434,0.09673740831069724,0.05181320521507365 +national,b1200k.cps0.acs100.s0,county,persons_0_17,850,0.2060140491052898,0.1358077579489788,0.11612417671617863 +national,b1200k.cps0.acs100.s0,county,persons_18_64,850,0.1237183461416908,0.0956166370972192,0.062008162383127195 +national,b1200k.cps0.acs100.s0,county,persons_65p,850,0.1590565765985806,0.12094384340493194,0.07428653610579898 +national,b1200k.cps0.acs100.s0,county,persons_in_households,850,0.12021694367858081,0.08325846696566512,0.05780813581478426 +national,b1200k.cps0.acs100.s0,county,persons_male,850,0.12045492902317512,0.08761635068133222,0.06327159961501264 +national,b1200k.cps0.acs100.s0,county,persons_total,850,0.11589559031619459,0.08376375731960828,0.05559416595186459 +national,b1200k.cps0.acs100.s0,county,real_estate_taxes_aggregate,850,0.24476593189559426,0.1804210581133128,0.14261841373325493 +national,b1200k.cps0.acs100.s0,county,rent_contract_annual_aggregate,850,0.41036812252598714,0.32226411491089835,0.3952170587464888 +national,b1200k.cps0.acs100.s0,county,rent_gross_annual_aggregate,850,0.35619568740091945,0.30007594905410495,0.32378289924857434 +national,b1200k.cps0.acs100.s0,county,renter,850,0.21483222329838148,0.17726360911606664,0.1188825367351446 +national,b1200k.cps0.acs100.s0,national,households,1,0.010558941858680988,0.010558941858680988,0.00012716099964809008 +national,b1200k.cps0.acs100.s0,national,owner,1,0.05423551983639365,0.05423551983639365,0.0007317503461692467 +national,b1200k.cps0.acs100.s0,national,persons_0_17,1,0.07386665745265425,0.07386665745265425,0.037687584363355786 +national,b1200k.cps0.acs100.s0,national,persons_18_64,1,0.029815280556425145,0.029815280556425145,0.018638293933160584 +national,b1200k.cps0.acs100.s0,national,persons_65p,1,0.00019075972384936354,0.00019075972384936354,0.011035015710395802 +national,b1200k.cps0.acs100.s0,national,persons_in_households,1,0.0023614207712549743,0.0023614207712549743,0.017428446304894415 +national,b1200k.cps0.acs100.s0,national,persons_male,1,0.015748957667921837,0.015748957667921837,0.028831067096646904 +national,b1200k.cps0.acs100.s0,national,persons_total,1,0.002248354336395304,0.002248354336395304,0.017379591291828728 +national,b1200k.cps0.acs100.s0,national,real_estate_taxes_aggregate,1,0.152194409891978,0.152194409891978,0.016208821369269332 +national,b1200k.cps0.acs100.s0,national,rent_contract_annual_aggregate,1,0.13363101365625613,0.13363101365625613,0.1313430482891693 +national,b1200k.cps0.acs100.s0,national,rent_gross_annual_aggregate,1,0.23891673980281022,0.23891673980281022,0.23690682004777663 +national,b1200k.cps0.acs100.s0,national,renter,1,0.1169701040508225,0.1169701040508225,0.0493118006082098 +national,b1200k.cps0.acs100.s0,state,households,51,0.028819994115773725,0.02071824690965909,0.006340511853583996 +national,b1200k.cps0.acs100.s0,state,owner,51,0.04547067367289003,0.036835758997527696,0.007269437556433841 +national,b1200k.cps0.acs100.s0,state,persons_0_17,51,0.07287006204103653,0.058378296625487464,0.03864460240960343 +national,b1200k.cps0.acs100.s0,state,persons_18_64,51,0.03636647475120756,0.024412975473871362,0.021234174699764987 +national,b1200k.cps0.acs100.s0,state,persons_65p,51,0.014497058920451252,0.005164687289088426,0.016713799694230005 +national,b1200k.cps0.acs100.s0,state,persons_in_households,51,0.018524911370139303,0.014876615855457125,0.017791336343165817 +national,b1200k.cps0.acs100.s0,state,persons_male,51,0.026192468054496362,0.021417031437589024,0.025371236158061715 +national,b1200k.cps0.acs100.s0,state,persons_total,51,0.01872612694731292,0.015966647188095998,0.01756616344174996 +national,b1200k.cps0.acs100.s0,state,real_estate_taxes_aggregate,51,0.1168546318781668,0.11552927844606527,0.021820775325743013 +national,b1200k.cps0.acs100.s0,state,rent_contract_annual_aggregate,51,0.20569465782392887,0.16493797602630117,0.1980296977894466 +national,b1200k.cps0.acs100.s0,state,rent_gross_annual_aggregate,51,0.2339112636740966,0.18696435038167245,0.21777165814576163 +national,b1200k.cps0.acs100.s0,state,renter,51,0.13534035224523353,0.13478558562144738,0.06036941203737398 +national,b1200k.cps2022-2023-2024.acs000.s0,cd,households,436,0.05451548181538968,0.03817861878301035,0.04518524883062504 +national,b1200k.cps2022-2023-2024.acs000.s0,cd,owner,436,0.14364452487567272,0.07493835716023792,0.1404255430161006 +national,b1200k.cps2022-2023-2024.acs000.s0,cd,persons_0_17,436,0.14005176420782756,0.10788144908727218,0.11965151863731681 +national,b1200k.cps2022-2023-2024.acs000.s0,cd,persons_18_64,436,0.05733503125066456,0.041824143261969815,0.05732985391201939 +national,b1200k.cps2022-2023-2024.acs000.s0,cd,persons_65p,436,0.12624836582491977,0.09076052564087966,0.12667758978290083 +national,b1200k.cps2022-2023-2024.acs000.s0,cd,persons_in_households,436,0.0626337926974403,0.0485528947260959,0.05326810925290876 +national,b1200k.cps2022-2023-2024.acs000.s0,cd,persons_male,436,0.05876732738614794,0.04286977951821295,0.0589791545885527 +national,b1200k.cps2022-2023-2024.acs000.s0,cd,persons_total,436,0.051547071734603246,0.037444373263443506,0.04942042985000886 +national,b1200k.cps2022-2023-2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.4650073785272531,0.4812431984258392,0.5765496463852601 +national,b1200k.cps2022-2023-2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.3196052937233895,0.26305477996825155,0.31374362377056914 +national,b1200k.cps2022-2023-2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.2943314966023563,0.2708701017829651,0.2865611639180526 +national,b1200k.cps2022-2023-2024.acs000.s0,cd,renter,436,0.22984847276547996,0.1726288202001957,0.22171063149334405 +national,b1200k.cps2022-2023-2024.acs000.s0,county,households,850,0.0768432450864388,0.05156944690116871,0.06351266137919379 +national,b1200k.cps2022-2023-2024.acs000.s0,county,owner,850,0.14013468009057184,0.09960356934199063,0.1350622630923501 +national,b1200k.cps2022-2023-2024.acs000.s0,county,persons_0_17,850,0.18712457946524397,0.1295450496977455,0.15380407717060152 +national,b1200k.cps2022-2023-2024.acs000.s0,county,persons_18_64,850,0.10413464499288051,0.0756495854288235,0.09274177961645999 +national,b1200k.cps2022-2023-2024.acs000.s0,county,persons_65p,850,0.16362461464072808,0.12101450361485724,0.15379855358052308 +national,b1200k.cps2022-2023-2024.acs000.s0,county,persons_in_households,850,0.09606265347182905,0.06781912506938807,0.07819523906848598 +national,b1200k.cps2022-2023-2024.acs000.s0,county,persons_male,850,0.09130179635302935,0.06187555806756819,0.08118995883186989 +national,b1200k.cps2022-2023-2024.acs000.s0,county,persons_total,850,0.08493720476993373,0.059820849834040096,0.0716431515359234 +national,b1200k.cps2022-2023-2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.46880688301521106,0.48884984339941434,0.5481905154373263 +national,b1200k.cps2022-2023-2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.3955689211356353,0.30396527198937856,0.39448468761155026 +national,b1200k.cps2022-2023-2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.34460997543922506,0.29044493148714357,0.3343185758806215 +national,b1200k.cps2022-2023-2024.acs000.s0,county,renter,850,0.30349607724372124,0.2334813038587007,0.29234951692374417 +national,b1200k.cps2022-2023-2024.acs000.s0,national,households,1,0.04038778048023349,0.04038778048023349,0.040387780113526596 +national,b1200k.cps2022-2023-2024.acs000.s0,national,owner,1,0.04831345839021407,0.04831345839021407,0.04504294266257366 +national,b1200k.cps2022-2023-2024.acs000.s0,national,persons_0_17,1,0.06277949067212106,0.06277949067212106,0.02109426309361929 +national,b1200k.cps2022-2023-2024.acs000.s0,national,persons_18_64,1,0.013726514007556471,0.013726514007556471,0.026748636553088446 +national,b1200k.cps2022-2023-2024.acs000.s0,national,persons_65p,1,0.0008771057661626095,0.0008771057661626095,0.018547026346188787 +national,b1200k.cps2022-2023-2024.acs000.s0,national,persons_in_households,1,0.030406501879641862,0.030406501879641862,0.007468807604379701 +national,b1200k.cps2022-2023-2024.acs000.s0,national,persons_male,1,0.007838102220557431,0.007838102220557431,0.030890456469098288 +national,b1200k.cps2022-2023-2024.acs000.s0,national,persons_total,1,0.00499236340733319,0.00499236340733319,0.017379591290894465 +national,b1200k.cps2022-2023-2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.5416611131360461,0.5416611131360461,0.6659411721508772 +national,b1200k.cps2022-2023-2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.11977764934147685,0.11977764934147685,0.13110826309010554 +national,b1200k.cps2022-2023-2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.22674690934536548,0.22674690934536548,0.2367005671837359 +national,b1200k.cps2022-2023-2024.acs000.s0,national,renter,1,0.007741896161846939,0.007741896161846939,0.002244212836202863 +national,b1200k.cps2022-2023-2024.acs000.s0,state,households,51,0.0379056054907576,0.029024202915816193,0.038818772971576876 +national,b1200k.cps2022-2023-2024.acs000.s0,state,owner,51,0.0429652110955016,0.04307216549785715,0.0493736484367394 +national,b1200k.cps2022-2023-2024.acs000.s0,state,persons_0_17,51,0.07019951390436269,0.06793177428186521,0.0512512979358941 +national,b1200k.cps2022-2023-2024.acs000.s0,state,persons_18_64,51,0.024045688728291437,0.01837915935152689,0.02908260558134452 +national,b1200k.cps2022-2023-2024.acs000.s0,state,persons_65p,51,0.02494037196749165,0.009529376717633513,0.033742093722682054 +national,b1200k.cps2022-2023-2024.acs000.s0,state,persons_in_households,51,0.030159170408585956,0.026678339762829868,0.020461498374014224 +national,b1200k.cps2022-2023-2024.acs000.s0,state,persons_male,51,0.021125124782964882,0.015511912205287116,0.030540574782717666 +national,b1200k.cps2022-2023-2024.acs000.s0,state,persons_total,51,0.015002316947355694,0.010062245287784842,0.017719590215260896 +national,b1200k.cps2022-2023-2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.4576004801285932,0.4498792447346817,0.5512094530501032 +national,b1200k.cps2022-2023-2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.14142213219316677,0.1364040588040572,0.14685647166608887 +national,b1200k.cps2022-2023-2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.2295133425846581,0.2091160801798269,0.23190637634799482 +national,b1200k.cps2022-2023-2024.acs000.s0,state,renter,51,0.08648735510840705,0.0803880192029289,0.0587400793962271 +national,b1200k.cps2022-2023-2024.acs100.s0,cd,households,436,0.06041600094470999,0.05013480503224342,0.022072086987933517 +national,b1200k.cps2022-2023-2024.acs100.s0,cd,owner,436,0.08731862542122648,0.06015670036845671,0.04119741442822208 +national,b1200k.cps2022-2023-2024.acs100.s0,cd,persons_0_17,436,0.11192660917866892,0.09253444203168251,0.06407429334169583 +national,b1200k.cps2022-2023-2024.acs100.s0,cd,persons_18_64,436,0.06003997768457427,0.052455539427254255,0.029576337882797 +national,b1200k.cps2022-2023-2024.acs100.s0,cd,persons_65p,436,0.0742934478704951,0.0661292375807888,0.0434547563822687 +national,b1200k.cps2022-2023-2024.acs100.s0,cd,persons_in_households,436,0.053765782491547204,0.04355600234816263,0.027157654089691684 +national,b1200k.cps2022-2023-2024.acs100.s0,cd,persons_male,436,0.05315438755452788,0.0434890050277892,0.034858214194812345 +national,b1200k.cps2022-2023-2024.acs100.s0,cd,persons_total,436,0.05080852673405483,0.040030973244658624,0.027570366598346125 +national,b1200k.cps2022-2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.145243255351463,0.1271695231351176,0.1073369274538778 +national,b1200k.cps2022-2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.32795521927631044,0.27417375306834113,0.3112882414289057 +national,b1200k.cps2022-2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.28226132408111115,0.25279734248011915,0.2727051118203135 +national,b1200k.cps2022-2023-2024.acs100.s0,cd,renter,436,0.13236915410564784,0.10702965807750398,0.07244212156029424 +national,b1200k.cps2022-2023-2024.acs100.s0,county,households,850,0.0979385606135919,0.0717232077703103,0.04623431398270421 +national,b1200k.cps2022-2023-2024.acs100.s0,county,owner,850,0.11971162647551249,0.0851709292735517,0.06286937117629632 +national,b1200k.cps2022-2023-2024.acs100.s0,county,persons_0_17,850,0.19035662678664453,0.13143294763693902,0.11212966185436829 +national,b1200k.cps2022-2023-2024.acs100.s0,county,persons_18_64,850,0.11074703830309074,0.08244014060907524,0.0629789352653305 +national,b1200k.cps2022-2023-2024.acs100.s0,county,persons_65p,850,0.13455135132452523,0.0973448067319476,0.08174509207721281 +national,b1200k.cps2022-2023-2024.acs100.s0,county,persons_in_households,850,0.10629633617868862,0.07414361548969986,0.057486963759458595 +national,b1200k.cps2022-2023-2024.acs100.s0,county,persons_male,850,0.10601088252231163,0.0774645529402343,0.06365689945447187 +national,b1200k.cps2022-2023-2024.acs100.s0,county,persons_total,850,0.10046824015713667,0.07032113563683026,0.056121061356943086 +national,b1200k.cps2022-2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.20323370424676926,0.16181923855164315,0.1441357392419482 +national,b1200k.cps2022-2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.41156457845686595,0.3118254509798863,0.3908362320336901 +national,b1200k.cps2022-2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.34935049685415537,0.2925827027275735,0.32001474708529537 +national,b1200k.cps2022-2023-2024.acs100.s0,county,renter,850,0.19270855655202493,0.1414548537641125,0.11658787580125685 +national,b1200k.cps2022-2023-2024.acs100.s0,national,households,1,0.026563393959247634,0.026563393959247634,0.005732790784073824 +national,b1200k.cps2022-2023-2024.acs100.s0,national,owner,1,0.05450937129122916,0.05450937129122916,0.006959414264278527 +national,b1200k.cps2022-2023-2024.acs100.s0,national,persons_0_17,1,0.07266146947567735,0.07266146947567735,0.03563993224750431 +national,b1200k.cps2022-2023-2024.acs100.s0,national,persons_18_64,1,0.023803759398979604,0.023803759398979604,0.019905132411002127 +national,b1200k.cps2022-2023-2024.acs100.s0,national,persons_65p,1,0.00043019772710799014,0.00043019772710799014,0.012856450490533357 +national,b1200k.cps2022-2023-2024.acs100.s0,national,persons_in_households,1,0.013432566955972992,0.013432566955972992,0.013839414143941027 +national,b1200k.cps2022-2023-2024.acs100.s0,national,persons_male,1,0.011380888429701079,0.011380888429701079,0.02887160484491514 +national,b1200k.cps2022-2023-2024.acs100.s0,national,persons_total,1,0.0010900647406718313,0.0010900647406718313,0.017379591296109748 +national,b1200k.cps2022-2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.10426920881433889,0.10426920881433889,0.0817794119248525 +national,b1200k.cps2022-2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.11391847304485785,0.11391847304485785,0.13162350159042394 +national,b1200k.cps2022-2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.22159977103802586,0.22159977103802586,0.2371531911854979 +national,b1200k.cps2022-2023-2024.acs100.s0,national,renter,1,0.0690807669902546,0.0690807669902546,0.04215922834937168 +national,b1200k.cps2022-2023-2024.acs100.s0,state,households,51,0.031742891968322716,0.02857981850385344,0.008128965882120278 +national,b1200k.cps2022-2023-2024.acs100.s0,state,owner,51,0.045179940254903406,0.03798997857730957,0.010166682506037894 +national,b1200k.cps2022-2023-2024.acs100.s0,state,persons_0_17,51,0.07376621987233242,0.061166124844763234,0.03951583348206128 +national,b1200k.cps2022-2023-2024.acs100.s0,state,persons_18_64,51,0.03100246568661352,0.021389718599586473,0.021553838014691296 +national,b1200k.cps2022-2023-2024.acs100.s0,state,persons_65p,51,0.016526415054247973,0.005308762386152957,0.01929052988991131 +national,b1200k.cps2022-2023-2024.acs100.s0,state,persons_in_households,51,0.01842043189390582,0.013786448726127921,0.015489999611270629 +national,b1200k.cps2022-2023-2024.acs100.s0,state,persons_male,51,0.02038177040295603,0.014647118993459296,0.02459271957332012 +national,b1200k.cps2022-2023-2024.acs100.s0,state,persons_total,51,0.016379409880188406,0.013602054632206553,0.017107951769455565 +national,b1200k.cps2022-2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.11002329774535713,0.11267009335738574,0.06472528643643173 +national,b1200k.cps2022-2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.17951264880396817,0.1488322365176712,0.1831818536384398 +national,b1200k.cps2022-2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.2145503817746966,0.1873073510788503,0.2117863175680653 +national,b1200k.cps2022-2023-2024.acs100.s0,state,renter,51,0.10238429958537473,0.09144329248434328,0.056837507657463315 +national,b1200k.cps2023-2024.acs000.s0,cd,households,436,0.05229610189711505,0.04076424158224266,0.044564574207843 +national,b1200k.cps2023-2024.acs000.s0,cd,owner,436,0.14428663142962772,0.07795509798799025,0.14153227525093334 +national,b1200k.cps2023-2024.acs000.s0,cd,persons_0_17,436,0.14460919963839905,0.10913297718693643,0.12293927498450163 +national,b1200k.cps2023-2024.acs000.s0,cd,persons_18_64,436,0.06003627343475018,0.04346907002556902,0.06042594908692552 +national,b1200k.cps2023-2024.acs000.s0,cd,persons_65p,436,0.1270365821173296,0.08504271907693822,0.1287992584404723 +national,b1200k.cps2023-2024.acs000.s0,cd,persons_in_households,436,0.06468166225140534,0.048638043534739384,0.055343451728596574 +national,b1200k.cps2023-2024.acs000.s0,cd,persons_male,436,0.06178924739792604,0.046975984850352176,0.06182140406886844 +national,b1200k.cps2023-2024.acs000.s0,cd,persons_total,436,0.05376246003153555,0.0388579650598753,0.051768503933713614 +national,b1200k.cps2023-2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.46034191709145006,0.48283769849552327,0.567240671218558 +national,b1200k.cps2023-2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.321109724988121,0.2717203325215143,0.3167342940476949 +national,b1200k.cps2023-2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.29043128573031674,0.2651533712939631,0.28658779645383037 +national,b1200k.cps2023-2024.acs000.s0,cd,renter,436,0.23061611988162764,0.1720566495538771,0.2215426684768285 +national,b1200k.cps2023-2024.acs000.s0,county,households,850,0.07564292922391698,0.05171477858378123,0.06282201659937088 +national,b1200k.cps2023-2024.acs000.s0,county,owner,850,0.14192214054230437,0.10226766154364364,0.1364383464137909 +national,b1200k.cps2023-2024.acs000.s0,county,persons_0_17,850,0.19337516273570035,0.14169721046561434,0.1551641847716341 +national,b1200k.cps2023-2024.acs000.s0,county,persons_18_64,850,0.10500787345278097,0.07435756992471007,0.09394595132377956 +national,b1200k.cps2023-2024.acs000.s0,county,persons_65p,850,0.16647417480175625,0.11927721329767813,0.1551185502768662 +national,b1200k.cps2023-2024.acs000.s0,county,persons_in_households,850,0.09811125205837246,0.06870923506633814,0.07986795721353147 +national,b1200k.cps2023-2024.acs000.s0,county,persons_male,850,0.09497936905873954,0.06638417628738988,0.08350473885300172 +national,b1200k.cps2023-2024.acs000.s0,county,persons_total,850,0.08727782701053774,0.06186504731538747,0.0730137023744197 +national,b1200k.cps2023-2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.463759908055527,0.488434997906943,0.5407990038976922 +national,b1200k.cps2023-2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.4007135511576633,0.3122059182646376,0.40129323930771454 +national,b1200k.cps2023-2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.34467296653748786,0.2839023488067183,0.3348004185410823 +national,b1200k.cps2023-2024.acs000.s0,county,renter,850,0.3086265631237274,0.2382927657521377,0.2964990840290454 +national,b1200k.cps2023-2024.acs000.s0,national,households,1,0.04063176116594727,0.04063176116594727,0.04063176077459197 +national,b1200k.cps2023-2024.acs000.s0,national,owner,1,0.03946585179543923,0.03946585179543923,0.042345165726567116 +national,b1200k.cps2023-2024.acs000.s0,national,persons_0_17,1,0.06539451193788928,0.06539451193788928,0.027390231881011307 +national,b1200k.cps2023-2024.acs000.s0,national,persons_18_64,1,0.014444841042076124,0.014444841042076124,0.026805015070826117 +national,b1200k.cps2023-2024.acs000.s0,national,persons_65p,1,0.0005185413224120335,0.0005185413224120335,0.026233676447592717 +national,b1200k.cps2023-2024.acs000.s0,national,persons_in_households,1,0.030601672290346875,0.030601672290346875,0.00746880760318086 +national,b1200k.cps2023-2024.acs000.s0,national,persons_male,1,0.008383851747897386,0.008383851747897386,0.030408793666069425 +national,b1200k.cps2023-2024.acs000.s0,national,persons_total,1,0.0051827200985650555,0.0051827200985650555,0.017379591292063738 +national,b1200k.cps2023-2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.5376258757808923,0.5376258757808923,0.6562268648260605 +national,b1200k.cps2023-2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.10873585520264276,0.10873585520264276,0.12227496863453662 +national,b1200k.cps2023-2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.2170469722353409,0.2170469722353409,0.2289407412337119 +national,b1200k.cps2023-2024.acs000.s0,national,renter,1,0.007137192105146624,0.007137192105146624,0.0025205865938268818 +national,b1200k.cps2023-2024.acs000.s0,state,households,51,0.03874011973361332,0.031193550120366773,0.040169481760378004 +national,b1200k.cps2023-2024.acs000.s0,state,owner,51,0.03758164556385783,0.032303637690366635,0.047575326212757944 +national,b1200k.cps2023-2024.acs000.s0,state,persons_0_17,51,0.07120949689664875,0.0653481588591093,0.05483953711216453 +national,b1200k.cps2023-2024.acs000.s0,state,persons_18_64,51,0.024433838332240016,0.01933299402871407,0.03073725927409112 +national,b1200k.cps2023-2024.acs000.s0,state,persons_65p,51,0.023718865673635826,0.00825187481817984,0.03958899754100444 +national,b1200k.cps2023-2024.acs000.s0,state,persons_in_households,51,0.030877263752129815,0.027060229649257334,0.019558544514569513 +national,b1200k.cps2023-2024.acs000.s0,state,persons_male,51,0.02385552560621096,0.020907866360504408,0.031232583282332423 +national,b1200k.cps2023-2024.acs000.s0,state,persons_total,51,0.01451210126625384,0.010736373773807746,0.018964847449251816 +national,b1200k.cps2023-2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.4512877821023978,0.44446286213850394,0.5416227019420768 +national,b1200k.cps2023-2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.13855426735458232,0.12616403574760654,0.1416029247645683 +national,b1200k.cps2023-2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.21999537634744912,0.2163595262817437,0.2199685049241693 +national,b1200k.cps2023-2024.acs000.s0,state,renter,51,0.0766559888831949,0.065592318475988,0.06435477021533238 +national,b1200k.cps2023-2024.acs100.s0,cd,households,436,0.061529557143438565,0.04880316229454022,0.020154341983230194 +national,b1200k.cps2023-2024.acs100.s0,cd,owner,436,0.08205168602741814,0.05903913416807109,0.03577675830490396 +national,b1200k.cps2023-2024.acs100.s0,cd,persons_0_17,436,0.11242075604232964,0.0894544959098565,0.0654114033746476 +national,b1200k.cps2023-2024.acs100.s0,cd,persons_18_64,436,0.06489785197470431,0.05155811475807946,0.029571705565789384 +national,b1200k.cps2023-2024.acs100.s0,cd,persons_65p,436,0.07391434478786513,0.06048442254383907,0.039860944908416435 +national,b1200k.cps2023-2024.acs100.s0,cd,persons_in_households,436,0.057415342808225,0.044038902423270826,0.027963745981461067 +national,b1200k.cps2023-2024.acs100.s0,cd,persons_male,436,0.05759155066856835,0.04579312557295291,0.035369958291775805 +national,b1200k.cps2023-2024.acs100.s0,cd,persons_total,436,0.05477220636196029,0.04238993027257421,0.028067183549150776 +national,b1200k.cps2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.12771039208244234,0.10363953902026549,0.09845020440267864 +national,b1200k.cps2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.33040663694763434,0.2795984407836609,0.31361045161538365 +national,b1200k.cps2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.28415269675113664,0.2486487506691609,0.2737845094027156 +national,b1200k.cps2023-2024.acs100.s0,cd,renter,436,0.12760996713134296,0.10585844414901613,0.06823628106225212 +national,b1200k.cps2023-2024.acs100.s0,county,households,850,0.09875519007317685,0.07153968322632057,0.04371191414055543 +national,b1200k.cps2023-2024.acs100.s0,county,owner,850,0.11916817853142374,0.08502419041441511,0.05878768843480771 +national,b1200k.cps2023-2024.acs100.s0,county,persons_0_17,850,0.19333091851489753,0.13191071388475822,0.11046384351569767 +national,b1200k.cps2023-2024.acs100.s0,county,persons_18_64,850,0.11535788997304354,0.08699868292565432,0.06312088019806363 +national,b1200k.cps2023-2024.acs100.s0,county,persons_65p,850,0.1341279383987972,0.09467075364137192,0.07924608197981975 +national,b1200k.cps2023-2024.acs100.s0,county,persons_in_households,850,0.1105630243429041,0.07910748628439666,0.0573049693189195 +national,b1200k.cps2023-2024.acs100.s0,county,persons_male,850,0.10932767132275116,0.07719095120402769,0.06325689573472675 +national,b1200k.cps2023-2024.acs100.s0,county,persons_total,850,0.1049086906186378,0.07923895567681119,0.055813629157630655 +national,b1200k.cps2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.19108554260521526,0.13775591333549236,0.1380272770547855 +national,b1200k.cps2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.4107012665361624,0.3155957939084968,0.3929387851111985 +national,b1200k.cps2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.3473331795765161,0.29289331798821416,0.3211877374058415 +national,b1200k.cps2023-2024.acs100.s0,county,renter,850,0.19152399654266528,0.14677134622048207,0.11243008690078864 +national,b1200k.cps2023-2024.acs100.s0,national,households,1,0.022335044321972537,0.022335044321972537,0.0037640638990095875 +national,b1200k.cps2023-2024.acs100.s0,national,owner,1,0.05262720939822448,0.05262720939822448,0.004551321624416254 +national,b1200k.cps2023-2024.acs100.s0,national,persons_0_17,1,0.0730075863190053,0.0730075863190053,0.0372720265406491 +national,b1200k.cps2023-2024.acs100.s0,national,persons_18_64,1,0.025874147692737506,0.025874147692737506,0.01944243097417546 +national,b1200k.cps2023-2024.acs100.s0,national,persons_65p,1,0.00017441493489430432,0.00017441493489430432,0.013244079503840643 +national,b1200k.cps2023-2024.acs100.s0,national,persons_in_households,1,0.010120196784705921,0.010120196784705921,0.015085609209046204 +national,b1200k.cps2023-2024.acs100.s0,national,persons_male,1,0.013013453076467299,0.013013453076467299,0.028723425850529456 +national,b1200k.cps2023-2024.acs100.s0,national,persons_total,1,4.3273375532343155e-05,4.3273375532343155e-05,0.017379591291671177 +national,b1200k.cps2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.03367581029213079,0.03367581029213079,0.048095512197352995 +national,b1200k.cps2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.11676025147889355,0.11676025147889355,0.1302302441270425 +national,b1200k.cps2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.22409620157677534,0.22409620157677534,0.23592924971340132 +national,b1200k.cps2023-2024.acs100.s0,national,renter,1,0.0790737882429444,0.0790737882429444,0.04412479300143794 +national,b1200k.cps2023-2024.acs100.s0,state,households,51,0.030287099740628105,0.025795132513818833,0.007366472441886084 +national,b1200k.cps2023-2024.acs100.s0,state,owner,51,0.043673918705645375,0.03470765063293857,0.008502929987951028 +national,b1200k.cps2023-2024.acs100.s0,state,persons_0_17,51,0.07352449829449703,0.06232361692167676,0.040353336543008406 +national,b1200k.cps2023-2024.acs100.s0,state,persons_18_64,51,0.03286616916195553,0.023768854550436105,0.021963235988107524 +national,b1200k.cps2023-2024.acs100.s0,state,persons_65p,51,0.01563423640263269,0.005402072492082809,0.017674882541369112 +national,b1200k.cps2023-2024.acs100.s0,state,persons_in_households,51,0.018252623599814416,0.014782830379937365,0.016703247134444904 +national,b1200k.cps2023-2024.acs100.s0,state,persons_male,51,0.022783537043933384,0.016050508047198018,0.02456790941781729 +national,b1200k.cps2023-2024.acs100.s0,state,persons_total,51,0.017391345003405233,0.012746824442036987,0.017474487339868436 +national,b1200k.cps2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.06075547515551893,0.052271536464875465,0.03822292357876195 +national,b1200k.cps2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.18229976157805441,0.15944663085373467,0.18859795684214398 +national,b1200k.cps2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.21583080030023058,0.1780991008907846,0.21413141669053612 +national,b1200k.cps2023-2024.acs100.s0,state,renter,51,0.1068980167502896,0.09761635433969562,0.05758225115104507 +national,b1200k.cps2024.acs000.s0,cd,households,436,0.055169535662941846,0.043039542955645375,0.04621848016869883 +national,b1200k.cps2024.acs000.s0,cd,owner,436,0.14259065220931866,0.08336236380953341,0.14132672189037712 +national,b1200k.cps2024.acs000.s0,cd,persons_0_17,436,0.14270619498246567,0.10829276493821446,0.12785088140978082 +national,b1200k.cps2024.acs000.s0,cd,persons_18_64,436,0.06339424851770899,0.047166953769845574,0.06359121804798824 +national,b1200k.cps2024.acs000.s0,cd,persons_65p,436,0.1301085683721301,0.09298591450395213,0.13469387628308355 +national,b1200k.cps2024.acs000.s0,cd,persons_in_households,436,0.06657641538100706,0.050243800367610336,0.05774611769762328 +national,b1200k.cps2024.acs000.s0,cd,persons_male,436,0.06385597086545224,0.049676286585176276,0.06364368304459218 +national,b1200k.cps2024.acs000.s0,cd,persons_total,436,0.05599884175845343,0.04182768104234065,0.053907086393193346 +national,b1200k.cps2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.4650116316822513,0.4858672611218112,0.5521107010770457 +national,b1200k.cps2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.32875499081204146,0.2670037005224435,0.3200859517806284 +national,b1200k.cps2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.29210187158299217,0.2576523701561074,0.2843673506925899 +national,b1200k.cps2024.acs000.s0,cd,renter,436,0.2427995902659903,0.17646147459578435,0.22713797865020413 +national,b1200k.cps2024.acs000.s0,county,households,850,0.07662170770303733,0.053959655740135865,0.06359084601637403 +national,b1200k.cps2024.acs000.s0,county,owner,850,0.142299154367238,0.1009224317685189,0.13749341851081417 +national,b1200k.cps2024.acs000.s0,county,persons_0_17,850,0.1907693869629117,0.13990686349456322,0.1592650909236374 +national,b1200k.cps2024.acs000.s0,county,persons_18_64,850,0.1075330110853123,0.07621700517276109,0.09714335564405126 +national,b1200k.cps2024.acs000.s0,county,persons_65p,850,0.16865488087494565,0.12893893916039745,0.15816236579282392 +national,b1200k.cps2024.acs000.s0,county,persons_in_households,850,0.09993165699590395,0.07480864384301597,0.08228200333288341 +national,b1200k.cps2024.acs000.s0,county,persons_male,850,0.09663852447816275,0.069823560538487,0.08637137279811688 +national,b1200k.cps2024.acs000.s0,county,persons_total,850,0.08875859051193895,0.06674606188943213,0.0760483537975984 +national,b1200k.cps2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.46395028241948555,0.4884264176968769,0.5248335872991333 +national,b1200k.cps2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.41248475693670356,0.3228439156729811,0.40502530981820684 +national,b1200k.cps2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.3494971733487631,0.29058806453700936,0.33851544114425125 +national,b1200k.cps2024.acs000.s0,county,renter,850,0.3139457100472231,0.23670929905648425,0.30275767867549086 +national,b1200k.cps2024.acs000.s0,national,households,1,0.04250326672667096,0.04250326672667096,0.042503266232915296 +national,b1200k.cps2024.acs000.s0,national,owner,1,0.03221112082143117,0.03221112082143117,0.04010859549407332 +national,b1200k.cps2024.acs000.s0,national,persons_0_17,1,0.061249956135751474,0.061249956135751474,0.03288093308337006 +national,b1200k.cps2024.acs000.s0,national,persons_18_64,1,0.012245775135804689,0.012245775135804689,0.028643647199660546 +national,b1200k.cps2024.acs000.s0,national,persons_65p,1,0.0007314780723975424,0.0007314780723975424,0.03895423703646453 +national,b1200k.cps2024.acs000.s0,national,persons_in_households,1,0.03101637662862949,0.03101637662862949,0.007468807605125023 +national,b1200k.cps2024.acs000.s0,national,persons_male,1,0.0125128420283637,0.0125128420283637,0.030150509781627526 +national,b1200k.cps2024.acs000.s0,national,persons_total,1,0.005587196091569418,0.005587196091569418,0.017379591290167525 +national,b1200k.cps2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.5383018389765677,0.5383018389765677,0.6395411932654765 +national,b1200k.cps2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.08331158983300037,0.08331158983300037,0.09886944608007787 +national,b1200k.cps2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.19471239761338116,0.19471239761338116,0.20837958115855362 +national,b1200k.cps2024.acs000.s0,national,renter,1,0.02740184073425515,0.02740184073425515,0.012242781550688111 +national,b1200k.cps2024.acs000.s0,state,households,51,0.04118377294367497,0.035658364573447156,0.041131832400175525 +national,b1200k.cps2024.acs000.s0,state,owner,51,0.039144380565679836,0.03387803060825271,0.047374454375478325 +national,b1200k.cps2024.acs000.s0,state,persons_0_17,51,0.06907169122021105,0.06662553597565796,0.05938231280038761 +national,b1200k.cps2024.acs000.s0,state,persons_18_64,51,0.024733522135451578,0.019017944286636532,0.03622043144079596 +national,b1200k.cps2024.acs000.s0,state,persons_65p,51,0.02754920807887612,0.0083713026181811,0.05328853265489556 +national,b1200k.cps2024.acs000.s0,state,persons_in_households,51,0.031243486304423567,0.027058692012996186,0.01986143555982169 +national,b1200k.cps2024.acs000.s0,state,persons_male,51,0.029289163967116293,0.030123536134824,0.03069101486431141 +national,b1200k.cps2024.acs000.s0,state,persons_total,51,0.016283233735506525,0.011704086385007934,0.01840903075160598 +national,b1200k.cps2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.4508023505978031,0.43863817276804584,0.5260015221555049 +national,b1200k.cps2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.12913820196157644,0.12460120576816643,0.12759779821473768 +national,b1200k.cps2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.20255485189735234,0.20979147770985293,0.2025211568796707 +national,b1200k.cps2024.acs000.s0,state,renter,51,0.08493612416544927,0.07221511362688111,0.07151289876278223 +national,b1200k.cps2024.acs100.s0,cd,households,436,0.06262363862536353,0.049036069854394806,0.01853937197230943 +national,b1200k.cps2024.acs100.s0,cd,owner,436,0.0794514885173841,0.05993226698951952,0.031085600049497085 +national,b1200k.cps2024.acs100.s0,cd,persons_0_17,436,0.1135518794465619,0.09137292503389886,0.06602954734043533 +national,b1200k.cps2024.acs100.s0,cd,persons_18_64,436,0.06803393623142556,0.05717122334624765,0.030278548769655505 +national,b1200k.cps2024.acs100.s0,cd,persons_65p,436,0.08174951586019577,0.06777265396626198,0.03688986989816291 +national,b1200k.cps2024.acs100.s0,cd,persons_in_households,436,0.0613118154108841,0.046196598008814954,0.02888468595689312 +national,b1200k.cps2024.acs100.s0,cd,persons_male,436,0.06276194304163635,0.049834670373237785,0.0358491426487685 +national,b1200k.cps2024.acs100.s0,cd,persons_total,436,0.05922110998868545,0.043849769128637625,0.02858447871974891 +national,b1200k.cps2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.1357690584539675,0.0995150716726972,0.09657477627699504 +national,b1200k.cps2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.33456699967323467,0.2816917629099509,0.3160250987957435 +national,b1200k.cps2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.2896256146553156,0.2529405620745145,0.27600633235071437 +national,b1200k.cps2024.acs100.s0,cd,renter,436,0.12945606025923403,0.11327264872304191,0.06636123665010386 +national,b1200k.cps2024.acs100.s0,county,households,850,0.10090632571183125,0.0699970335869354,0.04220600709712167 +national,b1200k.cps2024.acs100.s0,county,owner,850,0.12276552085223667,0.08723018661945281,0.055121571185418446 +national,b1200k.cps2024.acs100.s0,county,persons_0_17,850,0.19836087150307555,0.1355115062915263,0.11295370503489499 +national,b1200k.cps2024.acs100.s0,county,persons_18_64,850,0.11933554600971708,0.0903656140690727,0.06288397767703105 +national,b1200k.cps2024.acs100.s0,county,persons_65p,850,0.13970574756225812,0.10451405626321136,0.07549011338819409 +national,b1200k.cps2024.acs100.s0,county,persons_in_households,850,0.11504758266426654,0.08297695546391323,0.058172003679532666 +national,b1200k.cps2024.acs100.s0,county,persons_male,850,0.11439236880461458,0.08563567057483884,0.06346029685686085 +national,b1200k.cps2024.acs100.s0,county,persons_total,850,0.1099454621807808,0.08157820829801396,0.055873629804155465 +national,b1200k.cps2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.1995780113837796,0.13702030686790045,0.1371770062939914 +national,b1200k.cps2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.41045214723557344,0.31133926167130577,0.39405333793325886 +national,b1200k.cps2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.35066483299272394,0.28899577952246236,0.3227460175817711 +national,b1200k.cps2024.acs100.s0,county,renter,850,0.19997358386020894,0.15980001969299543,0.11310100408398117 +national,b1200k.cps2024.acs100.s0,national,households,1,0.01704968888114782,0.01704968888114782,0.0019178984047857172 +national,b1200k.cps2024.acs100.s0,national,owner,1,0.05270326448773421,0.05270326448773421,0.002702343456393556 +national,b1200k.cps2024.acs100.s0,national,persons_0_17,1,0.07334820244201261,0.07334820244201261,0.03753367808220693 +national,b1200k.cps2024.acs100.s0,national,persons_18_64,1,0.027663220800814636,0.027663220800814636,0.019149152886607755 +national,b1200k.cps2024.acs100.s0,national,persons_65p,1,0.00031530530749838547,0.00031530530749838547,0.012569504039505151 +national,b1200k.cps2024.acs100.s0,national,persons_in_households,1,0.0064963543885146365,0.0064963543885146365,0.01627147507773764 +national,b1200k.cps2024.acs100.s0,national,persons_male,1,0.014656529883487581,0.014656529883487581,0.028829333555351742 +national,b1200k.cps2024.acs100.s0,national,persons_total,1,0.001078886007474784,0.001078886007474784,0.01737959129184257 +national,b1200k.cps2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.05074892931966607,0.05074892931966607,0.014576211930611994 +national,b1200k.cps2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.12261789518039644,0.12261789518039644,0.13006231605995777 +national,b1200k.cps2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.22924199353803618,0.22924199353803618,0.23578172915023476 +national,b1200k.cps2024.acs100.s0,national,renter,1,0.09461895813976734,0.09461895813976734,0.046599562576231456 +national,b1200k.cps2024.acs100.s0,state,households,51,0.029565818901974808,0.021760378182019036,0.007309502108102353 +national,b1200k.cps2024.acs100.s0,state,owner,51,0.04441526094454657,0.03813762589906756,0.007956445746875313 +national,b1200k.cps2024.acs100.s0,state,persons_0_17,51,0.07331528138336124,0.0618564083770685,0.03983615145369346 +national,b1200k.cps2024.acs100.s0,state,persons_18_64,51,0.034432848850160916,0.02408787499508754,0.02119995268528968 +national,b1200k.cps2024.acs100.s0,state,persons_65p,51,0.015217891372621372,0.00507252274702544,0.01696312975849606 +national,b1200k.cps2024.acs100.s0,state,persons_in_households,51,0.0180685593973131,0.013778808497615347,0.017392141152719524 +national,b1200k.cps2024.acs100.s0,state,persons_male,51,0.023973224094779377,0.01689422096641045,0.025028450815249407 +national,b1200k.cps2024.acs100.s0,state,persons_total,51,0.01783954995900191,0.015697937444977376,0.017679885233477 +national,b1200k.cps2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.048568055567260925,0.03970207134748634,0.016998214718637855 +national,b1200k.cps2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.19298233319146876,0.15927225549867263,0.19275625998480928 +national,b1200k.cps2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.22151264593167036,0.17329217722002974,0.21524820360835026 +national,b1200k.cps2024.acs100.s0,state,renter,51,0.11822177568694701,0.1269152137534808,0.059164123927165455 +national,b300k.cps0.acs100.s0,cd,households,436,0.0845335105561694,0.06910202078150753,0.04322853287263069 +national,b300k.cps0.acs100.s0,cd,owner,436,0.10721676977824497,0.08869571646671182,0.05213620225582097 +national,b300k.cps0.acs100.s0,cd,persons_0_17,436,0.1675867019655133,0.13376465538043458,0.10494720762950266 +national,b300k.cps0.acs100.s0,cd,persons_18_64,436,0.09071648725470326,0.07523913491930923,0.05613597472362423 +national,b300k.cps0.acs100.s0,cd,persons_65p,436,0.13130381624558535,0.10028130431970654,0.0744767392215725 +national,b300k.cps0.acs100.s0,cd,persons_in_households,436,0.09205951237839904,0.07660834684613058,0.055663112724777385 +national,b300k.cps0.acs100.s0,cd,persons_male,436,0.09344985236148108,0.0799353750684908,0.06214293608612152 +national,b300k.cps0.acs100.s0,cd,persons_total,436,0.08976044048391717,0.07671485339919284,0.05440944235155279 +national,b300k.cps0.acs100.s0,cd,real_estate_taxes_aggregate,436,0.21397786207495592,0.15824280198541985,0.12557570281482808 +national,b300k.cps0.acs100.s0,cd,rent_contract_annual_aggregate,436,0.355952488100436,0.3235475543476001,0.33380481079299806 +national,b300k.cps0.acs100.s0,cd,rent_gross_annual_aggregate,436,0.31505230242351967,0.28161930945751157,0.2927730536848693 +national,b300k.cps0.acs100.s0,cd,renter,436,0.17526970593164212,0.15342245772447938,0.09526001317840402 +national,b300k.cps0.acs100.s0,county,households,850,0.1690072868522918,0.11888416851310193,0.09540659716234932 +national,b300k.cps0.acs100.s0,county,owner,850,0.20001340373803794,0.14950828104303937,0.11321934454813151 +national,b300k.cps0.acs100.s0,county,persons_0_17,850,0.31872153671045383,0.23291580389286176,0.21053173939356262 +national,b300k.cps0.acs100.s0,county,persons_18_64,850,0.1937377182528812,0.14573230539242615,0.11934210248312367 +national,b300k.cps0.acs100.s0,county,persons_65p,850,0.2559241711703252,0.19776693440190335,0.15262937809432847 +national,b300k.cps0.acs100.s0,county,persons_in_households,850,0.18962914888224097,0.13455889290283973,0.11398849291446916 +national,b300k.cps0.acs100.s0,county,persons_male,850,0.1934967511557184,0.14190404288616315,0.12052437142125733 +national,b300k.cps0.acs100.s0,county,persons_total,850,0.18433924012190447,0.13226012318484737,0.11074687174432955 +national,b300k.cps0.acs100.s0,county,real_estate_taxes_aggregate,850,0.3014989199127125,0.21295653421487493,0.19720544801317863 +national,b300k.cps0.acs100.s0,county,rent_contract_annual_aggregate,850,0.4357071015508361,0.37095242018349367,0.4110532876094806 +national,b300k.cps0.acs100.s0,county,rent_gross_annual_aggregate,850,0.39645367551871646,0.34681976103486245,0.3504890761247458 +national,b300k.cps0.acs100.s0,county,renter,850,0.3164834341851743,0.26130018443253544,0.20812164238219566 +national,b300k.cps0.acs100.s0,national,households,1,0.015286280408521574,0.015286280408521574,0.002684358353721325 +national,b300k.cps0.acs100.s0,national,owner,1,0.05579996008612873,0.05579996008612873,0.003712530185146309 +national,b300k.cps0.acs100.s0,national,persons_0_17,1,0.0743151786344502,0.0743151786344502,0.04130804089676926 +national,b300k.cps0.acs100.s0,national,persons_18_64,1,0.028706285452182522,0.028706285452182522,0.01854102618658787 +national,b300k.cps0.acs100.s0,national,persons_65p,1,0.00026974544418863385,0.00026974544418863385,0.015019101065131464 +national,b300k.cps0.acs100.s0,national,persons_in_households,1,0.003842559901045321,0.003842559901045321,0.017586017401617055 +national,b300k.cps0.acs100.s0,national,persons_male,1,0.014521141473508463,0.014521141473508463,0.028762420524748044 +national,b300k.cps0.acs100.s0,national,persons_total,1,0.0013977597572643616,0.0013977597572643616,0.017379591291668196 +national,b300k.cps0.acs100.s0,national,real_estate_taxes_aggregate,1,0.15517037594367142,0.15517037594367142,0.019553269229985203 +national,b300k.cps0.acs100.s0,national,rent_contract_annual_aggregate,1,0.12863715457593394,0.12863715457593394,0.12783482357053205 +national,b300k.cps0.acs100.s0,national,rent_gross_annual_aggregate,1,0.2345297608022612,0.2345297608022612,0.2338249332899958 +national,b300k.cps0.acs100.s0,national,renter,1,0.10581319188442433,0.10581319188442433,0.04561075648522626 +national,b300k.cps0.acs100.s0,state,households,51,0.029932645749835823,0.023676946322072987,0.019712368503882405 +national,b300k.cps0.acs100.s0,state,owner,51,0.051332620012457586,0.04425371688550767,0.021826389522271242 +national,b300k.cps0.acs100.s0,state,persons_0_17,51,0.0692719110464748,0.05204401803653414,0.06665709446074423 +national,b300k.cps0.acs100.s0,state,persons_18_64,51,0.03322461926138067,0.02059313709127734,0.029220181226598585 +national,b300k.cps0.acs100.s0,state,persons_65p,51,0.01652391042094501,0.0070074312564463465,0.03404049733309985 +national,b300k.cps0.acs100.s0,state,persons_in_households,51,0.019202448617101683,0.013461663174987487,0.02891261494934966 +national,b300k.cps0.acs100.s0,state,persons_male,51,0.029085368693816,0.0211821262240152,0.03837719133159759 +national,b300k.cps0.acs100.s0,state,persons_total,51,0.018673730344351547,0.014299252687835783,0.027728537498343205 +national,b300k.cps0.acs100.s0,state,real_estate_taxes_aggregate,51,0.12482175933699798,0.12012193257291583,0.04023456724448698 +national,b300k.cps0.acs100.s0,state,rent_contract_annual_aggregate,51,0.21075985267497366,0.1653281161580419,0.20541271712243428 +national,b300k.cps0.acs100.s0,state,rent_gross_annual_aggregate,51,0.24070745908576754,0.20232006711507555,0.2238207675554527 +national,b300k.cps0.acs100.s0,state,renter,51,0.1414677685115681,0.13037552937027802,0.062139979965687715 +national,b300k.cps2022-2023-2024.acs000.s0,cd,households,436,0.0768138963366542,0.056618448340729176,0.05903095626619854 +national,b300k.cps2022-2023-2024.acs000.s0,cd,owner,436,0.15043087127409258,0.083359180492564,0.14579026036401566 +national,b300k.cps2022-2023-2024.acs000.s0,cd,persons_0_17,436,0.15282008843476197,0.11447689514255237,0.11811895800745933 +national,b300k.cps2022-2023-2024.acs000.s0,cd,persons_18_64,436,0.06729213107904793,0.053969611978042266,0.055343312515888345 +national,b300k.cps2022-2023-2024.acs000.s0,cd,persons_65p,436,0.15229457137525998,0.11641841157008576,0.13779353565170702 +national,b300k.cps2022-2023-2024.acs000.s0,cd,persons_in_households,436,0.06606069672053924,0.051526401823702536,0.046662176058902334 +national,b300k.cps2022-2023-2024.acs000.s0,cd,persons_male,436,0.0657796423034446,0.05347162106825168,0.05510136386003589 +national,b300k.cps2022-2023-2024.acs000.s0,cd,persons_total,436,0.05860127209690081,0.04285777227656368,0.04517911961156129 +national,b300k.cps2022-2023-2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.4785779468807137,0.4986868616417639,0.5783161755374594 +national,b300k.cps2022-2023-2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.33062594832243863,0.26822611996172735,0.3109979078913162 +national,b300k.cps2022-2023-2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.30271762596972607,0.2739714411930478,0.2851390393194523 +national,b300k.cps2022-2023-2024.acs000.s0,cd,renter,436,0.2538136391541166,0.19841918202129638,0.23258087301847485 +national,b300k.cps2022-2023-2024.acs000.s0,county,households,850,0.1211894431616476,0.08866673730419428,0.09016678093400855 +national,b300k.cps2022-2023-2024.acs000.s0,county,owner,850,0.1736439436366973,0.12905063767166747,0.15121786449626848 +national,b300k.cps2022-2023-2024.acs000.s0,county,persons_0_17,850,0.2407314470280536,0.1721611539594431,0.17027315603983867 +national,b300k.cps2022-2023-2024.acs000.s0,county,persons_18_64,850,0.13776297574322197,0.0992688391346703,0.10153917823357125 +national,b300k.cps2022-2023-2024.acs000.s0,county,persons_65p,850,0.23563439748017886,0.17764028811650354,0.18187007262415478 +national,b300k.cps2022-2023-2024.acs000.s0,county,persons_in_households,850,0.12331701300663157,0.08649991341973917,0.08501889085740987 +national,b300k.cps2022-2023-2024.acs000.s0,county,persons_male,850,0.1277016874070357,0.09118269047984048,0.09207474532446963 +national,b300k.cps2022-2023-2024.acs000.s0,county,persons_total,850,0.1151701161907757,0.08122595539271901,0.08103649104870823 +national,b300k.cps2022-2023-2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.515699582277813,0.5355857620263584,0.5670911784296876 +national,b300k.cps2022-2023-2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.4199671709466647,0.3307944053714441,0.4047348718273917 +national,b300k.cps2022-2023-2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.38035259849149666,0.32606145751825777,0.3496081604080735 +national,b300k.cps2022-2023-2024.acs000.s0,county,renter,850,0.3420277544291929,0.2595957177846132,0.30806271992692164 +national,b300k.cps2022-2023-2024.acs000.s0,national,households,1,0.04038778050851105,0.04038778050851105,0.04038778011161412 +national,b300k.cps2022-2023-2024.acs000.s0,national,owner,1,0.047843569549438865,0.047843569549438865,0.04504294266327352 +national,b300k.cps2022-2023-2024.acs000.s0,national,persons_0_17,1,0.06301887360288629,0.06301887360288629,0.021094263093460124 +national,b300k.cps2022-2023-2024.acs000.s0,national,persons_18_64,1,0.013636826111469597,0.013636826111469597,0.02674863655274084 +national,b300k.cps2022-2023-2024.acs000.s0,national,persons_65p,1,0.0006214121164728521,0.0006214121164728521,0.018547026346138182 +national,b300k.cps2022-2023-2024.acs000.s0,national,persons_in_households,1,0.030562017635848808,0.030562017635848808,0.007468807603606707 +national,b300k.cps2022-2023-2024.acs000.s0,national,persons_male,1,0.007554531556357624,0.007554531556357624,0.03089045646952046 +national,b300k.cps2022-2023-2024.acs000.s0,national,persons_total,1,0.005144043493874172,0.005144043493874172,0.017379591291648393 +national,b300k.cps2022-2023-2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.5423659339999485,0.5423659339999485,0.6659411721508932 +national,b300k.cps2022-2023-2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.12094413477526589,0.12094413477526589,0.1311082630902956 +national,b300k.cps2022-2023-2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.22777163732029837,0.22777163732029837,0.23670056718390284 +national,b300k.cps2022-2023-2024.acs000.s0,national,renter,1,0.006947828054783414,0.006947828054783414,0.00224421283630985 +national,b300k.cps2022-2023-2024.acs000.s0,state,households,51,0.038313289696366624,0.029104500813672537,0.038818772971577764 +national,b300k.cps2022-2023-2024.acs000.s0,state,owner,51,0.04267658854838321,0.04486409723657833,0.0493736484367459 +national,b300k.cps2022-2023-2024.acs000.s0,state,persons_0_17,51,0.0704754293604024,0.06848509726673697,0.05125129793589482 +national,b300k.cps2022-2023-2024.acs000.s0,state,persons_18_64,51,0.023990192990126703,0.01816000702459077,0.02908260558133954 +national,b300k.cps2022-2023-2024.acs000.s0,state,persons_65p,51,0.02491032799213648,0.0080003028592416,0.033742093722682526 +national,b300k.cps2022-2023-2024.acs000.s0,state,persons_in_households,51,0.030397483669080603,0.026529127952252835,0.020461498374014835 +national,b300k.cps2022-2023-2024.acs000.s0,state,persons_male,51,0.02149995501596479,0.014900718141809181,0.030540574782717347 +national,b300k.cps2022-2023-2024.acs000.s0,state,persons_total,51,0.01519466724030218,0.010159954097350087,0.017719590215262444 +national,b300k.cps2022-2023-2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.45718076831620963,0.451213781085076,0.5512094530501027 +national,b300k.cps2022-2023-2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.1424587867287291,0.13826466810487256,0.1468564716660885 +national,b300k.cps2022-2023-2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.23077070410211975,0.21108635871992726,0.23190637634799505 +national,b300k.cps2022-2023-2024.acs000.s0,state,renter,51,0.0858778571640012,0.07764572814579952,0.05874007939622599 +national,b300k.cps2022-2023-2024.acs100.s0,cd,households,436,0.08145920949610042,0.060139494789654246,0.054962073532234944 +national,b300k.cps2022-2023-2024.acs100.s0,cd,owner,436,0.12992798498705205,0.08061859332308757,0.10415262407300314 +national,b300k.cps2022-2023-2024.acs100.s0,cd,persons_0_17,436,0.14283979230725324,0.1076335560375353,0.09819552657666308 +national,b300k.cps2022-2023-2024.acs100.s0,cd,persons_18_64,436,0.06943635473195278,0.058012203198901886,0.049531410622278046 +national,b300k.cps2022-2023-2024.acs100.s0,cd,persons_65p,436,0.12401969793890699,0.09615574310117547,0.09944979837866572 +national,b300k.cps2022-2023-2024.acs100.s0,cd,persons_in_households,436,0.06776392618770989,0.05471342140489986,0.04570265304758491 +national,b300k.cps2022-2023-2024.acs100.s0,cd,persons_male,436,0.0662167079076727,0.05469409794430834,0.05434137605234831 +national,b300k.cps2022-2023-2024.acs100.s0,cd,persons_total,436,0.06232438247763969,0.049759819894297126,0.04628623078305049 +national,b300k.cps2022-2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.3105789073772164,0.31600322733129227,0.3120468833971771 +national,b300k.cps2022-2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3339393070141877,0.2825007661132831,0.31339907708977893 +national,b300k.cps2022-2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.29254891484310375,0.27079870238445447,0.2751987054799509 +national,b300k.cps2022-2023-2024.acs100.s0,cd,renter,436,0.20399412671698272,0.15699178718996656,0.15814508010758657 +national,b300k.cps2022-2023-2024.acs100.s0,county,households,850,0.1379401615172095,0.10315744202107657,0.09608167916716849 +national,b300k.cps2022-2023-2024.acs100.s0,county,owner,850,0.1749740995837795,0.12987869227293913,0.13072067032095197 +national,b300k.cps2022-2023-2024.acs100.s0,county,persons_0_17,850,0.25785218635344354,0.1876686456059402,0.1785360378394958 +national,b300k.cps2022-2023-2024.acs100.s0,county,persons_18_64,850,0.15473440401941396,0.1133671715083568,0.10923617451481231 +national,b300k.cps2022-2023-2024.acs100.s0,county,persons_65p,850,0.22554288211551432,0.173304424828488,0.16056855475526624 +national,b300k.cps2022-2023-2024.acs100.s0,county,persons_in_households,850,0.14429567809997665,0.1002204519682654,0.09869100340395388 +national,b300k.cps2022-2023-2024.acs100.s0,county,persons_male,850,0.1517711767235694,0.11016777736568774,0.10897061665601862 +national,b300k.cps2022-2023-2024.acs100.s0,county,persons_total,850,0.13882557645797441,0.10154598940878518,0.09736080084638134 +national,b300k.cps2022-2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.3655167078756583,0.3525284828169726,0.3344464462788473 +national,b300k.cps2022-2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.4208201114686061,0.3239089976281856,0.39866580565532195 +national,b300k.cps2022-2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.37880917880867443,0.33049418527371577,0.33975327300886676 +national,b300k.cps2022-2023-2024.acs100.s0,county,renter,850,0.29554646360757464,0.24331776982784126,0.23413376933474014 +national,b300k.cps2022-2023-2024.acs100.s0,national,households,1,0.03637320194662701,0.03637320194662701,0.02283118810246568 +national,b300k.cps2022-2023-2024.acs100.s0,national,owner,1,0.057484858830789215,0.057484858830789215,0.028899582704201544 +national,b300k.cps2022-2023-2024.acs100.s0,national,persons_0_17,1,0.06826575785708888,0.06826575785708888,0.030152749524834207 +national,b300k.cps2022-2023-2024.acs100.s0,national,persons_18_64,1,0.018655002485220513,0.018655002485220513,0.02321466788614161 +national,b300k.cps2022-2023-2024.acs100.s0,national,persons_65p,1,0.0005369246699937184,0.0005369246699937184,0.017450720137209847 +national,b300k.cps2022-2023-2024.acs100.s0,national,persons_in_households,1,0.023216018606196282,0.023216018606196282,0.0033497610583094885 +national,b300k.cps2022-2023-2024.acs100.s0,national,persons_male,1,0.010228706565406134,0.010228706565406134,0.0292731874081316 +national,b300k.cps2022-2023-2024.acs100.s0,national,persons_total,1,0.0032458424521438693,0.0032458424521438693,0.017379591291877446 +national,b300k.cps2022-2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.3177650266783775,0.3177650266783775,0.366073693434801 +national,b300k.cps2022-2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.10508968109182502,0.10508968109182502,0.12904528661128503 +national,b300k.cps2022-2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.21384390042269555,0.21384390042269555,0.23488829448127344 +national,b300k.cps2022-2023-2024.acs100.s0,national,renter,1,0.04059102595718232,0.04059102595718232,0.027006558627955594 +national,b300k.cps2022-2023-2024.acs100.s0,state,households,51,0.03438932087041213,0.023437582340845326,0.029729572260914973 +national,b300k.cps2022-2023-2024.acs100.s0,state,owner,51,0.04846445793511378,0.041457445879855136,0.03673584714925406 +national,b300k.cps2022-2023-2024.acs100.s0,state,persons_0_17,51,0.06952227724423322,0.061851616623102186,0.05180045120449306 +national,b300k.cps2022-2023-2024.acs100.s0,state,persons_18_64,51,0.026695675566768322,0.01669989053043932,0.03150866407221119 +national,b300k.cps2022-2023-2024.acs100.s0,state,persons_65p,51,0.02204159416628123,0.008176928455001141,0.034800252184436976 +national,b300k.cps2022-2023-2024.acs100.s0,state,persons_in_households,51,0.023203525895546022,0.021911908172991084,0.022383242660041925 +national,b300k.cps2022-2023-2024.acs100.s0,state,persons_male,51,0.020663731597097293,0.015823960958668153,0.03616090096195592 +national,b300k.cps2022-2023-2024.acs100.s0,state,persons_total,51,0.015538609928987512,0.011238700913559439,0.02558194529369862 +national,b300k.cps2022-2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.3153963559200001,0.3246938197191959,0.30258258161320495 +national,b300k.cps2022-2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.15473637500596651,0.13768014317799515,0.1534614967585407 +national,b300k.cps2022-2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.2081993706276061,0.21333748576735745,0.20861372659058267 +national,b300k.cps2022-2023-2024.acs100.s0,state,renter,51,0.08796262726156812,0.08360576379567343,0.05765325898984831 +national,b300k.cps2022-2023-2024.acs100.s1,cd,households,436,0.08287589711563108,0.06451852286163551,0.05460589124685475 +national,b300k.cps2022-2023-2024.acs100.s1,cd,owner,436,0.12987448977376106,0.08410938740767138,0.10271980464673341 +national,b300k.cps2022-2023-2024.acs100.s1,cd,persons_0_17,436,0.14974405386016387,0.11455453649689143,0.09835007215083932 +national,b300k.cps2022-2023-2024.acs100.s1,cd,persons_18_64,436,0.07302563639550481,0.059373118539808444,0.05350098165738256 +national,b300k.cps2022-2023-2024.acs100.s1,cd,persons_65p,436,0.12521665713282154,0.09445416857123276,0.09995627300453121 +national,b300k.cps2022-2023-2024.acs100.s1,cd,persons_in_households,436,0.0700548191922489,0.06157237882463698,0.04312719443969352 +national,b300k.cps2022-2023-2024.acs100.s1,cd,persons_male,436,0.06999369958324543,0.05727262180805198,0.05356780667765004 +national,b300k.cps2022-2023-2024.acs100.s1,cd,persons_total,436,0.06391749933471796,0.053166947568752426,0.04381525638626839 +national,b300k.cps2022-2023-2024.acs100.s1,cd,real_estate_taxes_aggregate,436,0.3192345190955145,0.31980625950106234,0.3232398494938278 +national,b300k.cps2022-2023-2024.acs100.s1,cd,rent_contract_annual_aggregate,436,0.3333714950556575,0.26517727526671764,0.31229202196557954 +national,b300k.cps2022-2023-2024.acs100.s1,cd,rent_gross_annual_aggregate,436,0.28884771532916553,0.26593835613294825,0.27677378801964936 +national,b300k.cps2022-2023-2024.acs100.s1,cd,renter,436,0.202764807829374,0.16127731437673998,0.15646844286840492 +national,b300k.cps2022-2023-2024.acs100.s1,county,households,850,0.13476428318108774,0.1010344565035793,0.09421033365906543 +national,b300k.cps2022-2023-2024.acs100.s1,county,owner,850,0.1687578613238559,0.12848114043545078,0.12898361874265155 +national,b300k.cps2022-2023-2024.acs100.s1,county,persons_0_17,850,0.25341463242955614,0.1846821934970258,0.18004659071278442 +national,b300k.cps2022-2023-2024.acs100.s1,county,persons_18_64,850,0.1550779875104846,0.11285379963621728,0.10409935096726328 +national,b300k.cps2022-2023-2024.acs100.s1,county,persons_65p,850,0.21778697605547656,0.16473784109877937,0.15894869564486916 +national,b300k.cps2022-2023-2024.acs100.s1,county,persons_in_households,850,0.14186079841516439,0.0983687140739788,0.09567362504185346 +national,b300k.cps2022-2023-2024.acs100.s1,county,persons_male,850,0.14450819157454184,0.10211505132547075,0.10051269033781333 +national,b300k.cps2022-2023-2024.acs100.s1,county,persons_total,850,0.13746220732564088,0.09252525543990156,0.0933225358182413 +national,b300k.cps2022-2023-2024.acs100.s1,county,real_estate_taxes_aggregate,850,0.37721668705768485,0.37005815100614287,0.34138997462800813 +national,b300k.cps2022-2023-2024.acs100.s1,county,rent_contract_annual_aggregate,850,0.4267213280556424,0.3558945653735257,0.40099376211959503 +national,b300k.cps2022-2023-2024.acs100.s1,county,rent_gross_annual_aggregate,850,0.38369324058202464,0.33513035676801356,0.3395631844898292 +national,b300k.cps2022-2023-2024.acs100.s1,county,renter,850,0.3015722781370127,0.24146578119766274,0.2394566484896744 +national,b300k.cps2022-2023-2024.acs100.s1,national,households,1,0.038731594778362265,0.038731594778362265,0.024794395277488928 +national,b300k.cps2022-2023-2024.acs100.s1,national,owner,1,0.05445142288433735,0.05445142288433735,0.025324766647941036 +national,b300k.cps2022-2023-2024.acs100.s1,national,persons_0_17,1,0.06722014738106916,0.06722014738106916,0.028992087919649804 +national,b300k.cps2022-2023-2024.acs100.s1,national,persons_18_64,1,0.018042891860486635,0.018042891860486635,0.023429146172018255 +national,b300k.cps2022-2023-2024.acs100.s1,national,persons_65p,1,0.0005561248259008758,0.0005561248259008758,0.016789814262298818 +national,b300k.cps2022-2023-2024.acs100.s1,national,persons_in_households,1,0.023531106023115728,0.023531106023115728,0.003339386531063656 +national,b300k.cps2022-2023-2024.acs100.s1,national,persons_male,1,0.00914232086522395,0.00914232086522395,0.030230184394261766 +national,b300k.cps2022-2023-2024.acs100.s1,national,persons_total,1,0.0033888083815028745,0.0033888083815028745,0.017379591291576717 +national,b300k.cps2022-2023-2024.acs100.s1,national,real_estate_taxes_aggregate,1,0.32645441084072935,0.32645441084072935,0.3748400477187738 +national,b300k.cps2022-2023-2024.acs100.s1,national,rent_contract_annual_aggregate,1,0.09967706855194938,0.09967706855194938,0.12851951123017968 +national,b300k.cps2022-2023-2024.acs100.s1,national,rent_gross_annual_aggregate,1,0.20908905709039013,0.20908905709039013,0.23442641409602114 +national,b300k.cps2022-2023-2024.acs100.s1,national,renter,1,0.027863018439444203,0.027863018439444203,0.0163427118127628 +national,b300k.cps2022-2023-2024.acs100.s1,state,households,51,0.03582716493720152,0.02728687105225227,0.02735163381759662 +national,b300k.cps2022-2023-2024.acs100.s1,state,owner,51,0.046478359447618384,0.042399045925081,0.03220854081813725 +national,b300k.cps2022-2023-2024.acs100.s1,state,persons_0_17,51,0.06896301680424324,0.06032405300874398,0.05355871315044963 +national,b300k.cps2022-2023-2024.acs100.s1,state,persons_18_64,51,0.027539596215577996,0.018911131321548594,0.027238197395543753 +national,b300k.cps2022-2023-2024.acs100.s1,state,persons_65p,51,0.02094189624097604,0.007831674770261383,0.028673572469027384 +national,b300k.cps2022-2023-2024.acs100.s1,state,persons_in_households,51,0.024356484111425287,0.023421366352056827,0.021890576690053367 +national,b300k.cps2022-2023-2024.acs100.s1,state,persons_male,51,0.020953233442916226,0.015616320979830126,0.03131112356940419 +national,b300k.cps2022-2023-2024.acs100.s1,state,persons_total,51,0.015085735096732434,0.011216915188135154,0.02182359813314486 +national,b300k.cps2022-2023-2024.acs100.s1,state,real_estate_taxes_aggregate,51,0.3096597932672935,0.33415707307486403,0.3088903056845426 +national,b300k.cps2022-2023-2024.acs100.s1,state,rent_contract_annual_aggregate,51,0.151696030317034,0.13376493571508846,0.16091490576517956 +national,b300k.cps2022-2023-2024.acs100.s1,state,rent_gross_annual_aggregate,51,0.21054030162074974,0.2204503425126953,0.2182614080634859 +national,b300k.cps2022-2023-2024.acs100.s1,state,renter,51,0.09182848698777181,0.08420501956179503,0.05324485130069417 +national,b300k.cps2022-2023-2024.acs100.s2,cd,households,436,0.08141993397842143,0.06145006752367964,0.05387121687949212 +national,b300k.cps2022-2023-2024.acs100.s2,cd,owner,436,0.12819733041158843,0.08207049310855331,0.10084961118595076 +national,b300k.cps2022-2023-2024.acs100.s2,cd,persons_0_17,436,0.1476575468498571,0.1133017189012492,0.10396800122316771 +national,b300k.cps2022-2023-2024.acs100.s2,cd,persons_18_64,436,0.0739302662550068,0.06378033751955045,0.05002635961526946 +national,b300k.cps2022-2023-2024.acs100.s2,cd,persons_65p,436,0.1225863625088895,0.09803792723748411,0.0985697921326312 +national,b300k.cps2022-2023-2024.acs100.s2,cd,persons_in_households,436,0.07144138370253729,0.05906711643667383,0.045753838452251526 +national,b300k.cps2022-2023-2024.acs100.s2,cd,persons_male,436,0.07458805259344883,0.06370848429482842,0.05523679661015942 +national,b300k.cps2022-2023-2024.acs100.s2,cd,persons_total,436,0.06752779744494047,0.05595610763609438,0.046462729275332286 +national,b300k.cps2022-2023-2024.acs100.s2,cd,real_estate_taxes_aggregate,436,0.3105978299822275,0.32255659949570764,0.31624422336631874 +national,b300k.cps2022-2023-2024.acs100.s2,cd,rent_contract_annual_aggregate,436,0.33063035625989223,0.27776242745647034,0.31155462308682835 +national,b300k.cps2022-2023-2024.acs100.s2,cd,rent_gross_annual_aggregate,436,0.29262338905266905,0.25946079149807494,0.27553400138773404 +national,b300k.cps2022-2023-2024.acs100.s2,cd,renter,436,0.20104729062660023,0.1606960957004242,0.15632248233515425 +national,b300k.cps2022-2023-2024.acs100.s2,county,households,850,0.14054874402992476,0.1066271722065818,0.09378508463464962 +national,b300k.cps2022-2023-2024.acs100.s2,county,owner,850,0.17677175887833654,0.138083415479833,0.12610930452147198 +national,b300k.cps2022-2023-2024.acs100.s2,county,persons_0_17,850,0.24335012621601448,0.18366150785433416,0.18145174594691854 +national,b300k.cps2022-2023-2024.acs100.s2,county,persons_18_64,850,0.15688731687777235,0.11057050117948719,0.11049728350658153 +national,b300k.cps2022-2023-2024.acs100.s2,county,persons_65p,850,0.21941859326747395,0.16395904255873478,0.15756992656357788 +national,b300k.cps2022-2023-2024.acs100.s2,county,persons_in_households,850,0.14745371657300715,0.10574667594812115,0.0990745995105983 +national,b300k.cps2022-2023-2024.acs100.s2,county,persons_male,850,0.15064345959263106,0.11128991199515662,0.10514594684137929 +national,b300k.cps2022-2023-2024.acs100.s2,county,persons_total,850,0.14140300830808344,0.10259129172389206,0.09693953272037091 +national,b300k.cps2022-2023-2024.acs100.s2,county,real_estate_taxes_aggregate,850,0.37712118679820433,0.3660102410452892,0.33610850282071913 +national,b300k.cps2022-2023-2024.acs100.s2,county,rent_contract_annual_aggregate,850,0.42584477022049494,0.35175349247157905,0.4034052375814544 +national,b300k.cps2022-2023-2024.acs100.s2,county,rent_gross_annual_aggregate,850,0.38534448956040024,0.34449625318474475,0.34459933569726914 +national,b300k.cps2022-2023-2024.acs100.s2,county,renter,850,0.2979129242328524,0.24234967569903426,0.23085167418015046 +national,b300k.cps2022-2023-2024.acs100.s2,national,households,1,0.03622298898580318,0.03622298898580318,0.022425462343745668 +national,b300k.cps2022-2023-2024.acs100.s2,national,owner,1,0.05480525374959647,0.05480525374959647,0.02487343325459565 +national,b300k.cps2022-2023-2024.acs100.s2,national,persons_0_17,1,0.06315442777053781,0.06315442777053781,0.02493795042771259 +national,b300k.cps2022-2023-2024.acs100.s2,national,persons_18_64,1,0.01819612101382591,0.01819612101382591,0.024373101349739155 +national,b300k.cps2022-2023-2024.acs100.s2,national,persons_65p,1,0.0007070678972486736,0.0007070678972486736,0.015136287219120487 +national,b300k.cps2022-2023-2024.acs100.s2,national,persons_in_households,1,0.02258615071654198,0.02258615071654198,0.0032116078586647066 +national,b300k.cps2022-2023-2024.acs100.s2,national,persons_male,1,0.009434157820751538,0.009434157820751538,0.028793888062225634 +national,b300k.cps2022-2023-2024.acs100.s2,national,persons_total,1,0.0023970434739663993,0.0023970434739663993,0.017379591291621404 +national,b300k.cps2022-2023-2024.acs100.s2,national,real_estate_taxes_aggregate,1,0.32388849047574314,0.32388849047574314,0.36958236939275463 +national,b300k.cps2022-2023-2024.acs100.s2,national,rent_contract_annual_aggregate,1,0.1070254914023418,0.1070254914023418,0.1319312994116549 +national,b300k.cps2022-2023-2024.acs100.s2,national,rent_gross_annual_aggregate,1,0.21554446085996273,0.21554446085996273,0.23742358379298573 +national,b300k.cps2022-2023-2024.acs100.s2,national,renter,1,0.03787951532990728,0.03787951532990728,0.022082308540014823 +national,b300k.cps2022-2023-2024.acs100.s2,state,households,51,0.03534972909746922,0.028576687302064658,0.023725680491648735 +national,b300k.cps2022-2023-2024.acs100.s2,state,owner,51,0.04469837441325257,0.03186143373820745,0.029002895268317442 +national,b300k.cps2022-2023-2024.acs100.s2,state,persons_0_17,51,0.06766924094823157,0.05490332197751628,0.05567407681743994 +national,b300k.cps2022-2023-2024.acs100.s2,state,persons_18_64,51,0.02595315210345113,0.017066582528234196,0.029783437644543102 +national,b300k.cps2022-2023-2024.acs100.s2,state,persons_65p,51,0.02432752611106001,0.007677537585413598,0.029325220378664408 +national,b300k.cps2022-2023-2024.acs100.s2,state,persons_in_households,51,0.0228657035741335,0.022983894751011903,0.022200252461611364 +national,b300k.cps2022-2023-2024.acs100.s2,state,persons_male,51,0.020431863979743278,0.01269889931006266,0.032881620970388825 +national,b300k.cps2022-2023-2024.acs100.s2,state,persons_total,51,0.013999615895199028,0.011700764039253731,0.025249273649564613 +national,b300k.cps2022-2023-2024.acs100.s2,state,real_estate_taxes_aggregate,51,0.31591962536590174,0.31843321374142297,0.30670737513987084 +national,b300k.cps2022-2023-2024.acs100.s2,state,rent_contract_annual_aggregate,51,0.15221782764048242,0.13024632009286127,0.16133794028836196 +national,b300k.cps2022-2023-2024.acs100.s2,state,rent_gross_annual_aggregate,51,0.2119161267608786,0.1961121659278051,0.21528276283846245 +national,b300k.cps2022-2023-2024.acs100.s2,state,renter,51,0.08542468235741517,0.07084438461011466,0.05241661969934416 +national,b300k.cps2023-2024.acs000.s0,cd,households,436,0.06659889923483614,0.051311160694353146,0.053614520750817074 +national,b300k.cps2023-2024.acs000.s0,cd,owner,436,0.14791701351081213,0.08916555842401622,0.1444815335505615 +national,b300k.cps2023-2024.acs000.s0,cd,persons_0_17,436,0.1543914354506224,0.11299528451525888,0.12478861103159995 +national,b300k.cps2023-2024.acs000.s0,cd,persons_18_64,436,0.0677764113520785,0.05483046523633475,0.058743708228535384 +national,b300k.cps2023-2024.acs000.s0,cd,persons_65p,436,0.1511188999139415,0.11960451167110006,0.13699227201391515 +national,b300k.cps2023-2024.acs000.s0,cd,persons_in_households,436,0.06896617849794623,0.05612577873155741,0.0511102742236791 +national,b300k.cps2023-2024.acs000.s0,cd,persons_male,436,0.06726033016483961,0.05498153562468454,0.05884683651812112 +national,b300k.cps2023-2024.acs000.s0,cd,persons_total,436,0.0608741726701753,0.04609898058317008,0.04886493140741495 +national,b300k.cps2023-2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.4688395506933809,0.4799024758012721,0.5698652645724244 +national,b300k.cps2023-2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.33647046003690545,0.2724058027700966,0.31469264573928035 +national,b300k.cps2023-2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.307788953906389,0.27659623129080335,0.2838529241053794 +national,b300k.cps2023-2024.acs000.s0,cd,renter,436,0.25028549451040044,0.19101227574221857,0.22968050589278796 +national,b300k.cps2023-2024.acs000.s0,county,households,850,0.11617686438961268,0.08114939956723048,0.08498367212326344 +national,b300k.cps2023-2024.acs000.s0,county,owner,850,0.17370158782088552,0.12817272686087883,0.15082548224521902 +national,b300k.cps2023-2024.acs000.s0,county,persons_0_17,850,0.23995037520519888,0.16948172196743988,0.1761961413648731 +national,b300k.cps2023-2024.acs000.s0,county,persons_18_64,850,0.13838075805944242,0.09463916326384954,0.10700797062471092 +national,b300k.cps2023-2024.acs000.s0,county,persons_65p,850,0.22897294207402644,0.18029957194224444,0.18115346083985567 +national,b300k.cps2023-2024.acs000.s0,county,persons_in_households,850,0.12713312999793547,0.08527523162796746,0.08877408961987057 +national,b300k.cps2023-2024.acs000.s0,county,persons_male,850,0.12793613627333555,0.09277973243724809,0.09538987885247817 +national,b300k.cps2023-2024.acs000.s0,county,persons_total,850,0.11868086905453715,0.08173662813252805,0.08495552849814238 +national,b300k.cps2023-2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.5077095040562315,0.53343373313728,0.5565735457281109 +national,b300k.cps2023-2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.4243566774620468,0.347182897524689,0.40679322886452596 +national,b300k.cps2023-2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.3769364279446927,0.3282559589386741,0.3478483126845342 +national,b300k.cps2023-2024.acs000.s0,county,renter,850,0.33524706027076234,0.2536655526101482,0.3152559717195768 +national,b300k.cps2023-2024.acs000.s0,national,households,1,0.040631761105864236,0.040631761105864236,0.04063176077374351 +national,b300k.cps2023-2024.acs000.s0,national,owner,1,0.0392446082526435,0.0392446082526435,0.042345165727939324 +national,b300k.cps2023-2024.acs000.s0,national,persons_0_17,1,0.06569901803100475,0.06569901803100475,0.027390231881220944 +national,b300k.cps2023-2024.acs000.s0,national,persons_18_64,1,0.01406179214628397,0.01406179214628397,0.0268050150704322 +national,b300k.cps2023-2024.acs000.s0,national,persons_65p,1,0.0005051204167362431,0.0005051204167362431,0.026233676447505128 +national,b300k.cps2023-2024.acs000.s0,national,persons_in_households,1,0.0309088963030605,0.0309088963030605,0.007468807603602755 +national,b300k.cps2023-2024.acs000.s0,national,persons_male,1,0.008127402438907076,0.008127402438907076,0.030408793666099887 +national,b300k.cps2023-2024.acs000.s0,national,persons_total,1,0.005482366680830717,0.005482366680830717,0.017379591291652247 +national,b300k.cps2023-2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.5381625114329095,0.5381625114329095,0.6562268648260717 +national,b300k.cps2023-2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.10978734361116428,0.10978734361116428,0.1222749686343984 +national,b300k.cps2023-2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.21797067822970526,0.21797067822970526,0.22894074123359048 +national,b300k.cps2023-2024.acs000.s0,national,renter,1,0.007375939804224396,0.007375939804224396,0.0025205865935754137 +national,b300k.cps2023-2024.acs000.s0,state,households,51,0.03875452190987316,0.03181887519552718,0.04016948176038674 +national,b300k.cps2023-2024.acs000.s0,state,owner,51,0.03714970471491217,0.03382802406109517,0.04757532621275756 +national,b300k.cps2023-2024.acs000.s0,state,persons_0_17,51,0.07138750113934637,0.06548445498460775,0.05483953711216335 +national,b300k.cps2023-2024.acs000.s0,state,persons_18_64,51,0.024236911251203638,0.019473020495144204,0.03073725927409018 +national,b300k.cps2023-2024.acs000.s0,state,persons_65p,51,0.02363361982948631,0.009000253497431615,0.039588997541003985 +national,b300k.cps2023-2024.acs000.s0,state,persons_in_households,51,0.030977514738353036,0.027827512117769345,0.01955854451458431 +national,b300k.cps2023-2024.acs000.s0,state,persons_male,51,0.02380948902352055,0.018787251109654627,0.031232583282333352 +national,b300k.cps2023-2024.acs000.s0,state,persons_total,51,0.01447806205206007,0.010800827824127349,0.018964847449261527 +national,b300k.cps2023-2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.45137187585806465,0.44442876777037893,0.5416227019420784 +national,b300k.cps2023-2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.13914983315567697,0.1232397328882248,0.14160292476457162 +national,b300k.cps2023-2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.2210850571814336,0.21702269016447423,0.2199685049241719 +national,b300k.cps2023-2024.acs000.s0,state,renter,51,0.07604324701499145,0.06528083210475862,0.06435477021533259 +national,b300k.cps2023-2024.acs100.s0,cd,households,436,0.07961824129945907,0.0616681821545923,0.04810264997891757 +national,b300k.cps2023-2024.acs100.s0,cd,owner,436,0.12445454145347881,0.07972488458953067,0.08310383827346488 +national,b300k.cps2023-2024.acs100.s0,cd,persons_0_17,436,0.1444030482368346,0.11229628622420793,0.10115797654787498 +national,b300k.cps2023-2024.acs100.s0,cd,persons_18_64,436,0.07535532479122792,0.06285717880494338,0.050864185115396025 +national,b300k.cps2023-2024.acs100.s0,cd,persons_65p,436,0.12097081218856884,0.09737025702265684,0.08461932860175533 +national,b300k.cps2023-2024.acs100.s0,cd,persons_in_households,436,0.0704768301988397,0.06044381136349781,0.04836032333640076 +national,b300k.cps2023-2024.acs100.s0,cd,persons_male,436,0.07030458718615719,0.0595905185978135,0.055839076005064214 +national,b300k.cps2023-2024.acs100.s0,cd,persons_total,436,0.06634769936563761,0.05426985748258721,0.0485463192051605 +national,b300k.cps2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.25183324188363093,0.25567419546934844,0.2102526769439945 +national,b300k.cps2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.33960569110906974,0.2905279255006018,0.3202053889884849 +national,b300k.cps2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.2868448502891181,0.25861594264509885,0.27860549586486605 +national,b300k.cps2023-2024.acs100.s0,cd,renter,436,0.18543935109762338,0.1560607398091599,0.12801205780457262 +national,b300k.cps2023-2024.acs100.s0,county,households,850,0.14196346577140373,0.10100760457919018,0.09369935551642367 +national,b300k.cps2023-2024.acs100.s0,county,owner,850,0.17360733137128886,0.12365838853235137,0.11978550005293273 +national,b300k.cps2023-2024.acs100.s0,county,persons_0_17,850,0.27580389666721083,0.2017430120662784,0.19000776698181512 +national,b300k.cps2023-2024.acs100.s0,county,persons_18_64,850,0.1621963712949039,0.12138495621749865,0.11135210001064201 +national,b300k.cps2023-2024.acs100.s0,county,persons_65p,850,0.21882682325865213,0.16380830564079968,0.15311411284075127 +national,b300k.cps2023-2024.acs100.s0,county,persons_in_households,850,0.15396977108032836,0.10577262572585516,0.10472957916788693 +national,b300k.cps2023-2024.acs100.s0,county,persons_male,850,0.16118398373624968,0.11804835601267216,0.11200379817229747 +national,b300k.cps2023-2024.acs100.s0,county,persons_total,850,0.14863649799586695,0.10358054666477248,0.10265556765772516 +national,b300k.cps2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.32375312424283825,0.296007989645402,0.24968300885360645 +national,b300k.cps2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.42508473949547565,0.34149317305755333,0.4031064691966803 +national,b300k.cps2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.3786310986704824,0.32603580054692594,0.3395014437392735 +national,b300k.cps2023-2024.acs100.s0,county,renter,850,0.28467770833676814,0.2261159140106025,0.21072750235659535 +national,b300k.cps2023-2024.acs100.s0,national,households,1,0.034882399020032546,0.034882399020032546,0.01622813986048555 +national,b300k.cps2023-2024.acs100.s0,national,owner,1,0.05363313991248341,0.05363313991248341,0.0185637728817818 +national,b300k.cps2023-2024.acs100.s0,national,persons_0_17,1,0.07178102244750267,0.07178102244750267,0.037168881908996844 +national,b300k.cps2023-2024.acs100.s0,national,persons_18_64,1,0.020186245213107676,0.020186245213107676,0.021405258145536843 +national,b300k.cps2023-2024.acs100.s0,national,persons_65p,1,0.0006120076998306613,0.0006120076998306613,0.019721236033055835 +national,b300k.cps2023-2024.acs100.s0,national,persons_in_households,1,0.020333508837103394,0.020333508837103394,0.008086271457001712 +national,b300k.cps2023-2024.acs100.s0,national,persons_male,1,0.010969830695297103,0.010969830695297103,0.028695428893634082 +national,b300k.cps2023-2024.acs100.s0,national,persons_total,1,0.003058929172514386,0.003058929172514386,0.017379591291705 +national,b300k.cps2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.23753767895848144,0.23753767895848144,0.2345658564217346 +national,b300k.cps2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.09690855532197688,0.09690855532197688,0.1242698815104491 +national,b300k.cps2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.20665698818190026,0.20665698818190026,0.23069322178107815 +national,b300k.cps2023-2024.acs100.s0,national,renter,1,0.041560062177077105,0.041560062177077105,0.029848196630025862 +national,b300k.cps2023-2024.acs100.s0,state,households,51,0.03370761774420467,0.02574402369139925,0.025384052373917356 +national,b300k.cps2023-2024.acs100.s0,state,owner,51,0.046291804301377346,0.040212461714923396,0.028873511573039103 +national,b300k.cps2023-2024.acs100.s0,state,persons_0_17,51,0.0711226611541805,0.06087086387381244,0.057898369342281576 +national,b300k.cps2023-2024.acs100.s0,state,persons_18_64,51,0.02799674999962056,0.019706871092281576,0.03114044991340005 +national,b300k.cps2023-2024.acs100.s0,state,persons_65p,51,0.021392302116394,0.005845414174498385,0.03431761949732328 +national,b300k.cps2023-2024.acs100.s0,state,persons_in_households,51,0.02115270158590316,0.01734774861219062,0.024100213806170213 +national,b300k.cps2023-2024.acs100.s0,state,persons_male,51,0.022924287855974886,0.0166345643623313,0.03638023804000716 +national,b300k.cps2023-2024.acs100.s0,state,persons_total,51,0.01526269965988254,0.011576768719616827,0.026083135523212342 +national,b300k.cps2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.23784795928982574,0.2458778620639227,0.19667184532866613 +national,b300k.cps2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.15836580717548704,0.1377371280516969,0.1688786671295249 +national,b300k.cps2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.20154609340709723,0.19214184171043472,0.20586815296275546 +national,b300k.cps2023-2024.acs100.s0,state,renter,51,0.08330569322846994,0.06682898554489158,0.054246188130893436 +national,b300k.cps2024.acs000.s0,cd,households,436,0.0674880287692212,0.05274079102107186,0.05325389470712396 +national,b300k.cps2024.acs000.s0,cd,owner,436,0.14948548400318845,0.08402531771642886,0.14077060356552817 +national,b300k.cps2024.acs000.s0,cd,persons_0_17,436,0.15855785812568668,0.11705060612775171,0.1311649722369435 +national,b300k.cps2024.acs000.s0,cd,persons_18_64,436,0.07382234285797036,0.06293296397970277,0.0634839506501305 +national,b300k.cps2024.acs000.s0,cd,persons_65p,436,0.14756112073144062,0.11700262046407992,0.13998017631797427 +national,b300k.cps2024.acs000.s0,cd,persons_in_households,436,0.07284803023289094,0.05624676030117298,0.054935697126162315 +national,b300k.cps2024.acs000.s0,cd,persons_male,436,0.07079418050637383,0.05634993397208461,0.06229145930936586 +national,b300k.cps2024.acs000.s0,cd,persons_total,436,0.0655346483464504,0.051385470638122745,0.05264424882012382 +national,b300k.cps2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.47442543093482886,0.4892309031266726,0.5528534080004882 +national,b300k.cps2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.3423974188779214,0.27937321602011955,0.3179372350717971 +national,b300k.cps2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.30627033374209384,0.2792992862348131,0.2829032167660115 +national,b300k.cps2024.acs000.s0,cd,renter,436,0.25755434460731363,0.20981758259890973,0.23473340185005617 +national,b300k.cps2024.acs000.s0,county,households,850,0.11625416081719966,0.08864360093225396,0.0832784674286999 +national,b300k.cps2024.acs000.s0,county,owner,850,0.17077169053970184,0.12691693072537097,0.1498085561133901 +national,b300k.cps2024.acs000.s0,county,persons_0_17,850,0.2477880007924063,0.18233374179118197,0.18566076860806963 +national,b300k.cps2024.acs000.s0,county,persons_18_64,850,0.14453210750117587,0.10500014593255137,0.11424708179130634 +national,b300k.cps2024.acs000.s0,county,persons_65p,850,0.22115153441433608,0.173095122380731,0.1836137625425742 +national,b300k.cps2024.acs000.s0,county,persons_in_households,850,0.1321239878341516,0.09274942452037857,0.09485734865046187 +national,b300k.cps2024.acs000.s0,county,persons_male,850,0.1320743996079062,0.09628938090125672,0.09915657570484801 +national,b300k.cps2024.acs000.s0,county,persons_total,850,0.12413153002487026,0.0899671731678316,0.09014898316489524 +national,b300k.cps2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.5166186032188235,0.5407454241482218,0.5446751934509556 +national,b300k.cps2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.422244695526828,0.32576534766260085,0.403997187213267 +national,b300k.cps2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.37065127192112185,0.3120786078398141,0.3407041948901364 +national,b300k.cps2024.acs000.s0,county,renter,850,0.3419525006311758,0.25255761324094816,0.3116467943447933 +national,b300k.cps2024.acs000.s0,national,households,1,0.042503266857548044,0.042503266857548044,0.04250326623243594 +national,b300k.cps2024.acs000.s0,national,owner,1,0.03200889182651092,0.03200889182651092,0.04010859549596169 +national,b300k.cps2024.acs000.s0,national,persons_0_17,1,0.06116570239836122,0.06116570239836122,0.03288093308214637 +national,b300k.cps2024.acs000.s0,national,persons_18_64,1,0.012113673348359475,0.012113673348359475,0.028643647198409762 +national,b300k.cps2024.acs000.s0,national,persons_65p,1,0.0005023724973787453,0.0005023724973787453,0.03895423703662803 +national,b300k.cps2024.acs000.s0,national,persons_in_households,1,0.031122162766266025,0.031122162766266025,0.007468807603647675 +national,b300k.cps2024.acs000.s0,national,persons_male,1,0.012777707326235562,0.012777707326235562,0.03015050978084711 +national,b300k.cps2024.acs000.s0,national,persons_total,1,0.005690373100143351,0.005690373100143351,0.017379591291608435 +national,b300k.cps2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.539094283926172,0.539094283926172,0.6395411932654282 +national,b300k.cps2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.08438736842290485,0.08438736842290485,0.09886944608010037 +national,b300k.cps2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.19565744191824505,0.19565744191824505,0.2083795811585734 +national,b300k.cps2024.acs000.s0,national,renter,1,0.02769438835940242,0.02769438835940242,0.01224278155079332 +national,b300k.cps2024.acs000.s0,state,households,51,0.04069855900412696,0.03511809975705684,0.04113183240018178 +national,b300k.cps2024.acs000.s0,state,owner,51,0.03867846568274794,0.03497919514241723,0.0473744543754758 +national,b300k.cps2024.acs000.s0,state,persons_0_17,51,0.06931207437732052,0.06841205804135012,0.05938231280038831 +national,b300k.cps2024.acs000.s0,state,persons_18_64,51,0.024564903767353007,0.01827959725215107,0.03622043144079565 +national,b300k.cps2024.acs000.s0,state,persons_65p,51,0.02724168933835994,0.005588968124640139,0.05328853265489987 +national,b300k.cps2024.acs000.s0,state,persons_in_households,51,0.03129060768796522,0.027356701512200335,0.019861435559825554 +national,b300k.cps2024.acs000.s0,state,persons_male,51,0.02937596239091268,0.030908491940299227,0.03069101486430921 +national,b300k.cps2024.acs000.s0,state,persons_total,51,0.016076452960188586,0.012021854517197478,0.01840903075160705 +national,b300k.cps2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.4510311884013043,0.43990476993901145,0.5260015221555048 +national,b300k.cps2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.12998074429606976,0.12292752854083262,0.12759779821473954 +national,b300k.cps2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.2032555429435214,0.20852181839423425,0.2025211568796703 +national,b300k.cps2024.acs000.s0,state,renter,51,0.08380148348937297,0.06955425013749097,0.07151289876278501 +national,b300k.cps2024.acs100.s0,cd,households,436,0.08101844286363714,0.06244082613945334,0.0445186582648168 +national,b300k.cps2024.acs100.s0,cd,owner,436,0.11083279251046732,0.07281490873375449,0.06408132108321789 +national,b300k.cps2024.acs100.s0,cd,persons_0_17,436,0.15973412311961405,0.13511999168206051,0.1011149875638067 +national,b300k.cps2024.acs100.s0,cd,persons_18_64,436,0.07990605697391219,0.06712449773448276,0.053087998847227875 +national,b300k.cps2024.acs100.s0,cd,persons_65p,436,0.11689433493406204,0.09483952053155462,0.07579294253113192 +national,b300k.cps2024.acs100.s0,cd,persons_in_households,436,0.07623224611086325,0.06371590565423646,0.05045012484316011 +national,b300k.cps2024.acs100.s0,cd,persons_male,436,0.0747591958768181,0.058275535778771384,0.05742995594700321 +national,b300k.cps2024.acs100.s0,cd,persons_total,436,0.07224448546698713,0.06015847184488131,0.05020954772082696 +national,b300k.cps2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.20958508420403657,0.19616147687331023,0.138503910174953 +national,b300k.cps2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.35197755641584283,0.2956658940415483,0.3277378477880494 +national,b300k.cps2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.29434144621757646,0.2620733066920712,0.2850439607136127 +national,b300k.cps2024.acs100.s0,cd,renter,436,0.1772693289735572,0.15270928382069043,0.10562970911566646 +national,b300k.cps2024.acs100.s0,county,households,850,0.15013125385387072,0.10772058801535508,0.09604511971690513 +national,b300k.cps2024.acs100.s0,county,owner,850,0.17514464100730928,0.1245931078961891,0.11549907454876397 +national,b300k.cps2024.acs100.s0,county,persons_0_17,850,0.2879883025468139,0.2029813636717652,0.1968736402180397 +national,b300k.cps2024.acs100.s0,county,persons_18_64,850,0.1747503036493535,0.12746597738386423,0.1152949893009183 +national,b300k.cps2024.acs100.s0,county,persons_65p,850,0.22571087990564637,0.16695494507217645,0.14765770582025672 +national,b300k.cps2024.acs100.s0,county,persons_in_households,850,0.16503361760536123,0.11212833461444041,0.11037454032549172 +national,b300k.cps2024.acs100.s0,county,persons_male,850,0.16847248342287163,0.12437125115061683,0.11540155756888201 +national,b300k.cps2024.acs100.s0,county,persons_total,850,0.1601278463052193,0.11297570378761504,0.10711382447994193 +national,b300k.cps2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.2938229587280357,0.24931931617984762,0.2025009679662354 +national,b300k.cps2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.4369494948799025,0.36144628290904923,0.4115667347806425 +national,b300k.cps2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.39359774115216034,0.3306757850955234,0.34975265949333967 +national,b300k.cps2024.acs100.s0,county,renter,850,0.2928867117169829,0.23405432052624758,0.20593617007171544 +national,b300k.cps2024.acs100.s0,national,households,1,0.031917591807078885,0.031917591807078885,0.009405048708776023 +national,b300k.cps2024.acs100.s0,national,owner,1,0.0492879263060249,0.0492879263060249,0.011149148171989243 +national,b300k.cps2024.acs100.s0,national,persons_0_17,1,0.07437901819327178,0.07437901819327178,0.03934535382767289 +national,b300k.cps2024.acs100.s0,national,persons_18_64,1,0.0216063919393169,0.0216063919393169,0.020760608153350738 +national,b300k.cps2024.acs100.s0,national,persons_65p,1,0.00029937477859186626,0.00029937477859186626,0.020145296515002298 +national,b300k.cps2024.acs100.s0,national,persons_in_households,1,0.01682310045549248,0.01682310045549248,0.012887804579998606 +national,b300k.cps2024.acs100.s0,national,persons_male,1,0.010509988378541783,0.010509988378541783,0.028825524095141112 +national,b300k.cps2024.acs100.s0,national,persons_total,1,0.0028124138713776334,0.0028124138713776334,0.017379591291554284 +national,b300k.cps2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.15667006070176775,0.15667006070176775,0.10519850185068137 +national,b300k.cps2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.08643647394290539,0.08643647394290539,0.12122007030868508 +national,b300k.cps2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.19745752933392188,0.19745752933392188,0.22801403971314627 +national,b300k.cps2024.acs100.s0,national,renter,1,0.042895779129269895,0.042895779129269895,0.03793725868236157 +national,b300k.cps2024.acs100.s0,state,households,51,0.03174321950118475,0.025206728160688356,0.023801392273112943 +national,b300k.cps2024.acs100.s0,state,owner,51,0.04505511413885919,0.03754914523365948,0.026253475518179904 +national,b300k.cps2024.acs100.s0,state,persons_0_17,51,0.07261998383730159,0.05719899134518714,0.060576324539654995 +national,b300k.cps2024.acs100.s0,state,persons_18_64,51,0.02890874931497288,0.019334619387050805,0.02961978201893944 +national,b300k.cps2024.acs100.s0,state,persons_65p,51,0.01714481098139381,0.006083395392028057,0.036465302363331495 +national,b300k.cps2024.acs100.s0,state,persons_in_households,51,0.019810127062663763,0.014700575482996326,0.02595010544588405 +national,b300k.cps2024.acs100.s0,state,persons_male,51,0.02196700495106504,0.015933855064098335,0.03638472546612089 +national,b300k.cps2024.acs100.s0,state,persons_total,51,0.016456923859269206,0.010832280780540429,0.02698706008569942 +national,b300k.cps2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.149662549977381,0.164209908776001,0.09423245701524154 +national,b300k.cps2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.16999885751565932,0.14246137144566384,0.18470102376411873 +national,b300k.cps2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.1968943346979549,0.17193769151224367,0.2070420821336953 +national,b300k.cps2024.acs100.s0,state,renter,51,0.08999175388385075,0.07928263425250653,0.05772056447604141 +national,b300k.cps2024.acs100.s1,cd,households,436,0.08090495149435195,0.06439555096032126,0.043666327344408395 +national,b300k.cps2024.acs100.s1,cd,owner,436,0.11369207866160631,0.07799464926655283,0.06446595871546629 +national,b300k.cps2024.acs100.s1,cd,persons_0_17,436,0.15733575255459678,0.13047504761535053,0.10131289177297828 +national,b300k.cps2024.acs100.s1,cd,persons_18_64,436,0.08717027344041157,0.06986084917752453,0.05527546733560979 +national,b300k.cps2024.acs100.s1,cd,persons_65p,436,0.123186357972296,0.10600993806678005,0.0749841921549136 +national,b300k.cps2024.acs100.s1,cd,persons_in_households,436,0.08286219840918974,0.0695924438857558,0.051333162330392645 +national,b300k.cps2024.acs100.s1,cd,persons_male,436,0.08496627243348687,0.07033838177000806,0.059876637977190415 +national,b300k.cps2024.acs100.s1,cd,persons_total,436,0.07929735999720403,0.06560368269212902,0.050658066765181003 +national,b300k.cps2024.acs100.s1,cd,real_estate_taxes_aggregate,436,0.20736179189541065,0.19744739839579323,0.13922265124603075 +national,b300k.cps2024.acs100.s1,cd,rent_contract_annual_aggregate,436,0.34234722584202837,0.3031378295950551,0.3144112076841177 +national,b300k.cps2024.acs100.s1,cd,rent_gross_annual_aggregate,436,0.2933881582287202,0.25627463121780714,0.27424807769698756 +national,b300k.cps2024.acs100.s1,cd,renter,436,0.1756544876393553,0.1452731770019195,0.10866752087198374 +national,b300k.cps2024.acs100.s1,county,households,850,0.15538294981932654,0.10714172001438019,0.09244479905077944 +national,b300k.cps2024.acs100.s1,county,owner,850,0.18268736915728287,0.1304092523579447,0.10829972908532866 +national,b300k.cps2024.acs100.s1,county,persons_0_17,850,0.2736368676517163,0.2040349061632739,0.21066372424798901 +national,b300k.cps2024.acs100.s1,county,persons_18_64,850,0.180161997878847,0.12977168661762362,0.11697017284834327 +national,b300k.cps2024.acs100.s1,county,persons_65p,850,0.22747961396315852,0.18306658038429635,0.14874591163846015 +national,b300k.cps2024.acs100.s1,county,persons_in_households,850,0.17157539051335982,0.12224969764678216,0.110588593691157 +national,b300k.cps2024.acs100.s1,county,persons_male,850,0.17550761058211847,0.1338113818337976,0.11910281121417693 +national,b300k.cps2024.acs100.s1,county,persons_total,850,0.16521151397144235,0.11879837984501371,0.10785239755419546 +national,b300k.cps2024.acs100.s1,county,real_estate_taxes_aggregate,850,0.2990019267273842,0.2599970486608152,0.19817254415613586 +national,b300k.cps2024.acs100.s1,county,rent_contract_annual_aggregate,850,0.44233824244083264,0.36846341530873017,0.40114437891484006 +national,b300k.cps2024.acs100.s1,county,rent_gross_annual_aggregate,850,0.39354343081934234,0.3448988507797871,0.344211001664788 +national,b300k.cps2024.acs100.s1,county,renter,850,0.2999630430838605,0.2476454530648217,0.20313929769454747 +national,b300k.cps2024.acs100.s1,national,households,1,0.029664512333914417,0.029664512333914417,0.007135480860673591 +national,b300k.cps2024.acs100.s1,national,owner,1,0.04774269104458574,0.04774269104458574,0.006760642135513097 +national,b300k.cps2024.acs100.s1,national,persons_0_17,1,0.0700403992756002,0.0700403992756002,0.03239665815108548 +national,b300k.cps2024.acs100.s1,national,persons_18_64,1,0.022531468286676744,0.022531468286676744,0.0220436135717044 +national,b300k.cps2024.acs100.s1,national,persons_65p,1,0.00021447581033412648,0.00021447581033412648,0.016185055455979563 +national,b300k.cps2024.acs100.s1,national,persons_in_households,1,0.01545990995360194,0.01545990995360194,0.012745124341986979 +national,b300k.cps2024.acs100.s1,national,persons_male,1,0.01090774456103616,0.01090774456103616,0.028988409494756603 +national,b300k.cps2024.acs100.s1,national,persons_total,1,0.0013372491922772505,0.0013372491922772505,0.017379591291681866 +national,b300k.cps2024.acs100.s1,national,real_estate_taxes_aggregate,1,0.16532160437225468,0.16532160437225468,0.10788924995015199 +national,b300k.cps2024.acs100.s1,national,rent_contract_annual_aggregate,1,0.09370651102558565,0.09370651102558565,0.12613857323223815 +national,b300k.cps2024.acs100.s1,national,rent_gross_annual_aggregate,1,0.20384407318747277,0.20384407318747277,0.23233482023432472 +national,b300k.cps2024.acs100.s1,national,renter,1,0.047175707797804785,0.047175707797804785,0.03680538251027018 +national,b300k.cps2024.acs100.s1,state,households,51,0.030973130746136848,0.03170484940368832,0.016509876960375154 +national,b300k.cps2024.acs100.s1,state,owner,51,0.04391442887134357,0.038867723343318915,0.01776575510010848 +national,b300k.cps2024.acs100.s1,state,persons_0_17,51,0.07127828185679741,0.06177772250845184,0.05779517814902032 +national,b300k.cps2024.acs100.s1,state,persons_18_64,51,0.03106230303485937,0.026768688162270255,0.03303962043118999 +national,b300k.cps2024.acs100.s1,state,persons_65p,51,0.0172312829094892,0.007344244275853212,0.0328039014021689 +national,b300k.cps2024.acs100.s1,state,persons_in_households,51,0.019981711268529042,0.01439446935042592,0.025786709402797463 +national,b300k.cps2024.acs100.s1,state,persons_male,51,0.021181788075647117,0.015432562421127049,0.03465236347769676 +national,b300k.cps2024.acs100.s1,state,persons_total,51,0.016039126247091518,0.012282493054078424,0.026587166511169637 +national,b300k.cps2024.acs100.s1,state,real_estate_taxes_aggregate,51,0.16080889511440075,0.1661977637430562,0.09775079182205315 +national,b300k.cps2024.acs100.s1,state,rent_contract_annual_aggregate,51,0.17660178672044036,0.1418145031753751,0.1858112142185224 +national,b300k.cps2024.acs100.s1,state,rent_gross_annual_aggregate,51,0.2029804040732784,0.19595850103326176,0.21231117244279066 +national,b300k.cps2024.acs100.s1,state,renter,51,0.0907474767974611,0.07844612181801494,0.059409183848200924 +national,b300k.cps2024.acs100.s2,cd,households,436,0.0796632761545261,0.06491814787465713,0.04331851304134574 +national,b300k.cps2024.acs100.s2,cd,owner,436,0.11032653516592009,0.07482241492795524,0.06209214806116888 +national,b300k.cps2024.acs100.s2,cd,persons_0_17,436,0.15360197090677855,0.12485544930224737,0.10342165829279419 +national,b300k.cps2024.acs100.s2,cd,persons_18_64,436,0.07792838319061317,0.06011630018174159,0.05272373485245502 +national,b300k.cps2024.acs100.s2,cd,persons_65p,436,0.1136356727965607,0.08733024280321836,0.07597605451221584 +national,b300k.cps2024.acs100.s2,cd,persons_in_households,436,0.07527311476083347,0.06069084501951149,0.04808302024496203 +national,b300k.cps2024.acs100.s2,cd,persons_male,436,0.07632176993783851,0.06608779842171816,0.05751957426886549 +national,b300k.cps2024.acs100.s2,cd,persons_total,436,0.07151978177926634,0.05936441321319234,0.047740968379590465 +national,b300k.cps2024.acs100.s2,cd,real_estate_taxes_aggregate,436,0.20615728549294782,0.18977911262270505,0.13228862206640338 +national,b300k.cps2024.acs100.s2,cd,rent_contract_annual_aggregate,436,0.3371702649298445,0.28086557492548686,0.31819942924787176 +national,b300k.cps2024.acs100.s2,cd,rent_gross_annual_aggregate,436,0.29167083277838046,0.263388721234841,0.28118437560497095 +national,b300k.cps2024.acs100.s2,cd,renter,436,0.17501289384321697,0.15194451569088313,0.1065898955736187 +national,b300k.cps2024.acs100.s2,county,households,850,0.15421677195523284,0.10929058905022947,0.09529876221809666 +national,b300k.cps2024.acs100.s2,county,owner,850,0.18215617002387807,0.1307058989634349,0.11440609929049368 +national,b300k.cps2024.acs100.s2,county,persons_0_17,850,0.29315559244602835,0.21462360854512524,0.2042996714476425 +national,b300k.cps2024.acs100.s2,county,persons_18_64,850,0.17057096166931207,0.11852041429239686,0.11326194007444529 +national,b300k.cps2024.acs100.s2,county,persons_65p,850,0.22743351853445293,0.16479584027520924,0.1485364586129691 +national,b300k.cps2024.acs100.s2,county,persons_in_households,850,0.16595004860069243,0.11169222237883542,0.10562303715711137 +national,b300k.cps2024.acs100.s2,county,persons_male,850,0.16890012452954137,0.12108803948108335,0.11606407051368871 +national,b300k.cps2024.acs100.s2,county,persons_total,850,0.16007184643706154,0.10986252338844743,0.10342246146173768 +national,b300k.cps2024.acs100.s2,county,real_estate_taxes_aggregate,850,0.284537056219742,0.24832880123302736,0.2012923720797865 +national,b300k.cps2024.acs100.s2,county,rent_contract_annual_aggregate,850,0.4389965800787208,0.3573445191779637,0.4198081193231573 +national,b300k.cps2024.acs100.s2,county,rent_gross_annual_aggregate,850,0.39319346493734963,0.3337812999606556,0.3598222288063871 +national,b300k.cps2024.acs100.s2,county,renter,850,0.29914290644038594,0.23544416047199868,0.21394875331770885 +national,b300k.cps2024.acs100.s2,national,households,1,0.031697250542291604,0.031697250542291604,0.009413301953973515 +national,b300k.cps2024.acs100.s2,national,owner,1,0.04976176613597217,0.04976176613597217,0.009173457161656365 +national,b300k.cps2024.acs100.s2,national,persons_0_17,1,0.07047162679810698,0.07047162679810698,0.041448735400090655 +national,b300k.cps2024.acs100.s2,national,persons_18_64,1,0.02059516060577593,0.02059516060577593,0.020082445625907344 +national,b300k.cps2024.acs100.s2,national,persons_65p,1,8.764769359694069e-06,8.764769359694069e-06,0.02036963746209138 +national,b300k.cps2024.acs100.s2,national,persons_in_households,1,0.01671651565923538,0.01671651565923538,0.012728549890750515 +national,b300k.cps2024.acs100.s2,national,persons_male,1,0.01123974923492748,0.01123974923492748,0.028652397462910772 +national,b300k.cps2024.acs100.s2,national,persons_total,1,0.0026423460444105107,0.0026423460444105107,0.017379591291678886 +national,b300k.cps2024.acs100.s2,national,real_estate_taxes_aggregate,1,0.1576311932517165,0.1576311932517165,0.10864498173634508 +national,b300k.cps2024.acs100.s2,national,rent_contract_annual_aggregate,1,0.10569512482147018,0.10569512482147018,0.12946497246197944 +national,b300k.cps2024.acs100.s2,national,rent_gross_annual_aggregate,1,0.2143757674388141,0.2143757674388141,0.23525697789508435 +national,b300k.cps2024.acs100.s2,national,renter,1,0.04674174898811652,0.04674174898811652,0.0360035549662605 +national,b300k.cps2024.acs100.s2,state,households,51,0.03550932233634552,0.02843941210856927,0.01901002835770843 +national,b300k.cps2024.acs100.s2,state,owner,51,0.048115047627153316,0.04552955364245188,0.020465468366677945 +national,b300k.cps2024.acs100.s2,state,persons_0_17,51,0.06979605353577457,0.056158679819566425,0.06185684002766886 +national,b300k.cps2024.acs100.s2,state,persons_18_64,51,0.027623340397241746,0.018624683502374773,0.03214162327583207 +national,b300k.cps2024.acs100.s2,state,persons_65p,51,0.014208337741794742,0.00424222757886437,0.037406340913297025 +national,b300k.cps2024.acs100.s2,state,persons_in_households,51,0.01936984940608259,0.014637205697088098,0.025402788785354857 +national,b300k.cps2024.acs100.s2,state,persons_male,51,0.021700435233918514,0.019792807434610985,0.03649148102859059 +national,b300k.cps2024.acs100.s2,state,persons_total,51,0.015782366378167215,0.012513948356589906,0.026426138315958702 +national,b300k.cps2024.acs100.s2,state,real_estate_taxes_aggregate,51,0.14663139183255766,0.1490657237348988,0.0804511919488555 +national,b300k.cps2024.acs100.s2,state,rent_contract_annual_aggregate,51,0.1640570546864926,0.13633168092887502,0.17336608078593066 +national,b300k.cps2024.acs100.s2,state,rent_gross_annual_aggregate,51,0.20419602209063933,0.20811255200627807,0.20851901486314603 +national,b300k.cps2024.acs100.s2,state,renter,51,0.0983311496687627,0.10291726643095801,0.0697055944503938 +national,b600k.cps0.acs100.s0,cd,households,436,0.07414084845147878,0.0592889669286078,0.029131914349442446 +national,b600k.cps0.acs100.s0,cd,owner,436,0.09372409390044747,0.07352282209835181,0.04051540121109158 +national,b600k.cps0.acs100.s0,cd,persons_0_17,436,0.13445616284441006,0.09852284371209775,0.08208722591935363 +national,b600k.cps0.acs100.s0,cd,persons_18_64,436,0.08253020441367115,0.07026191177347488,0.040825249109997776 +national,b600k.cps0.acs100.s0,cd,persons_65p,436,0.11128995168636581,0.09054000794144755,0.05276132280332941 +national,b600k.cps0.acs100.s0,cd,persons_in_households,436,0.07778708708649938,0.0603154466722691,0.040826895330692475 +national,b600k.cps0.acs100.s0,cd,persons_male,436,0.08062953696897535,0.0660810460441365,0.046373344829246 +national,b600k.cps0.acs100.s0,cd,persons_total,436,0.07598268332078968,0.0608142389807673,0.03991902722308742 +national,b600k.cps0.acs100.s0,cd,real_estate_taxes_aggregate,436,0.19648535303447318,0.1436157769380832,0.11040149519824126 +national,b600k.cps0.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3408448752227502,0.28978424585600404,0.3172776952532818 +national,b600k.cps0.acs100.s0,cd,rent_gross_annual_aggregate,436,0.2990170935597884,0.25822955148458215,0.2794535424362954 +national,b600k.cps0.acs100.s0,cd,renter,436,0.1521027443946247,0.13516958803994114,0.07627181026553721 +national,b600k.cps0.acs100.s0,county,households,850,0.1325565622420884,0.09648368739824512,0.06554917480320599 +national,b600k.cps0.acs100.s0,county,owner,850,0.15700278761903955,0.11644330110669229,0.08017899518063644 +national,b600k.cps0.acs100.s0,county,persons_0_17,850,0.2526746746679987,0.17831862187174213,0.15566370071385557 +national,b600k.cps0.acs100.s0,county,persons_18_64,850,0.15631605531575166,0.11620858098665025,0.08602364741400081 +national,b600k.cps0.acs100.s0,county,persons_65p,850,0.19675160251967536,0.14741428163197515,0.10686977334736653 +national,b600k.cps0.acs100.s0,county,persons_in_households,850,0.15122268911313838,0.10633865633499147,0.08255564542316682 +national,b600k.cps0.acs100.s0,county,persons_male,850,0.15017490544259623,0.10878277109563886,0.08761508069603569 +national,b600k.cps0.acs100.s0,county,persons_total,850,0.1460272847974737,0.10364575503605182,0.07963123059554887 +national,b600k.cps0.acs100.s0,county,real_estate_taxes_aggregate,850,0.266432288838334,0.19220570052705302,0.16370180319595093 +national,b600k.cps0.acs100.s0,county,rent_contract_annual_aggregate,850,0.42245980878793316,0.34361815584287125,0.3984796007607794 +national,b600k.cps0.acs100.s0,county,rent_gross_annual_aggregate,850,0.37995965936480885,0.3181968564453314,0.3316674139615876 +national,b600k.cps0.acs100.s0,county,renter,850,0.2611773038780707,0.21368606301717857,0.15085102425283922 +national,b600k.cps0.acs100.s0,national,households,1,0.012045714376214284,0.012045714376214284,5.938114703318635e-05 +national,b600k.cps0.acs100.s0,national,owner,1,0.05248147138028743,0.05248147138028743,0.0019768920071729147 +national,b600k.cps0.acs100.s0,national,persons_0_17,1,0.07395108680626285,0.07395108680626285,0.036576349200425594 +national,b600k.cps0.acs100.s0,national,persons_18_64,1,0.02939642887682944,0.02939642887682944,0.01945871613649533 +national,b600k.cps0.acs100.s0,national,persons_65p,1,4.591653435175951e-05,4.591653435175951e-05,0.01247044340014511 +national,b600k.cps0.acs100.s0,national,persons_in_households,1,0.0030307115927772628,0.0030307115927772628,0.01760172242520067 +national,b600k.cps0.acs100.s0,national,persons_male,1,0.015098837338009556,0.015098837338009556,0.02802336143491234 +national,b600k.cps0.acs100.s0,national,persons_total,1,0.001934017289994047,0.001934017289994047,0.01737959129143231 +national,b600k.cps0.acs100.s0,national,real_estate_taxes_aggregate,1,0.15008327882654668,0.15008327882654668,0.017499562552654998 +national,b600k.cps0.acs100.s0,national,rent_contract_annual_aggregate,1,0.13023971515691185,0.13023971515691185,0.13137360530288825 +national,b600k.cps0.acs100.s0,national,rent_gross_annual_aggregate,1,0.23593756977379593,0.23593756977379593,0.23693366361211204 +national,b600k.cps0.acs100.s0,national,renter,1,0.10787699829625168,0.10787699829625168,0.050253109583821384 +national,b600k.cps0.acs100.s0,state,households,51,0.028565035004521767,0.019802480373603368,0.012233601743234922 +national,b600k.cps0.acs100.s0,state,owner,51,0.04858950048682312,0.042297729120746905,0.014361305690807256 +national,b600k.cps0.acs100.s0,state,persons_0_17,51,0.07301360197790821,0.0550027749049991,0.04112786132694817 +national,b600k.cps0.acs100.s0,state,persons_18_64,51,0.03524905436085624,0.022125164691657064,0.02441474410562478 +national,b600k.cps0.acs100.s0,state,persons_65p,51,0.013212537725317164,0.00605772163208258,0.027109918630514686 +national,b600k.cps0.acs100.s0,state,persons_in_households,51,0.01915306251643372,0.012786106671555214,0.020857298561184786 +national,b600k.cps0.acs100.s0,state,persons_male,51,0.026888063565977834,0.021372932514964468,0.02713622544399762 +national,b600k.cps0.acs100.s0,state,persons_total,51,0.01877583409487135,0.015564008647042028,0.02027053840681421 +national,b600k.cps0.acs100.s0,state,real_estate_taxes_aggregate,51,0.12055726341052146,0.1114048500077787,0.03325181722010736 +national,b600k.cps0.acs100.s0,state,rent_contract_annual_aggregate,51,0.20666991501973037,0.16295141484906492,0.19724700364051598 +national,b600k.cps0.acs100.s0,state,rent_gross_annual_aggregate,51,0.2279878544664096,0.20558944537267823,0.21690873070493952 +national,b600k.cps0.acs100.s0,state,renter,51,0.1284315345577252,0.12535442061465393,0.05752235131944817 +national,b600k.cps2022-2023-2024.acs000.s0,cd,households,436,0.060002043442581164,0.04213460844445295,0.04801722281360067 +national,b600k.cps2022-2023-2024.acs000.s0,cd,owner,436,0.14326228774706112,0.07434173363185752,0.13969944664351838 +national,b600k.cps2022-2023-2024.acs000.s0,cd,persons_0_17,436,0.14310699911165264,0.11035296798849335,0.11894334403780951 +national,b600k.cps2022-2023-2024.acs000.s0,cd,persons_18_64,436,0.0607214366725124,0.048993480782563784,0.05613206137225359 +national,b600k.cps2022-2023-2024.acs000.s0,cd,persons_65p,436,0.13295318338546633,0.09979987805681113,0.128341874121303 +national,b600k.cps2022-2023-2024.acs000.s0,cd,persons_in_households,436,0.06240987772719216,0.049689236898378134,0.049958866335626136 +national,b600k.cps2022-2023-2024.acs000.s0,cd,persons_male,436,0.058947519657393393,0.04591717631697646,0.05638393934796342 +national,b600k.cps2022-2023-2024.acs000.s0,cd,persons_total,436,0.052023965226079535,0.038595972693146074,0.0464902838324475 +national,b600k.cps2022-2023-2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.47067137359535527,0.49330508660923317,0.5765731026475934 +national,b600k.cps2022-2023-2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.3302130491278194,0.27318683291778295,0.31623224000001665 +national,b600k.cps2022-2023-2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.3034504527868623,0.2773548241098357,0.2882616247944339 +national,b600k.cps2022-2023-2024.acs000.s0,cd,renter,436,0.2399534641362912,0.18609340750199205,0.22575486338826894 +national,b600k.cps2022-2023-2024.acs000.s0,county,households,850,0.09446881620630154,0.06747145075664128,0.07079583003375713 +national,b600k.cps2022-2023-2024.acs000.s0,county,owner,850,0.15074632729203594,0.10822696448706343,0.13838716902434267 +national,b600k.cps2022-2023-2024.acs000.s0,county,persons_0_17,850,0.20733802516706298,0.14282471744502548,0.16096348049085904 +national,b600k.cps2022-2023-2024.acs000.s0,county,persons_18_64,850,0.11478420826302678,0.08171178918757732,0.09531176868706699 +national,b600k.cps2022-2023-2024.acs000.s0,county,persons_65p,850,0.19138340201787282,0.1435126004574654,0.16230870184838916 +national,b600k.cps2022-2023-2024.acs000.s0,county,persons_in_households,850,0.10373348752884909,0.07365410999630892,0.07866774822280603 +national,b600k.cps2022-2023-2024.acs000.s0,county,persons_male,850,0.10172602005891411,0.06995245979756279,0.08335934248251217 +national,b600k.cps2022-2023-2024.acs000.s0,county,persons_total,850,0.09451653230901969,0.06558855116675497,0.0736315251376632 +national,b600k.cps2022-2023-2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.4834972577024314,0.5191533106045221,0.5552760703819513 +national,b600k.cps2022-2023-2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.40747700523924174,0.3291136526184297,0.40070703161679877 +national,b600k.cps2022-2023-2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.35685438924987317,0.29584505029955566,0.3405721258724111 +national,b600k.cps2022-2023-2024.acs000.s0,county,renter,850,0.32325428680811946,0.2485297201235461,0.3028016551040578 +national,b600k.cps2022-2023-2024.acs000.s0,national,households,1,0.04038778034585477,0.04038778034585477,0.04038778011268734 +national,b600k.cps2022-2023-2024.acs000.s0,national,owner,1,0.04808511804256383,0.04808511804256383,0.04504294266356592 +national,b600k.cps2022-2023-2024.acs000.s0,national,persons_0_17,1,0.06309578807752662,0.06309578807752662,0.02109426309349261 +national,b600k.cps2022-2023-2024.acs000.s0,national,persons_18_64,1,0.01379274395344962,0.01379274395344962,0.026748636552436502 +national,b600k.cps2022-2023-2024.acs000.s0,national,persons_65p,1,0.0007490670670807014,0.0007490670670807014,0.018547026346196087 +national,b600k.cps2022-2023-2024.acs000.s0,national,persons_in_households,1,0.030458563364602367,0.030458563364602367,0.00746880760395044 +national,b600k.cps2022-2023-2024.acs000.s0,national,persons_male,1,0.007673079924162458,0.007673079924162458,0.030890456469041976 +national,b600k.cps2022-2023-2024.acs000.s0,national,persons_total,1,0.005043140838102024,0.005043140838102024,0.01737959129131314 +national,b600k.cps2022-2023-2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.5421010033465041,0.5421010033465041,0.6659411721508722 +national,b600k.cps2022-2023-2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.12051269370451184,0.12051269370451184,0.13110826309034238 +national,b600k.cps2022-2023-2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.22739262724273523,0.22739262724273523,0.23670056718394392 +national,b600k.cps2022-2023-2024.acs000.s0,national,renter,1,0.007383763114273543,0.007383763114273543,0.0022442128363200317 +national,b600k.cps2022-2023-2024.acs000.s0,state,households,51,0.038240237370375116,0.029819493556678144,0.038818772971578756 +national,b600k.cps2022-2023-2024.acs000.s0,state,owner,51,0.042982311003997825,0.044097596966668144,0.04937364843674589 +national,b600k.cps2022-2023-2024.acs000.s0,state,persons_0_17,51,0.07068732524346281,0.069014781025452,0.051251297935895425 +national,b600k.cps2022-2023-2024.acs000.s0,state,persons_18_64,51,0.02381404389278115,0.017356694059507252,0.029082605581341018 +national,b600k.cps2022-2023-2024.acs000.s0,state,persons_65p,51,0.02467220163146709,0.008102424051727033,0.033742093722682706 +national,b600k.cps2022-2023-2024.acs000.s0,state,persons_in_households,51,0.030393275766316532,0.027038150434896206,0.020461498374015723 +national,b600k.cps2022-2023-2024.acs000.s0,state,persons_male,51,0.021502312363578212,0.015273283186426618,0.030540574782716375 +national,b600k.cps2022-2023-2024.acs000.s0,state,persons_total,51,0.014906519702088925,0.010039531454165057,0.01771959021526217 +national,b600k.cps2022-2023-2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.45702651951832735,0.4503891104629668,0.5512094530501028 +national,b600k.cps2022-2023-2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.14195838173980319,0.1353850548696627,0.1468564716660872 +national,b600k.cps2022-2023-2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.23015237560818547,0.20931457006047932,0.2319063763479941 +national,b600k.cps2022-2023-2024.acs000.s0,state,renter,51,0.08637478324960471,0.079804582343505,0.058740079396225546 +national,b600k.cps2022-2023-2024.acs050.s0,cd,households,436,0.06431988196538463,0.04855680375725209,0.04076660944068676 +national,b600k.cps2022-2023-2024.acs050.s0,cd,owner,436,0.11874910795021167,0.06724313025720116,0.10309806957703438 +national,b600k.cps2022-2023-2024.acs050.s0,cd,persons_0_17,436,0.1282129942376719,0.09219186505423582,0.09416791053042188 +national,b600k.cps2022-2023-2024.acs050.s0,cd,persons_18_64,436,0.05902393460910494,0.051929914155506574,0.045930432415639405 +national,b600k.cps2022-2023-2024.acs050.s0,cd,persons_65p,436,0.10454568720461468,0.07996915853684633,0.09371557363276464 +national,b600k.cps2022-2023-2024.acs050.s0,cd,persons_in_households,436,0.056687107047555314,0.04395009712170181,0.03934938141426412 +national,b600k.cps2022-2023-2024.acs050.s0,cd,persons_male,436,0.05532995666771832,0.04435232166625247,0.04798835098337538 +national,b600k.cps2022-2023-2024.acs050.s0,cd,persons_total,436,0.04998730202579807,0.03978905884200983,0.03878063239127864 +national,b600k.cps2022-2023-2024.acs050.s0,cd,real_estate_taxes_aggregate,436,0.3296921416338998,0.34410136633391597,0.36210372447109174 +national,b600k.cps2022-2023-2024.acs050.s0,cd,rent_contract_annual_aggregate,436,0.3291714993672582,0.2696407846288373,0.31345895784069233 +national,b600k.cps2022-2023-2024.acs050.s0,cd,rent_gross_annual_aggregate,436,0.287558196871872,0.25736570657438596,0.27504990828074793 +national,b600k.cps2022-2023-2024.acs050.s0,cd,renter,436,0.19141413353249856,0.15029211016155553,0.15967464680644824 +national,b600k.cps2022-2023-2024.acs050.s0,county,households,850,0.10064921625922718,0.07009304943956829,0.07282913072759298 +national,b600k.cps2022-2023-2024.acs050.s0,county,owner,850,0.1403053843260553,0.10270079993047368,0.11646523216809596 +national,b600k.cps2022-2023-2024.acs050.s0,county,persons_0_17,850,0.20999554918229338,0.15081971195987606,0.14915435274988675 +national,b600k.cps2022-2023-2024.acs050.s0,county,persons_18_64,850,0.12086811479495004,0.08820950277043715,0.0885193849220127 +national,b600k.cps2022-2023-2024.acs050.s0,county,persons_65p,850,0.17916075846917842,0.13463538841834735,0.13962343544320704 +national,b600k.cps2022-2023-2024.acs050.s0,county,persons_in_households,850,0.10898724205584127,0.07130788518157291,0.07782725672079106 +national,b600k.cps2022-2023-2024.acs050.s0,county,persons_male,850,0.11281729269082172,0.08044528774737583,0.08404599951802504 +national,b600k.cps2022-2023-2024.acs050.s0,county,persons_total,850,0.10248919467571839,0.06833925889239964,0.07530376871577389 +national,b600k.cps2022-2023-2024.acs050.s0,county,real_estate_taxes_aggregate,850,0.3640312380557337,0.3588156313221753,0.35876215059500544 +national,b600k.cps2022-2023-2024.acs050.s0,county,rent_contract_annual_aggregate,850,0.4102324731642064,0.3272082430158455,0.3952793971545376 +national,b600k.cps2022-2023-2024.acs050.s0,county,rent_gross_annual_aggregate,850,0.3545246595185222,0.29614631684517784,0.3307980790519032 +national,b600k.cps2022-2023-2024.acs050.s0,county,renter,850,0.2685897414002361,0.21697013122521813,0.22587235478886497 +national,b600k.cps2022-2023-2024.acs050.s0,national,households,1,0.03735191267418759,0.03735191267418759,0.02654951890742389 +national,b600k.cps2022-2023-2024.acs050.s0,national,owner,1,0.05352323415737309,0.05352323415737309,0.030642047718378935 +national,b600k.cps2022-2023-2024.acs050.s0,national,persons_0_17,1,0.06664145892594266,0.06664145892594266,0.02843698537315832 +national,b600k.cps2022-2023-2024.acs050.s0,national,persons_18_64,1,0.017952517107229064,0.017952517107229064,0.02401883189545691 +national,b600k.cps2022-2023-2024.acs050.s0,national,persons_65p,1,0.0007773664598441149,0.0007773664598441149,0.01811162226616691 +national,b600k.cps2022-2023-2024.acs050.s0,national,persons_in_households,1,0.024106379671600172,0.024106379671600172,0.0013977685137549069 +national,b600k.cps2022-2023-2024.acs050.s0,national,persons_male,1,0.009786033367151711,0.009786033367151711,0.02998682446234174 +national,b600k.cps2022-2023-2024.acs050.s0,national,persons_total,1,0.0032796031292041936,0.0032796031292041936,0.017379591291606683 +national,b600k.cps2022-2023-2024.acs050.s0,national,real_estate_taxes_aggregate,1,0.3561441874108551,0.3561441874108551,0.42226202267962937 +national,b600k.cps2022-2023-2024.acs050.s0,national,rent_contract_annual_aggregate,1,0.10578927172847728,0.10578927172847728,0.1294539567926372 +national,b600k.cps2022-2023-2024.acs050.s0,national,rent_gross_annual_aggregate,1,0.21445847311740127,0.21445847311740127,0.23524730090794793 +national,b600k.cps2022-2023-2024.acs050.s0,national,renter,1,0.029664240016926333,0.029664240016926333,0.019179098677224803 +national,b600k.cps2022-2023-2024.acs050.s0,state,households,51,0.034668605864753566,0.02310329272596817,0.029996373805502928 +national,b600k.cps2022-2023-2024.acs050.s0,state,owner,51,0.04404109540015243,0.03735817507902847,0.03478868669108088 +national,b600k.cps2022-2023-2024.acs050.s0,state,persons_0_17,51,0.06926400422984134,0.06250894111415595,0.04757777527998962 +national,b600k.cps2022-2023-2024.acs050.s0,state,persons_18_64,51,0.02672218821079481,0.016942192006532544,0.027509490333724632 +national,b600k.cps2022-2023-2024.acs050.s0,state,persons_65p,51,0.02255547665958944,0.006402838718725874,0.02919642305626463 +national,b600k.cps2022-2023-2024.acs050.s0,state,persons_in_households,51,0.024344253285723483,0.02355789814396465,0.01794596655497512 +national,b600k.cps2022-2023-2024.acs050.s0,state,persons_male,51,0.020852752675555104,0.015304652472317971,0.030145794013306495 +national,b600k.cps2022-2023-2024.acs050.s0,state,persons_total,51,0.015483636551312397,0.011843237014794299,0.018901079284208228 +national,b600k.cps2022-2023-2024.acs050.s0,state,real_estate_taxes_aggregate,51,0.3448752801525748,0.36532710173280963,0.350556825426126 +national,b600k.cps2022-2023-2024.acs050.s0,state,rent_contract_annual_aggregate,51,0.1480749849853002,0.1298085643033683,0.15280228479458702 +national,b600k.cps2022-2023-2024.acs050.s0,state,rent_gross_annual_aggregate,51,0.21025370645541508,0.2235069699401014,0.21406906286509106 +national,b600k.cps2022-2023-2024.acs050.s0,state,renter,51,0.08171857211175315,0.07691359064514947,0.05134947943147949 +national,b600k.cps2022-2023-2024.acs100.s0,cd,households,436,0.06908926125073285,0.05207447178940018,0.03506520730176734 +national,b600k.cps2022-2023-2024.acs100.s0,cd,owner,436,0.11300950009413746,0.07081139755228653,0.06384594718594004 +national,b600k.cps2022-2023-2024.acs100.s0,cd,persons_0_17,436,0.127554646461951,0.09867266393190277,0.07749915796910463 +national,b600k.cps2022-2023-2024.acs100.s0,cd,persons_18_64,436,0.062213946472975554,0.05260486884811352,0.0393318807368864 +national,b600k.cps2022-2023-2024.acs100.s0,cd,persons_65p,436,0.09826985716910151,0.08226361926357904,0.06486340081137254 +national,b600k.cps2022-2023-2024.acs100.s0,cd,persons_in_households,436,0.056418828624367666,0.04278526812417422,0.035676884526310466 +national,b600k.cps2022-2023-2024.acs100.s0,cd,persons_male,436,0.05767244748682679,0.04836883913001587,0.0443238019796366 +national,b600k.cps2022-2023-2024.acs100.s0,cd,persons_total,436,0.05272369141945046,0.041327427285298056,0.03631302649441157 +national,b600k.cps2022-2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.24162500181028324,0.23659379540221293,0.1659213056597975 +national,b600k.cps2022-2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3340546505626047,0.2780195189448083,0.31245072840633165 +national,b600k.cps2022-2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.28211089423377445,0.26000933373617674,0.2731156193254158 +national,b600k.cps2022-2023-2024.acs100.s0,cd,renter,436,0.16556579062878252,0.14082531310278043,0.10015830093827033 +national,b600k.cps2022-2023-2024.acs100.s0,county,households,850,0.11656777479424907,0.08415781193935037,0.07022295455240964 +national,b600k.cps2022-2023-2024.acs100.s0,county,owner,850,0.15107011442922452,0.10908366770328891,0.09120412403910466 +national,b600k.cps2022-2023-2024.acs100.s0,county,persons_0_17,850,0.22547328411158046,0.15717295308949744,0.14930389281148404 +national,b600k.cps2022-2023-2024.acs100.s0,county,persons_18_64,850,0.13353202989051544,0.09539762552531901,0.08464531723176698 +national,b600k.cps2022-2023-2024.acs100.s0,county,persons_65p,850,0.17790024419405145,0.13426979573666215,0.11514056128954414 +national,b600k.cps2022-2023-2024.acs100.s0,county,persons_in_households,850,0.12416136438192883,0.08568818830593485,0.07930916467963997 +national,b600k.cps2022-2023-2024.acs100.s0,county,persons_male,850,0.1267813850709114,0.09358076993299061,0.08247131400907916 +national,b600k.cps2022-2023-2024.acs100.s0,county,persons_total,850,0.11826195552192546,0.08314949417016515,0.07734309998358456 +national,b600k.cps2022-2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.2990910271301661,0.27449817923566766,0.19722729789148571 +national,b600k.cps2022-2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.4255368494328012,0.3438173249598957,0.39346589899240614 +national,b600k.cps2022-2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.36700634362940066,0.3162811642218729,0.3286331922752514 +national,b600k.cps2022-2023-2024.acs100.s0,county,renter,850,0.24838573316012114,0.19375049577671521,0.16162469496419019 +national,b600k.cps2022-2023-2024.acs100.s0,national,households,1,0.03418899787895899,0.03418899787895899,0.011916986562554879 +national,b600k.cps2022-2023-2024.acs100.s0,national,owner,1,0.05957472086488447,0.05957472086488447,0.014413246770240463 +national,b600k.cps2022-2023-2024.acs100.s0,national,persons_0_17,1,0.07050766467152457,0.07050766467152457,0.03192184197385389 +national,b600k.cps2022-2023-2024.acs100.s0,national,persons_18_64,1,0.021128295393195017,0.021128295393195017,0.021832260889236167 +national,b600k.cps2022-2023-2024.acs100.s0,national,persons_65p,1,0.0003900754203071322,0.0003900754203071322,0.014908986136342239 +national,b600k.cps2022-2023-2024.acs100.s0,national,persons_in_households,1,0.018672926633771104,0.018672926633771104,0.010370673031291317 +national,b600k.cps2022-2023-2024.acs100.s0,national,persons_male,1,0.009756960821811888,0.009756960821811888,0.028618045204852963 +national,b600k.cps2022-2023-2024.acs100.s0,national,persons_total,1,0.0022554408193166254,0.0022554408193166254,0.017379591291674157 +national,b600k.cps2022-2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.2378912961103497,0.2378912961103497,0.17769908558937333 +national,b600k.cps2022-2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.09547586627810646,0.09547586627810646,0.1296810222713484 +national,b600k.cps2022-2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.20539840706283297,0.20539840706283297,0.23544677219274665 +national,b600k.cps2022-2023-2024.acs100.s0,national,renter,1,0.053640645915570606,0.053640645915570606,0.03589758252028333 +national,b600k.cps2022-2023-2024.acs100.s0,state,households,51,0.033711835186838394,0.025765636013757462,0.0169975748768794 +national,b600k.cps2022-2023-2024.acs100.s0,state,owner,51,0.04695649448623879,0.040644256925322,0.019295694410602426 +national,b600k.cps2022-2023-2024.acs100.s0,state,persons_0_17,51,0.07238559070757364,0.06399653520408499,0.04707282476037992 +national,b600k.cps2022-2023-2024.acs100.s0,state,persons_18_64,51,0.028583950436674273,0.020011404886954454,0.023794807114982382 +national,b600k.cps2022-2023-2024.acs100.s0,state,persons_65p,51,0.018230840500665733,0.005017513908969191,0.02611831638512562 +national,b600k.cps2022-2023-2024.acs100.s0,state,persons_in_households,51,0.02028343347789527,0.017399435001435443,0.0173595699878346 +national,b600k.cps2022-2023-2024.acs100.s0,state,persons_male,51,0.019043914374072855,0.013438223096802183,0.02845235826373236 +national,b600k.cps2022-2023-2024.acs100.s0,state,persons_total,51,0.014768802256811056,0.011536816971793444,0.018551922555122165 +national,b600k.cps2022-2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.22506188014540546,0.2432459464807265,0.14846945183719518 +national,b600k.cps2022-2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.16568385554360393,0.12260005038045753,0.17508609473163061 +national,b600k.cps2022-2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.20336088078134168,0.20818266021253673,0.20840159791979437 +national,b600k.cps2022-2023-2024.acs100.s0,state,renter,51,0.09291403711144701,0.08526125584070257,0.049236075039910135 +national,b600k.cps2023-2024.acs000.s0,cd,households,436,0.05703256152369086,0.04674433571192389,0.04757020470526813 +national,b600k.cps2023-2024.acs000.s0,cd,owner,436,0.14509701583720427,0.08017712109732308,0.1419669757238363 +national,b600k.cps2023-2024.acs000.s0,cd,persons_0_17,436,0.14871016466183484,0.10773987393600484,0.12400367196258869 +national,b600k.cps2023-2024.acs000.s0,cd,persons_18_64,436,0.062131502973460234,0.04612383970451321,0.05876189764179027 +national,b600k.cps2023-2024.acs000.s0,cd,persons_65p,436,0.13552991352300414,0.10004372080126725,0.13165846430457087 +national,b600k.cps2023-2024.acs000.s0,cd,persons_in_households,436,0.06596254198800537,0.05196205220855834,0.05343453964063293 +national,b600k.cps2023-2024.acs000.s0,cd,persons_male,436,0.06303572770676645,0.04842733001503467,0.06047215373767997 +national,b600k.cps2023-2024.acs000.s0,cd,persons_total,436,0.05629197807612599,0.04111666615747935,0.05023260618751336 +national,b600k.cps2023-2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.46058316150484274,0.4785814043453197,0.5676811076228979 +national,b600k.cps2023-2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.3255752631669309,0.27136261802627304,0.3153573695476941 +national,b600k.cps2023-2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.29698070867465953,0.271635713961847,0.2843506848649899 +national,b600k.cps2023-2024.acs000.s0,cd,renter,436,0.23569133993169747,0.18148070782138187,0.22450938418467437 +national,b600k.cps2023-2024.acs000.s0,county,households,850,0.08826811151156883,0.06081638145126741,0.07000860107884044 +national,b600k.cps2023-2024.acs000.s0,county,owner,850,0.1517574943292643,0.11252278839596795,0.143311577796287 +national,b600k.cps2023-2024.acs000.s0,county,persons_0_17,850,0.2101299837395836,0.1556978619816583,0.1628470211171628 +national,b600k.cps2023-2024.acs000.s0,county,persons_18_64,850,0.11462440211914957,0.0811425115572117,0.09830799978136316 +national,b600k.cps2023-2024.acs000.s0,county,persons_65p,850,0.1891709628085182,0.14411003030682673,0.1647273008511208 +national,b600k.cps2023-2024.acs000.s0,county,persons_in_households,850,0.10525964462597594,0.07242826253109197,0.0806695740889332 +national,b600k.cps2023-2024.acs000.s0,county,persons_male,850,0.10447936427248697,0.07524951793442436,0.08569271421999052 +national,b600k.cps2023-2024.acs000.s0,county,persons_total,850,0.09653635719638558,0.06737335365543407,0.07497035879383328 +national,b600k.cps2023-2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.4819924869747365,0.5011499428401845,0.5480828336968154 +national,b600k.cps2023-2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.4066375278503289,0.32414234585650215,0.39961295150573706 +national,b600k.cps2023-2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.35451622576621006,0.2925154183234935,0.3377649518117794 +national,b600k.cps2023-2024.acs000.s0,county,renter,850,0.32108925891049345,0.2380649003491035,0.3030451079437595 +national,b600k.cps2023-2024.acs000.s0,national,households,1,0.040631761222204237,0.040631761222204237,0.04063176077450957 +national,b600k.cps2023-2024.acs000.s0,national,owner,1,0.039320779934016246,0.039320779934016246,0.04234516572802962 +national,b600k.cps2023-2024.acs000.s0,national,persons_0_17,1,0.06568841610672783,0.06568841610672783,0.027390231881040526 +national,b600k.cps2023-2024.acs000.s0,national,persons_18_64,1,0.014269256840130659,0.014269256840130659,0.02680501507024841 +national,b600k.cps2023-2024.acs000.s0,national,persons_65p,1,0.0005657582419710235,0.0005657582419710235,0.026233676447590164 +national,b600k.cps2023-2024.acs000.s0,national,persons_in_households,1,0.030766573991336744,0.030766573991336744,0.007468807603687385 +national,b600k.cps2023-2024.acs000.s0,national,persons_male,1,0.008252262351349952,0.008252262351349952,0.030408793665966896 +national,b600k.cps2023-2024.acs000.s0,national,persons_total,1,0.005343554633193268,0.005343554633193268,0.017379591291569706 +national,b600k.cps2023-2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.53800422227846,0.53800422227846,0.6562268648260858 +national,b600k.cps2023-2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.1090863993014265,0.1090863993014265,0.12227496863436776 +national,b600k.cps2023-2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.21735491636740306,0.21735491636740306,0.22894074123356356 +national,b600k.cps2023-2024.acs000.s0,national,renter,1,0.007322778077142631,0.007322778077142631,0.0025205865936245436 +national,b600k.cps2023-2024.acs000.s0,state,households,51,0.03880058885955302,0.029877486609536066,0.04016948176038709 +national,b600k.cps2023-2024.acs000.s0,state,owner,51,0.037508274223974764,0.032938858887970594,0.047575326212758874 +national,b600k.cps2023-2024.acs000.s0,state,persons_0_17,51,0.07139074565283368,0.06624560195723926,0.05483953711216379 +national,b600k.cps2023-2024.acs000.s0,state,persons_18_64,51,0.02433389328266441,0.019649874209693993,0.030737259274090257 +national,b600k.cps2023-2024.acs000.s0,state,persons_65p,51,0.023813017407775954,0.008211560198885817,0.03958899754100455 +national,b600k.cps2023-2024.acs000.s0,state,persons_in_households,51,0.030897564398201516,0.02752399020180724,0.019558544514582006 +national,b600k.cps2023-2024.acs000.s0,state,persons_male,51,0.023950344827044716,0.02019577399791625,0.031232583282334508 +national,b600k.cps2023-2024.acs000.s0,state,persons_total,51,0.014489923552418857,0.010663614023361197,0.018964847449262308 +national,b600k.cps2023-2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.4515117367745328,0.4443537791378309,0.541622701942078 +national,b600k.cps2023-2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.13863821291624503,0.1237646295342629,0.1416029247645714 +national,b600k.cps2023-2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.22030078593737376,0.21613356811818704,0.21996850492417253 +national,b600k.cps2023-2024.acs000.s0,state,renter,51,0.07623616522488934,0.06322679357335191,0.06435477021533302 +national,b600k.cps2023-2024.acs100.s0,cd,households,436,0.06780531413482804,0.05419836704773337,0.03201891814786413 +national,b600k.cps2023-2024.acs100.s0,cd,owner,436,0.10072486139503938,0.06554970778181754,0.05429203104563203 +national,b600k.cps2023-2024.acs100.s0,cd,persons_0_17,436,0.12865593416463966,0.1064718047724041,0.07857924097754165 +national,b600k.cps2023-2024.acs100.s0,cd,persons_18_64,436,0.06932097981385807,0.05718594777187609,0.04069222534409441 +national,b600k.cps2023-2024.acs100.s0,cd,persons_65p,436,0.09383069187021528,0.07708152180559494,0.05900141255712118 +national,b600k.cps2023-2024.acs100.s0,cd,persons_in_households,436,0.06390567284621224,0.05248706919878206,0.03815058862728164 +national,b600k.cps2023-2024.acs100.s0,cd,persons_male,436,0.06367386683156001,0.05564356485463627,0.045321618142586624 +national,b600k.cps2023-2024.acs100.s0,cd,persons_total,436,0.0595400158914573,0.05265457187748077,0.03817866115212427 +national,b600k.cps2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.1908097293745798,0.17741421534076898,0.1283149673485505 +national,b600k.cps2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.334908729804153,0.28456517378363566,0.31389979158479325 +national,b600k.cps2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.28327866586878203,0.25191508057773415,0.27326254525660193 +national,b600k.cps2023-2024.acs100.s0,cd,renter,436,0.1535855150571525,0.12505938271119815,0.08687767837826281 +national,b600k.cps2023-2024.acs100.s0,county,households,850,0.11758014802519659,0.0825295344224373,0.06786876691051111 +national,b600k.cps2023-2024.acs100.s0,county,owner,850,0.1446333861722108,0.10305318688205636,0.08533779859957384 +national,b600k.cps2023-2024.acs100.s0,county,persons_0_17,850,0.2336120199434144,0.16576767705036477,0.15092560849272915 +national,b600k.cps2023-2024.acs100.s0,county,persons_18_64,850,0.13958157490097223,0.09876154408815388,0.08535920677713327 +national,b600k.cps2023-2024.acs100.s0,county,persons_65p,850,0.17507787485466414,0.13386583123398516,0.11181692901151243 +national,b600k.cps2023-2024.acs100.s0,county,persons_in_households,850,0.1302731111724608,0.09067741622415051,0.07974345026069395 +national,b600k.cps2023-2024.acs100.s0,county,persons_male,850,0.13307876715664493,0.09913267079765418,0.0848549067859619 +national,b600k.cps2023-2024.acs100.s0,county,persons_total,850,0.12438359007900343,0.08925154821315978,0.07768986651702461 +national,b600k.cps2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.2618597379914219,0.22186501604170886,0.17081468563330832 +national,b600k.cps2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.4173626906787209,0.3266695372685663,0.3921769114729371 +national,b600k.cps2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.36438553694662074,0.30558963051724075,0.32672405393682935 +national,b600k.cps2023-2024.acs100.s0,county,renter,850,0.23523224686595387,0.17832961194646543,0.15205682831065692 +national,b600k.cps2023-2024.acs100.s0,national,households,1,0.030553584844695274,0.030553584844695274,0.007898100092096693 +national,b600k.cps2023-2024.acs100.s0,national,owner,1,0.052802254119552736,0.052802254119552736,0.009375892152526346 +national,b600k.cps2023-2024.acs100.s0,national,persons_0_17,1,0.07320045264417356,0.07320045264417356,0.03465086915036744 +national,b600k.cps2023-2024.acs100.s0,national,persons_18_64,1,0.022683106787590914,0.022683106787590914,0.021099151615868166 +national,b600k.cps2023-2024.acs100.s0,national,persons_65p,1,0.0001404461695498836,0.0001404461695498836,0.01569357216696269 +national,b600k.cps2023-2024.acs100.s0,national,persons_in_households,1,0.016082471332805586,0.016082471332805586,0.012787431015813356 +national,b600k.cps2023-2024.acs100.s0,national,persons_male,1,0.010548491784949132,0.010548491784949132,0.028925993511865398 +national,b600k.cps2023-2024.acs100.s0,national,persons_total,1,0.0019363671393303385,0.0019363671393303385,0.01737959129168467 +national,b600k.cps2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.16240586758810216,0.16240586758810216,0.11048028880911435 +national,b600k.cps2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.09851572169752405,0.09851572169752405,0.1281570822615306 +national,b600k.cps2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.20806884322756947,0.20806884322756947,0.23410802940612888 +national,b600k.cps2023-2024.acs100.s0,national,renter,1,0.053842726060901895,0.053842726060901895,0.039266486957245474 +national,b600k.cps2023-2024.acs100.s0,state,households,51,0.03216136691150738,0.027128943520879075,0.014483036257314095 +national,b600k.cps2023-2024.acs100.s0,state,owner,51,0.043956856901977856,0.0402621652643649,0.016025862707060336 +national,b600k.cps2023-2024.acs100.s0,state,persons_0_17,51,0.07479845318353526,0.06235625370909042,0.041562306128017895 +national,b600k.cps2023-2024.acs100.s0,state,persons_18_64,51,0.02980549801461339,0.020827325810047644,0.023431882857797973 +national,b600k.cps2023-2024.acs100.s0,state,persons_65p,51,0.01630849156559745,0.007101992020573173,0.0283621353351104 +national,b600k.cps2023-2024.acs100.s0,state,persons_in_households,51,0.019261191901169716,0.015669318630287008,0.017972250831526402 +national,b600k.cps2023-2024.acs100.s0,state,persons_male,51,0.019559518015193317,0.014536775117830242,0.02784736053088848 +national,b600k.cps2023-2024.acs100.s0,state,persons_total,51,0.015740122658653526,0.012975126410714504,0.01888189852316395 +national,b600k.cps2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.15694620043747307,0.16628079793800857,0.09512214865337698 +national,b600k.cps2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.1727086949590483,0.13826751705522128,0.18348344571762085 +national,b600k.cps2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.20423994309887167,0.19067833773584394,0.21014181331630405 +national,b600k.cps2023-2024.acs100.s0,state,renter,51,0.08982736430410553,0.07847696597877879,0.04939571988322804 +national,b600k.cps2024.acs000.s0,cd,households,436,0.05909732925150094,0.047608563337719234,0.04860373422342944 +national,b600k.cps2024.acs000.s0,cd,owner,436,0.1450250439339014,0.08528196579510532,0.14086797245473626 +national,b600k.cps2024.acs000.s0,cd,persons_0_17,436,0.1484597556423358,0.11466113484554954,0.1287218736419662 +national,b600k.cps2024.acs000.s0,cd,persons_18_64,436,0.0658518713971586,0.05289222094897673,0.06368655569089146 +national,b600k.cps2024.acs000.s0,cd,persons_65p,436,0.1349757261225433,0.09390751110777246,0.13475217085653052 +national,b600k.cps2024.acs000.s0,cd,persons_in_households,436,0.06742512053161434,0.05177015510025937,0.05672902969785781 +national,b600k.cps2024.acs000.s0,cd,persons_male,436,0.06545588870838409,0.050269635353718464,0.06347128608512126 +national,b600k.cps2024.acs000.s0,cd,persons_total,436,0.05835452311673779,0.043127644855343726,0.053441021977624 +national,b600k.cps2024.acs000.s0,cd,real_estate_taxes_aggregate,436,0.4675706107416856,0.4921636039427403,0.5512385370971004 +national,b600k.cps2024.acs000.s0,cd,rent_contract_annual_aggregate,436,0.3335740692582731,0.26963743885169367,0.32027836579887575 +national,b600k.cps2024.acs000.s0,cd,rent_gross_annual_aggregate,436,0.293706888207474,0.261080416132075,0.28394427611551737 +national,b600k.cps2024.acs000.s0,cd,renter,436,0.24718375256564035,0.18809954159737574,0.2296633622834789 +national,b600k.cps2024.acs000.s0,county,households,850,0.0900310379084711,0.061904303399174895,0.07032960345071332 +national,b600k.cps2024.acs000.s0,county,owner,850,0.15440931932198357,0.1145931383420031,0.14217725774268836 +national,b600k.cps2024.acs000.s0,county,persons_0_17,850,0.20827475333289738,0.15274614307866086,0.1679169791612588 +national,b600k.cps2024.acs000.s0,county,persons_18_64,850,0.11940227419597083,0.08691026810168125,0.101923904001775 +national,b600k.cps2024.acs000.s0,county,persons_65p,850,0.18556502522978544,0.14177215275149607,0.16532852292906403 +national,b600k.cps2024.acs000.s0,county,persons_in_households,850,0.10969012181027894,0.07983379198078516,0.08620704438537921 +national,b600k.cps2024.acs000.s0,county,persons_male,850,0.10750253406544807,0.07853998533148608,0.08967680931621032 +national,b600k.cps2024.acs000.s0,county,persons_total,850,0.099795575239555,0.07238772784150807,0.07962418337759103 +national,b600k.cps2024.acs000.s0,county,real_estate_taxes_aggregate,850,0.48439125627856705,0.5047991473751721,0.5307062105782046 +national,b600k.cps2024.acs000.s0,county,rent_contract_annual_aggregate,850,0.41179035782052803,0.31993601086778856,0.40670800802871676 +national,b600k.cps2024.acs000.s0,county,rent_gross_annual_aggregate,850,0.35412051091446917,0.2948121360373408,0.33684740200907715 +national,b600k.cps2024.acs000.s0,county,renter,850,0.3238565126651163,0.2338287017246663,0.30476853363678535 +national,b600k.cps2024.acs000.s0,national,households,1,0.04250326675600782,0.04250326675600782,0.042503266231344095 +national,b600k.cps2024.acs000.s0,national,owner,1,0.03205826891998349,0.03205826891998349,0.04010859549479916 +national,b600k.cps2024.acs000.s0,national,persons_0_17,1,0.06129604717228814,0.06129604717228814,0.03288093308216741 +national,b600k.cps2024.acs000.s0,national,persons_18_64,1,0.012211351835314549,0.012211351835314549,0.028643647199171115 +national,b600k.cps2024.acs000.s0,national,persons_65p,1,0.0006813167436588355,0.0006813167436588355,0.03895423703662267 +national,b600k.cps2024.acs000.s0,national,persons_in_households,1,0.031057141260680182,0.031057141260680182,0.007468807602916907 +national,b600k.cps2024.acs000.s0,national,persons_male,1,0.012676270791828216,0.012676270791828216,0.03015050978129372 +national,b600k.cps2024.acs000.s0,national,persons_total,1,0.0056269552971191916,0.0056269552971191916,0.01737959129232118 +national,b600k.cps2024.acs000.s0,national,real_estate_taxes_aggregate,1,0.5389774706546059,0.5389774706546059,0.6395411932654015 +national,b600k.cps2024.acs000.s0,national,rent_contract_annual_aggregate,1,0.08391663082609926,0.08391663082609926,0.098869446080184 +national,b600k.cps2024.acs000.s0,national,rent_gross_annual_aggregate,1,0.1952439108356215,0.1952439108356215,0.20837958115864685 +national,b600k.cps2024.acs000.s0,national,renter,1,0.02763436254682897,0.02763436254682897,0.012242781551081959 +national,b600k.cps2024.acs000.s0,state,households,51,0.04088688904768443,0.03569291353443703,0.0411318324001774 +national,b600k.cps2024.acs000.s0,state,owner,51,0.03893937091307738,0.033556471297507204,0.04737445437548185 +national,b600k.cps2024.acs000.s0,state,persons_0_17,51,0.06951615910491699,0.0696815760109167,0.05938231280038855 +national,b600k.cps2024.acs000.s0,state,persons_18_64,51,0.024586898840412937,0.01793943991452501,0.03622043144080088 +national,b600k.cps2024.acs000.s0,state,persons_65p,51,0.027316550645966962,0.006504385338956131,0.053288532654899204 +national,b600k.cps2024.acs000.s0,state,persons_in_households,51,0.03139765443139715,0.02732098573865823,0.01986143555982416 +national,b600k.cps2024.acs000.s0,state,persons_male,51,0.029379504198897535,0.030072098572305896,0.03069101486431198 +national,b600k.cps2024.acs000.s0,state,persons_total,51,0.016035579076317554,0.012099187004840695,0.018409030751611464 +national,b600k.cps2024.acs000.s0,state,real_estate_taxes_aggregate,51,0.4512187019336541,0.43992733257982414,0.526001522155504 +national,b600k.cps2024.acs000.s0,state,rent_contract_annual_aggregate,51,0.12964602178372334,0.12410094052567115,0.12759779821473993 +national,b600k.cps2024.acs000.s0,state,rent_gross_annual_aggregate,51,0.2029127037136362,0.20723349125761953,0.20252115687966885 +national,b600k.cps2024.acs000.s0,state,renter,51,0.08443706429886408,0.07160580520127227,0.07151289876278472 +national,b600k.cps2024.acs050.s0,cd,households,436,0.060417038644129756,0.04756782532969223,0.0378119201009434 +national,b600k.cps2024.acs050.s0,cd,owner,436,0.10953383972115097,0.06543359326777926,0.08940336052967823 +national,b600k.cps2024.acs050.s0,cd,persons_0_17,436,0.13215089825317164,0.099725653096252,0.09558272273817567 +national,b600k.cps2024.acs050.s0,cd,persons_18_64,436,0.06172772625320176,0.050898414569317374,0.0492840182173179 +national,b600k.cps2024.acs050.s0,cd,persons_65p,436,0.0990630614571277,0.07792831718515728,0.08642160122209239 +national,b600k.cps2024.acs050.s0,cd,persons_in_households,436,0.05998006270741012,0.04632203816170904,0.04333922551642038 +national,b600k.cps2024.acs050.s0,cd,persons_male,436,0.05790491456017837,0.04777316444957812,0.05095400388283775 +national,b600k.cps2024.acs050.s0,cd,persons_total,436,0.053488301942434445,0.040307339822974034,0.04227227158393402 +national,b600k.cps2024.acs050.s0,cd,real_estate_taxes_aggregate,436,0.2917190005815743,0.30568121645455637,0.2935751668108753 +national,b600k.cps2024.acs050.s0,cd,rent_contract_annual_aggregate,436,0.3413175120663349,0.2892356852179321,0.31815952267130265 +national,b600k.cps2024.acs050.s0,cd,rent_gross_annual_aggregate,436,0.29075794180238057,0.25910342396783614,0.2756038510261207 +national,b600k.cps2024.acs050.s0,cd,renter,436,0.18245663810772425,0.1398051115706993,0.1439488670291109 +national,b600k.cps2024.acs050.s0,county,households,850,0.10363682933519934,0.07391419462675249,0.07134703071043064 +national,b600k.cps2024.acs050.s0,county,owner,850,0.1405702981820702,0.10061267070616106,0.10953933697417954 +national,b600k.cps2024.acs050.s0,county,persons_0_17,850,0.22228506606786533,0.16098333773263648,0.15324594300906216 +national,b600k.cps2024.acs050.s0,county,persons_18_64,850,0.12643048055324443,0.09165975210808655,0.09387407087829701 +national,b600k.cps2024.acs050.s0,county,persons_65p,850,0.1749050469076079,0.12670165049132026,0.13138329285662573 +national,b600k.cps2024.acs050.s0,county,persons_in_households,850,0.11786324543067253,0.07605337333619458,0.08305863152062937 +national,b600k.cps2024.acs050.s0,county,persons_male,850,0.1193691512544531,0.08123402674132005,0.08620642395998672 +national,b600k.cps2024.acs050.s0,county,persons_total,850,0.11245420997054399,0.07685572430901802,0.07985714392887511 +national,b600k.cps2024.acs050.s0,county,real_estate_taxes_aggregate,850,0.3329466717722224,0.33315618298379884,0.30599337024901835 +national,b600k.cps2024.acs050.s0,county,rent_contract_annual_aggregate,850,0.41785475831498964,0.3198194811778282,0.39561522450692965 +national,b600k.cps2024.acs050.s0,county,rent_gross_annual_aggregate,850,0.35893926362831857,0.3033380158662424,0.32499046551842276 +national,b600k.cps2024.acs050.s0,county,renter,850,0.2696228361468962,0.2013575724282055,0.212857145745422 +national,b600k.cps2024.acs050.s0,national,households,1,0.036884336760090855,0.036884336760090855,0.024115482131001297 +national,b600k.cps2024.acs050.s0,national,owner,1,0.04355352348319061,0.04355352348319061,0.023264152060971526 +national,b600k.cps2024.acs050.s0,national,persons_0_17,1,0.06689771847485369,0.06689771847485369,0.03600752374625699 +national,b600k.cps2024.acs050.s0,national,persons_18_64,1,0.01800885291452288,0.01800885291452288,0.02417241595557154 +national,b600k.cps2024.acs050.s0,national,persons_65p,1,0.0005189519491646605,0.0005189519491646605,0.027642849392773294 +national,b600k.cps2024.acs050.s0,national,persons_in_households,1,0.022606681666048314,0.022606681666048314,0.00375341199422468 +national,b600k.cps2024.acs050.s0,national,persons_male,1,0.011736187305509651,0.011736187305509651,0.02929129328905722 +national,b600k.cps2024.acs050.s0,national,persons_total,1,0.0033469749872814224,0.0033469749872814224,0.017379591291849055 +national,b600k.cps2024.acs050.s0,national,real_estate_taxes_aggregate,1,0.31093766574478404,0.31093766574478404,0.3442077419912742 +national,b600k.cps2024.acs050.s0,national,rent_contract_annual_aggregate,1,0.08177982237680421,0.08177982237680421,0.11117040245830881 +national,b600k.cps2024.acs050.s0,national,rent_gross_annual_aggregate,1,0.19336677861293006,0.19336677861293006,0.21918566047517046 +national,b600k.cps2024.acs050.s0,national,renter,1,0.014365266701905157,0.014365266701905157,0.014194095837008477 +national,b600k.cps2024.acs050.s0,state,households,51,0.03308787787781821,0.024449555735203066,0.027163858774878504 +national,b600k.cps2024.acs050.s0,state,owner,51,0.0386284100623994,0.030988694049454604,0.02920626243099388 +national,b600k.cps2024.acs050.s0,state,persons_0_17,51,0.06993743575288588,0.0586568028132086,0.05148227764742262 +national,b600k.cps2024.acs050.s0,state,persons_18_64,51,0.02786054935240013,0.018609060347731,0.029377604727982252 +national,b600k.cps2024.acs050.s0,state,persons_65p,51,0.022254570950417447,0.006689357272505792,0.038644476717323954 +national,b600k.cps2024.acs050.s0,state,persons_in_households,51,0.02256009904113447,0.020294824169693713,0.017402341813074974 +national,b600k.cps2024.acs050.s0,state,persons_male,51,0.02242409587889977,0.020488480959045725,0.02993045326881342 +national,b600k.cps2024.acs050.s0,state,persons_total,51,0.015363711485070462,0.010554016302630339,0.01932238423550864 +national,b600k.cps2024.acs050.s0,state,real_estate_taxes_aggregate,51,0.302742201720904,0.3135821487650572,0.2831545117659953 +national,b600k.cps2024.acs050.s0,state,rent_contract_annual_aggregate,51,0.14846537040445987,0.12415822609562564,0.14725449826944895 +national,b600k.cps2024.acs050.s0,state,rent_gross_annual_aggregate,51,0.18973032593386593,0.19898225675447806,0.1951523975767883 +national,b600k.cps2024.acs050.s0,state,renter,51,0.08111740510758178,0.06264600053489816,0.05321330049212731 +national,b600k.cps2024.acs100.s0,cd,households,436,0.06836556991120657,0.05543132498583103,0.030061419843700195 +national,b600k.cps2024.acs100.s0,cd,owner,436,0.09037464503359825,0.06428909433980756,0.04509465449094906 +national,b600k.cps2024.acs100.s0,cd,persons_0_17,436,0.13139976136405257,0.10654106299461283,0.07972314206638158 +national,b600k.cps2024.acs100.s0,cd,persons_18_64,436,0.074909721670411,0.06708131827666372,0.040270052483086245 +national,b600k.cps2024.acs100.s0,cd,persons_65p,436,0.09092991706455276,0.07424845194229025,0.0553797197180921 +national,b600k.cps2024.acs100.s0,cd,persons_in_households,436,0.06908750527983176,0.05514488946392326,0.03873134255766415 +national,b600k.cps2024.acs100.s0,cd,persons_male,436,0.07048912770458814,0.05606773341627455,0.044717927558343314 +national,b600k.cps2024.acs100.s0,cd,persons_total,436,0.06655568444075587,0.05522348181023063,0.038299130155592116 +national,b600k.cps2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.1471910299907742,0.11656752417202526,0.10919882484157147 +national,b600k.cps2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3380963467064058,0.28173250425454355,0.3160626471752382 +national,b600k.cps2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.28703845245474396,0.25589066960101836,0.27585730257839186 +national,b600k.cps2024.acs100.s0,cd,renter,436,0.14381582560798314,0.12773777521579077,0.07901117774209547 +national,b600k.cps2024.acs100.s0,county,households,850,0.12381071699874424,0.09135951089552667,0.06689653047543878 +national,b600k.cps2024.acs100.s0,county,owner,850,0.14382721026787879,0.10666246008098866,0.08065964061352399 +national,b600k.cps2024.acs100.s0,county,persons_0_17,850,0.24242257180622614,0.18137279657540306,0.15509941710625452 +national,b600k.cps2024.acs100.s0,county,persons_18_64,850,0.14791174039715427,0.10991508946188644,0.08543760291011471 +national,b600k.cps2024.acs100.s0,county,persons_65p,850,0.17206772529914854,0.12774787965760329,0.10929178763468612 +national,b600k.cps2024.acs100.s0,county,persons_in_households,850,0.14020862700111672,0.101566768268216,0.08135099465475124 +national,b600k.cps2024.acs100.s0,county,persons_male,850,0.13903278360958204,0.10073546907349962,0.08556084387389476 +national,b600k.cps2024.acs100.s0,county,persons_total,850,0.13358457245412128,0.09801223354153532,0.07847623406391573 +national,b600k.cps2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.2274208273352574,0.17117299034518868,0.16153074306399925 +national,b600k.cps2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.4246075309029734,0.3390113737134252,0.3958742716723528 +national,b600k.cps2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.37124731922091225,0.31098764083152186,0.3284680199300558 +national,b600k.cps2024.acs100.s0,county,renter,850,0.2398971611681569,0.19436443367031836,0.1488208730998836 +national,b600k.cps2024.acs100.s0,national,households,1,0.023490303286665418,0.023490303286665418,0.004032550306107907 +national,b600k.cps2024.acs100.s0,national,owner,1,0.05092060956542508,0.05092060956542508,0.005330971097048906 +national,b600k.cps2024.acs100.s0,national,persons_0_17,1,0.0730549650458692,0.0730549650458692,0.036277025047341385 +national,b600k.cps2024.acs100.s0,national,persons_18_64,1,0.02545302334982694,0.02545302334982694,0.020396038644001573 +national,b600k.cps2024.acs100.s0,national,persons_65p,1,0.00017641218693276587,0.00017641218693276587,0.015265749505787189 +national,b600k.cps2024.acs100.s0,national,persons_in_households,1,0.01065044079448586,0.01065044079448586,0.015181688429502196 +national,b600k.cps2024.acs100.s0,national,persons_male,1,0.013229820178755416,0.013229820178755416,0.028476246299673852 +national,b600k.cps2024.acs100.s0,national,persons_total,1,0.0002215160825327939,0.0002215160825327939,0.017379591291975412 +national,b600k.cps2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.034656919004043205,0.034656919004043205,0.0444345280130821 +national,b600k.cps2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.11077564161350498,0.11077564161350498,0.12799956725070355 +national,b600k.cps2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.21883887304914607,0.21883887304914607,0.2339696564497328 +national,b600k.cps2024.acs100.s0,national,renter,1,0.07138872921839172,0.07138872921839172,0.04398605432062964 +national,b600k.cps2024.acs100.s0,state,households,51,0.03062167999321035,0.025758994726909158,0.012551797889670965 +national,b600k.cps2024.acs100.s0,state,owner,51,0.04369508094307644,0.0367829959836869,0.01450316633318095 +national,b600k.cps2024.acs100.s0,state,persons_0_17,51,0.07373695008595113,0.06489127136915863,0.0418250264669515 +national,b600k.cps2024.acs100.s0,state,persons_18_64,51,0.032459607172187696,0.021682165664307314,0.024308408417819696 +national,b600k.cps2024.acs100.s0,state,persons_65p,51,0.01530637230565709,0.007313734524350135,0.02918024219017552 +national,b600k.cps2024.acs100.s0,state,persons_in_households,51,0.018691105580198885,0.014639453547372148,0.018703698460971988 +national,b600k.cps2024.acs100.s0,state,persons_male,51,0.021631672335317223,0.01721863933655879,0.026977597799269778 +national,b600k.cps2024.acs100.s0,state,persons_total,51,0.0173502368348526,0.013773701343673846,0.019067969513008286 +national,b600k.cps2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.06211923753598985,0.052101103123615586,0.04640083779828414 +national,b600k.cps2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.18746604724007823,0.14932282339320377,0.1896387156641729 +national,b600k.cps2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.20861021849375427,0.2025538023502695,0.2128487121032932 +national,b600k.cps2024.acs100.s0,state,renter,51,0.10125561946588531,0.09021066812338849,0.05368877525129426 +national,natural.cps2022-2023-2024.acs100.s0,cd,households,436,0.0940861512139551,0.06574455851970415,0.07702745456319936 +national,natural.cps2022-2023-2024.acs100.s0,cd,owner,436,0.1617246211926523,0.10186547151596559,0.1551484793891346 +national,natural.cps2022-2023-2024.acs100.s0,cd,persons_0_17,436,0.16416887915882633,0.12879122138066348,0.12072268393512044 +national,natural.cps2022-2023-2024.acs100.s0,cd,persons_18_64,436,0.07929621495227553,0.05999238176547872,0.05917639471386573 +national,natural.cps2022-2023-2024.acs100.s0,cd,persons_65p,436,0.1735551088590183,0.13548431704630187,0.14635989769733457 +national,natural.cps2022-2023-2024.acs100.s0,cd,persons_in_households,436,0.0736388645287251,0.053955750342474296,0.05081100721582784 +national,natural.cps2022-2023-2024.acs100.s0,cd,persons_male,436,0.07772691911257665,0.06256886430492933,0.0586641436442937 +national,natural.cps2022-2023-2024.acs100.s0,cd,persons_total,436,0.06921721938357514,0.051696537290746095,0.05043010613657911 +national,natural.cps2022-2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.4887181008840391,0.5125304640191821,0.5774003843679367 +national,natural.cps2022-2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.32934606519784043,0.2628567378762088,0.31082246755836407 +national,natural.cps2022-2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.302368030257167,0.2802810567632519,0.28236030841940746 +national,natural.cps2022-2023-2024.acs100.s0,cd,renter,436,0.26567339534292084,0.21906476739675312,0.24081713613269728 +national,natural.cps2022-2023-2024.acs100.s0,county,households,850,0.15289533365292338,0.1148650269898827,0.11263403490092005 +national,natural.cps2022-2023-2024.acs100.s0,county,owner,850,0.20518943313777951,0.15593772948201573,0.167805318211452 +national,natural.cps2022-2023-2024.acs100.s0,county,persons_0_17,850,0.2647697688695239,0.19250001046055398,0.1809033074472681 +national,natural.cps2022-2023-2024.acs100.s0,county,persons_18_64,850,0.17044270962634386,0.12366278099261066,0.11595858180255403 +national,natural.cps2022-2023-2024.acs100.s0,county,persons_65p,850,0.27772690464147604,0.2215095777878296,0.20499269577599868 +national,natural.cps2022-2023-2024.acs100.s0,county,persons_in_households,850,0.14948732388531058,0.10100988634772948,0.09871282288235243 +national,natural.cps2022-2023-2024.acs100.s0,county,persons_male,850,0.1559952839307883,0.11344063991155208,0.1072620855597396 +national,natural.cps2022-2023-2024.acs100.s0,county,persons_total,850,0.14317033374904775,0.09899440446445183,0.09804707185198311 +national,natural.cps2022-2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.5374150597741382,0.5595407736372762,0.5759967143315385 +national,natural.cps2022-2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.4290314132601668,0.35200836582169426,0.40674062383306964 +national,natural.cps2022-2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.3991972898462411,0.3500836963628263,0.3555046169024228 +national,natural.cps2022-2023-2024.acs100.s0,county,renter,850,0.36551925434580185,0.3011354035453164,0.31997071274398775 +national,natural.cps2022-2023-2024.acs100.s0,national,households,1,0.040387780509507705,0.040387780509507705,0.04038778011146347 +national,natural.cps2022-2023-2024.acs100.s0,national,owner,1,0.047821939017516656,0.047821939017516656,0.045042942663381706 +national,natural.cps2022-2023-2024.acs100.s0,national,persons_0_17,1,0.06299104550567233,0.06299104550567233,0.02109426309341987 +national,natural.cps2022-2023-2024.acs100.s0,national,persons_18_64,1,0.013548765087756631,0.013548765087756631,0.02674863655270408 +national,natural.cps2022-2023-2024.acs100.s0,national,persons_65p,1,0.00051236910987619,0.00051236910987619,0.01854702634614402 +national,natural.cps2022-2023-2024.acs100.s0,national,persons_in_households,1,0.030630701130194362,0.030630701130194362,0.007468807603571669 +national,natural.cps2022-2023-2024.acs100.s0,national,persons_male,1,0.0075086151630289685,0.0075086151630289685,0.030890456469580847 +national,natural.cps2022-2023-2024.acs100.s0,national,persons_total,1,0.005211032965683111,0.005211032965683111,0.017379591291682567 +national,natural.cps2022-2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.5422849392890163,0.5422849392890163,0.6659411721508848 +national,natural.cps2022-2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.12134149010297295,0.12134149010297295,0.13110826309032833 +national,natural.cps2022-2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.22812070393398717,0.22812070393398717,0.2367005671839316 +national,natural.cps2022-2023-2024.acs100.s0,national,renter,1,0.00691349753312386,0.00691349753312386,0.0022442128363368394 +national,natural.cps2022-2023-2024.acs100.s0,state,households,51,0.038318493790818045,0.02820356831038204,0.03881877297157921 +national,natural.cps2022-2023-2024.acs100.s0,state,owner,51,0.04249403628805439,0.043516763829469084,0.04937364843674731 +national,natural.cps2022-2023-2024.acs100.s0,state,persons_0_17,51,0.07042721153114621,0.06840302280161081,0.0512512979358957 +national,natural.cps2022-2023-2024.acs100.s0,state,persons_18_64,51,0.024052687422585945,0.018254565779735065,0.029082605581339526 +national,natural.cps2022-2023-2024.acs100.s0,state,persons_65p,51,0.024896266248447867,0.00819881790644387,0.033742093722682304 +national,natural.cps2022-2023-2024.acs100.s0,state,persons_in_households,51,0.03046584486827954,0.026872215379890964,0.02046149837401532 +national,natural.cps2022-2023-2024.acs100.s0,state,persons_male,51,0.02138893128969123,0.014333843156608185,0.030540574782716583 +national,natural.cps2022-2023-2024.acs100.s0,state,persons_total,51,0.015168681432916812,0.010650933973115529,0.017719590215261614 +national,natural.cps2022-2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.45712535524917564,0.45119982875088616,0.5512094530501028 +national,natural.cps2022-2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.14279060069746713,0.13879167255458336,0.146856471666088 +national,natural.cps2022-2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.23112118107582924,0.20989011222655918,0.23190637634799494 +national,natural.cps2022-2023-2024.acs100.s0,state,renter,51,0.0855461816485221,0.07767980868045872,0.058740079396226365 +national,natural.cps2023-2024.acs100.s0,cd,households,436,0.10106441250592343,0.0691754582259759,0.08277502694406316 +national,natural.cps2023-2024.acs100.s0,cd,owner,436,0.16709611059539048,0.10228078156257464,0.15894818149309695 +national,natural.cps2023-2024.acs100.s0,cd,persons_0_17,436,0.18153964245677331,0.14820195869176417,0.1314240580340637 +national,natural.cps2023-2024.acs100.s0,cd,persons_18_64,436,0.08905840178024187,0.0689832388385194,0.06701928843575958 +national,natural.cps2023-2024.acs100.s0,cd,persons_65p,436,0.19158407862067586,0.14275905132196853,0.15607458611058003 +national,natural.cps2023-2024.acs100.s0,cd,persons_in_households,436,0.08539461913169916,0.06785050364792317,0.0588039890715151 +national,natural.cps2023-2024.acs100.s0,cd,persons_male,436,0.08883066277750679,0.07348470893882525,0.06519931740039178 +national,natural.cps2023-2024.acs100.s0,cd,persons_total,436,0.08009736533901184,0.06012325001506546,0.05778904881748221 +national,natural.cps2023-2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.4811295568261527,0.515580210790958,0.5708461692628187 +national,natural.cps2023-2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3382567440188225,0.2925659682399142,0.31372344832396415 +national,natural.cps2023-2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.30901330189169773,0.278408263956922,0.2819052309567561 +national,natural.cps2023-2024.acs100.s0,cd,renter,436,0.27903238189625335,0.2148945444582656,0.24063252735457533 +national,natural.cps2023-2024.acs100.s0,county,households,850,0.17924155604206465,0.13545377726451135,0.12839005773406914 +national,natural.cps2023-2024.acs100.s0,county,owner,850,0.22157094220528809,0.16299887334000743,0.18183632780875766 +national,natural.cps2023-2024.acs100.s0,county,persons_0_17,850,0.30398011485020576,0.23142604743680217,0.20671475325314057 +national,natural.cps2023-2024.acs100.s0,county,persons_18_64,850,0.19326126769492716,0.14491829740130652,0.13482870982268952 +national,natural.cps2023-2024.acs100.s0,county,persons_65p,850,0.3136897944738122,0.26414511730300844,0.22583543516884713 +national,natural.cps2023-2024.acs100.s0,county,persons_in_households,850,0.1779037098562041,0.12877545164347742,0.11802989076874319 +national,natural.cps2023-2024.acs100.s0,county,persons_male,850,0.1877993443190246,0.14294947443916134,0.12467915689743747 +national,natural.cps2023-2024.acs100.s0,county,persons_total,850,0.17156523092462525,0.12721625418180332,0.1159027429880289 +national,natural.cps2023-2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.5599010887380488,0.577191177332645,0.5805521226553558 +national,natural.cps2023-2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.4516505467791954,0.38434084365920984,0.4183083479274824 +national,natural.cps2023-2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.4245469829358094,0.37832470260263806,0.36442305605289327 +national,natural.cps2023-2024.acs100.s0,county,renter,850,0.39447863434377267,0.3279719625343773,0.3377028256883096 +national,natural.cps2023-2024.acs100.s0,national,households,1,0.04063176100183833,0.04063176100183833,0.04063176077420849 +national,natural.cps2023-2024.acs100.s0,national,owner,1,0.03910054989378656,0.03910054989378656,0.04234516572780774 +national,natural.cps2023-2024.acs100.s0,national,persons_0_17,1,0.06598315358667897,0.06598315358667897,0.027390231881191725 +national,natural.cps2023-2024.acs100.s0,national,persons_18_64,1,0.013844301637839413,0.013844301637839413,0.026805015070435673 +national,natural.cps2023-2024.acs100.s0,national,persons_65p,1,0.0005456921065300877,0.0005456921065300877,0.026233676447537487 +national,natural.cps2023-2024.acs100.s0,national,persons_in_households,1,0.031098893094690636,0.031098893094690636,0.007468807603658995 +national,natural.cps2023-2024.acs100.s0,national,persons_male,1,0.008021747520744997,0.008021747520744997,0.030408793665987435 +national,natural.cps2023-2024.acs100.s0,national,persons_total,1,0.005667677356095154,0.005667677356095154,0.017379591291597395 +national,natural.cps2023-2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.5382698858638026,0.5382698858638026,0.6562268648260742 +national,natural.cps2023-2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.11042450970658219,0.11042450970658219,0.1222749686344348 +national,natural.cps2023-2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.21853041254248845,0.21853041254248845,0.22894074123362246 +national,natural.cps2023-2024.acs100.s0,national,renter,1,0.00760834928444179,0.00760834928444179,0.0025205865935970695 +national,natural.cps2023-2024.acs100.s0,state,households,51,0.03892480418853457,0.033386268817317,0.04016948176038618 +national,natural.cps2023-2024.acs100.s0,state,owner,51,0.037140029606045344,0.03403047399581731,0.0475753262127579 +national,natural.cps2023-2024.acs100.s0,state,persons_0_17,51,0.07138264949357123,0.0640949948730007,0.05483953711216384 +national,natural.cps2023-2024.acs100.s0,state,persons_18_64,51,0.024266579978822797,0.019554560275549325,0.030737259274090486 +national,natural.cps2023-2024.acs100.s0,state,persons_65p,51,0.02363072959238116,0.009289369884753719,0.039588997541004305 +national,natural.cps2023-2024.acs100.s0,state,persons_in_households,51,0.031087925100481917,0.027283123847888717,0.019558544514582797 +national,natural.cps2023-2024.acs100.s0,state,persons_male,51,0.02386522852775628,0.018048906238047505,0.031232583282333474 +national,natural.cps2023-2024.acs100.s0,state,persons_total,51,0.014497218592895347,0.010943259872457428,0.01896484744926104 +national,natural.cps2023-2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.45131152018260395,0.44809849525360973,0.5416227019420785 +national,natural.cps2023-2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.14001723367411703,0.1227372938116644,0.14160292476457131 +national,natural.cps2023-2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.22166945049014553,0.22092739571395786,0.2199685049241719 +national,natural.cps2023-2024.acs100.s0,state,renter,51,0.0759305353335019,0.06560938904505627,0.06435477021533247 +national,natural.cps2024.acs100.s0,cd,households,436,0.13023985075635885,0.09840600792805938,0.09485650794965793 +national,natural.cps2024.acs100.s0,cd,owner,436,0.18989697611617315,0.13405599008291005,0.16382697748832892 +national,natural.cps2024.acs100.s0,cd,persons_0_17,436,0.22870855399480294,0.16639623834731154,0.14777727883399977 +national,natural.cps2024.acs100.s0,cd,persons_18_64,436,0.12959972647317256,0.10667930273548616,0.08294160725513632 +national,natural.cps2024.acs100.s0,cd,persons_65p,436,0.23050962583229342,0.1813783408928991,0.18024911975409463 +national,natural.cps2024.acs100.s0,cd,persons_in_households,436,0.1226329072792917,0.10393474531785367,0.06904594523875002 +national,natural.cps2024.acs100.s0,cd,persons_male,436,0.12492491585447374,0.10684373811238065,0.07885285265254408 +national,natural.cps2024.acs100.s0,cd,persons_total,436,0.11787076362377015,0.09841640018629097,0.06848544826429406 +national,natural.cps2024.acs100.s0,cd,real_estate_taxes_aggregate,436,0.5092146861209821,0.5565789508978605,0.5633972274948349 +national,natural.cps2024.acs100.s0,cd,rent_contract_annual_aggregate,436,0.3666762653904068,0.30144804687329496,0.3259537712970768 +national,natural.cps2024.acs100.s0,cd,rent_gross_annual_aggregate,436,0.3362638184767631,0.30321040297631235,0.28928162032719945 +national,natural.cps2024.acs100.s0,cd,renter,436,0.30945864990487937,0.24322146856614982,0.26236095878741444 +national,natural.cps2024.acs100.s0,county,households,850,0.2272709288486537,0.16357191911402108,0.15704041939673816 +national,natural.cps2024.acs100.s0,county,owner,850,0.28372731793828543,0.22618733733591134,0.2061870685621213 +national,natural.cps2024.acs100.s0,county,persons_0_17,850,0.38633831952390585,0.3232762081974058,0.2581973448995865 +national,natural.cps2024.acs100.s0,county,persons_18_64,850,0.25473469210615435,0.179983060786002,0.17287164263315008 +national,natural.cps2024.acs100.s0,county,persons_65p,850,0.3857653634431159,0.30888211494789,0.2717549856453685 +national,natural.cps2024.acs100.s0,county,persons_in_households,850,0.23420014951964926,0.16423304659580204,0.14800136876415262 +national,natural.cps2024.acs100.s0,county,persons_male,850,0.2488649386510056,0.1830849051416803,0.15951010376184974 +national,natural.cps2024.acs100.s0,county,persons_total,850,0.22950581296867262,0.16418984217847665,0.1444797641695114 +national,natural.cps2024.acs100.s0,county,real_estate_taxes_aggregate,850,0.6092951915819063,0.6344647408350037,0.5894351449274059 +national,natural.cps2024.acs100.s0,county,rent_contract_annual_aggregate,850,0.485318467419899,0.4261064953388414,0.44581404382435347 +national,natural.cps2024.acs100.s0,county,rent_gross_annual_aggregate,850,0.4594888753297135,0.43060638980878196,0.4024978514520762 +national,natural.cps2024.acs100.s0,county,renter,850,0.4437223040625908,0.3857529881829422,0.3615559908221512 +national,natural.cps2024.acs100.s0,national,households,1,0.042503266320651725,0.042503266320651725,0.042503266232261264 +national,natural.cps2024.acs100.s0,national,owner,1,0.03207377080456342,0.03207377080456342,0.040108595495469086 +national,natural.cps2024.acs100.s0,national,persons_0_17,1,0.060973799161126926,0.060973799161126926,0.03288093308224219 +national,natural.cps2024.acs100.s0,national,persons_18_64,1,0.01194111349940154,0.01194111349940154,0.02864364719867025 +national,natural.cps2024.acs100.s0,national,persons_65p,1,0.0004552964102374369,0.0004552964102374369,0.03895423703666744 +national,natural.cps2024.acs100.s0,national,persons_in_households,1,0.031195791102209512,0.031195791102209512,0.007468807603635457 +national,natural.cps2024.acs100.s0,national,persons_male,1,0.012817210793962822,0.012817210793962822,0.030150509780975852 +national,natural.cps2024.acs100.s0,national,persons_total,1,0.005762185453053213,0.005762185453053213,0.017379591291620353 +national,natural.cps2024.acs100.s0,national,real_estate_taxes_aggregate,1,0.5396339018555558,0.5396339018555558,0.639541193265433 +national,natural.cps2024.acs100.s0,national,rent_contract_annual_aggregate,1,0.08548604101616518,0.08548604101616518,0.09886944608012654 +national,natural.cps2024.acs100.s0,national,rent_gross_annual_aggregate,1,0.19662259802649487,0.19662259802649487,0.2083795811585964 +national,natural.cps2024.acs100.s0,national,renter,1,0.027564154707477938,0.027564154707477938,0.012242781550831461 +national,natural.cps2024.acs100.s0,state,households,51,0.04066451396715349,0.03319829184374662,0.04113183240017889 +national,natural.cps2024.acs100.s0,state,owner,51,0.03901313955152319,0.03533230409476756,0.04737445437547842 +national,natural.cps2024.acs100.s0,state,persons_0_17,51,0.06931114951412531,0.07063671170534119,0.05938231280038797 +national,natural.cps2024.acs100.s0,state,persons_18_64,51,0.02444708532830795,0.018091443919835616,0.036220431440798125 +national,natural.cps2024.acs100.s0,state,persons_65p,51,0.027182267685173175,0.0062413498194037334,0.05328853265490045 +national,natural.cps2024.acs100.s0,state,persons_in_households,51,0.03145159495528121,0.02801499840026266,0.019861435559825478 +national,natural.cps2024.acs100.s0,state,persons_male,51,0.02940261752553699,0.02895042084661409,0.030691014864309484 +national,natural.cps2024.acs100.s0,state,persons_total,51,0.015848376085106444,0.011930523023124053,0.018409030751607942 +national,natural.cps2024.acs100.s0,state,real_estate_taxes_aggregate,51,0.45083465513064636,0.4354481587917564,0.5260015221555046 +national,natural.cps2024.acs100.s0,state,rent_contract_annual_aggregate,51,0.13031814607011133,0.12749188878570464,0.1275977982147394 +national,natural.cps2024.acs100.s0,state,rent_gross_annual_aggregate,51,0.20338576184216023,0.21000953309297338,0.20252115687966973 +national,natural.cps2024.acs100.s0,state,renter,51,0.0836061774399151,0.07037375308913235,0.0715128987627851 diff --git a/experiments/us-support-mix-bakeoff-20260930/acs_truth.json b/experiments/us-support-mix-bakeoff-20260930/acs_truth.json new file mode 100644 index 0000000000..9d34511f96 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/acs_truth.json @@ -0,0 +1,71 @@ +{ + "cells": { + "households": [ + "B25003_E001" + ], + "owner": [ + "B25003_E002" + ], + "persons_0_17": [ + "B01001_E003", + "B01001_E004", + "B01001_E005", + "B01001_E006", + "B01001_E027", + "B01001_E028", + "B01001_E029", + "B01001_E030" + ], + "persons_65p": [ + "B01001_E020", + "B01001_E021", + "B01001_E022", + "B01001_E023", + "B01001_E024", + "B01001_E025", + "B01001_E044", + "B01001_E045", + "B01001_E046", + "B01001_E047", + "B01001_E048", + "B01001_E049" + ], + "persons_in_households": [ + "B25008_E001" + ], + "persons_male": [ + "B01001_E002" + ], + "persons_total": [ + "B01003_E001" + ], + "real_estate_taxes_aggregate": [ + "B25090_E001" + ], + "rent_contract_monthly_aggregate": [ + "B25060_E001" + ], + "rent_gross_monthly_aggregate": [ + "B25065_E001" + ], + "renter": [ + "B25003_E003" + ] + }, + "files_sha256": { + "acsdt1y2024-b01001.dat": "84db6a3a8eda54d882b9a5e6a5bb48864fcbb573a262127ed026ae5fb6d6953e", + "acsdt1y2024-b01003.dat": "3f04d8c2ad77dab54085f014b795c33c19463eede4539e110247bb329d1025fd", + "acsdt1y2024-b25003.dat": "944b9d7aa807cc32c50a50b37af0afac50db914f02dc68bafa628e4227a496ad", + "acsdt1y2024-b25008.dat": "6e8e40d7679c47b90df6504c449bde6b28c4384c329b68af0dd436c6943418ca", + "acsdt1y2024-b25060.dat": "aa6d70941599febec9c35e60d8692df6bbc2c01146d2d18d912d9bd24dbfd457", + "acsdt1y2024-b25065.dat": "e17f8ebae8941b0f7466d0e3cdad5cca6425b000ab88d001ddac192bce540f0e", + "acsdt1y2024-b25090.dat": "60f95c0745c34d9bd9d4dfca86d09947f463ef61c76d0e525b0b4b80a018810b" + }, + "rows_by_level": { + "cd": 5232, + "county": 10200, + "national": 12, + "state": 612 + }, + "source": "ACS 2024 1-year table-based summary file (Census), https://www2.census.gov/programs-surveys/acs/summary_file/2024/table-based-SF/" +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/arms.csv b/experiments/us-support-mix-bakeoff-20260930/arms.csv new file mode 100644 index 0000000000..7022a550bc --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/arms.csv @@ -0,0 +1,61 @@ +arm,product,budget,cps_years,acs_fill_share,seed,acs,clones,cps,rows_acs,rows_cps_physical,rows_total,distinct_households,ess_cd_distinct_median,ess_cd_distinct_p10,ess_distinct_households,ess_distinct_households_initial,ess_rows,ess_rows_initial,ess_source_records,train_loss_final,train_targets,runtime_epochs,runtime_peak_rss_gb,runtime_solve_s,runtime_threads,runtime_wall_s,report_report.spm_poor_children,report_report.spm_poor_persons,report_spm_child_rate,report_spm_rate +b1200k.cps0.acs100.s0,local,1200000,0,1.0,0,1200000,0,0,1200000,0,1200000,1200000,636.5990995208797,459.6782619090842,272607.14156716655,637875.3901337923,272607.14156716655,637875.3901337923,272607.14156716655,0.0673326700925827,28117,1500,13.81,1863.2,4,1886.3,9706792.913847022,43565989.28294736,0.12262800619806784,0.1296146310854488 +b1200k.cps2022-2023-2024.acs000.s0,local,1200000,3,0.0,0,0,1031148,168852,0,2508197,2508197,130294,748.4166677718274,546.7182397113581,54291.8721808348,86558.24850894252,623489.3470239063,1763224.2814842558,434099.0452579522,0.048716843128204346,28120,1500,27.87,3290.7,4,3332.2,11988965.648844972,47089390.14461281,0.15666657007852755,0.1398509828547955 +b1200k.cps2022-2023-2024.acs100.s0,local,1200000,3,1.0,0,1031148,0,168852,1031148,352932,1384080,1161442,755.6606664571596,564.4997279533579,276474.1544207648,634911.9042601348,324232.6203824569,701288.0088424678,297379.04862366506,0.06211160123348236,28120,1500,15.86,2143.4,4,2173.3,10270918.428785808,44123094.02452402,0.13101462183085877,0.13108506908279016 +b1200k.cps2023-2024.acs000.s0,local,1200000,2,0.0,0,0,1087987,112013,0,2512844,2512844,92547,627.771262112879,427.73007308594583,38732.49652443986,62206.50135809787,636276.3483267163,1762923.5167594533,441457.4362367083,0.050769366323947906,28120,1500,17.97,12600.2,6,12789.2,11759675.23438855,46790443.02373776,0.1535449563501897,0.13889392986163127 +b1200k.cps2023-2024.acs100.s0,local,1200000,2,1.0,0,1087987,0,112013,1087987,234556,1322543,1180534,723.5489724300639,531.0370034191171,278972.2214834125,640683.4177700127,309737.8669671637,678604.2884228699,290788.2528424138,0.06619999557733536,28120,1500,15.18,2220.5,4,2252.5,10119732.913427562,43951757.3943063,0.1286390438138022,0.13061483508748364 +b1200k.cps2024.acs000.s0,local,1200000,1,0.0,0,0,1144238,55762,0,2517604,2517604,55762,452.07332576470174,290.42941934839746,23842.90159991112,40937.95655924153,655826.3274084858,1762585.2056385933,452019.63633752876,0.05482560396194458,28117,1500,20.77,8391.4,6,171.0,11640442.073896125,47028176.19078167,0.15159195490070432,0.1396951194421348 +b1200k.cps2024.acs100.s0,local,1200000,1,1.0,0,1144238,0,55762,1144238,116990,1261228,1200000,683.0307460946972,493.1350930635777,281840.1947789175,646750.5618705589,291688.996097182,657982.5655365874,281840.1947789174,0.07089728862047195,28120,1500,14.55,2318.2,4,2346.2,9932355.443103073,43795380.26192823,0.1257795622778522,0.13021968662598798 +b300k.cps0.acs100.s0,local,300000,0,1.0,0,300000,0,0,300000,0,300000,300000,208.76683350509938,152.5010010892675,88739.42584862383,159507.19151006124,88739.42584862383,159507.19151006124,88739.42584862383,0.09662018716335297,28111,1500,6.01,1131.6,4,1151.0,9994140.472411707,45838969.392857686,0.12793070598915623,0.13651280143787808 +b300k.cps2022-2023-2024.acs000.s0,local,300000,3,0.0,0,0,131148,168852,0,627089,627089,130294,293.1242316066317,234.0589912011114,53840.515783674804,86558.24850894253,152426.09046800868,406235.7429873301,105855.91877918108,0.05896691977977753,28120,1500,8.02,1258.7,6,50.4,11728490.304637432,47140068.62695289,0.15267437847183218,0.1395504285318954 +b300k.cps2022-2023-2024.acs100.s0,local,300000,3,1.0,0,131148,0,168852,131148,352932,484080,261442,267.98911404640273,199.8776713284787,83424.32729710112,156488.83620453524,118261.9895609146,249684.87617608104,96319.21710963502,0.054382581263780594,28120,1500,7.62,2123.3,4,2171.7,11010424.81658316,45877035.76649492,0.14210509344328076,0.136025536219776 +b300k.cps2022-2023-2024.acs100.s1,local,300000,3,1.0,1,131148,0,168852,131148,352932,484080,261442,270.8175557388307,207.4290743654512,84651.23842388003,156197.67624045914,120786.86390138796,248944.47269304335,97885.88459997045,0.05536476522684097,28120,1500,7.71,748.4,4,764.3,11251992.610887837,46439322.54574382,0.14546151210114885,0.1377226526604065 +b300k.cps2022-2023-2024.acs100.s2,local,300000,3,1.0,2,131148,0,168852,131148,352932,484080,261442,266.85349799871017,198.15991625881577,83676.01853855501,156281.15768732992,119274.72231531299,249156.59368635973,96718.89670479513,0.05362273007631302,28120,1500,7.73,1147.5,4,1173.5,11318567.330588162,46255362.98305111,0.1463442417427448,0.13725096388199526 +b300k.cps2023-2024.acs000.s0,local,300000,2,0.0,0,0,187987,112013,0,628217,628217,92547,288.65011252571776,236.55103167715947,39843.02064573599,62206.501358097885,164053.0018089385,425920.40023749234,112941.6994813622,0.06245909258723259,28120,1500,7.77,1418.3,6,62.9,11696127.455528975,47240268.85376501,0.15196137143398145,0.13985880127297973 +b300k.cps2023-2024.acs100.s0,local,300000,2,1.0,0,187987,0,112013,187987,234556,422543,280534,258.28781500238244,188.41344471630833,85272.64611894479,162363.95916515277,111345.61534092923,209930.75528175358,93972.5567800582,0.0621991790831089,28120,1500,7.24,1701.6,4,1742.3,10819954.753928734,45818397.78469345,0.13921452614647642,0.13595159977380228 +b300k.cps2024.acs000.s0,local,300000,1,0.0,0,0,244238,55762,0,629368,629368,55762,272.12073195851656,210.86143249640017,25941.420332837297,40937.956559241524,180320.44405138228,437374.19822877704,121687.38177596574,0.06928373873233795,28117,1500,8.14,1381.5,6,49.9,11658871.663017869,47383894.11827624,0.150164421240316,0.1401801960058113 +b300k.cps2024.acs100.s0,local,300000,1,1.0,0,244238,0,55762,244238,116990,361228,300000,247.76764484201772,178.74622000515888,93725.70814697331,168415.93548620763,104383.5510354031,181311.31435542594,93725.70814697334,0.07791590690612793,28120,1500,2.36,2042.0,4,2192.1,10475134.279326146,45962042.86457038,0.1336279078690531,0.13643628189887907 +b300k.cps2024.acs100.s1,local,300000,1,1.0,1,244238,0,55762,244238,116990,361228,300000,250.67828327126307,182.75149307418616,94328.32142441272,168324.0567321345,105202.23781161537,181204.8313243854,94328.32142441267,0.07790804654359818,28120,1500,6.68,655.0,4,666.3,10887165.394025274,46695876.58953652,0.13899435387194597,0.13871900849756835 +b300k.cps2024.acs100.s2,local,300000,1,1.0,2,244238,0,55762,244238,116990,361228,300000,254.46022594661866,179.49914879266868,96019.8351263429,168066.56509829275,107165.45812145126,180906.45837064926,96019.8351263429,0.07939135283231735,28118,1500,6.67,556.7,4,567.3,10752683.877311276,46458386.26648162,0.1371049151150891,0.1378664031982895 +b600k.cps0.acs100.s0,local,600000,0,1.0,0,600000,0,0,600000,0,600000,600000,364.9598893722962,261.3860070074219,155143.02481544143,319190.3362905997,155143.02481544143,319190.3362905997,155143.02481544143,0.07882141321897507,28117,1500,8.3,1078.2,4,1094.6,10009604.216547772,45125376.066546336,0.12705498826495873,0.13430688708821398 +b600k.cps2022-2023-2024.acs000.s0,local,600000,3,0.0,0,0,431148,168852,0,1254039,1254039,130294,500.7993519200179,395.0783737978023,54304.648500122195,86558.24850894253,310443.028954894,865150.5896769182,215764.97453751817,0.05234654247760773,28120,1500,8.85,2287.2,6,117.4,11912006.84935975,47202039.79063299,0.1554219572278197,0.13999598485576026 +b600k.cps2022-2023-2024.acs050.s0,local,600000,3,0.5,0,215574,215574,168852,215574,803510,1019084,345868,462.3112487701133,351.84198407069437,91100.40128899252,170471.51209940494,224994.0707954942,533833.497843238,182205.06479474533,0.047680094838142395,28120,1500,13.13,1731.8,4,1756.4,11369900.929462682,45904557.96444516,0.14713191895172575,0.13634912759357135 +b600k.cps2022-2023-2024.acs100.s0,local,600000,3,1.0,0,431148,0,168852,431148,352932,784080,561442,448.63763079873604,329.9962314886902,150595.0505577627,315955.71431784425,194306.5847555616,389301.29107731656,168316.10695033797,0.05774381011724472,28120,1500,10.46,1478.4,4,1499.8,10694379.845899804,45186803.03944273,0.13732852485974276,0.13419978680180616 +b600k.cps2023-2024.acs000.s0,local,600000,2,0.0,0,0,487987,112013,0,1256347,1256347,92547,452.2526460360601,345.8264044377955,39229.840755440826,62206.501358097914,322095.43995491986,876506.2056315144,222908.5410778321,0.055385854095220566,28120,1500,13.67,2367.6,6,71.9,11769767.391806126,47163669.81806761,0.15344127483400752,0.13986043582834667 +b600k.cps2023-2024.acs100.s0,local,600000,2,1.0,0,487987,0,112013,487987,234556,722543,580534,432.5169083712294,320.2611921732755,155524.49115215163,322031.188009703,185081.49131379533,362791.050186207,166213.91257173623,0.0653921589255333,28120,1500,9.91,1561.6,4,1590.8,10497679.488581907,44969203.40838291,0.13413985166711637,0.1335468745502098 +b600k.cps2024.acs000.s0,local,600000,1,0.0,0,0,544238,55762,0,1258830,1258830,55762,373.88410477679975,263.72638535233403,24855.053519465826,40937.956559241546,343332.58508595044,880334.3437453978,234488.23139657328,0.060912467539310455,28117,1500,8.07,2523.8,6,98.2,11614913.053483784,47234704.62444273,0.15061274517588585,0.1400389874165899 +b600k.cps2024.acs050.s0,local,600000,1,0.5,0,272119,272119,55762,272119,687926,960045,327881,406.59225511494594,318.3977985048655,55461.583853714335,114749.21018201848,221123.9520490093,489715.30208010477,183622.0879160021,0.051492102444171906,28120,1500,10.57,1785.4,4,1813.3,11054844.387464229,45850319.01790954,0.14283335729350186,0.13626589274397086 +b600k.cps2024.acs100.s0,local,600000,1,1.0,0,544238,0,55762,544238,116990,661228,600000,406.1440568158041,294.3440927223149,161804.4264631515,327923.64802453225,172362.61011996653,339683.81864361133,161804.42646315147,0.07427364587783813,28120,1500,8.08,1789.4,4,1817.9,10317732.631550636,45084822.43033208,0.13127018767687001,0.13403165416587537 +natural.cps2022-2023-2024.acs100.s0,local,0,3,1.0,0,0,0,168852,0,352932,352932,130294,190.7662588538194,155.42287055966597,52073.705552568616,86558.24850894253,94025.73865812777,248529.95030437905,64952.22984653852,0.06600123643875122,28120,1500,4.71,774.9,6,34.5,11418350.796070099,46569084.67845273,0.14802659835552862,0.13765586462752047 +natural.cps2023-2024.acs100.s0,local,0,2,1.0,0,0,0,112013,0,234556,234556,92547,141.04816128725298,114.23123748491122,38975.87635266753,62206.501358097885,68731.28222973633,164873.26090208263,46551.89785019205,0.08072442561388016,28103,1500,5.16,699.6,6,18.5,11429484.050330639,46866444.97094107,0.1470708857488013,0.13833162882321093 +natural.cps2024.acs100.s0,local,0,1,1.0,0,0,0,55762,0,116990,116990,55762,84.95913408732991,67.1108572841234,26267.168734799732,40937.95655924153,40526.9309224063,81941.59918861713,26267.168734799732,0.11376915127038956,27984,1500,3.25,365.6,6,67.5,11688267.860393524,47292341.423835754,0.147717267270404,0.139334032941409 +b1200k.cps0.acs100.s0,national,1200000,0,1.0,0,1200000,0,0,1200000,0,1200000,1200000,543.912125861377,394.5499851383779,233507.8983854827,637875.3901337923,233507.8983854827,637875.3901337923,233507.8983854827,0.03640918433666229,4825,1500,10.01,1180.4,4,1202.2,9591966.75317985,41048256.57024999,0.12247718332286353,0.12096273503666487 +b1200k.cps2022-2023-2024.acs000.s0,national,1200000,3,0.0,0,0,1031148,168852,0,2508197,2508197,130294,683.0389799169452,523.1623581302406,45160.28249329324,86558.24850894252,573925.0839945227,1763224.2814842558,395171.5229703896,0.022894863039255142,4828,1500,15.04,6435.3,6,252.2,11355374.259827435,43616010.283807576,0.1465062564067782,0.12760347727080348 +b1200k.cps2022-2023-2024.acs100.s0,national,1200000,3,1.0,0,1031148,0,168852,1031148,352932,1384080,1161442,634.7976658792697,486.8391155777681,222919.7725749223,634911.9042601348,275179.2243128017,701288.0088424678,245283.75333559135,0.04171165078878403,4828,1500,11.28,1434.0,4,1464.8,10313150.380732972,41392224.84187276,0.13183373401652163,0.12156959046638176 +b1200k.cps2023-2024.acs000.s0,national,1200000,2,0.0,0,0,1087987,112013,0,2512844,2512844,92547,555.4792248827257,415.19865534973974,31904.85055324262,62206.50135809787,580498.744451579,1762923.5167594533,400010.2992546738,0.024002769961953163,4828,1500,12.98,3054.9,6,162.0,11382479.562117398,43869199.15454179,0.14649550773967193,0.1283199041914545 +b1200k.cps2023-2024.acs100.s0,national,1200000,2,1.0,0,1087987,0,112013,1087987,234556,1322543,1180534,609.1911053311032,465.1256245917265,230272.02491931393,640683.4177700127,264712.2175271768,678604.2884228699,243196.91667149164,0.0478442944586277,4828,1500,10.96,1377.3,4,1406.4,10113787.189620176,41133426.019427866,0.1292435570215891,0.12094641834021345 +b1200k.cps2024.acs000.s0,national,1200000,1,0.0,0,0,1144238,55762,0,2517604,2517604,55762,389.9251916514208,271.21734318759843,18675.74777381174,40937.95655924153,585223.1069359366,1762585.2056385933,401730.2326073889,0.026821570470929146,4825,1500,14.43,3011.8,6,139.6,11369278.149812996,44416300.947438374,0.146897055231995,0.12986795044057076 +b1200k.cps2024.acs100.s0,national,1200000,1,1.0,0,1144238,0,55762,1144238,116990,1261228,1200000,579.9641480581517,426.03935885991893,239079.8688512916,646750.5618705589,250350.08231436514,657982.5655365874,239079.86885129148,0.05501589924097061,4828,1500,10.55,1437.8,4,1461.2,9896746.1838122,41104424.76558627,0.12642986740365167,0.12098644519345499 +b300k.cps0.acs100.s0,national,300000,0,1.0,0,300000,0,0,300000,0,300000,300000,143.7717104162282,101.51991639123493,60492.10872186916,159507.19151006124,60492.10872186916,159507.19151006124,60492.10872186916,0.040227945894002914,4825,1500,5.01,1087.3,4,1114.9,9641597.450175056,41796155.872448415,0.12305950584913734,0.12306176471961369 +b300k.cps2022-2023-2024.acs000.s0,national,300000,3,0.0,0,0,131148,168852,0,627089,627089,130294,251.6042025696189,212.24511310208516,44983.64315566284,86558.24850894253,131797.69918104677,406235.7429873301,90821.32297287899,0.023094959557056427,4828,1500,5.9,923.5,6,42.8,11374899.039060831,43807871.84648985,0.14672511505628388,0.128145449001727 +b300k.cps2022-2023-2024.acs100.s0,national,300000,3,1.0,0,131148,0,168852,131148,352932,484080,261442,215.23450369169024,159.42105617247114,69064.95015142651,156488.83620453524,95019.59244673677,249684.87617608104,78646.03072777389,0.02002881094813347,4828,1500,6.2,1295.1,4,1336.5,10584715.73811039,41685376.53160183,0.1358619284794174,0.12216750220843431 +b300k.cps2022-2023-2024.acs100.s1,national,300000,3,1.0,1,131148,0,168852,131148,352932,484080,261442,218.29003440104339,162.42046647139554,69333.01365841262,156197.67624045914,95821.48676280671,248944.47269304335,79062.22527509344,0.02108600363135338,4828,1500,6.2,612.2,4,624.9,11021438.86652263,42455789.65204207,0.14160616590720937,0.1244076265597218 +b300k.cps2022-2023-2024.acs100.s2,national,300000,3,1.0,2,131148,0,168852,131148,352932,484080,261442,216.55363338989582,166.09240250416968,69661.27215264387,156281.15768732992,96148.07779713064,249156.59368635973,79390.61168351417,0.020376406610012054,4828,1500,5.92,585.4,4,600.5,10861576.97654386,42038924.56430028,0.14008589708860206,0.12330797192083484 +b300k.cps2023-2024.acs000.s0,national,300000,2,0.0,0,0,187987,112013,0,628217,628217,92547,246.6306178320836,202.3404539529643,31712.95601798473,62206.501358097885,139424.29536662524,425920.40023749234,96140.03694340873,0.024160226806998253,4828,1500,5.65,943.7,6,56.0,11432612.989863634,44080022.004617095,0.14709869508613466,0.1288981482812852 +b300k.cps2023-2024.acs100.s0,national,300000,2,1.0,0,187987,0,112013,187987,234556,422543,280534,196.92729743904806,140.65406142695804,65907.76439890644,162363.95916515277,84145.60518735563,209930.75528175358,71894.01417896678,0.022902067750692368,4828,1500,5.83,614.0,4,635.7,10581508.900618356,41651178.46120613,0.13537529690507638,0.12209002420026782 +b300k.cps2024.acs000.s0,national,300000,1,0.0,0,0,244238,55762,0,629368,629368,55762,219.88090668456755,169.45317852319738,18566.939722103863,40937.956559241524,144526.3683928753,437374.19822877704,99170.14517170061,0.02702220343053341,4825,1500,6.19,906.6,6,43.2,11388008.222690105,44598437.878023386,0.14715074007796508,0.13038711883029216 +b300k.cps2024.acs100.s0,national,300000,1,1.0,0,244238,0,55762,244238,116990,361228,300000,171.18927088274563,120.72213545828625,63296.633070639335,168415.93548620763,72515.77093181499,181311.31435542594,63296.63307063933,0.0373963788151741,4828,1500,1.41,802.3,4,1030.1,10294694.07570061,41673720.0904639,0.13138742782002952,0.12218612824893674 +b300k.cps2024.acs100.s1,national,300000,1,1.0,1,244238,0,55762,244238,116990,361228,300000,170.33106956800424,126.28911015883793,63661.665857208754,168324.0567321345,72997.50108399754,181204.8313243854,63661.665857208776,0.03637304902076721,4828,1500,5.48,446.1,4,457.7,10461103.222164685,42055014.77905263,0.13405258593041433,0.12348572402303655 +b300k.cps2024.acs100.s2,national,300000,1,1.0,2,244238,0,55762,244238,116990,361228,300000,173.70731044745685,129.131949389442,65310.50293694685,168066.56509829275,75001.11849491969,180906.45837064926,65310.50293694685,0.036883339285850525,4828,1500,5.36,412.3,4,422.8,10375724.657162812,42051714.29241819,0.13290495142731462,0.12331530934208841 +b600k.cps0.acs100.s0,national,600000,0,1.0,0,600000,0,0,600000,0,600000,600000,275.2207044872443,200.5672447286007,119288.30412767422,319190.3362905997,119288.30412767422,319190.3362905997,119288.30412767422,0.03836475685238838,4825,1500,6.55,856.6,4,870.6,9725483.486029487,41574001.55281273,0.12417225908539854,0.12247343785129945 +b600k.cps2022-2023-2024.acs000.s0,national,600000,3,0.0,0,0,431148,168852,0,1254039,1254039,130294,454.7753961817672,365.9812050151028,45050.38874639817,86558.24850894253,280281.331022451,865150.5896769182,193068.26427151615,0.022988269105553627,4828,1500,8.44,1486.9,6,101.0,11371756.135731876,43750251.109125644,0.14667396210625794,0.12798974699289783 +b600k.cps2022-2023-2024.acs050.s0,national,600000,3,0.5,0,215574,215574,168852,215574,803510,1019084,345868,397.18834157306765,317.194185879134,77830.18085078364,170471.51209940494,193136.0566511478,533833.497843238,157550.8032433334,0.019354643300175667,4828,1500,9.32,1204.5,4,1228.1,10818248.952591147,42031960.58418137,0.1390709414567029,0.1231790923431293 +b600k.cps2022-2023-2024.acs100.s0,national,600000,3,1.0,0,431148,0,168852,431148,352932,784080,561442,343.98726405602747,264.11520392021356,113040.62619633827,315955.71431784425,151507.81294054587,389301.29107731656,128327.01916547072,0.023899151012301445,4828,1500,7.93,996.9,4,1024.0,10726110.603100806,42260022.086715564,0.1373884972456171,0.12397400507814195 +b600k.cps2023-2024.acs000.s0,national,600000,2,0.0,0,0,487987,112013,0,1256347,1256347,92547,407.432608967661,318.0259011306876,31780.55376763681,62206.501358097914,287428.0976136814,876506.2056315144,198151.41973040573,0.024079127237200737,4828,1500,9.43,1609.5,6,59.0,11412792.855736494,43997041.19816533,0.14684513849505035,0.12867326104459959 +b600k.cps2023-2024.acs100.s0,national,600000,2,1.0,0,487987,0,112013,487987,234556,722543,580534,324.10843024060046,251.381966421416,114433.20966057874,322031.188009703,142440.39644767783,362791.050186207,124304.35082513398,0.0358051136136055,4828,1500,7.49,1327.1,4,1354.9,10440162.816235783,41550040.864334404,0.13339031800201104,0.12193002120303904 +b600k.cps2024.acs000.s0,national,600000,1,0.0,0,0,544238,55762,0,1258830,1258830,55762,310.47344920072624,225.91142117354306,18612.508981182837,40937.956559241546,291487.9745290404,880334.3437453978,200108.9125813431,0.026919201016426086,4825,1500,7.47,1621.4,6,85.3,11372131.305653334,44538257.58970815,0.1469275383118905,0.13021938841996092 +b600k.cps2024.acs050.s0,national,600000,1,0.5,0,272119,272119,55762,272119,687926,960045,327881,343.8278869112812,268.51730477671015,45347.92882155529,114749.21018201848,184474.2557012649,489715.30208010477,155148.95997585973,0.021330222487449646,4828,1500,9.15,1195.0,4,1224.6,10719044.044821162,42154177.302658916,0.1377625434927752,0.12352896615205017 +b600k.cps2024.acs100.s0,national,600000,1,1.0,0,544238,0,55762,544238,116990,661228,600000,308.4210871605093,227.44736055047443,121891.03572378987,327923.64802453225,132440.09677401997,339683.81864361133,121891.03572378986,0.04838469624519348,4828,1500,7.0,1435.0,4,1457.6,10107732.423939351,41379590.19807629,0.12916048039766112,0.12163801582352916 +natural.cps2022-2023-2024.acs100.s0,national,0,3,1.0,0,0,0,168852,0,352932,352932,130294,162.07307651019124,135.8825931190194,44942.90129089897,86558.24850894253,80524.24306066195,248529.95030437905,55412.73795665963,0.02311604470014572,4828,1500,3.98,494.9,6,30.9,11386375.854607224,43843039.51912677,0.14687699979485672,0.1282397736539901 +natural.cps2023-2024.acs100.s0,national,0,2,1.0,0,0,0,112013,0,234556,234556,92547,110.2017029609713,90.97968053735669,31671.325578832886,62206.501358097885,53851.125087605615,164873.26090208263,37114.08063691554,0.02424626424908638,4828,1500,4.56,461.8,6,16.7,11443507.481101513,44138225.16565478,0.1471996237820945,0.12904456215569654 +natural.cps2024.acs100.s0,national,0,1,1.0,0,0,0,55762,0,116990,116990,55762,56.46558618528475,44.74623298966674,18525.796531333322,40937.95655924153,27014.978824456142,81941.59918861713,18525.796531333322,0.027136798948049545,4825,1500,3.36,268.8,6,64.2,11400368.045695305,44687541.00171065,0.147337092895218,0.13063829061507248 diff --git a/experiments/us-support-mix-bakeoff-20260930/compile.json b/experiments/us-support-mix-bakeoff-20260930/compile.json new file mode 100644 index 0000000000..7a5e756b1e --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/compile.json @@ -0,0 +1,57 @@ +{ + "dimension_counts": { + "acs_native/demographics_pep/national": 18, + "acs_native/demographics_pep/state": 918, + "cps_native/income_components/cd": 8900, + "cps_native/income_components/national": 102, + "cps_native/income_components/state": 3054, + "cps_native/program_receipt/national": 17, + "cps_native/program_receipt/state": 467, + "cps_native/tax_items/cd": 15440, + "cps_native/tax_items/national": 362, + "cps_native/tax_items/state": 3563, + "other/wealth/national": 1 + }, + "excluded": { + "excluded:reform_simulation": 11 + }, + "feed": "/Users/maxghenis/PolicyEngine/_buildh-runtime/inputs/consumer_facts_us_c5e5bf8.jsonl", + "feed_sha256": "b85437390021777e746f507c5890305496baf5fc7f2c78ba08ddb090f4839801", + "medicaid_substitutions": 1, + "n_concepts": 419, + "n_report_concepts": 2, + "n_specs": 32842, + "national_state_surface": { + "calibrated_targets": 5694, + "compiled_targets": 32842, + "dropped_congressional_district_targets": 27148, + "mode": "national_state" + }, + "notes": {}, + "peak_rss_gb": 3.76, + "registry_version": "a0698bc97ff9", + "roles": { + "holdout": 3470, + "sealed": 1661, + "train": 27711 + }, + "roles_by_level": { + "cd": { + "holdout": 2647, + "sealed": 1242, + "train": 20451 + }, + "national": { + "holdout": 36, + "sealed": 24, + "train": 440 + }, + "state": { + "holdout": 787, + "sealed": 395, + "train": 6820 + } + }, + "split_note": "Mirrors the unmerged us-target-roles-holdout split (salts, \\x1f hash, group keys) without its pins; see support_mix.py.", + "wall_s": 22.6 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/diffcheck.json b/experiments/us-support-mix-bakeoff-20260930/diffcheck.json new file mode 100644 index 0000000000..dc5463c363 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/diffcheck.json @@ -0,0 +1,43 @@ +{ + "peak_rss_gb": 7.76, + "results": { + "acs": { + "households": 4000, + "max_scaled_abs_diff": 0.0, + "per_family_level": { + "census_population/state": 0.0, + "cms_aca/state": 0.0, + "cms_medicaid/state": 0.0, + "hhs_acf_tanf/state": 0.0, + "irs_soi/cd": 0.0, + "irs_soi/state": 0.0, + "ssa/state": 0.0, + "state_income_tax/state": 0.0, + "usda_snap/state": 0.0 + }, + "specs_checked": 349, + "specs_skipped": 0 + }, + "cps": { + "households": 4000, + "logged_at": "2026-09-28 23:41:21", + "max_scaled_abs_diff": 0.0, + "per_family_level": { + "census_population/state": 0.0, + "cms_aca/state": 0.0, + "cms_medicaid/state": 0.0, + "hhs_acf_tanf/state": 0.0, + "irs_soi/cd": 0.0, + "irs_soi/state": 0.0, + "ssa/state": 0.0, + "state_income_tax/state": 0.0, + "usda_snap/state": 0.0 + }, + "source": "diffcheck.log (run 2026-09-28, before the CPS shard pickles were removed to free disk)", + "specs_checked": 349, + "specs_skipped": 0 + } + }, + "sample_size": 349, + "wall_s": 2157.4 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/dimensions_by_arm.csv b/experiments/us-support-mix-bakeoff-20260930/dimensions_by_arm.csv new file mode 100644 index 0000000000..c641b8ffca --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/dimensions_by_arm.csv @@ -0,0 +1,61 @@ +product,arm,budget,cps_years,acs_fill_share,seed,rows,ess_distinct,income_components.state,income_components.cd,tax_items.state,tax_items.cd,program_receipt.state,demographics_pep.state,acs_native.state,acs_native.cd,acs_native.county +local,natural.cps2024.acs100.s0,0,1,1.0,0,116990,26267.168734799732,0.2562402942508585,0.368628785306787,0.1409739736411195,0.32782135195928086,0.24908093565333903,0.13138699051834574,0.11182332572602155,0.23973518972246494,0.3343099532297555 +local,natural.cps2023-2024.acs100.s0,0,2,1.0,0,234556,38975.87635266753,0.2353600697008607,0.3150915957351537,0.11172690325900313,0.26165240206543205,0.24257472693888676,0.14465280966012622,0.11096222317541098,0.22423425042220685,0.30456935477272384 +local,natural.cps2022-2023-2024.acs100.s0,0,3,1.0,0,352932,52073.705552568616,0.2171361498676638,0.2924916286167124,0.10119344800103709,0.2404734489025593,0.2197060765645402,0.15388166362805228,0.11092059440992556,0.21917682085079754,0.28404637960250445 +local,b300k.cps0.acs100.s0,300000,0,1.0,0,300000,88739.42584862383,0.23429272769351714,0.294729466333595,0.16692357646531517,0.24936527410608197,0.37258429822471645,0.16305527686288307,0.07511966857179753,0.1344304044603935,0.22472859669987288 +local,b300k.cps2024.acs000.s0,300000,1,0.0,0,629368,25941.420332837297,0.2557141656365252,0.2877610780859453,0.11267807862514273,0.21868788082614773,0.23760123984607007,0.15011568577342907,0.10983705222835778,0.2177786252028223,0.25858338825146937 +local,b300k.cps2024.acs100.s0,300000,1,1.0,0,361228,93725.70814697331,0.22237544973362444,0.27773335987883097,0.13611389092845289,0.22506711078100425,0.2925484443868418,0.1549464681677243,0.07044780319392784,0.1359890461267516,0.21982448638980487 +local,b300k.cps2024.acs100.s1,300000,1,1.0,1,361228,94328.32142441272,0.23419690043695096,0.28571427478389977,0.14052842598636905,0.2289217975598675,0.30919132639747754,0.16845330693532218,0.07218404237633766,0.13451708191286718,0.21758370759235868 +local,b300k.cps2024.acs100.s2,300000,1,1.0,2,361228,96019.8351263429,0.22412856083303512,0.3005332842780463,0.1332729999290088,0.22824587666633092,0.26153923293957276,0.15203325967658674,0.06881753989027596,0.1332378435077109,0.21727711632528773 +local,b300k.cps2023-2024.acs000.s0,300000,2,0.0,0,628217,39843.02064573599,0.23299819017636778,0.27907417105340565,0.10086916449026685,0.21248577583951866,0.24221674734488627,0.16418836448595092,0.11020652871951987,0.21442938070083725,0.26011641804975855 +local,b300k.cps2023-2024.acs100.s0,300000,2,1.0,0,422543,85272.64611894479,0.2320873385842164,0.2809150155724099,0.11975072727313722,0.22387840042788953,0.27350756252784914,0.15692966173306047,0.08155348712492251,0.1562817728619675,0.22898260932911663 +local,b300k.cps2022-2023-2024.acs000.s0,300000,3,0.0,0,627089,53840.515783674804,0.21636417669259378,0.2777977077074786,0.09789246569895065,0.21735445534264175,0.22075797974313865,0.1621728690297679,0.11071947436597335,0.21460326869276525,0.2632056039195863 +local,b300k.cps2022-2023-2024.acs100.s0,300000,3,1.0,0,484080,83424.32729710112,0.23627019274520367,0.2788047270466411,0.10353524278489439,0.2153780787255036,0.24352550167912812,0.1638588636538814,0.0920402316121175,0.17224502897803276,0.23888283992736484 +local,b300k.cps2022-2023-2024.acs100.s1,300000,3,1.0,1,484080,84651.23842388003,0.22564925876059017,0.2810324406006082,0.1049204503493655,0.21924479189506244,0.234554556947064,0.16658090945865134,0.09190141220572101,0.1727709403336561,0.23908712915629882 +local,b300k.cps2022-2023-2024.acs100.s2,300000,3,1.0,2,484080,83676.01853855501,0.22425100384819646,0.28318014557709364,0.10067242177324874,0.21774880085486237,0.23294838474251595,0.16657533865686952,0.09240807959286322,0.1705965172768449,0.23989544215159464 +local,b600k.cps0.acs100.s0,600000,0,1.0,0,600000,155143.02481544143,0.2167636412860519,0.2775302429807402,0.14896247912328456,0.21918527936460727,0.3329885935813031,0.18202600101728358,0.07268728326143165,0.12829168478495254,0.19542166511214448 +local,b600k.cps2024.acs000.s0,600000,1,0.0,0,1258830,24855.053519465826,0.2493814685687504,0.2656953207189058,0.10892226992996659,0.20023622828585266,0.22907564730531144,0.16296383138786746,0.10941384732414132,0.21181620881403695,0.24107481817769838 +local,b600k.cps2024.acs050.s0,600000,1,0.5,0,960045,55461.583853714335,0.23432921919635682,0.26250895012461006,0.1028591653418102,0.1959079928120096,0.24338243766687528,0.1683056230460101,0.08678822627504323,0.16445708794075126,0.21170641454866881 +local,b600k.cps2024.acs100.s0,600000,1,1.0,0,661228,161804.4264631515,0.2156128538018088,0.2629066416936514,0.13087171934248212,0.20627381142528392,0.2972810264774454,0.17796828282928034,0.06463291791620522,0.12170665256698268,0.1884630281308155 +local,b600k.cps2023-2024.acs000.s0,600000,2,0.0,0,1256347,39229.840755440826,0.22726229991374686,0.26006802013216795,0.09638255758435196,0.19193938886986364,0.23832240721713327,0.17274112771628558,0.11018467600581666,0.21036449796660026,0.2412275076723288 +local,b600k.cps2023-2024.acs100.s0,600000,2,1.0,0,722543,155524.49115215163,0.2236640895251088,0.26024206825732665,0.12214147564951856,0.20066761534376518,0.2654557263444992,0.17279267026374792,0.0710782775223844,0.12986607857931248,0.19175074589860552 +local,b600k.cps2022-2023-2024.acs000.s0,600000,3,0.0,0,1254039,54304.648500122195,0.2107342152095433,0.2571939974229721,0.09722359194488588,0.1978848454201713,0.22116412164157961,0.17540191309020567,0.11120560744763126,0.2092242036092987,0.24089870708358485 +local,b600k.cps2022-2023-2024.acs050.s0,600000,3,0.5,0,1019084,91100.40128899252,0.2256603840633608,0.2605500603745919,0.09556850042571938,0.19540517208401864,0.24308717902612242,0.17558813189842468,0.09468741911901286,0.17328021368989313,0.2163917222039306 +local,b600k.cps2022-2023-2024.acs100.s0,600000,3,1.0,0,784080,150595.0505577627,0.22801475595028387,0.2624714665203537,0.10891701658994464,0.19925786008259666,0.26689463596538643,0.16790058348725412,0.07903262369854992,0.14150365443925006,0.19811247873806706 +local,b1200k.cps0.acs100.s0,1200000,0,1.0,0,1200000,272607.14156716655,0.2064762143680669,0.24448238340214953,0.1271958904838077,0.19346215236328823,0.31823459303351853,0.19286922548605295,0.07423434272339187,0.12808067349525182,0.17237888538394763 +local,b1200k.cps2024.acs000.s0,1200000,1,0.0,0,2517604,23842.90159991112,0.2510104848956959,0.24886446782578253,0.10541087233889969,0.18464326791535787,0.23151973362356593,0.17394744597746561,0.10972889409186887,0.20931090310719097,0.23206082201655123 +local,b1200k.cps2024.acs100.s0,1200000,1,1.0,0,1261228,281840.1947789175,0.20351433911134775,0.2449950653366499,0.12267272174567183,0.1906566975362283,0.2780238101680827,0.18843601526452441,0.06506454319258005,0.12055918210301766,0.16681754104797403 +local,b1200k.cps2023-2024.acs000.s0,1200000,2,0.0,0,2512844,38732.49652443986,0.22520642293189733,0.24566005803881902,0.09461582123755304,0.18103017107743002,0.23728528309773528,0.18091450159282604,0.10995405935231696,0.2062377238604117,0.2294340902985313 +local,b1200k.cps2023-2024.acs100.s0,1200000,2,1.0,0,1322543,278972.2214834125,0.2087877041138612,0.24589179935651825,0.11928718518775158,0.19078676057249827,0.2633482939579282,0.18693261085783902,0.06519418058617725,0.11944908191655185,0.16521051155753275 +local,b1200k.cps2022-2023-2024.acs000.s0,1200000,3,0.0,0,2508197,54291.8721808348,0.21367843862950298,0.24795960398287115,0.09556674683309047,0.18474428591598085,0.2177241262978927,0.18276741791355144,0.11175650621913985,0.2063771609000472,0.22861805086780612 +local,b1200k.cps2022-2023-2024.acs100.s0,1200000,3,1.0,0,1384080,276474.1544207648,0.20573088273723014,0.24778391771824335,0.11694219144644435,0.1890844995883244,0.25620828156733094,0.1842746202541827,0.06916455180934589,0.12303141627531228,0.16590487808830948 +national,natural.cps2024.acs100.s0,0,1,1.0,0,116990,18525.796531333322,0.2696116341504152,0.43919631953037513,0.1121591199800416,0.510954450513885,0.21615851274709622,0.1677059521885838,0.10904770553924113,0.26091718942439857,0.38195475529225076 +national,natural.cps2023-2024.acs100.s0,0,2,1.0,0,234556,31671.325578832886,0.2414815948793076,0.4004000810655697,0.1052393000286734,0.441756711126377,0.21174810554203347,0.1702495702655267,0.10867817839640465,0.22813719325646137,0.32530204841107396 +national,natural.cps2022-2023-2024.acs100.s0,0,3,1.0,0,352932,44942.90129089897,0.2497527061900134,0.377900474158411,0.10331386245050982,0.4196982722736993,0.2080660654966806,0.16878172366700006,0.11150799879023887,0.2188638982972472,0.29775431144589004 +national,b300k.cps0.acs100.s0,300000,0,1.0,0,300000,60492.10872186916,0.26125044364790023,0.35128318424714394,0.1506784259545128,0.3582662830085487,0.3032951550346929,0.17631137645123166,0.08291411454629433,0.16598754587886827,0.2733731253752591 +national,b300k.cps2024.acs000.s0,300000,1,0.0,0,629368,18566.939722103863,0.2717766467137627,0.3494025113619567,0.11192711452186348,0.3837250371889004,0.21478031358230748,0.16759991019765672,0.10900435153465846,0.20878971453531148,0.27111314672182785 +national,b300k.cps2024.acs100.s0,300000,1,1.0,0,361228,63296.633070639335,0.2488281348041939,0.3526511848914447,0.13256622347613956,0.3674673000569755,0.260413002804286,0.1597233602579953,0.07450330211228677,0.16044298864151008,0.2534584825304903 +national,b300k.cps2024.acs100.s1,300000,1,1.0,1,361228,63661.665857208754,0.25097710482668223,0.3612127672330394,0.1292905887274339,0.3738662138340741,0.26814652916269605,0.16668764568786598,0.07644212428557479,0.1604181055586044,0.2565081754196152 +national,b300k.cps2024.acs100.s2,300000,1,1.0,2,361228,65310.50293694685,0.24795753418976757,0.3686085945173797,0.12704222296996678,0.37203909943411284,0.1936747199064423,0.15140609544121633,0.07450227585437046,0.15635512675632854,0.2556985805373917 +national,b300k.cps2023-2024.acs000.s0,300000,2,0.0,0,628217,31712.95601798473,0.241244989898294,0.3541385957210492,0.10525161471376977,0.3912707474902042,0.2117635469327823,0.1703353292068738,0.10855847729508801,0.20557349148110568,0.26915601765958747 +national,b300k.cps2023-2024.acs100.s0,300000,2,1.0,0,422543,65907.76439890644,0.23613502945233358,0.34100599629947437,0.12372753888842442,0.36061429401905143,0.21720632272633086,0.17130848948985308,0.08414831832448029,0.16460021968343813,0.24971085752799574 +national,b300k.cps2022-2023-2024.acs000.s0,300000,3,0.0,0,627089,44983.64315566284,0.25016928296359214,0.36163690746942406,0.10326926102077237,0.3931206653033833,0.20768612837662662,0.16883232591661937,0.11153631643441365,0.20767970731232213,0.27152634399585995 +national,b300k.cps2022-2023-2024.acs100.s0,300000,3,1.0,0,484080,69064.95015142651,0.2175345096397957,0.3433914082891061,0.11122761415655996,0.3557118942484613,0.18389306059868185,0.1694656640096662,0.09446456678739014,0.17431536900317618,0.25281103632772034 +national,b300k.cps2022-2023-2024.acs100.s1,300000,3,1.0,1,484080,69333.01365841262,0.2305607520155476,0.34018024084652343,0.11444292204091333,0.36409657696436076,0.19885977768618832,0.15892294151193456,0.09371890401419548,0.17664209238189657,0.2527618555819351 +national,b300k.cps2022-2023-2024.acs100.s2,300000,3,1.0,2,484080,69661.27215264387,0.22415015708249011,0.35363214799932335,0.1142276152315121,0.35513195329635117,0.21213674854359396,0.16150427764582204,0.09355908868849327,0.17419725429000174,0.25355272752703856 +national,b600k.cps0.acs100.s0,600000,0,1.0,0,600000,119288.30412767422,0.24966655406897992,0.34241876849049036,0.14197510217799877,0.32361559846110066,0.2929448280688965,0.18272324742321502,0.07977405633737264,0.1476038895776312,0.2300347147082848 +national,b600k.cps2024.acs000.s0,600000,1,0.0,0,1258830,18612.508981182837,0.2721350308405871,0.33999991743309776,0.11175801102457911,0.36217559115777576,0.2137667160204601,0.16789701330967022,0.10916980151991057,0.20041392600593685,0.24600104804595346 +national,b600k.cps2024.acs050.s0,600000,1,0.5,0,960045,45347.92882155529,0.22744779909141397,0.3195168688854576,0.11440855161234355,0.33195568945586346,0.1980126668984462,0.16224079914628323,0.08984917136470014,0.15957975644232797,0.22246059401969046 +national,b600k.cps2024.acs100.s0,600000,1,1.0,0,661228,121891.03572378987,0.23678916833887328,0.3386348678000625,0.12639218991981416,0.32380095096613976,0.26317788342170323,0.16848626972379935,0.06661151164375591,0.13490757511980064,0.21428279634743777 +national,b600k.cps2023-2024.acs000.s0,600000,2,0.0,0,1256347,31780.55376763681,0.24089602188398598,0.33438566321263324,0.10524017537062978,0.3679213205348031,0.2116351652999952,0.17051499247871507,0.10859953818225078,0.19677274526715133,0.2442881838438087 +national,b600k.cps2023-2024.acs100.s0,600000,2,1.0,0,722543,114433.20966057874,0.22528352031241805,0.329919322491642,0.12315745579178716,0.32541715634264745,0.24584572541285485,0.1594929954913748,0.07574607752055182,0.14177830608085248,0.21445390196300543 +national,b600k.cps2022-2023-2024.acs000.s0,600000,3,0.0,0,1254039,45050.38874639817,0.2497558167425825,0.33705595250545295,0.1031874802625938,0.3648460542048347,0.20797277066731495,0.16812914955780833,0.11154187944041932,0.1978215347841774,0.24523732599523937 +national,b600k.cps2022-2023-2024.acs050.s0,600000,3,0.5,0,1019084,77830.18085078364,0.21346085314456828,0.3188925375284966,0.1115046834722531,0.33195745787437014,0.18740334543196172,0.16310377019843816,0.09619278408621106,0.16534906911738684,0.22274395036409647 +national,b600k.cps2022-2023-2024.acs100.s0,600000,3,1.0,0,784080,113040.62619633827,0.2210704782651005,0.32624272978471713,0.11602189617659167,0.3264735047442763,0.2248545879476049,0.15873853658076328,0.08440349589495853,0.1506984420752451,0.22102329895426534 +national,b1200k.cps0.acs100.s0,1200000,0,1.0,0,1200000,233507.8983854827,0.23197237474725407,0.30764609969672274,0.13521094558855334,0.29586659384861,0.2996804566303589,0.18441106064342377,0.0797590427584525,0.13710723003194417,0.19926310603387148 +national,b1200k.cps2024.acs000.s0,1200000,1,0.0,0,2517604,18675.74777381174,0.27262464031059574,0.3231392586379741,0.11162758094435697,0.3544144309845088,0.21153125590840233,0.16804774526293845,0.10913365197971178,0.19671469742101833,0.2335821920384311 +national,b1200k.cps2024.acs100.s0,1200000,1,1.0,0,1261228,239079.8688512916,0.22843448064670446,0.30307481919080115,0.12662306516466945,0.2962492517299004,0.26644343307680296,0.17531622479503287,0.06754437205568672,0.1248100570308532,0.18584872384665377 +national,b1200k.cps2023-2024.acs000.s0,1200000,2,0.0,0,2512844,31904.85055324262,0.23993486065598704,0.32792238604490337,0.10524622022884024,0.35415598544893173,0.21081576411829464,0.1701091296385201,0.10857817874500757,0.19312224241188444,0.23107821021237102 +national,b1200k.cps2023-2024.acs100.s0,1200000,2,1.0,0,1322543,230272.02491931393,0.21910535458696764,0.297947321629199,0.12140193109356652,0.2990649297438268,0.254270666452558,0.16789323516569246,0.06641570377838507,0.12163233537133702,0.18115700694315529 +national,b1200k.cps2022-2023-2024.acs000.s0,1200000,3,0.0,0,2508197,45160.28249329324,0.2513346707648975,0.3235953533512478,0.103106292409962,0.35154523730343396,0.20790520556155948,0.16777266351564055,0.11145998003710832,0.19269438430467156,0.22895770676867241 +national,b1200k.cps2022-2023-2024.acs100.s0,1200000,3,1.0,0,1384080,222919.7725749223,0.2170112714257001,0.30008669635968993,0.11848225108641687,0.3009724729875966,0.23949547435783827,0.16572583257448276,0.07219451814730155,0.12416101183000863,0.18204516757932784 diff --git a/experiments/us-support-mix-bakeoff-20260930/headline.md b/experiments/us-support-mix-bakeoff-20260930/headline.md new file mode 100644 index 0000000000..c1bff3df35 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/headline.md @@ -0,0 +1,69 @@ +### local product + +| Arm | Rows | Distinct hh | ESS (distinct) | CPS-native nat | state | CD | PEP demog | ACS-native state | CD | county | Solve min | Peak GB | +|---|---|---|---|---|---|---|---|---|---|---|---|---| +| natural.cps2024.acs100.s0 | 116,990 | 55,762 | 26,267 | 0.356 | 0.199 | 0.341 | 0.130 | 0.112 | 0.240 | 0.334 | 6.1 | 3.2 | +| natural.cps2023-2024.acs100.s0 | 234,556 | 92,547 | 38,976 | 0.299 | 0.176 | 0.279 | 0.143 | 0.111 | 0.224 | 0.305 | 11.7 | 5.2 | +| natural.cps2022-2023-2024.acs100.s0 | 352,932 | 130,294 | 52,074 | 0.265 | 0.161 | 0.258 | 0.152 | 0.111 | 0.219 | 0.284 | 12.9 | 4.7 | +| b300k.cps0.acs100.s0 | 300,000 | 300,000 | 88,739 | 0.375 | 0.212 | 0.264 | 0.162 | 0.075 | 0.134 | 0.225 | 18.9 | 6.0 | +| b300k.cps2024.acs000.s0 | 629,368 | 55,762 | 25,941 | 0.301 | 0.185 | 0.242 | 0.149 | 0.110 | 0.218 | 0.259 | 23.0 | 8.1 | +| b300k.cps2024.acs100.s0 | 361,228 | 300,000 | 93,726 | 0.380 | 0.186 | 0.242 | 0.153 | 0.070 | 0.136 | 0.220 | 34.0 | 2.4 | +| b300k.cps2024.acs100.s1 | 361,228 | 300,000 | 94,328 | 0.337 | 0.194 | 0.248 | 0.167 | 0.072 | 0.135 | 0.218 | 10.9 | 6.7 | +| b300k.cps2024.acs100.s2 | 361,228 | 300,000 | 96,020 | 0.368 | 0.183 | 0.252 | 0.151 | 0.069 | 0.133 | 0.217 | 9.3 | 6.7 | +| b300k.cps2023-2024.acs000.s0 | 628,217 | 92,547 | 39,843 | 0.276 | 0.169 | 0.234 | 0.162 | 0.110 | 0.214 | 0.260 | 23.6 | 7.8 | +| b300k.cps2023-2024.acs100.s0 | 422,543 | 280,534 | 85,273 | 0.338 | 0.180 | 0.243 | 0.155 | 0.082 | 0.156 | 0.229 | 28.4 | 7.2 | +| b300k.cps2022-2023-2024.acs000.s0 | 627,089 | 130,294 | 53,841 | 0.262 | 0.159 | 0.237 | 0.160 | 0.111 | 0.215 | 0.263 | 21.0 | 8.0 | +| b300k.cps2022-2023-2024.acs100.s0 | 484,080 | 261,442 | 83,424 | 0.304 | 0.172 | 0.236 | 0.162 | 0.092 | 0.172 | 0.239 | 35.4 | 7.6 | +| b300k.cps2022-2023-2024.acs100.s1 | 484,080 | 261,442 | 84,651 | 0.337 | 0.167 | 0.240 | 0.165 | 0.092 | 0.173 | 0.239 | 12.5 | 7.7 | +| b300k.cps2022-2023-2024.acs100.s2 | 484,080 | 261,442 | 83,676 | 0.310 | 0.165 | 0.239 | 0.165 | 0.092 | 0.171 | 0.240 | 19.1 | 7.7 | +| b600k.cps0.acs100.s0 | 600,000 | 600,000 | 155,143 | 0.371 | 0.192 | 0.238 | 0.180 | 0.073 | 0.128 | 0.195 | 18.0 | 8.3 | +| b600k.cps2024.acs000.s0 | 1,258,830 | 55,762 | 24,855 | 0.293 | 0.179 | 0.222 | 0.161 | 0.109 | 0.212 | 0.241 | 42.1 | 8.1 | +| b600k.cps2024.acs050.s0 | 960,045 | 327,881 | 55,462 | 0.352 | 0.171 | 0.218 | 0.167 | 0.087 | 0.164 | 0.212 | 29.8 | 10.6 | +| b600k.cps2024.acs100.s0 | 661,228 | 600,000 | 161,804 | 0.367 | 0.180 | 0.225 | 0.176 | 0.065 | 0.122 | 0.188 | 29.8 | 8.1 | +| b600k.cps2023-2024.acs000.s0 | 1,256,347 | 92,547 | 39,230 | 0.278 | 0.164 | 0.214 | 0.171 | 0.110 | 0.210 | 0.241 | 39.5 | 13.7 | +| b600k.cps2023-2024.acs100.s0 | 722,543 | 580,534 | 155,524 | 0.366 | 0.177 | 0.220 | 0.171 | 0.071 | 0.130 | 0.192 | 26.0 | 9.9 | +| b600k.cps2022-2023-2024.acs000.s0 | 1,254,039 | 130,294 | 54,305 | 0.264 | 0.156 | 0.217 | 0.173 | 0.111 | 0.209 | 0.241 | 38.1 | 8.8 | +| b600k.cps2022-2023-2024.acs050.s0 | 1,019,084 | 345,868 | 91,100 | 0.295 | 0.163 | 0.217 | 0.174 | 0.095 | 0.173 | 0.216 | 28.9 | 13.1 | +| b600k.cps2022-2023-2024.acs100.s0 | 784,080 | 561,442 | 150,595 | 0.360 | 0.173 | 0.220 | 0.166 | 0.079 | 0.142 | 0.198 | 24.6 | 10.5 | +| b1200k.cps0.acs100.s0 | 1,200,000 | 1,200,000 | 272,607 | 0.364 | 0.176 | 0.210 | 0.191 | 0.074 | 0.128 | 0.172 | 31.1 | 13.8 | +| b1200k.cps2024.acs000.s0 | 2,517,604 | 55,762 | 23,843 | 0.286 | 0.179 | 0.206 | 0.172 | 0.110 | 0.209 | 0.232 | 139.9 | 20.8 | +| b1200k.cps2024.acs100.s0 | 1,261,228 | 1,200,000 | 281,840 | 0.357 | 0.170 | 0.209 | 0.187 | 0.065 | 0.121 | 0.167 | 38.6 | 14.6 | +| b1200k.cps2023-2024.acs000.s0 | 2,512,844 | 92,547 | 38,732 | 0.275 | 0.162 | 0.202 | 0.179 | 0.110 | 0.206 | 0.229 | 210.0 | 18.0 | +| b1200k.cps2023-2024.acs100.s0 | 1,322,543 | 1,180,534 | 278,972 | 0.353 | 0.169 | 0.209 | 0.185 | 0.065 | 0.119 | 0.165 | 37.0 | 15.2 | +| b1200k.cps2022-2023-2024.acs000.s0 | 2,508,197 | 130,294 | 54,292 | 0.263 | 0.156 | 0.206 | 0.181 | 0.112 | 0.206 | 0.229 | 54.8 | 27.9 | +| b1200k.cps2022-2023-2024.acs100.s0 | 1,384,080 | 1,161,442 | 276,474 | 0.346 | 0.166 | 0.208 | 0.182 | 0.069 | 0.123 | 0.166 | 35.7 | 15.9 | + +### national product + +| Arm | Rows | Distinct hh | ESS (distinct) | CPS-native nat | state | CD | PEP demog | ACS-native state | CD | county | Solve min | Peak GB | +|---|---|---|---|---|---|---|---|---|---|---|---|---| +| natural.cps2024.acs100.s0 | 116,990 | 55,762 | 18,526 | 0.244 | 0.189 | 0.487 | 0.166 | 0.109 | 0.261 | 0.382 | 4.5 | 3.4 | +| natural.cps2023-2024.acs100.s0 | 234,556 | 92,547 | 31,671 | 0.251 | 0.173 | 0.428 | 0.168 | 0.109 | 0.228 | 0.325 | 7.7 | 4.6 | +| natural.cps2022-2023-2024.acs100.s0 | 352,932 | 130,294 | 44,943 | 0.236 | 0.175 | 0.406 | 0.167 | 0.112 | 0.219 | 0.298 | 8.2 | 4.0 | +| b300k.cps0.acs100.s0 | 300,000 | 300,000 | 60,492 | 0.251 | 0.210 | 0.356 | 0.174 | 0.083 | 0.166 | 0.273 | 18.1 | 5.0 | +| b300k.cps2024.acs000.s0 | 629,368 | 55,762 | 18,567 | 0.243 | 0.189 | 0.372 | 0.166 | 0.109 | 0.209 | 0.271 | 15.1 | 6.2 | +| b300k.cps2024.acs100.s0 | 361,228 | 300,000 | 63,297 | 0.274 | 0.193 | 0.363 | 0.158 | 0.075 | 0.160 | 0.253 | 13.4 | 1.4 | +| b300k.cps2024.acs100.s1 | 361,228 | 300,000 | 63,662 | 0.253 | 0.193 | 0.370 | 0.165 | 0.076 | 0.160 | 0.257 | 7.4 | 5.5 | +| b300k.cps2024.acs100.s2 | 361,228 | 300,000 | 65,311 | 0.254 | 0.185 | 0.371 | 0.150 | 0.075 | 0.156 | 0.256 | 6.9 | 5.4 | +| b300k.cps2023-2024.acs000.s0 | 628,217 | 92,547 | 31,713 | 0.251 | 0.173 | 0.379 | 0.168 | 0.109 | 0.206 | 0.269 | 15.7 | 5.7 | +| b300k.cps2023-2024.acs100.s0 | 422,543 | 280,534 | 65,908 | 0.215 | 0.180 | 0.354 | 0.169 | 0.084 | 0.165 | 0.250 | 10.2 | 5.8 | +| b300k.cps2022-2023-2024.acs000.s0 | 627,089 | 130,294 | 44,984 | 0.236 | 0.175 | 0.383 | 0.167 | 0.112 | 0.208 | 0.272 | 15.4 | 5.9 | +| b300k.cps2022-2023-2024.acs100.s0 | 484,080 | 261,442 | 69,065 | 0.192 | 0.163 | 0.352 | 0.168 | 0.094 | 0.174 | 0.253 | 21.6 | 6.2 | +| b300k.cps2022-2023-2024.acs100.s1 | 484,080 | 261,442 | 69,333 | 0.278 | 0.172 | 0.356 | 0.157 | 0.094 | 0.177 | 0.253 | 10.2 | 6.2 | +| b300k.cps2022-2023-2024.acs100.s2 | 484,080 | 261,442 | 69,661 | 0.171 | 0.170 | 0.355 | 0.160 | 0.094 | 0.174 | 0.254 | 9.8 | 5.9 | +| b600k.cps0.acs100.s0 | 600,000 | 600,000 | 119,288 | 0.285 | 0.200 | 0.330 | 0.181 | 0.080 | 0.148 | 0.230 | 14.3 | 6.5 | +| b600k.cps2024.acs000.s0 | 1,258,830 | 55,762 | 18,613 | 0.243 | 0.189 | 0.355 | 0.166 | 0.109 | 0.200 | 0.246 | 27.0 | 7.5 | +| b600k.cps2024.acs050.s0 | 960,045 | 327,881 | 45,348 | 0.250 | 0.170 | 0.328 | 0.160 | 0.090 | 0.160 | 0.222 | 19.9 | 9.2 | +| b600k.cps2024.acs100.s0 | 661,228 | 600,000 | 121,891 | 0.255 | 0.185 | 0.329 | 0.167 | 0.067 | 0.135 | 0.214 | 23.9 | 7.0 | +| b600k.cps2023-2024.acs000.s0 | 1,256,347 | 92,547 | 31,781 | 0.251 | 0.173 | 0.357 | 0.168 | 0.109 | 0.197 | 0.244 | 26.8 | 9.4 | +| b600k.cps2023-2024.acs100.s0 | 722,543 | 580,534 | 114,433 | 0.219 | 0.177 | 0.327 | 0.158 | 0.076 | 0.142 | 0.214 | 22.1 | 7.5 | +| b600k.cps2022-2023-2024.acs000.s0 | 1,254,039 | 130,294 | 45,050 | 0.235 | 0.175 | 0.356 | 0.166 | 0.112 | 0.198 | 0.245 | 24.8 | 8.4 | +| b600k.cps2022-2023-2024.acs050.s0 | 1,019,084 | 345,868 | 77,830 | 0.206 | 0.162 | 0.328 | 0.161 | 0.096 | 0.165 | 0.223 | 20.1 | 9.3 | +| b600k.cps2022-2023-2024.acs100.s0 | 784,080 | 561,442 | 113,041 | 0.244 | 0.170 | 0.326 | 0.157 | 0.084 | 0.151 | 0.221 | 16.6 | 7.9 | +| b1200k.cps0.acs100.s0 | 1,200,000 | 1,200,000 | 233,508 | 0.267 | 0.190 | 0.300 | 0.182 | 0.080 | 0.137 | 0.199 | 19.7 | 10.0 | +| b1200k.cps2024.acs000.s0 | 2,517,604 | 55,762 | 18,676 | 0.243 | 0.189 | 0.344 | 0.166 | 0.109 | 0.197 | 0.234 | 50.2 | 14.4 | +| b1200k.cps2024.acs100.s0 | 1,261,228 | 1,200,000 | 239,080 | 0.258 | 0.182 | 0.299 | 0.173 | 0.068 | 0.125 | 0.186 | 24.0 | 10.6 | +| b1200k.cps2023-2024.acs000.s0 | 2,512,844 | 92,547 | 31,905 | 0.251 | 0.172 | 0.345 | 0.168 | 0.109 | 0.193 | 0.231 | 50.9 | 13.0 | +| b1200k.cps2023-2024.acs100.s0 | 1,322,543 | 1,180,534 | 230,272 | 0.260 | 0.174 | 0.299 | 0.166 | 0.066 | 0.122 | 0.181 | 23.0 | 11.0 | +| b1200k.cps2022-2023-2024.acs000.s0 | 2,508,197 | 130,294 | 45,160 | 0.235 | 0.176 | 0.342 | 0.166 | 0.111 | 0.193 | 0.229 | 107.3 | 15.0 | +| b1200k.cps2022-2023-2024.acs100.s0 | 1,384,080 | 1,161,442 | 222,920 | 0.261 | 0.171 | 0.301 | 0.164 | 0.072 | 0.124 | 0.182 | 23.9 | 11.3 | diff --git a/experiments/us-support-mix-bakeoff-20260930/holdout_by_dimension_level.csv b/experiments/us-support-mix-bakeoff-20260930/holdout_by_dimension_level.csv new file mode 100644 index 0000000000..f725098840 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/holdout_by_dimension_level.csv @@ -0,0 +1,601 @@ +product,arm,dimension_group,dimension,level,targets,capped_mean,weighted_capped_mean,median_rel,capped_mean_initial,unsupported +local,b1200k.cps0.acs100.s0,acs_native,demographics_pep,national,1.0,0.031136159134135165,0.031136159134135165,0.031136159134135165,0.01687877206984775,0.0 +local,b1200k.cps0.acs100.s0,acs_native,demographics_pep,state,82.0,0.19286922548605295,0.19739269558977326,0.19039047686453314,0.04257015050767078,0.0 +local,b1200k.cps0.acs100.s0,cps_native,income_components,cd,875.0,0.24448238340214953,0.17181224785345187,0.11727616920978653,0.38454838185340123,0.0 +local,b1200k.cps0.acs100.s0,cps_native,income_components,national,8.0,0.3103777197784714,0.20700686443726768,0.1395100002039102,0.4635469598128417,0.0 +local,b1200k.cps0.acs100.s0,cps_native,income_components,state,308.0,0.20647621436806693,0.1483440927074959,0.08895362696469541,0.36978813930519205,0.0 +local,b1200k.cps0.acs100.s0,cps_native,program_receipt,national,1.0,0.029039789069627106,0.029039789069627106,0.029039789069627106,0.03224964237470852,0.0 +local,b1200k.cps0.acs100.s0,cps_native,program_receipt,state,53.0,0.31823459303351853,0.21684614735180102,0.18893483013838433,0.41642954124675036,0.0 +local,b1200k.cps0.acs100.s0,cps_native,tax_items,cd,1772.0,0.19346215236328823,0.16884021701520516,0.11030378006333022,0.453593489770896,0.0 +local,b1200k.cps0.acs100.s0,cps_native,tax_items,national,25.0,0.3946709414926361,0.19171966578702446,0.2675993236456672,0.5735022997088989,2.0 +local,b1200k.cps0.acs100.s0,cps_native,tax_items,state,344.0,0.1271958904838077,0.08201589520349983,0.036541667967989494,0.3975102748162476,0.0 +local,b1200k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.010729179501353797,0.010729179501353799,0.010729179501353797,0.0058557545138544186,0.0 +local,b1200k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.18276741791355144,0.17795145630194242,0.17571908876086212,0.06947274184770601,0.0 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,income_components,cd,875.0,0.24795960398287115,0.16065495969360394,0.12840173432277055,0.41459837672361416,0.0 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,income_components,national,8.0,0.29935919235534847,0.15495537296441067,0.1465053708749603,0.4782740570823931,0.0 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,income_components,state,308.0,0.21367843862950298,0.1334715477197718,0.09099205426134577,0.3339467143924983,0.0 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,national,1.0,0.01646739773176462,0.01646739773176462,0.01646739773176462,0.19867559908946433,0.0 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,state,53.0,0.2177241262978927,0.20783211837998317,0.15135228666841102,0.2921397722263,0.0 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.18474428591598085,0.176770215651062,0.09285874361543778,0.4399785423311982,0.0 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,national,25.0,0.26156677294169406,0.21910645938777187,0.21594996293740154,0.5291498415503633,2.0 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,state,344.0,0.09556674683309048,0.08495223230811838,0.033698929101499346,0.33883781338522934,0.0 +local,b1200k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.021543245807295906,0.021543245807295906,0.021543245807295906,0.015382628295531922,0.0 +local,b1200k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.1842746202541827,0.19052974896805416,0.15705058907193073,0.043461430521572225,0.0 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.24778391771824337,0.16889366673783202,0.11742227186217717,0.36967706910712117,0.0 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.2703684882459735,0.1674639049836868,0.06847059087963159,0.42701180053363924,0.0 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.20573088273723014,0.1415839034672543,0.09260464021592656,0.336453446112695,0.0 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.017016064870367338,0.017016064870367338,0.017016064870367338,0.001560893746850735,0.0 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.25620828156733094,0.16639768808640967,0.17070235072496218,0.37195145805988555,0.0 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.1890844995883244,0.16923519290694675,0.10263301744184945,0.4239846039175,0.0 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.3827330743547202,0.19559765418396424,0.26549874358136805,0.5560157530602818,2.0 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.11694219144644435,0.07814257499109467,0.03525375672155619,0.37028807025632865,0.0 +local,b1200k.cps2023-2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.01015166708407202,0.01015166708407202,0.01015166708407202,0.008377589413013453,0.0 +local,b1200k.cps2023-2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.18091450159282604,0.17419972258202296,0.1721449126651376,0.07560887119978749,0.0 +local,b1200k.cps2023-2024.acs000.s0,cps_native,income_components,cd,875.0,0.245660058038819,0.15586510311402255,0.11398931321044865,0.4205706570917942,0.0 +local,b1200k.cps2023-2024.acs000.s0,cps_native,income_components,national,8.0,0.31740772403935485,0.16309548865459772,0.1805891073526219,0.5269651800077799,0.0 +local,b1200k.cps2023-2024.acs000.s0,cps_native,income_components,state,308.0,0.22520642293189733,0.13456241386248313,0.09496434734847317,0.3547371991254122,0.0 +local,b1200k.cps2023-2024.acs000.s0,cps_native,program_receipt,national,1.0,0.012997101847879234,0.012997101847879236,0.012997101847879234,0.2230673116161331,0.0 +local,b1200k.cps2023-2024.acs000.s0,cps_native,program_receipt,state,53.0,0.23728528309773528,0.21386089968594652,0.16211010220864178,0.2965881008063,0.0 +local,b1200k.cps2023-2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.18103017107743002,0.16843009084750352,0.09420053346651705,0.4499901440346591,0.0 +local,b1200k.cps2023-2024.acs000.s0,cps_native,tax_items,national,25.0,0.27130141741138536,0.2254397684722295,0.20446248054804364,0.5506343068650498,2.0 +local,b1200k.cps2023-2024.acs000.s0,cps_native,tax_items,state,344.0,0.09461582123755301,0.08019044498268842,0.03461109924632719,0.3518826507591661,0.0 +local,b1200k.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.02586127518861045,0.02586127518861045,0.02586127518861045,0.01729985070538173,0.0 +local,b1200k.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.186932610857839,0.19379613229263526,0.17036821445263822,0.04395537463408709,0.0 +local,b1200k.cps2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.2458917993565182,0.16888440832166013,0.11571829190276303,0.37408290308677483,0.0 +local,b1200k.cps2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.2791515694179675,0.1778163443093935,0.07798405821515045,0.43633847203582976,0.0 +local,b1200k.cps2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.2087877041138612,0.14340423120294002,0.09681532699730432,0.34723657081554843,0.0 +local,b1200k.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.0210527469483214,0.0210527469483214,0.0210527469483214,0.007300241349242352,0.0 +local,b1200k.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.26334829395792814,0.17619746105613662,0.14513285119425093,0.3867277099908303,0.0 +local,b1200k.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.19078676057249827,0.1692818092657885,0.10271521091372122,0.4350560038999481,0.0 +local,b1200k.cps2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.38933345271721614,0.19478422723019767,0.26608469458949185,0.5612460474999122,2.0 +local,b1200k.cps2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.11928718518775161,0.07923152595011766,0.03503517465488967,0.3809892888582213,0.0 +local,b1200k.cps2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.0164129965833176,0.0164129965833176,0.0164129965833176,0.020249560721814663,0.0 +local,b1200k.cps2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.17394744597746561,0.16300773407423627,0.1647190433866017,0.09501372306127602,0.0 +local,b1200k.cps2024.acs000.s0,cps_native,income_components,cd,875.0,0.24886446782578253,0.15716003983171595,0.1283104982701864,0.43813763234144554,0.0 +local,b1200k.cps2024.acs000.s0,cps_native,income_components,national,8.0,0.32479169063218366,0.17108379180456929,0.1549621647733696,0.5231357614058957,0.0 +local,b1200k.cps2024.acs000.s0,cps_native,income_components,state,308.0,0.2510104848956959,0.13762167513872745,0.0970196105896878,0.3691542979336075,0.0 +local,b1200k.cps2024.acs000.s0,cps_native,program_receipt,national,1.0,0.011864248303568086,0.011864248303568085,0.011864248303568086,0.24795438764739083,0.0 +local,b1200k.cps2024.acs000.s0,cps_native,program_receipt,state,53.0,0.23151973362356593,0.2102810472330338,0.17499622239817336,0.3147145965159252,0.0 +local,b1200k.cps2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.18464326791535787,0.1684828240312832,0.10686808089507699,0.4533561705186073,0.0 +local,b1200k.cps2024.acs000.s0,cps_native,tax_items,national,25.0,0.28505622844904693,0.22035487731789677,0.21079170624995686,0.5600452269263307,2.0 +local,b1200k.cps2024.acs000.s0,cps_native,tax_items,state,344.0,0.10541087233889969,0.08497048746188214,0.041457952733922054,0.36059836075011376,0.0 +local,b1200k.cps2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.029765902613478327,0.029765902613478324,0.029765902613478327,0.0175968395202377,0.0 +local,b1200k.cps2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.18843601526452441,0.19537039073828183,0.17136796486059452,0.04383220009093377,0.0 +local,b1200k.cps2024.acs100.s0,cps_native,income_components,cd,875.0,0.24499506533664986,0.17019950114392216,0.11429856129460997,0.3786111122144415,0.0 +local,b1200k.cps2024.acs100.s0,cps_native,income_components,national,8.0,0.2929664677392368,0.1909061687239925,0.10395437152954715,0.4444228133539717,0.0 +local,b1200k.cps2024.acs100.s0,cps_native,income_components,state,308.0,0.2035143391113478,0.14418438896968483,0.08376281978397702,0.3580112185950272,0.0 +local,b1200k.cps2024.acs100.s0,cps_native,program_receipt,national,1.0,0.025078346581670272,0.025078346581670272,0.025078346581670272,0.018931121048764134,0.0 +local,b1200k.cps2024.acs100.s0,cps_native,program_receipt,state,53.0,0.27802381016808264,0.19336972624383997,0.15834689986872777,0.4017073225890307,0.0 +local,b1200k.cps2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.1906566975362283,0.1679761639931759,0.10449080229742846,0.44347825448303935,0.0 +local,b1200k.cps2024.acs100.s0,cps_native,tax_items,national,25.0,0.390277000615379,0.19297092414661166,0.2599562092269475,0.5678938650396395,2.0 +local,b1200k.cps2024.acs100.s0,cps_native,tax_items,state,344.0,0.12267272174567183,0.08074275224387023,0.036093444206159064,0.3884940390560251,0.0 +local,b300k.cps0.acs100.s0,acs_native,demographics_pep,national,1.0,0.04613637508701725,0.04613637508701725,0.04613637508701725,0.013400519618049613,0.0 +local,b300k.cps0.acs100.s0,acs_native,demographics_pep,state,82.0,0.16305527686288307,0.15526183072373176,0.14332460355137772,0.06782021622343067,0.0 +local,b300k.cps0.acs100.s0,cps_native,income_components,cd,875.0,0.294729466333595,0.19866522935109282,0.18125682849349803,0.40117938753532867,0.0 +local,b300k.cps0.acs100.s0,cps_native,income_components,national,8.0,0.3168667839683797,0.2315921767982152,0.1512853223756738,0.4633596709819412,0.0 +local,b300k.cps0.acs100.s0,cps_native,income_components,state,308.0,0.23429272769351714,0.16060583314121718,0.14771709111300887,0.39529156481402894,0.0 +local,b300k.cps0.acs100.s0,cps_native,program_receipt,national,1.0,0.045639139865172755,0.045639139865172755,0.045639139865172755,0.026716643217532504,0.0 +local,b300k.cps0.acs100.s0,cps_native,program_receipt,state,53.0,0.3725842982247164,0.25206410461454043,0.22050760898466562,0.4086828465688528,0.0 +local,b300k.cps0.acs100.s0,cps_native,tax_items,cd,1772.0,0.24936527410608197,0.20674397272691042,0.15925475553972288,0.46464998602081803,0.0 +local,b300k.cps0.acs100.s0,cps_native,tax_items,national,25.0,0.40648490673997256,0.1769486675312633,0.2710627021483992,0.5557314764840549,2.0 +local,b300k.cps0.acs100.s0,cps_native,tax_items,state,344.0,0.16692357646531517,0.09696618994483201,0.048369335933678204,0.39805565541393706,0.0 +local,b300k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.007824599707914002,0.007824599707914002,0.007824599707914002,0.005855754513860456,0.0 +local,b300k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.16217286902976794,0.16007809400340423,0.16852507056905885,0.06947274184770443,0.0 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,income_components,cd,875.0,0.2777977077074786,0.17877868353255552,0.14580724947027926,0.4291358398041085,0.0 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,income_components,national,8.0,0.3093507514427284,0.16865768856427055,0.14298597941212882,0.47827405708239845,0.0 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,income_components,state,308.0,0.2163641766925938,0.13588607727571864,0.09657481063547035,0.33394671439249957,0.0 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,national,1.0,0.020499541972688495,0.020499541972688495,0.020499541972688495,0.198675599089492,0.0 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,state,53.0,0.22075797974313865,0.20702798274394296,0.15880205258807806,0.29213977222629944,0.0 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.21735445534264175,0.20414932137098915,0.1252762499187775,0.4498356278356252,0.0 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,national,25.0,0.25693797259096685,0.22277716122680066,0.22265566770987513,0.5291498415503632,2.0 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,state,344.0,0.09789246569895065,0.08229540363228231,0.03773914020469085,0.3388378133852289,0.0 +local,b300k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.013288614675196155,0.013288614675196155,0.013288614675196155,0.0009409716770597445,0.0 +local,b300k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.16385886365388144,0.16377162949164062,0.1548001010894437,0.06665159124470905,0.0 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.27880472704664105,0.18001375843079329,0.1624115985992932,0.378976016399089,0.0 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.285121731159793,0.15827842257768845,0.15199606195462922,0.4001792562668704,0.0 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.23627019274520367,0.14340659492755445,0.09801627631698656,0.2968930490348722,0.0 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.015200434827783283,0.015200434827783283,0.015200434827783283,0.10285384071979277,0.0 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.2435255016791281,0.20842245144657345,0.18580835236219034,0.25653143587437,0.0 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.21537807872550357,0.1911484663543331,0.1298697141400701,0.39903498652118985,0.0 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.32130068285843044,0.19246221557897336,0.25228401251060023,0.44243279455805634,2.0 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.10353524278489436,0.0732986609106624,0.03794288012155626,0.32506149143830915,0.0 +local,b300k.cps2022-2023-2024.acs100.s1,acs_native,demographics_pep,national,1.0,0.013142072603076335,0.013142072603076335,0.013142072603076335,0.00574457946282472,0.0 +local,b300k.cps2022-2023-2024.acs100.s1,acs_native,demographics_pep,state,82.0,0.16658090945865134,0.16884983613714966,0.17310640714539632,0.06664303458801327,0.0 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,income_components,cd,875.0,0.2810324406006082,0.18076528627767982,0.16658327322072236,0.3795625454008541,0.0 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,income_components,national,8.0,0.28897112220822024,0.16153937383505854,0.15031534403869876,0.40663073072873945,0.0 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,income_components,state,308.0,0.22564925876059017,0.1429295220554709,0.09917269088853753,0.29021012659647627,0.0 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,program_receipt,national,1.0,0.01733286655302345,0.01733286655302345,0.01733286655302345,0.10131908878358668,0.0 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,program_receipt,state,53.0,0.234554556947064,0.20224093488813716,0.13022263582852156,0.294780676004153,0.0 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,tax_items,cd,1772.0,0.21924479189506244,0.19626783652797594,0.13159701877970728,0.4012667459792321,0.0 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,tax_items,national,25.0,0.3656325624101904,0.20570368941616757,0.2830450357896359,0.47103181994044085,2.0 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,tax_items,state,344.0,0.1049204503493655,0.07282324348899956,0.036146361486522144,0.32856345310502155,0.0 +local,b300k.cps2022-2023-2024.acs100.s2,acs_native,demographics_pep,national,1.0,0.01235527175196395,0.01235527175196395,0.01235527175196395,0.007908708579123801,0.0 +local,b300k.cps2022-2023-2024.acs100.s2,acs_native,demographics_pep,state,82.0,0.16657533865686952,0.1672823579008103,0.16607996924950202,0.06573246253483321,0.0 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,income_components,cd,875.0,0.28318014557709364,0.18211220197798347,0.16615798046963187,0.3887871720801931,0.0 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,income_components,national,8.0,0.27127343247232183,0.1537352562814176,0.0873526325204758,0.39910792254316074,0.0 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,income_components,state,308.0,0.2242510038481965,0.13953207660206862,0.09857192362186182,0.3099745978695418,0.0 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,program_receipt,national,1.0,0.019236898516675194,0.019236898516675194,0.019236898516675194,0.10150007749422552,0.0 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,program_receipt,state,53.0,0.23294838474251592,0.20756660866497736,0.16529425061114494,0.25740969061476937,0.0 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,tax_items,cd,1772.0,0.2177488008548624,0.1954198976661449,0.12593471605779394,0.39822220731769076,0.0 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,tax_items,national,25.0,0.33373430850340724,0.19667268082444178,0.22799252603045805,0.4299717016824443,2.0 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,tax_items,state,344.0,0.10067242177324873,0.07301109766198602,0.03392417128596914,0.3286387635044876,0.0 +local,b300k.cps2023-2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.007680414223032498,0.007680414223032498,0.007680414223032498,0.008377589413330727,0.0 +local,b300k.cps2023-2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.1641883644859509,0.15864544098928793,0.1556236885847634,0.07560887119978785,0.0 +local,b300k.cps2023-2024.acs000.s0,cps_native,income_components,cd,875.0,0.27907417105340565,0.17755015132135948,0.15229107884163712,0.4324701136016301,0.0 +local,b300k.cps2023-2024.acs000.s0,cps_native,income_components,national,8.0,0.33464102022280334,0.18166024816038445,0.2071216718145077,0.5269651800078506,0.0 +local,b300k.cps2023-2024.acs000.s0,cps_native,income_components,state,308.0,0.23299819017636772,0.13999896963807976,0.09752960697600024,0.3547371991254107,0.0 +local,b300k.cps2023-2024.acs000.s0,cps_native,program_receipt,national,1.0,0.019244183153401716,0.019244183153401716,0.019244183153401716,0.2230673116162228,0.0 +local,b300k.cps2023-2024.acs000.s0,cps_native,program_receipt,state,53.0,0.24221674734488627,0.21388929297706508,0.1620711094419218,0.2965881008063,0.0 +local,b300k.cps2023-2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.21248577583951866,0.19468559628778526,0.12224344878901894,0.45433502110786905,0.0 +local,b300k.cps2023-2024.acs000.s0,cps_native,tax_items,national,25.0,0.2676721138737568,0.22531464738925927,0.20843189795681233,0.5506343068650513,2.0 +local,b300k.cps2023-2024.acs000.s0,cps_native,tax_items,state,344.0,0.10086916449026684,0.08514362294024419,0.043414895501241606,0.3518826507591654,0.0 +local,b300k.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.015042714721128185,0.015042714721128184,0.015042714721128185,0.009055290556208049,0.0 +local,b300k.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.15692966173306047,0.15957049649684313,0.14563989932811625,0.07085969497722987,0.0 +local,b300k.cps2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.2809150155724099,0.18150074836374783,0.15774660560943668,0.3669339140684229,0.0 +local,b300k.cps2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.3142464709277277,0.17932139125613844,0.22340456847194134,0.40289655211130726,0.0 +local,b300k.cps2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.2320873385842164,0.14422190238302268,0.09771340817660498,0.30710137281183186,0.0 +local,b300k.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.021498827244479626,0.021498827244479626,0.021498827244479626,0.07092573571910388,0.0 +local,b300k.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.27350756252784914,0.215720017967051,0.21009133366667745,0.3076903162520198,0.0 +local,b300k.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.22387840042788953,0.1961717270945094,0.13737919572294158,0.4116350637089717,0.0 +local,b300k.cps2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.3583157373248242,0.1989649176908054,0.26492075911453306,0.4877861936814006,2.0 +local,b300k.cps2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.11975072727313721,0.07939725645932466,0.04150452267173151,0.34907125215334495,0.0 +local,b300k.cps2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.017286281231718603,0.017286281231718603,0.017286281231718603,0.020249560721687862,0.0 +local,b300k.cps2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.15011568577342907,0.13913290518975377,0.13474400332734793,0.09501372306127615,0.0 +local,b300k.cps2024.acs000.s0,cps_native,income_components,cd,875.0,0.28776107808594537,0.1805867612590885,0.16571636738791873,0.4457556923077236,0.0 +local,b300k.cps2024.acs000.s0,cps_native,income_components,national,8.0,0.3596852899456623,0.20026317944306773,0.21039701508217484,0.523135761405959,0.0 +local,b300k.cps2024.acs000.s0,cps_native,income_components,state,308.0,0.2557141656365252,0.1453354667844506,0.0981407717203235,0.3691542979336072,0.0 +local,b300k.cps2024.acs000.s0,cps_native,program_receipt,national,1.0,0.01754355602872212,0.01754355602872212,0.01754355602872212,0.24795438764745617,0.0 +local,b300k.cps2024.acs000.s0,cps_native,program_receipt,state,53.0,0.23760123984607015,0.21047144610803972,0.1883139094869982,0.31471459651592637,0.0 +local,b300k.cps2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.21868788082614776,0.20033214090279655,0.13478441975313818,0.4534903925546885,0.0 +local,b300k.cps2024.acs000.s0,cps_native,tax_items,national,25.0,0.2939058863707629,0.221437167129482,0.22660818637292024,0.5600452269263321,2.0 +local,b300k.cps2024.acs000.s0,cps_native,tax_items,state,344.0,0.11267807862514276,0.09001130912778534,0.04679407265733132,0.36059836075011625,0.0 +local,b300k.cps2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.027096046886771048,0.027096046886771048,0.027096046886771048,0.014852052704921279,0.0 +local,b300k.cps2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.15494646816772428,0.1571204833804719,0.13452221351828286,0.06445479312430935,0.0 +local,b300k.cps2024.acs100.s0,cps_native,income_components,cd,875.0,0.27773335987883097,0.1823194021611194,0.14935413370703088,0.37947904444129243,0.0 +local,b300k.cps2024.acs100.s0,cps_native,income_components,national,8.0,0.3005578264792729,0.19139508737908384,0.13769784485293254,0.42741683668729064,0.0 +local,b300k.cps2024.acs100.s0,cps_native,income_components,state,308.0,0.22237544973362444,0.14673088694901273,0.09812474933857473,0.33824210059819737,0.0 +local,b300k.cps2024.acs100.s0,cps_native,program_receipt,national,1.0,0.03478201981941662,0.03478201981941662,0.03478201981941662,0.028593527974454302,0.0 +local,b300k.cps2024.acs100.s0,cps_native,program_receipt,state,53.0,0.2925484443868418,0.19516744728289295,0.17321897638242398,0.34807781419533446,0.0 +local,b300k.cps2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.22506711078100425,0.19274816488832877,0.1381433298887349,0.4360689674424504,0.0 +local,b300k.cps2024.acs100.s0,cps_native,tax_items,national,25.0,0.4197970081409376,0.19499417514580433,0.28242943198694104,0.5139408328554795,2.0 +local,b300k.cps2024.acs100.s0,cps_native,tax_items,state,344.0,0.13611389092845289,0.08330686973735,0.04686492876300517,0.37378093996633127,0.0 +local,b300k.cps2024.acs100.s1,acs_native,demographics_pep,national,1.0,0.03998576643536792,0.03998576643536792,0.03998576643536792,0.024319002241314284,0.0 +local,b300k.cps2024.acs100.s1,acs_native,demographics_pep,state,82.0,0.16845330693532218,0.1648152347877793,0.15901975389343065,0.06808787942333058,0.0 +local,b300k.cps2024.acs100.s1,cps_native,income_components,cd,875.0,0.28571427478389977,0.18988884763134373,0.1701394248138274,0.3859151316270397,0.0 +local,b300k.cps2024.acs100.s1,cps_native,income_components,national,8.0,0.30025792698520365,0.19214291716556636,0.11784041792585902,0.4164986685812917,0.0 +local,b300k.cps2024.acs100.s1,cps_native,income_components,state,308.0,0.23419690043695093,0.1472741589758722,0.0940743493868682,0.3496512433174437,0.0 +local,b300k.cps2024.acs100.s1,cps_native,program_receipt,national,1.0,0.0381781493483003,0.0381781493483003,0.0381781493483003,0.019790816651314526,0.0 +local,b300k.cps2024.acs100.s1,cps_native,program_receipt,state,53.0,0.30919132639747754,0.2061713538576726,0.20842805922822402,0.3625495239345136,0.0 +local,b300k.cps2024.acs100.s1,cps_native,tax_items,cd,1772.0,0.2289217975598675,0.19860699784968633,0.13485737580393894,0.4348685230810899,0.0 +local,b300k.cps2024.acs100.s1,cps_native,tax_items,national,25.0,0.3609709702470712,0.18690286211852464,0.16559281620444544,0.5464793038665083,2.0 +local,b300k.cps2024.acs100.s1,cps_native,tax_items,state,344.0,0.14052842598636905,0.08670603734886947,0.04881739469997802,0.37359062516791974,0.0 +local,b300k.cps2024.acs100.s2,acs_native,demographics_pep,national,1.0,0.03956325894209345,0.03956325894209345,0.03956325894209345,0.023027727440425933,0.0 +local,b300k.cps2024.acs100.s2,acs_native,demographics_pep,state,82.0,0.15203325967658676,0.15128356600072032,0.12340856158231449,0.06508790792851012,0.0 +local,b300k.cps2024.acs100.s2,cps_native,income_components,cd,875.0,0.3005332842780463,0.19034848141767577,0.1692251232441425,0.3865982293362447,0.0 +local,b300k.cps2024.acs100.s2,cps_native,income_components,national,8.0,0.305674408628534,0.1953175092608103,0.1447768029110782,0.42824365791626173,0.0 +local,b300k.cps2024.acs100.s2,cps_native,income_components,state,308.0,0.22412856083303512,0.14561241513787077,0.09746643288248488,0.340061249865294,0.0 +local,b300k.cps2024.acs100.s2,cps_native,program_receipt,national,1.0,0.038609121212519214,0.038609121212519214,0.038609121212519214,0.018498927612313632,0.0 +local,b300k.cps2024.acs100.s2,cps_native,program_receipt,state,53.0,0.2615392329395728,0.18313048246773075,0.18044323939484666,0.3764203330394173,0.0 +local,b300k.cps2024.acs100.s2,cps_native,tax_items,cd,1772.0,0.22824587666633092,0.19356173768597687,0.1405976301459002,0.43937367428801594,0.0 +local,b300k.cps2024.acs100.s2,cps_native,tax_items,national,25.0,0.4012823522070052,0.18780432026866872,0.21158374611127656,0.5628541538069328,2.0 +local,b300k.cps2024.acs100.s2,cps_native,tax_items,state,344.0,0.1332729999290088,0.08272127898801003,0.044221013805476106,0.38830933064683476,0.0 +local,b600k.cps0.acs100.s0,acs_native,demographics_pep,national,1.0,0.039230761412120306,0.039230761412120306,0.039230761412120306,0.02241502856907775,0.0 +local,b600k.cps0.acs100.s0,acs_native,demographics_pep,state,82.0,0.18202600101728358,0.17686546778739057,0.1710507002917423,0.0487503738933647,0.0 +local,b600k.cps0.acs100.s0,cps_native,income_components,cd,875.0,0.2775302429807402,0.18723391990957997,0.1469910934813447,0.38854844009047707,0.0 +local,b600k.cps0.acs100.s0,cps_native,income_components,national,8.0,0.30934383463243964,0.21672963654658145,0.14217498029449926,0.4592578508590413,0.0 +local,b600k.cps0.acs100.s0,cps_native,income_components,state,308.0,0.21676364128605197,0.15364755179383097,0.10601247277463124,0.3794891946521371,0.0 +local,b600k.cps0.acs100.s0,cps_native,program_receipt,national,1.0,0.0405888554726851,0.0405888554726851,0.0405888554726851,0.029271563255157885,0.0 +local,b600k.cps0.acs100.s0,cps_native,program_receipt,state,53.0,0.33298859358130306,0.23425529103986403,0.1967370508202819,0.41694201914964335,0.0 +local,b600k.cps0.acs100.s0,cps_native,tax_items,cd,1772.0,0.21918527936460727,0.18805946140674856,0.1315498962086747,0.4564202412457159,0.0 +local,b600k.cps0.acs100.s0,cps_native,tax_items,national,25.0,0.4035273114334511,0.1784162233446712,0.19152303694300477,0.568777835989975,2.0 +local,b600k.cps0.acs100.s0,cps_native,tax_items,state,344.0,0.14896247912328456,0.08996604129473856,0.04756257000466263,0.3937488024423211,0.0 +local,b600k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.010136052807003488,0.01013605280700349,0.010136052807003488,0.005855754513866495,0.0 +local,b600k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.1754019130902057,0.17097228299730252,0.17284238883173988,0.06947274184770484,0.0 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,income_components,cd,875.0,0.2571939974229721,0.16786041860974282,0.13784197423799247,0.41986626229398866,0.0 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,income_components,national,8.0,0.2972360408199539,0.15742063970979453,0.1408678380143705,0.47827405708240406,0.0 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,income_components,state,308.0,0.2107342152095433,0.13327103334700324,0.09085307203148775,0.33394671439249957,0.0 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,national,1.0,0.017211972245429037,0.017211972245429037,0.017211972245429037,0.19867559908952573,0.0 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,state,53.0,0.2211641216415796,0.20860973706809605,0.15552544716349676,0.2921397722262989,0.0 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.1978848454201713,0.18733821507391474,0.10753758450485816,0.44202465347024683,0.0 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,national,25.0,0.2628100366380806,0.22040053212384983,0.2234367974470472,0.5291498415503615,2.0 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,state,344.0,0.09722359194488586,0.08439381284361257,0.03370907820407727,0.33883781338522856,0.0 +local,b600k.cps2022-2023-2024.acs050.s0,acs_native,demographics_pep,national,1.0,0.01576951353020201,0.01576951353020201,0.01576951353020201,0.0012585729803580871,0.0 +local,b600k.cps2022-2023-2024.acs050.s0,acs_native,demographics_pep,state,82.0,0.1755881318984247,0.17581802932489968,0.16750174206586338,0.05710392080844605,0.0 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,income_components,cd,875.0,0.2605500603745919,0.1678557603928045,0.1410735191274657,0.37813873708454127,0.0 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,income_components,national,8.0,0.28303180656962545,0.14932016849380422,0.1543819149158538,0.4122176240869324,0.0 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,income_components,state,308.0,0.22566038406336075,0.139258458394681,0.09270839809204634,0.2927888377838527,0.0 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,program_receipt,national,1.0,0.010099248158177773,0.010099248158177773,0.010099248158177773,0.11978351092319243,0.0 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,program_receipt,state,53.0,0.24308717902612242,0.20974084490891096,0.16376174254163717,0.2524800600533962,0.0 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,tax_items,cd,1772.0,0.19540517208401864,0.17632939836579645,0.10482353468334439,0.391052299703642,0.0 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,tax_items,national,25.0,0.31046264411253377,0.2032082588388321,0.2707829178423111,0.4465053286990593,2.0 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,tax_items,state,344.0,0.0955685004257194,0.07291977927521158,0.03224911512670321,0.3202360737572371,0.0 +local,b600k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.01812033353474878,0.01812033353474878,0.01812033353474878,0.01202909718874619,0.0 +local,b600k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.16790058348725412,0.17241204900123233,0.15947315095731923,0.04729583748363907,0.0 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.2624714665203537,0.17887519054989248,0.1391005016343977,0.36863302207335036,0.0 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.27182257303377866,0.16056439573971076,0.06732699988992723,0.4002778498616709,0.0 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.22801475595028387,0.14553268529226174,0.0993417467984917,0.3155160837380963,0.0 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.018400053924893685,0.018400053924893685,0.018400053924893685,0.03755053468001515,0.0 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.2668946359653863,0.21412481126440827,0.17092438773462693,0.32436295801900805,0.0 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.19925786008259666,0.17897751647269855,0.11116312522810423,0.4083622758880901,0.0 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.4012610486873406,0.19738171921124925,0.2699159833688457,0.5091458550213717,2.0 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.10891701658994467,0.07414403524802768,0.03508515274486393,0.34875785598845305,0.0 +local,b600k.cps2023-2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.009748047331019298,0.009748047331019298,0.009748047331019298,0.008377589413286996,0.0 +local,b600k.cps2023-2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.17274112771628555,0.1672249621829913,0.15891778181098037,0.07560887119978771,0.0 +local,b600k.cps2023-2024.acs000.s0,cps_native,income_components,cd,875.0,0.26006802013216795,0.16643060798107703,0.13001807493222556,0.42216405346009805,0.0 +local,b600k.cps2023-2024.acs000.s0,cps_native,income_components,national,8.0,0.32120354337761525,0.16894717433895856,0.1746834663179897,0.5269651800078177,0.0 +local,b600k.cps2023-2024.acs000.s0,cps_native,income_components,state,308.0,0.2272622999137468,0.13660636213057004,0.09570523473636715,0.35473719912541135,0.0 +local,b600k.cps2023-2024.acs000.s0,cps_native,program_receipt,national,1.0,0.015818129127183264,0.015818129127183264,0.015818129127183264,0.22306731161624946,0.0 +local,b600k.cps2023-2024.acs000.s0,cps_native,program_receipt,state,53.0,0.23832240721713333,0.2127341556968829,0.15942677627754728,0.2965881008062998,0.0 +local,b600k.cps2023-2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.19193938886986367,0.17836312217435765,0.1092895596448493,0.4494370885359321,0.0 +local,b600k.cps2023-2024.acs000.s0,cps_native,tax_items,national,25.0,0.2741464393736104,0.2248587132291703,0.2052729488134771,0.5506343068650499,2.0 +local,b600k.cps2023-2024.acs000.s0,cps_native,tax_items,state,344.0,0.09638255758435196,0.08091113165432517,0.03777885084442021,0.3518826507591656,0.0 +local,b600k.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.02475917629860216,0.02475917629860216,0.02475917629860216,0.017573021743116243,0.0 +local,b600k.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.1727926702637479,0.1769222740273971,0.16539901544609548,0.04829167767667345,0.0 +local,b600k.cps2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.26024206825732665,0.17496164665252514,0.13399796675168094,0.3717379195237837,0.0 +local,b600k.cps2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.2828210135610313,0.17260429439216765,0.0908722611674771,0.41992140249388926,0.0 +local,b600k.cps2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.2236640895251088,0.14518749082449367,0.09582152382227804,0.3324917408628722,0.0 +local,b600k.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.02135616415198129,0.02135616415198129,0.02135616415198129,0.019745273778811603,0.0 +local,b600k.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.26545572634449927,0.1830663970616625,0.15345655165356942,0.3559462297475651,0.0 +local,b600k.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.20066761534376518,0.1785994945907298,0.11188863453159945,0.42451280238245664,0.0 +local,b600k.cps2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.40659358663656436,0.19756251012039058,0.2651197711910628,0.5272503608314645,2.0 +local,b600k.cps2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.12214147564951856,0.07956270178587659,0.03697552534400701,0.3624905630571128,0.0 +local,b600k.cps2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.015799493172281204,0.015799493172281204,0.015799493172281204,0.020249560721809355,0.0 +local,b600k.cps2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.16296383138786746,0.15185482529888564,0.15110273912484168,0.09501372306127694,0.0 +local,b600k.cps2024.acs000.s0,cps_native,income_components,cd,875.0,0.2656953207189058,0.1681442019089685,0.138928469444596,0.441024021680528,0.0 +local,b600k.cps2024.acs000.s0,cps_native,income_components,national,8.0,0.33846945404864565,0.18416475329229903,0.1785682800281546,0.5231357614061164,0.0 +local,b600k.cps2024.acs000.s0,cps_native,income_components,state,308.0,0.24938146856875043,0.14036162915564376,0.097186802477627,0.3691542979336072,0.0 +local,b600k.cps2024.acs000.s0,cps_native,program_receipt,national,1.0,0.013547045107091024,0.013547045107091024,0.013547045107091024,0.2479543876474267,0.0 +local,b600k.cps2024.acs000.s0,cps_native,program_receipt,state,53.0,0.22907564730531138,0.2078191281469131,0.18887255600011207,0.3147145965159256,0.0 +local,b600k.cps2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.20023622828585266,0.18349399747027104,0.11804269201798637,0.4530807151236348,0.0 +local,b600k.cps2024.acs000.s0,cps_native,tax_items,national,25.0,0.2891188920908548,0.22029568422594706,0.22804330640686277,0.5600452269263323,2.0 +local,b600k.cps2024.acs000.s0,cps_native,tax_items,state,344.0,0.10892226992996659,0.08764562355839259,0.046396086288767444,0.360598360750115,0.0 +local,b600k.cps2024.acs050.s0,acs_native,demographics_pep,national,1.0,0.024562069452818306,0.024562069452818306,0.024562069452818306,0.01827307365553338,0.0 +local,b600k.cps2024.acs050.s0,acs_native,demographics_pep,state,82.0,0.16830562304601007,0.16660914072438168,0.16047811824279828,0.06559884496603631,0.0 +local,b600k.cps2024.acs050.s0,cps_native,income_components,cd,875.0,0.26250895012461006,0.1703625468985965,0.1487048873045379,0.3822359539086939,0.0 +local,b600k.cps2024.acs050.s0,cps_native,income_components,national,8.0,0.3213737792597196,0.17019663126618276,0.21568880056112785,0.44130526123776725,0.0 +local,b600k.cps2024.acs050.s0,cps_native,income_components,state,308.0,0.23432921919635685,0.14024705468374582,0.09994917973679213,0.3055149753808625,0.0 +local,b600k.cps2024.acs050.s0,cps_native,program_receipt,national,1.0,0.00817443343464656,0.00817443343464656,0.00817443343464656,0.12482485043996469,0.0 +local,b600k.cps2024.acs050.s0,cps_native,program_receipt,state,53.0,0.24338243766687526,0.20824319556620854,0.1612262117081174,0.27861804676738294,0.0 +local,b600k.cps2024.acs050.s0,cps_native,tax_items,cd,1772.0,0.1959079928120096,0.17776178952291224,0.10926007930254977,0.39488986618796484,0.0 +local,b600k.cps2024.acs050.s0,cps_native,tax_items,national,25.0,0.3751608181579381,0.20910805078840614,0.25902182293613474,0.4694411267282574,2.0 +local,b600k.cps2024.acs050.s0,cps_native,tax_items,state,344.0,0.10285916534181022,0.07495770332349953,0.03291397899113718,0.33484771135713354,0.0 +local,b600k.cps2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.03450166581507053,0.03450166581507053,0.03450166581507053,0.02061082779871088,0.0 +local,b600k.cps2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.17796828282928034,0.17868661627764007,0.1666431160762968,0.04604926986037894,0.0 +local,b600k.cps2024.acs100.s0,cps_native,income_components,cd,875.0,0.26290664169365136,0.17802917648231859,0.1284239903960179,0.3782766470832022,0.0 +local,b600k.cps2024.acs100.s0,cps_native,income_components,national,8.0,0.29105670089519964,0.19093547501286254,0.10892520453084326,0.4365792336967421,0.0 +local,b600k.cps2024.acs100.s0,cps_native,income_components,state,308.0,0.2156128538018088,0.14570214545401558,0.09471632281715872,0.3552904992784904,0.0 +local,b600k.cps2024.acs100.s0,cps_native,program_receipt,national,1.0,0.030520846389040714,0.030520846389040714,0.030520846389040714,0.0026097729691897283,0.0 +local,b600k.cps2024.acs100.s0,cps_native,program_receipt,state,53.0,0.2972810264774454,0.19179084049858708,0.19696236565754566,0.38621612005541917,0.0 +local,b600k.cps2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.20627381142528392,0.18072813840392735,0.11930476798189896,0.4392292514945763,0.0 +local,b600k.cps2024.acs100.s0,cps_native,tax_items,national,25.0,0.4054127093356362,0.1890321985474141,0.23591734409863896,0.5503683262353999,2.0 +local,b600k.cps2024.acs100.s0,cps_native,tax_items,state,344.0,0.13087171934248212,0.08279804078354862,0.03960551339958829,0.37916761465200605,0.0 +local,natural.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.006034169476003112,0.006034169476003111,0.006034169476003112,0.005855754513861371,0.0 +local,natural.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.15388166362805228,0.15151532879676796,0.1542438829417557,0.06947274184770472,0.0 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.2924916286167124,0.18902157991980115,0.18142000219050555,0.4319959708655007,0.0 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.31781093393731763,0.17679584419707894,0.16115838024972626,0.47827405708240245,0.0 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.2171361498676638,0.1385559365933577,0.09765665655835087,0.3339467143924995,0.0 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.022028801366789155,0.022028801366789155,0.022028801366789155,0.1986755990895027,0.0 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.21970607656454014,0.20631677202314333,0.16406961022304065,0.29213977222629917,0.0 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.24047344890255934,0.22476742671377997,0.14402871091749278,0.4574705945515955,0.0 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.25741786972269515,0.22338487089464773,0.22663697479223494,0.529149841550363,2.0 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.10119344800103712,0.08444250474053568,0.04265557837220431,0.338837813385229,0.0 +local,natural.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.00867427263331132,0.00867427263331132,0.00867427263331132,0.00837758941327675,0.0 +local,natural.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.1446528096601262,0.14209629210284702,0.11649096007105197,0.07560887119978744,0.0 +local,natural.cps2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.3150915957351537,0.2003078781493754,0.2026689324629485,0.44213716093608957,0.0 +local,natural.cps2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.3789362170207237,0.21094597691649694,0.2512488375021034,0.5269651800078063,0.0 +local,natural.cps2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.23536006970086076,0.14289610902487176,0.09578473702098222,0.3547371991254109,0.0 +local,natural.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.02751921605655528,0.02751921605655528,0.02751921605655528,0.2230673116162417,0.0 +local,natural.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.24257472693888676,0.21140923808697323,0.15689030111622126,0.2965881008062997,0.0 +local,natural.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.26165240206543205,0.23879973089927597,0.16756684016615322,0.47029161827566085,0.0 +local,natural.cps2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.2847185986986231,0.23011969579176297,0.2465324383471578,0.5506343068650511,2.0 +local,natural.cps2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.11172690325900311,0.09479335450882666,0.04806387783989986,0.35188265075916575,0.0 +local,natural.cps2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.024214130186158107,0.024214130186158107,0.024214130186158107,0.02024956072162986,0.0 +local,natural.cps2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.1313869905183457,0.12078613251635743,0.1014041588164672,0.09501372306127617,0.0 +local,natural.cps2024.acs100.s0,cps_native,income_components,cd,875.0,0.36862878530678705,0.24161550365708728,0.2652470938026437,0.48482091490569446,3.0 +local,natural.cps2024.acs100.s0,cps_native,income_components,national,8.0,0.41993101833940544,0.23976728749224158,0.2870468268937866,0.5231357614058866,0.0 +local,natural.cps2024.acs100.s0,cps_native,income_components,state,308.0,0.25624029425085854,0.15689944501106054,0.12749989368463716,0.36915429793360777,0.0 +local,natural.cps2024.acs100.s0,cps_native,program_receipt,national,1.0,0.03505467954811919,0.03505467954811919,0.03505467954811919,0.2479543876474519,0.0 +local,natural.cps2024.acs100.s0,cps_native,program_receipt,state,53.0,0.24908093565333903,0.22716678599826645,0.17906538520674173,0.31471459651592565,0.0 +local,natural.cps2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.32782135195928086,0.29161912022288083,0.2302351268716587,0.48638909934111646,17.0 +local,natural.cps2024.acs100.s0,cps_native,tax_items,national,25.0,0.34871528225148696,0.2503362091807823,0.31036430276101573,0.5600452269263316,2.0 +local,natural.cps2024.acs100.s0,cps_native,tax_items,state,344.0,0.1409739736411195,0.11305577851354041,0.06865011481977656,0.3605983607501162,0.0 +national,b1200k.cps0.acs100.s0,acs_native,demographics_pep,national,1.0,0.02195769910410152,0.02195769910410152,0.02195769910410152,0.01687877206984775,0.0 +national,b1200k.cps0.acs100.s0,acs_native,demographics_pep,state,82.0,0.18441106064342377,0.17701257951928287,0.15417522655484414,0.04257015050767078,0.0 +national,b1200k.cps0.acs100.s0,cps_native,income_components,cd,875.0,0.30764609969672274,0.20680953405266084,0.20973350809819738,0.38454838185340123,0.0 +national,b1200k.cps0.acs100.s0,cps_native,income_components,national,8.0,0.26888281404126946,0.1598243500246062,0.1427530444211232,0.4635469598128417,0.0 +national,b1200k.cps0.acs100.s0,cps_native,income_components,state,308.0,0.23197237474725407,0.15186950129638147,0.1121665458215783,0.36978813930519205,0.0 +national,b1200k.cps0.acs100.s0,cps_native,program_receipt,national,1.0,0.025553945100445036,0.025553945100445032,0.025553945100445036,0.03224964237470852,0.0 +national,b1200k.cps0.acs100.s0,cps_native,program_receipt,state,53.0,0.29968045663035897,0.2110881988442031,0.15462591238432416,0.41642954124675036,0.0 +national,b1200k.cps0.acs100.s0,cps_native,tax_items,cd,1772.0,0.29586659384860997,0.2673724250790164,0.20068547505336365,0.453593489770896,0.0 +national,b1200k.cps0.acs100.s0,cps_native,tax_items,national,25.0,0.2766156909838321,0.13485786242780756,0.18911625709033775,0.5735022997088989,2.0 +national,b1200k.cps0.acs100.s0,cps_native,tax_items,state,344.0,0.13521094558855334,0.08864526492144273,0.04799737244969336,0.3975102748162476,0.0 +national,b1200k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.0052202385313126366,0.0052202385313126366,0.0052202385313126366,0.0058557545138544186,0.0 +national,b1200k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.16777266351564057,0.1491664455046359,0.12759582195164743,0.06947274184770601,0.0 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,income_components,cd,875.0,0.3235953533512478,0.2552480045431331,0.20625995173024445,0.41459837672361416,0.0 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,income_components,national,8.0,0.32928572884478957,0.16213302094236687,0.21350680122480092,0.4782740570823931,0.0 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,income_components,state,308.0,0.2513346707648975,0.14734672126303786,0.10667443170272656,0.3339467143924983,0.0 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,national,1.0,0.02302489934911462,0.02302489934911462,0.02302489934911462,0.19867559908946433,0.0 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,state,53.0,0.20790520556155945,0.19497618983198423,0.13603741639226552,0.2921397722263,0.0 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.35154523730343396,0.33886968805693923,0.260045888081906,0.4399785423311982,0.0 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,national,25.0,0.21372600639712971,0.136100042925061,0.13993516652067975,0.5291498415503633,2.0 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,state,344.0,0.103106292409962,0.0829587852409976,0.04686864134744145,0.33883781338522934,0.0 +national,b1200k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.013270541157751716,0.013270541157751716,0.013270541157751716,0.015382628295531922,0.0 +national,b1200k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.16572583257448276,0.15814483333313564,0.13662773418562119,0.043461430521572225,0.0 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.3000866963596899,0.20858227328040593,0.19297607537048006,0.36967706910712117,0.0 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.2840843723274111,0.16644389179349514,0.1952803098085948,0.42701180053363924,0.0 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.2170112714257001,0.14318764915187304,0.10676106845198147,0.336453446112695,0.0 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.019110770474478306,0.019110770474478306,0.019110770474478306,0.001560893746850735,0.0 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.2394954743578383,0.16150871996897703,0.12342843085119606,0.37195145805988555,0.0 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.3009724729875966,0.2708344058819345,0.21052641263541033,0.4239846039175,0.0 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.26322038600335806,0.12843901850830952,0.14234436549089366,0.5560157530602818,2.0 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.11848225108641687,0.08034054794921686,0.04245869245122949,0.37028807025632865,0.0 +national,b1200k.cps2023-2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.002121032115383257,0.002121032115383257,0.002121032115383257,0.008377589413013453,0.0 +national,b1200k.cps2023-2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.17010912963852007,0.1568844965738513,0.13906346411328419,0.07560887119978749,0.0 +national,b1200k.cps2023-2024.acs000.s0,cps_native,income_components,cd,875.0,0.32792238604490337,0.25227291873010155,0.22110067390113006,0.4205706570917942,0.0 +national,b1200k.cps2023-2024.acs000.s0,cps_native,income_components,national,8.0,0.32209637831406707,0.16591520895346865,0.22831189840788535,0.5269651800077799,0.0 +national,b1200k.cps2023-2024.acs000.s0,cps_native,income_components,state,308.0,0.23993486065598704,0.14090650678043606,0.09460200472119297,0.3547371991254122,0.0 +national,b1200k.cps2023-2024.acs000.s0,cps_native,program_receipt,national,1.0,0.02213059947226088,0.02213059947226088,0.02213059947226088,0.2230673116161331,0.0 +national,b1200k.cps2023-2024.acs000.s0,cps_native,program_receipt,state,53.0,0.21081576411829467,0.19681368918336908,0.15616225428444272,0.2965881008063,0.0 +national,b1200k.cps2023-2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.35415598544893173,0.3422106576187931,0.264928013122722,0.4499901440346591,0.0 +national,b1200k.cps2023-2024.acs000.s0,cps_native,tax_items,national,25.0,0.23769104868187083,0.1406099003757429,0.16287315166111127,0.5506343068650498,2.0 +national,b1200k.cps2023-2024.acs000.s0,cps_native,tax_items,state,344.0,0.10524622022884024,0.08156912079062434,0.05110235143511759,0.3518826507591661,0.0 +national,b1200k.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.016589596111195922,0.016589596111195922,0.016589596111195922,0.01729985070538173,0.0 +national,b1200k.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.16789323516569246,0.16171657478777973,0.14911946939589438,0.04395537463408709,0.0 +national,b1200k.cps2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.297947321629199,0.2040923819918474,0.1842422401659847,0.37408290308677483,0.0 +national,b1200k.cps2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.28368890691292276,0.16861916535174784,0.1888494109953362,0.43633847203582976,0.0 +national,b1200k.cps2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.2191053545869676,0.1445982694236426,0.11092020538326933,0.34723657081554843,0.0 +national,b1200k.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.021106496711300833,0.021106496711300833,0.021106496711300833,0.007300241349242352,0.0 +national,b1200k.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.254270666452558,0.17508602260523168,0.12600029277283378,0.3867277099908303,0.0 +national,b1200k.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.2990649297438268,0.26858856946725257,0.20306560397741247,0.4350560038999481,0.0 +national,b1200k.cps2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.26146942965985237,0.12795231442457702,0.15615650260933653,0.5612460474999122,2.0 +national,b1200k.cps2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.12140193109356652,0.08213411703801168,0.046699492390995884,0.3809892888582213,0.0 +national,b1200k.cps2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.0020245750337736686,0.0020245750337736686,0.0020245750337736686,0.020249560721814663,0.0 +national,b1200k.cps2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.16804774526293845,0.14967961656088577,0.14161397876311532,0.09501372306127602,0.0 +national,b1200k.cps2024.acs000.s0,cps_native,income_components,cd,875.0,0.3231392586379741,0.24950977323608778,0.2131851589562741,0.43813763234144554,0.0 +national,b1200k.cps2024.acs000.s0,cps_native,income_components,national,8.0,0.31653521719443933,0.16436086377008868,0.194403450196737,0.5231357614058957,0.0 +national,b1200k.cps2024.acs000.s0,cps_native,income_components,state,308.0,0.2726246403105957,0.15041952839327885,0.1291820920054254,0.3691542979336075,0.0 +national,b1200k.cps2024.acs000.s0,cps_native,program_receipt,national,1.0,0.02435512321864415,0.02435512321864415,0.02435512321864415,0.24795438764739083,0.0 +national,b1200k.cps2024.acs000.s0,cps_native,program_receipt,state,53.0,0.21153125590840235,0.19826078894055923,0.13409701685091235,0.3147145965159252,0.0 +national,b1200k.cps2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.35441443098450887,0.34054446095088137,0.2633605857489142,0.4533561705186073,0.0 +national,b1200k.cps2024.acs000.s0,cps_native,tax_items,national,25.0,0.22887537782601014,0.12521490774553623,0.10081048908962394,0.5600452269263307,2.0 +national,b1200k.cps2024.acs000.s0,cps_native,tax_items,state,344.0,0.11162758094435697,0.0832968237988085,0.04748246828062481,0.36059836075011376,0.0 +national,b1200k.cps2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.020041541877410026,0.020041541877410026,0.020041541877410026,0.0175968395202377,0.0 +national,b1200k.cps2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.17531622479503287,0.16832163730648958,0.13664690313673028,0.04383220009093377,0.0 +national,b1200k.cps2024.acs100.s0,cps_native,income_components,cd,875.0,0.3030748191908012,0.20404242454281368,0.1936274773574593,0.3786111122144415,0.0 +national,b1200k.cps2024.acs100.s0,cps_native,income_components,national,8.0,0.27847798729209045,0.16679489030919548,0.16950120470258218,0.4444228133539717,0.0 +national,b1200k.cps2024.acs100.s0,cps_native,income_components,state,308.0,0.22843448064670446,0.14898699052101208,0.11987452537696658,0.3580112185950272,0.0 +national,b1200k.cps2024.acs100.s0,cps_native,program_receipt,national,1.0,0.02239293640499914,0.022392936404999144,0.02239293640499914,0.018931121048764134,0.0 +national,b1200k.cps2024.acs100.s0,cps_native,program_receipt,state,53.0,0.2664434330768029,0.18967001526720484,0.1270632367955305,0.4017073225890307,0.0 +national,b1200k.cps2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.29624925172990046,0.2654751329609256,0.1966429491233997,0.44347825448303935,0.0 +national,b1200k.cps2024.acs100.s0,cps_native,tax_items,national,25.0,0.2608897204921548,0.1319504705536772,0.17232911187198124,0.5678938650396395,2.0 +national,b1200k.cps2024.acs100.s0,cps_native,tax_items,state,344.0,0.12662306516466945,0.08438057222767512,0.04793099226377642,0.3884940390560251,0.0 +national,b300k.cps0.acs100.s0,acs_native,demographics_pep,national,1.0,0.016870192068919425,0.016870192068919425,0.016870192068919425,0.013400519618049613,0.0 +national,b300k.cps0.acs100.s0,acs_native,demographics_pep,state,82.0,0.17631137645123166,0.17361551540158124,0.13039259058518654,0.06782021622343067,0.0 +national,b300k.cps0.acs100.s0,cps_native,income_components,cd,875.0,0.35128318424714394,0.2554393034191434,0.26208632680440735,0.40117938753532867,0.0 +national,b300k.cps0.acs100.s0,cps_native,income_components,national,8.0,0.2717134961732203,0.15880972938504043,0.1575659684815367,0.4633596709819412,0.0 +national,b300k.cps0.acs100.s0,cps_native,income_components,state,308.0,0.26125044364790023,0.16437093978603573,0.13697628101484355,0.39529156481402894,0.0 +national,b300k.cps0.acs100.s0,cps_native,program_receipt,national,1.0,0.02724119086542924,0.02724119086542924,0.02724119086542924,0.026716643217532504,0.0 +national,b300k.cps0.acs100.s0,cps_native,program_receipt,state,53.0,0.3032951550346929,0.21098458680375742,0.2048503198795799,0.4086828465688528,0.0 +national,b300k.cps0.acs100.s0,cps_native,tax_items,cd,1772.0,0.3582662830085487,0.31419178200921266,0.2725611839523062,0.46464998602081803,0.0 +national,b300k.cps0.acs100.s0,cps_native,tax_items,national,25.0,0.2537067303546097,0.1318177358017933,0.18652508022387293,0.5557314764840549,2.0 +national,b300k.cps0.acs100.s0,cps_native,tax_items,state,344.0,0.1506784259545128,0.09202452889927706,0.04997295728784494,0.39805565541393706,0.0 +national,b300k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.005167825391038847,0.005167825391038847,0.005167825391038847,0.005855754513860456,0.0 +national,b300k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.16883232591661934,0.14915585298054376,0.12488890388665849,0.06947274184770443,0.0 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,income_components,cd,875.0,0.36163690746942406,0.2799460412049051,0.2502947481740828,0.4291358398041085,0.0 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,income_components,national,8.0,0.32977515490559406,0.16261928028894954,0.21339110427713515,0.47827405708239845,0.0 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,income_components,state,308.0,0.2501692829635922,0.1468407612279022,0.10497712386667596,0.33394671439249957,0.0 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,national,1.0,0.02359433133322223,0.02359433133322223,0.02359433133322223,0.198675599089492,0.0 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,state,53.0,0.20768612837662662,0.19479633803415647,0.1393190925540098,0.29213977222629944,0.0 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.3931206653033833,0.37240182675230715,0.3170275085957328,0.4498356278356252,0.0 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,national,25.0,0.21404667349386203,0.13667272619816687,0.13687253763110924,0.5291498415503632,2.0 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,state,344.0,0.10326926102077237,0.08317392259443335,0.04605459108975407,0.3388378133852289,0.0 +national,b300k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.008725727505773193,0.008725727505773193,0.008725727505773193,0.0009409716770597445,0.0 +national,b300k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.1694656640096662,0.14915796537905357,0.12995660467522813,0.06665159124470905,0.0 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.343391408289106,0.24776513814708398,0.23743816195996031,0.378976016399089,0.0 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.29035388085687736,0.14699621222025963,0.1643323899532224,0.4001792562668704,0.0 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.2175345096397957,0.13898606978423844,0.08695306286827685,0.2968930490348722,0.0 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.015996373905224303,0.015996373905224303,0.015996373905224303,0.10285384071979277,0.0 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.18389306059868185,0.18631884326534107,0.12838016767245725,0.25653143587437,0.0 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.3557118942484612,0.3201692896714062,0.2794066942743947,0.39903498652118985,0.0 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.1676711991493631,0.11481387847275913,0.06985386074099965,0.44243279455805634,2.0 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.11122761415655996,0.08070525044167341,0.04515957653701194,0.32506149143830915,0.0 +national,b300k.cps2022-2023-2024.acs100.s1,acs_native,demographics_pep,national,1.0,0.007864647386341813,0.007864647386341813,0.007864647386341813,0.00574457946282472,0.0 +national,b300k.cps2022-2023-2024.acs100.s1,acs_native,demographics_pep,state,82.0,0.15892294151193456,0.14581627390325258,0.13322466274447062,0.06664303458801327,0.0 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,income_components,cd,875.0,0.34018024084652343,0.2456263272805082,0.2272616344277275,0.3795625454008541,0.0 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,income_components,national,8.0,0.2962365744601121,0.15270991521899596,0.1693785423176027,0.40663073072873945,0.0 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,income_components,state,308.0,0.2305607520155476,0.1420695733166254,0.08811629086202039,0.29021012659647627,0.0 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,program_receipt,national,1.0,0.016840998167351837,0.016840998167351837,0.016840998167351837,0.10131908878358668,0.0 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,program_receipt,state,53.0,0.19885977768618832,0.19192929933829064,0.13805964324203834,0.294780676004153,0.0 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,tax_items,cd,1772.0,0.36409657696436076,0.32961540397346506,0.27908178020001767,0.4012667459792321,0.0 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,tax_items,national,25.0,0.2828133739485453,0.12318720555769071,0.13744965922385063,0.47103181994044085,2.0 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,tax_items,state,344.0,0.11444292204091333,0.07813033674697079,0.044487395970071786,0.32856345310502155,0.0 +national,b300k.cps2022-2023-2024.acs100.s2,acs_native,demographics_pep,national,1.0,0.013112172113125837,0.013112172113125837,0.013112172113125837,0.007908708579123801,0.0 +national,b300k.cps2022-2023-2024.acs100.s2,acs_native,demographics_pep,state,82.0,0.16150427764582204,0.14293748694961242,0.12541260308537644,0.06573246253483321,0.0 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,income_components,cd,875.0,0.35363214799932335,0.24977005130623395,0.2346124689589099,0.3887871720801931,0.0 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,income_components,national,8.0,0.2864134513967582,0.14785890310172922,0.16642636562580612,0.39910792254316074,0.0 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,income_components,state,308.0,0.22415015708249011,0.13768313502706536,0.09591729027382125,0.3099745978695418,0.0 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,program_receipt,national,1.0,0.014709726614093675,0.014709726614093675,0.014709726614093675,0.10150007749422552,0.0 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,program_receipt,state,53.0,0.21213674854359396,0.19641827597744208,0.1281674524669468,0.25740969061476937,0.0 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,tax_items,cd,1772.0,0.35513195329635117,0.32139872473546593,0.27161593003589574,0.39822220731769076,0.0 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,tax_items,national,25.0,0.14029193104915635,0.11346430625428228,0.06988307035891135,0.4299717016824443,2.0 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,tax_items,state,344.0,0.11422761523151209,0.08039068244758937,0.047376815581054665,0.3286387635044876,0.0 +national,b300k.cps2023-2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.0017346938889252002,0.0017346938889252002,0.0017346938889252002,0.008377589413330727,0.0 +national,b300k.cps2023-2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.1703353292068738,0.15605154066010846,0.1444893565237877,0.07560887119978785,0.0 +national,b300k.cps2023-2024.acs000.s0,cps_native,income_components,cd,875.0,0.3541385957210492,0.27771727146700187,0.240317419172691,0.4324701136016301,0.0 +national,b300k.cps2023-2024.acs000.s0,cps_native,income_components,national,8.0,0.32105701301425404,0.16567906228068985,0.22473692916089136,0.5269651800078506,0.0 +national,b300k.cps2023-2024.acs000.s0,cps_native,income_components,state,308.0,0.241244989898294,0.1414807308325787,0.0949712593908498,0.3547371991254107,0.0 +national,b300k.cps2023-2024.acs000.s0,cps_native,program_receipt,national,1.0,0.02305290586260365,0.02305290586260365,0.02305290586260365,0.2230673116162228,0.0 +national,b300k.cps2023-2024.acs000.s0,cps_native,program_receipt,state,53.0,0.2117635469327823,0.197357300272905,0.1558686020947598,0.2965881008063,0.0 +national,b300k.cps2023-2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.3912707474902042,0.3713504826183878,0.30905321384082296,0.45433502110786905,0.0 +national,b300k.cps2023-2024.acs000.s0,cps_native,tax_items,national,25.0,0.23789205574760075,0.14066163171150312,0.16647423060888997,0.5506343068650513,2.0 +national,b300k.cps2023-2024.acs000.s0,cps_native,tax_items,state,344.0,0.10525161471376977,0.08169006921487083,0.049763920807426046,0.3518826507591654,0.0 +national,b300k.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.010464550350701743,0.010464550350701743,0.010464550350701743,0.009055290556208049,0.0 +national,b300k.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.17130848948985306,0.15629070637523135,0.15939005574140064,0.07085969497722987,0.0 +national,b300k.cps2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.34100599629947437,0.24141655133099743,0.24331461670790575,0.3669339140684229,0.0 +national,b300k.cps2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.29728213984230956,0.15909728897700975,0.20729177626055137,0.40289655211130726,0.0 +national,b300k.cps2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.23613502945233353,0.14761911470910194,0.11440122922922344,0.30710137281183186,0.0 +national,b300k.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.0168842267865189,0.0168842267865189,0.0168842267865189,0.07092573571910388,0.0 +national,b300k.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.21720632272633078,0.1997918455869396,0.13639086770626824,0.3076903162520198,0.0 +national,b300k.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.36061429401905143,0.32365848886963783,0.28229379299267365,0.4116350637089717,0.0 +national,b300k.cps2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.19660979529314532,0.11504822097956896,0.1026093834827312,0.4877861936814006,2.0 +national,b300k.cps2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.12372753888842442,0.08250326201888397,0.04667570720359082,0.34907125215334495,0.0 +national,b300k.cps2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.0022592479979299533,0.0022592479979299533,0.0022592479979299533,0.020249560721687862,0.0 +national,b300k.cps2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.16759991019765672,0.14850703836387832,0.13610953270106663,0.09501372306127615,0.0 +national,b300k.cps2024.acs000.s0,cps_native,income_components,cd,875.0,0.34940251136195666,0.2693167576943206,0.24081951241792707,0.4457556923077236,0.0 +national,b300k.cps2024.acs000.s0,cps_native,income_components,national,8.0,0.31638972165054957,0.16553993773158815,0.19874837362564574,0.523135761405959,0.0 +national,b300k.cps2024.acs000.s0,cps_native,income_components,state,308.0,0.2717766467137627,0.15026096294393193,0.13247042642699175,0.3691542979336072,0.0 +national,b300k.cps2024.acs000.s0,cps_native,program_receipt,national,1.0,0.024836190989934195,0.024836190989934195,0.024836190989934195,0.24795438764745617,0.0 +national,b300k.cps2024.acs000.s0,cps_native,program_receipt,state,53.0,0.21478031358230742,0.19947942128890242,0.14573820146243688,0.31471459651592637,0.0 +national,b300k.cps2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.38372503718890044,0.3625067226854072,0.2967808644264274,0.4534903925546885,0.0 +national,b300k.cps2024.acs000.s0,cps_native,tax_items,national,25.0,0.22881269092246512,0.12522645134013252,0.10111754547845067,0.5600452269263321,2.0 +national,b300k.cps2024.acs000.s0,cps_native,tax_items,state,344.0,0.11192711452186348,0.08372983626556475,0.04860815863394203,0.36059836075011625,0.0 +national,b300k.cps2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.00931796336678804,0.00931796336678804,0.00931796336678804,0.014852052704921279,0.0 +national,b300k.cps2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.15972336025799524,0.15335965330502707,0.1332619340175774,0.06445479312430935,0.0 +national,b300k.cps2024.acs100.s0,cps_native,income_components,cd,875.0,0.35265118489144476,0.25790169471387586,0.24623965724078373,0.37947904444129243,0.0 +national,b300k.cps2024.acs100.s0,cps_native,income_components,national,8.0,0.3012468453260867,0.17298665303963331,0.24256121661517926,0.42741683668729064,0.0 +national,b300k.cps2024.acs100.s0,cps_native,income_components,state,308.0,0.24882813480419388,0.15606822407742243,0.12918347644957567,0.33824210059819737,0.0 +national,b300k.cps2024.acs100.s0,cps_native,program_receipt,national,1.0,0.016939819057195896,0.016939819057195896,0.016939819057195896,0.028593527974454302,0.0 +national,b300k.cps2024.acs100.s0,cps_native,program_receipt,state,53.0,0.260413002804286,0.16470684646502437,0.1337038406944402,0.34807781419533446,0.0 +national,b300k.cps2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.3674673000569755,0.3286941958992301,0.28630783484312294,0.4360689674424504,0.0 +national,b300k.cps2024.acs100.s0,cps_native,tax_items,national,25.0,0.2754496465385886,0.13414786798185854,0.184741219476327,0.5139408328554795,2.0 +national,b300k.cps2024.acs100.s0,cps_native,tax_items,state,344.0,0.13256622347613956,0.08103869692152348,0.04897012456856689,0.37378093996633127,0.0 +national,b300k.cps2024.acs100.s1,acs_native,demographics_pep,national,1.0,0.015404802601410693,0.015404802601410693,0.015404802601410693,0.024319002241314284,0.0 +national,b300k.cps2024.acs100.s1,acs_native,demographics_pep,state,82.0,0.16668764568786598,0.15680788142305943,0.13360221080787146,0.06808787942333058,0.0 +national,b300k.cps2024.acs100.s1,cps_native,income_components,cd,875.0,0.3612127672330394,0.2570444730706306,0.2541197916191934,0.3859151316270397,0.0 +national,b300k.cps2024.acs100.s1,cps_native,income_components,national,8.0,0.2977120578359827,0.17502012251655594,0.22371554293117815,0.4164986685812917,0.0 +national,b300k.cps2024.acs100.s1,cps_native,income_components,state,308.0,0.2509771048266822,0.15086831972484302,0.12963656367549917,0.3496512433174437,0.0 +national,b300k.cps2024.acs100.s1,cps_native,program_receipt,national,1.0,0.0178695300297639,0.0178695300297639,0.0178695300297639,0.019790816651314526,0.0 +national,b300k.cps2024.acs100.s1,cps_native,program_receipt,state,53.0,0.26814652916269605,0.16594843342995402,0.12158462514191483,0.3625495239345136,0.0 +national,b300k.cps2024.acs100.s1,cps_native,tax_items,cd,1772.0,0.37386621383407415,0.33616925229640326,0.28925882706595685,0.4348685230810899,0.0 +national,b300k.cps2024.acs100.s1,cps_native,tax_items,national,25.0,0.2477600920853501,0.13697162735945176,0.10280002841379127,0.5464793038665083,2.0 +national,b300k.cps2024.acs100.s1,cps_native,tax_items,state,344.0,0.12929058872743387,0.07958346341288848,0.04774611621930204,0.37359062516791974,0.0 +national,b300k.cps2024.acs100.s2,acs_native,demographics_pep,national,1.0,0.010001515838666585,0.010001515838666585,0.010001515838666585,0.023027727440425933,0.0 +national,b300k.cps2024.acs100.s2,acs_native,demographics_pep,state,82.0,0.15140609544121636,0.14622132368340934,0.12907187869169637,0.06508790792851012,0.0 +national,b300k.cps2024.acs100.s2,cps_native,income_components,cd,875.0,0.3686085945173797,0.2588705161358702,0.2579506518317372,0.3865982293362447,0.0 +national,b300k.cps2024.acs100.s2,cps_native,income_components,national,8.0,0.3008031095321073,0.18156489660155303,0.2231968823949484,0.42824365791626173,0.0 +national,b300k.cps2024.acs100.s2,cps_native,income_components,state,308.0,0.24795753418976757,0.15141192263287945,0.13782665992659682,0.340061249865294,0.0 +national,b300k.cps2024.acs100.s2,cps_native,program_receipt,national,1.0,0.019857064931926485,0.019857064931926485,0.019857064931926485,0.018498927612313632,0.0 +national,b300k.cps2024.acs100.s2,cps_native,program_receipt,state,53.0,0.19367471990644233,0.1394208117970878,0.10781305232429036,0.3764203330394173,0.0 +national,b300k.cps2024.acs100.s2,cps_native,tax_items,cd,1772.0,0.37203909943411284,0.33269959535144616,0.29190170190421183,0.43937367428801594,0.0 +national,b300k.cps2024.acs100.s2,cps_native,tax_items,national,25.0,0.2486027825799415,0.12262436494746977,0.1573026595237983,0.5628541538069328,2.0 +national,b300k.cps2024.acs100.s2,cps_native,tax_items,state,344.0,0.12704222296996676,0.08023390533648771,0.05175327811634929,0.38830933064683476,0.0 +national,b600k.cps0.acs100.s0,acs_native,demographics_pep,national,1.0,0.02011147630101239,0.020111476301012385,0.02011147630101239,0.02241502856907775,0.0 +national,b600k.cps0.acs100.s0,acs_native,demographics_pep,state,82.0,0.18272324742321505,0.17659111903303265,0.13798933260708823,0.0487503738933647,0.0 +national,b600k.cps0.acs100.s0,cps_native,income_components,cd,875.0,0.3424187684904904,0.2313626714339115,0.23699732918634808,0.38854844009047707,0.0 +national,b600k.cps0.acs100.s0,cps_native,income_components,national,8.0,0.2689951671881319,0.15913298424693192,0.14523395108551543,0.4592578508590413,0.0 +national,b600k.cps0.acs100.s0,cps_native,income_components,state,308.0,0.24966655406897992,0.15624767270942483,0.14465799026297288,0.3794891946521371,0.0 +national,b600k.cps0.acs100.s0,cps_native,program_receipt,national,1.0,0.02489297997316097,0.02489297997316097,0.02489297997316097,0.029271563255157885,0.0 +national,b600k.cps0.acs100.s0,cps_native,program_receipt,state,53.0,0.29294482806889643,0.20930031503733534,0.162036151783156,0.41694201914964335,0.0 +national,b600k.cps0.acs100.s0,cps_native,tax_items,cd,1772.0,0.32361559846110066,0.28513385765062044,0.23379542026773675,0.4564202412457159,0.0 +national,b600k.cps0.acs100.s0,cps_native,tax_items,national,25.0,0.30009399815900706,0.14236264688039546,0.19889655897982783,0.568777835989975,2.0 +national,b600k.cps0.acs100.s0,cps_native,tax_items,state,344.0,0.14197510217799877,0.08841334596283541,0.05192372872198828,0.3937488024423211,0.0 +national,b600k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.0053365734581045385,0.0053365734581045385,0.0053365734581045385,0.005855754513866495,0.0 +national,b600k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.16812914955780833,0.1490947355556649,0.12682779901721547,0.06947274184770484,0.0 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,income_components,cd,875.0,0.33705595250545295,0.2659680635852056,0.22458848906465628,0.41986626229398866,0.0 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,income_components,national,8.0,0.3294899882420628,0.16225745849592083,0.21290884773639202,0.47827405708240406,0.0 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,income_components,state,308.0,0.2497558167425825,0.1465536741402803,0.10068479994791293,0.33394671439249957,0.0 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,national,1.0,0.023530777211221248,0.023530777211221248,0.023530777211221248,0.19867559908952573,0.0 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,state,53.0,0.20797277066731495,0.19475814819364867,0.138009379648619,0.2921397722262989,0.0 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.36484605420483474,0.34908314404378693,0.2752634753746337,0.44202465347024683,0.0 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,national,25.0,0.2138082503132445,0.13639714259639124,0.13720162861141832,0.5291498415503615,2.0 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,state,344.0,0.1031874802625938,0.08300171592795827,0.04651921200164309,0.33883781338522856,0.0 +national,b600k.cps2022-2023-2024.acs050.s0,acs_native,demographics_pep,national,1.0,0.009246832451492448,0.009246832451492448,0.009246832451492448,0.0012585729803580871,0.0 +national,b600k.cps2022-2023-2024.acs050.s0,acs_native,demographics_pep,state,82.0,0.16310377019843816,0.14481008292000752,0.12478774763305389,0.05710392080844605,0.0 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,income_components,cd,875.0,0.3188925375284967,0.22832739764849128,0.20782614752354545,0.37813873708454127,0.0 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,income_components,national,8.0,0.29512682597853446,0.14732448555611047,0.15736293401407436,0.4122176240869324,0.0 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,income_components,state,308.0,0.21346085314456834,0.1362020817903301,0.0853337784349712,0.2927888377838527,0.0 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,program_receipt,national,1.0,0.015882587687460887,0.015882587687460887,0.015882587687460887,0.11978351092319243,0.0 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,program_receipt,state,53.0,0.18740334543196172,0.18700896188598276,0.1278790279570473,0.2524800600533962,0.0 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,tax_items,cd,1772.0,0.33195745787437014,0.3049992951093554,0.24664950057868296,0.391052299703642,0.0 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,tax_items,national,25.0,0.18503149715216213,0.12023739967692121,0.07177294428995992,0.4465053286990593,2.0 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,tax_items,state,344.0,0.1115046834722531,0.07923419525415869,0.046382094981725464,0.3202360737572371,0.0 +national,b600k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.008554534227795198,0.008554534227795198,0.008554534227795198,0.01202909718874619,0.0 +national,b600k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.15873853658076326,0.14899255514621912,0.12754090501230264,0.04729583748363907,0.0 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.3262427297847171,0.23257425739175286,0.21165577335238137,0.36863302207335036,0.0 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.2893728521205644,0.16218240689145802,0.2163602796510579,0.4002778498616709,0.0 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.2210704782651005,0.1440288591118013,0.10677609012634764,0.3155160837380963,0.0 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.016956899842189187,0.016956899842189187,0.016956899842189187,0.03755053468001515,0.0 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.2248545879476049,0.2003986854435469,0.13284473025793556,0.32436295801900805,0.0 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.3264735047442763,0.2910475006507393,0.23956257004027842,0.4083622758880901,0.0 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.2385466084964923,0.1336357659198618,0.1297237020044589,0.5091458550213717,2.0 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.11602189617659167,0.0784618236438128,0.04426792577578813,0.34875785598845305,0.0 +national,b600k.cps2023-2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.001618349308075585,0.0016183493080755848,0.001618349308075585,0.008377589413286996,0.0 +national,b600k.cps2023-2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.17051499247871504,0.15663873209102755,0.1443176249604785,0.07560887119978771,0.0 +national,b600k.cps2023-2024.acs000.s0,cps_native,income_components,cd,875.0,0.3343856632126332,0.2597982095488954,0.22121202873526485,0.42216405346009805,0.0 +national,b600k.cps2023-2024.acs000.s0,cps_native,income_components,national,8.0,0.32161404183154935,0.1658365676761915,0.22642947064257146,0.5269651800078177,0.0 +national,b600k.cps2023-2024.acs000.s0,cps_native,income_components,state,308.0,0.24089602188398596,0.1410695704762541,0.09560219900262476,0.35473719912541135,0.0 +national,b600k.cps2023-2024.acs000.s0,cps_native,program_receipt,national,1.0,0.022775186128494364,0.022775186128494364,0.022775186128494364,0.22306731161624946,0.0 +national,b600k.cps2023-2024.acs000.s0,cps_native,program_receipt,state,53.0,0.21163516529999524,0.19728937068078964,0.1573105227337019,0.2965881008062998,0.0 +national,b600k.cps2023-2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.3679213205348031,0.354676713256416,0.28190671919289345,0.4494370885359321,0.0 +national,b600k.cps2023-2024.acs000.s0,cps_native,tax_items,national,25.0,0.23766450191219107,0.14044977953346552,0.16581263459056883,0.5506343068650499,2.0 +national,b600k.cps2023-2024.acs000.s0,cps_native,tax_items,state,344.0,0.10524017537062978,0.08164983429685771,0.05095591823205167,0.3518826507591656,0.0 +national,b600k.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.0105143654325601,0.0105143654325601,0.0105143654325601,0.017573021743116243,0.0 +national,b600k.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.1594929954913748,0.15411506652288753,0.14076211296175056,0.04829167767667345,0.0 +national,b600k.cps2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.329919322491642,0.22764700531486934,0.20780418868142828,0.3717379195237837,0.0 +national,b600k.cps2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.2921733910880401,0.16894339419826018,0.2180810946185232,0.41992140249388926,0.0 +national,b600k.cps2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.22528352031241805,0.1471673922779094,0.11342659803008534,0.3324917408628722,0.0 +national,b600k.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.017101683358144604,0.017101683358144604,0.017101683358144604,0.019745273778811603,0.0 +national,b600k.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.24584572541285482,0.15830688091048808,0.13026563249766798,0.3559462297475651,0.0 +national,b600k.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.32541715634264756,0.2906762695751777,0.23258215774665963,0.42451280238245664,0.0 +national,b600k.cps2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.20359916084943233,0.12629200252777717,0.1769798472323017,0.5272503608314645,2.0 +national,b600k.cps2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.12315745579178713,0.08004394113090325,0.04578116215447012,0.3624905630571128,0.0 +national,b600k.cps2024.acs000.s0,acs_native,demographics_pep,national,1.0,0.0021358882635466037,0.0021358882635466037,0.0021358882635466037,0.020249560721809355,0.0 +national,b600k.cps2024.acs000.s0,acs_native,demographics_pep,state,82.0,0.16789701330967025,0.14898923433085667,0.13878380395612092,0.09501372306127694,0.0 +national,b600k.cps2024.acs000.s0,cps_native,income_components,cd,875.0,0.3399999174330977,0.2570692865569055,0.2335343581939193,0.441024021680528,0.0 +national,b600k.cps2024.acs000.s0,cps_native,income_components,national,8.0,0.31661731565981016,0.16505051648848001,0.19635888789814987,0.5231357614061164,0.0 +national,b600k.cps2024.acs000.s0,cps_native,income_components,state,308.0,0.27213503084058716,0.1503913943497396,0.12876895091382057,0.3691542979336072,0.0 +national,b600k.cps2024.acs000.s0,cps_native,program_receipt,national,1.0,0.024764169556657892,0.024764169556657896,0.024764169556657892,0.2479543876474267,0.0 +national,b600k.cps2024.acs000.s0,cps_native,program_receipt,state,53.0,0.2137667160204601,0.19929048540912592,0.14259421789962012,0.3147145965159256,0.0 +national,b600k.cps2024.acs000.s0,cps_native,tax_items,cd,1772.0,0.36217559115777576,0.3453555019570111,0.26791994252276674,0.4530807151236348,0.0 +national,b600k.cps2024.acs000.s0,cps_native,tax_items,national,25.0,0.22884885013439715,0.12525218557779122,0.10104472640966025,0.5600452269263323,2.0 +national,b600k.cps2024.acs000.s0,cps_native,tax_items,state,344.0,0.11175801102457908,0.08351783968772346,0.04884656958975516,0.360598360750115,0.0 +national,b600k.cps2024.acs050.s0,acs_native,demographics_pep,national,1.0,0.01059698398474791,0.01059698398474791,0.01059698398474791,0.01827307365553338,0.0 +national,b600k.cps2024.acs050.s0,acs_native,demographics_pep,state,82.0,0.16224079914628323,0.14746421568467574,0.13940323245733155,0.06559884496603631,0.0 +national,b600k.cps2024.acs050.s0,cps_native,income_components,cd,875.0,0.3195168688854576,0.22922412645408288,0.2070477195727579,0.3822359539086939,0.0 +national,b600k.cps2024.acs050.s0,cps_native,income_components,national,8.0,0.29573623227329826,0.1553162563220971,0.20059016486769504,0.44130526123776725,0.0 +national,b600k.cps2024.acs050.s0,cps_native,income_components,state,308.0,0.22744779909141397,0.13881086116480273,0.09211261317593489,0.3055149753808625,0.0 +national,b600k.cps2024.acs050.s0,cps_native,program_receipt,national,1.0,0.015210309705621816,0.015210309705621818,0.015210309705621816,0.12482485043996469,0.0 +national,b600k.cps2024.acs050.s0,cps_native,program_receipt,state,53.0,0.1980126668984462,0.1938415355251176,0.13711131037463525,0.27861804676738294,0.0 +national,b600k.cps2024.acs050.s0,cps_native,tax_items,cd,1772.0,0.33195568945586346,0.30461551780262586,0.24531407981333797,0.39488986618796484,0.0 +national,b600k.cps2024.acs050.s0,cps_native,tax_items,national,25.0,0.24425577117305886,0.12377136061752915,0.1406591288568045,0.4694411267282574,2.0 +national,b600k.cps2024.acs050.s0,cps_native,tax_items,state,344.0,0.11440855161234355,0.0777994745936193,0.04214883052620782,0.33484771135713354,0.0 +national,b600k.cps2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.016056707500882138,0.016056707500882138,0.016056707500882138,0.02061082779871088,0.0 +national,b600k.cps2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.16848626972379938,0.163313017108608,0.14294104431989962,0.04604926986037894,0.0 +national,b600k.cps2024.acs100.s0,cps_native,income_components,cd,875.0,0.3386348678000625,0.2280626997141212,0.21271817985601668,0.3782766470832022,0.0 +national,b600k.cps2024.acs100.s0,cps_native,income_components,national,8.0,0.2875549420635022,0.16974132408536957,0.19429325565356062,0.4365792336967421,0.0 +national,b600k.cps2024.acs100.s0,cps_native,income_components,state,308.0,0.23678916833887323,0.15141343721099867,0.12590867699743744,0.3552904992784904,0.0 +national,b600k.cps2024.acs100.s0,cps_native,program_receipt,national,1.0,0.0190766849307172,0.0190766849307172,0.0190766849307172,0.0026097729691897283,0.0 +national,b600k.cps2024.acs100.s0,cps_native,program_receipt,state,53.0,0.26317788342170323,0.17985644478343443,0.14740045997629883,0.38621612005541917,0.0 +national,b600k.cps2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.32380095096613976,0.2877875373709898,0.23972875793365897,0.4392292514945763,0.0 +national,b600k.cps2024.acs100.s0,cps_native,tax_items,national,25.0,0.25450410245041155,0.1296468778604477,0.16831690526164617,0.5503683262353999,2.0 +national,b600k.cps2024.acs100.s0,cps_native,tax_items,state,344.0,0.12639218991981416,0.08220911281345297,0.04949085609109548,0.37916761465200605,0.0 +national,natural.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.004905048111233447,0.004905048111233447,0.004905048111233447,0.005855754513861371,0.0 +national,natural.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.16878172366700006,0.1488908806908542,0.1265513177004392,0.06947274184770472,0.0 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.377900474158411,0.2972454020320759,0.2665820869276443,0.4319959708655007,0.0 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.32980180744872545,0.1625694785112586,0.213577254216005,0.47827405708240245,0.0 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.2497527061900134,0.14690214587081643,0.10255047236162144,0.3339467143924995,0.0 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.023465091254367004,0.023465091254367004,0.023465091254367004,0.1986755990895027,0.0 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.20806606549668058,0.19483765050567015,0.14050620662315882,0.29213977222629917,0.0 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.4196982722736993,0.395937022554551,0.33661578637068623,0.4574705945515955,0.0 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.21428404231976375,0.13681550667103382,0.13849109253305966,0.529149841550363,2.0 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.10331386245050982,0.08323737042457563,0.04686542273745172,0.338837813385229,0.0 +national,natural.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.0011024277947811899,0.0011024277947811899,0.0011024277947811899,0.00837758941327675,0.0 +national,natural.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.1702495702655267,0.1559218723944128,0.14310514220083992,0.07560887119978744,0.0 +national,natural.cps2023-2024.acs100.s0,cps_native,income_components,cd,875.0,0.4004000810655697,0.3143699331573883,0.2898009589342263,0.44213716093608957,0.0 +national,natural.cps2023-2024.acs100.s0,cps_native,income_components,national,8.0,0.3208192686712129,0.16571721705476355,0.22338663630789368,0.5269651800078063,0.0 +national,natural.cps2023-2024.acs100.s0,cps_native,income_components,state,308.0,0.24148159487930762,0.14171773932496987,0.09831584895516964,0.3547371991254109,0.0 +national,natural.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1.0,0.02307626869067111,0.02307626869067111,0.02307626869067111,0.2230673116162417,0.0 +national,natural.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53.0,0.21174810554203344,0.19750557024167464,0.15803551687685183,0.2965881008062997,0.0 +national,natural.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.441756711126377,0.42252261052127726,0.36925381963175574,0.47029161827566085,0.0 +national,natural.cps2023-2024.acs100.s0,cps_native,tax_items,national,25.0,0.23843244002837974,0.14061823030353732,0.16616945617670534,0.5506343068650511,2.0 +national,natural.cps2023-2024.acs100.s0,cps_native,tax_items,state,344.0,0.10523930002867343,0.08173051858600082,0.04986317755875155,0.35188265075916575,0.0 +national,natural.cps2024.acs100.s0,acs_native,demographics_pep,national,1.0,0.00204405073150566,0.00204405073150566,0.00204405073150566,0.02024956072162986,0.0 +national,natural.cps2024.acs100.s0,acs_native,demographics_pep,state,82.0,0.16770595218858383,0.14827120144163983,0.1323962819428121,0.09501372306127617,0.0 +national,natural.cps2024.acs100.s0,cps_native,income_components,cd,875.0,0.43919631953037513,0.3430601431828556,0.3526933611861523,0.48482091490569446,3.0 +national,natural.cps2024.acs100.s0,cps_native,income_components,national,8.0,0.31648451055614024,0.16602938840539144,0.20025439485557306,0.5231357614058866,0.0 +national,natural.cps2024.acs100.s0,cps_native,income_components,state,308.0,0.2696116341504152,0.14965885732817816,0.12754693324945288,0.36915429793360777,0.0 +national,natural.cps2024.acs100.s0,cps_native,program_receipt,national,1.0,0.025047315767374664,0.025047315767374664,0.025047315767374664,0.2479543876474519,0.0 +national,natural.cps2024.acs100.s0,cps_native,program_receipt,state,53.0,0.21615851274709622,0.20020476067918816,0.14463771325469357,0.31471459651592565,0.0 +national,natural.cps2024.acs100.s0,cps_native,tax_items,cd,1772.0,0.510954450513885,0.47270772998435034,0.47663046115555024,0.48638909934111646,17.0 +national,natural.cps2024.acs100.s0,cps_native,tax_items,national,25.0,0.22888846742721372,0.1254852737446537,0.10116359868884849,0.5600452269263316,2.0 +national,natural.cps2024.acs100.s0,cps_native,tax_items,state,344.0,0.1121591199800416,0.08389961292726278,0.04875436193175599,0.3605983607501162,0.0 diff --git a/experiments/us-support-mix-bakeoff-20260930/holdout_by_dimension_level_common_support.csv b/experiments/us-support-mix-bakeoff-20260930/holdout_by_dimension_level_common_support.csv new file mode 100644 index 0000000000..37b88def40 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/holdout_by_dimension_level_common_support.csv @@ -0,0 +1,601 @@ +product,arm,dimension_group,dimension,level,targets,capped_mean +local,b1200k.cps0.acs100.s0,acs_native,demographics_pep,national,1,0.031136159134135165 +local,b1200k.cps0.acs100.s0,acs_native,demographics_pep,state,82,0.19286922548605295 +local,b1200k.cps0.acs100.s0,cps_native,income_components,cd,872,0.24477754861727374 +local,b1200k.cps0.acs100.s0,cps_native,income_components,national,8,0.3103777197784714 +local,b1200k.cps0.acs100.s0,cps_native,income_components,state,308,0.2064762143680669 +local,b1200k.cps0.acs100.s0,cps_native,program_receipt,national,1,0.029039789069627106 +local,b1200k.cps0.acs100.s0,cps_native,program_receipt,state,53,0.31823459303351853 +local,b1200k.cps0.acs100.s0,cps_native,tax_items,cd,1755,0.19469686276696876 +local,b1200k.cps0.acs100.s0,cps_native,tax_items,national,23,0.4289901537963436 +local,b1200k.cps0.acs100.s0,cps_native,tax_items,state,344,0.1271958904838077 +local,b1200k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,national,1,0.010729179501353797 +local,b1200k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,state,82,0.18276741791355144 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,income_components,cd,872,0.24859959987967625 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,income_components,national,8,0.29935919235534847 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,income_components,state,308,0.21367843862950298 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,national,1,0.01646739773176462 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,state,53,0.2177241262978927 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,cd,1755,0.18591413291732461 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,national,23,0.28431170971923264 +local,b1200k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,state,344,0.09556674683309047 +local,b1200k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.021543245807295906 +local,b1200k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.1842746202541827 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,872,0.2476259108847427 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8,0.2703684882459734 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308,0.20573088273723014 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.017016064870367338 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.25620828156733094 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.19042765317446905 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,23,0.41601421125513066 +local,b1200k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344,0.11694219144644435 +local,b1200k.cps2023-2024.acs000.s0,acs_native,demographics_pep,national,1,0.01015166708407202 +local,b1200k.cps2023-2024.acs000.s0,acs_native,demographics_pep,state,82,0.18091450159282604 +local,b1200k.cps2023-2024.acs000.s0,cps_native,income_components,cd,872,0.245874848921533 +local,b1200k.cps2023-2024.acs000.s0,cps_native,income_components,national,8,0.3174077240393549 +local,b1200k.cps2023-2024.acs000.s0,cps_native,income_components,state,308,0.22520642293189733 +local,b1200k.cps2023-2024.acs000.s0,cps_native,program_receipt,national,1,0.012997101847879234 +local,b1200k.cps2023-2024.acs000.s0,cps_native,program_receipt,state,53,0.23728528309773528 +local,b1200k.cps2023-2024.acs000.s0,cps_native,tax_items,cd,1755,0.18198689233848053 +local,b1200k.cps2023-2024.acs000.s0,cps_native,tax_items,national,23,0.2948928450123754 +local,b1200k.cps2023-2024.acs000.s0,cps_native,tax_items,state,344,0.09461582123755304 +local,b1200k.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.02586127518861045 +local,b1200k.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.18693261085783902 +local,b1200k.cps2023-2024.acs100.s0,cps_native,income_components,cd,872,0.2457977445426312 +local,b1200k.cps2023-2024.acs100.s0,cps_native,income_components,national,8,0.2791515694179675 +local,b1200k.cps2023-2024.acs100.s0,cps_native,income_components,state,308,0.2087877041138612 +local,b1200k.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.0210527469483214 +local,b1200k.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.2633482939579282 +local,b1200k.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.19213396382055473 +local,b1200k.cps2023-2024.acs100.s0,cps_native,tax_items,national,23,0.42318853556219144 +local,b1200k.cps2023-2024.acs100.s0,cps_native,tax_items,state,344,0.11928718518775158 +local,b1200k.cps2024.acs000.s0,acs_native,demographics_pep,national,1,0.0164129965833176 +local,b1200k.cps2024.acs000.s0,acs_native,demographics_pep,state,82,0.17394744597746561 +local,b1200k.cps2024.acs000.s0,cps_native,income_components,cd,872,0.2488169871595448 +local,b1200k.cps2024.acs000.s0,cps_native,income_components,national,8,0.32479169063218366 +local,b1200k.cps2024.acs000.s0,cps_native,income_components,state,308,0.2510104848956959 +local,b1200k.cps2024.acs000.s0,cps_native,program_receipt,national,1,0.011864248303568086 +local,b1200k.cps2024.acs000.s0,cps_native,program_receipt,state,53,0.23151973362356593 +local,b1200k.cps2024.acs000.s0,cps_native,tax_items,cd,1755,0.18531507230023073 +local,b1200k.cps2024.acs000.s0,cps_native,tax_items,national,23,0.309843726575051 +local,b1200k.cps2024.acs000.s0,cps_native,tax_items,state,344,0.10541087233889969 +local,b1200k.cps2024.acs100.s0,acs_native,demographics_pep,national,1,0.029765902613478327 +local,b1200k.cps2024.acs100.s0,acs_native,demographics_pep,state,82,0.18843601526452441 +local,b1200k.cps2024.acs100.s0,cps_native,income_components,cd,872,0.2447853277386574 +local,b1200k.cps2024.acs100.s0,cps_native,income_components,national,8,0.2929664677392368 +local,b1200k.cps2024.acs100.s0,cps_native,income_components,state,308,0.20351433911134775 +local,b1200k.cps2024.acs100.s0,cps_native,program_receipt,national,1,0.025078346581670272 +local,b1200k.cps2024.acs100.s0,cps_native,program_receipt,state,53,0.2780238101680827 +local,b1200k.cps2024.acs100.s0,cps_native,tax_items,cd,1755,0.1918959645099823 +local,b1200k.cps2024.acs100.s0,cps_native,tax_items,national,23,0.42421413110367284 +local,b1200k.cps2024.acs100.s0,cps_native,tax_items,state,344,0.12267272174567183 +local,b300k.cps0.acs100.s0,acs_native,demographics_pep,national,1,0.04613637508701725 +local,b300k.cps0.acs100.s0,acs_native,demographics_pep,state,82,0.16305527686288307 +local,b300k.cps0.acs100.s0,cps_native,income_components,cd,872,0.29469571772799674 +local,b300k.cps0.acs100.s0,cps_native,income_components,national,8,0.3168667839683797 +local,b300k.cps0.acs100.s0,cps_native,income_components,state,308,0.23429272769351714 +local,b300k.cps0.acs100.s0,cps_native,program_receipt,national,1,0.045639139865172755 +local,b300k.cps0.acs100.s0,cps_native,program_receipt,state,53,0.37258429822471645 +local,b300k.cps0.acs100.s0,cps_native,tax_items,cd,1755,0.24986128922174938 +local,b300k.cps0.acs100.s0,cps_native,tax_items,national,23,0.44183142036953543 +local,b300k.cps0.acs100.s0,cps_native,tax_items,state,344,0.16692357646531517 +local,b300k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,national,1,0.007824599707914002 +local,b300k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,state,82,0.1621728690297679 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,income_components,cd,872,0.2775552128636692 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,income_components,national,8,0.3093507514427284 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,income_components,state,308,0.21636417669259378 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,national,1,0.020499541972688495 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,state,53,0.22075797974313865 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,cd,1755,0.21820386066398315 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,national,23,0.2792804049901814 +local,b300k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,state,344,0.09789246569895065 +local,b300k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.013288614675196155 +local,b300k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.1638588636538814 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,872,0.2789689580638778 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8,0.285121731159793 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308,0.23627019274520367 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.015200434827783283 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.24352550167912812 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.2160400339538342 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,23,0.349239872672207 +local,b300k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344,0.10353524278489439 +local,b300k.cps2022-2023-2024.acs100.s1,acs_native,demographics_pep,national,1,0.013142072603076335 +local,b300k.cps2022-2023-2024.acs100.s1,acs_native,demographics_pep,state,82,0.16658090945865134 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,income_components,cd,872,0.28085916873576533 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,income_components,national,8,0.28897112220822024 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,income_components,state,308,0.22564925876059017 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,program_receipt,national,1,0.01733286655302345 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,program_receipt,state,53,0.234554556947064 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,tax_items,cd,1755,0.2198447626318766 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,tax_items,national,23,0.3974266982719461 +local,b300k.cps2022-2023-2024.acs100.s1,cps_native,tax_items,state,344,0.1049204503493655 +local,b300k.cps2022-2023-2024.acs100.s2,acs_native,demographics_pep,national,1,0.01235527175196395 +local,b300k.cps2022-2023-2024.acs100.s2,acs_native,demographics_pep,state,82,0.16657533865686952 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,income_components,cd,872,0.2832995283589495 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,income_components,national,8,0.27127343247232183 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,income_components,state,308,0.22425100384819646 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,program_receipt,national,1,0.019236898516675194 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,program_receipt,state,53,0.23294838474251595 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,tax_items,cd,1755,0.21901693819390178 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,tax_items,national,23,0.36275468315587744 +local,b300k.cps2022-2023-2024.acs100.s2,cps_native,tax_items,state,344,0.10067242177324874 +local,b300k.cps2023-2024.acs000.s0,acs_native,demographics_pep,national,1,0.007680414223032498 +local,b300k.cps2023-2024.acs000.s0,acs_native,demographics_pep,state,82,0.16418836448595092 +local,b300k.cps2023-2024.acs000.s0,cps_native,income_components,cd,872,0.2787230773974767 +local,b300k.cps2023-2024.acs000.s0,cps_native,income_components,national,8,0.33464102022280334 +local,b300k.cps2023-2024.acs000.s0,cps_native,income_components,state,308,0.23299819017636778 +local,b300k.cps2023-2024.acs000.s0,cps_native,program_receipt,national,1,0.019244183153401716 +local,b300k.cps2023-2024.acs000.s0,cps_native,program_receipt,state,53,0.24221674734488627 +local,b300k.cps2023-2024.acs000.s0,cps_native,tax_items,cd,1755,0.2126966298727573 +local,b300k.cps2023-2024.acs000.s0,cps_native,tax_items,national,23,0.29094794986277905 +local,b300k.cps2023-2024.acs000.s0,cps_native,tax_items,state,344,0.10086916449026685 +local,b300k.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.015042714721128185 +local,b300k.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.15692966173306047 +local,b300k.cps2023-2024.acs100.s0,cps_native,income_components,cd,872,0.28047875295997915 +local,b300k.cps2023-2024.acs100.s0,cps_native,income_components,national,8,0.3142464709277277 +local,b300k.cps2023-2024.acs100.s0,cps_native,income_components,state,308,0.2320873385842164 +local,b300k.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.021498827244479626 +local,b300k.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.27350756252784914 +local,b300k.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.22412881230302453 +local,b300k.cps2023-2024.acs100.s0,cps_native,tax_items,national,23,0.38947362752698284 +local,b300k.cps2023-2024.acs100.s0,cps_native,tax_items,state,344,0.11975072727313722 +local,b300k.cps2024.acs000.s0,acs_native,demographics_pep,national,1,0.017286281231718603 +local,b300k.cps2024.acs000.s0,acs_native,demographics_pep,state,82,0.15011568577342907 +local,b300k.cps2024.acs000.s0,cps_native,income_components,cd,872,0.28741625426261613 +local,b300k.cps2024.acs000.s0,cps_native,income_components,national,8,0.3596852899456623 +local,b300k.cps2024.acs000.s0,cps_native,income_components,state,308,0.2557141656365252 +local,b300k.cps2024.acs000.s0,cps_native,program_receipt,national,1,0.01754355602872212 +local,b300k.cps2024.acs000.s0,cps_native,program_receipt,state,53,0.23760123984607007 +local,b300k.cps2024.acs000.s0,cps_native,tax_items,cd,1755,0.21897836855152406 +local,b300k.cps2024.acs000.s0,cps_native,tax_items,national,23,0.3194629199682206 +local,b300k.cps2024.acs000.s0,cps_native,tax_items,state,344,0.11267807862514273 +local,b300k.cps2024.acs100.s0,acs_native,demographics_pep,national,1,0.027096046886771048 +local,b300k.cps2024.acs100.s0,acs_native,demographics_pep,state,82,0.1549464681677243 +local,b300k.cps2024.acs100.s0,cps_native,income_components,cd,872,0.27769110901988303 +local,b300k.cps2024.acs100.s0,cps_native,income_components,national,8,0.3005578264792729 +local,b300k.cps2024.acs100.s0,cps_native,income_components,state,308,0.22237544973362444 +local,b300k.cps2024.acs100.s0,cps_native,program_receipt,national,1,0.03478201981941662 +local,b300k.cps2024.acs100.s0,cps_native,program_receipt,state,53,0.2925484443868418 +local,b300k.cps2024.acs100.s0,cps_native,tax_items,cd,1755,0.22494183334223952 +local,b300k.cps2024.acs100.s0,cps_native,tax_items,national,23,0.456301095805367 +local,b300k.cps2024.acs100.s0,cps_native,tax_items,state,344,0.13611389092845289 +local,b300k.cps2024.acs100.s1,acs_native,demographics_pep,national,1,0.03998576643536792 +local,b300k.cps2024.acs100.s1,acs_native,demographics_pep,state,82,0.16845330693532218 +local,b300k.cps2024.acs100.s1,cps_native,income_components,cd,872,0.28641783506463997 +local,b300k.cps2024.acs100.s1,cps_native,income_components,national,8,0.3002579269852036 +local,b300k.cps2024.acs100.s1,cps_native,income_components,state,308,0.23419690043695096 +local,b300k.cps2024.acs100.s1,cps_native,program_receipt,national,1,0.0381781493483003 +local,b300k.cps2024.acs100.s1,cps_native,program_receipt,state,53,0.30919132639747754 +local,b300k.cps2024.acs100.s1,cps_native,tax_items,cd,1755,0.22999457486647168 +local,b300k.cps2024.acs100.s1,cps_native,tax_items,national,23,0.39235975026855563 +local,b300k.cps2024.acs100.s1,cps_native,tax_items,state,344,0.14052842598636905 +local,b300k.cps2024.acs100.s2,acs_native,demographics_pep,national,1,0.03956325894209345 +local,b300k.cps2024.acs100.s2,acs_native,demographics_pep,state,82,0.15203325967658674 +local,b300k.cps2024.acs100.s2,cps_native,income_components,cd,872,0.29987690976464276 +local,b300k.cps2024.acs100.s2,cps_native,income_components,national,8,0.305674408628534 +local,b300k.cps2024.acs100.s2,cps_native,income_components,state,308,0.22412856083303512 +local,b300k.cps2024.acs100.s2,cps_native,program_receipt,national,1,0.038609121212519214 +local,b300k.cps2024.acs100.s2,cps_native,program_receipt,state,53,0.26153923293957276 +local,b300k.cps2024.acs100.s2,cps_native,tax_items,cd,1755,0.22800506128986206 +local,b300k.cps2024.acs100.s2,cps_native,tax_items,national,23,0.436176469790223 +local,b300k.cps2024.acs100.s2,cps_native,tax_items,state,344,0.1332729999290088 +local,b600k.cps0.acs100.s0,acs_native,demographics_pep,national,1,0.039230761412120306 +local,b600k.cps0.acs100.s0,acs_native,demographics_pep,state,82,0.18202600101728358 +local,b600k.cps0.acs100.s0,cps_native,income_components,cd,872,0.27690895939462856 +local,b600k.cps0.acs100.s0,cps_native,income_components,national,8,0.3093438346324397 +local,b600k.cps0.acs100.s0,cps_native,income_components,state,308,0.2167636412860519 +local,b600k.cps0.acs100.s0,cps_native,program_receipt,national,1,0.0405888554726851 +local,b600k.cps0.acs100.s0,cps_native,program_receipt,state,53,0.3329885935813031 +local,b600k.cps0.acs100.s0,cps_native,tax_items,cd,1755,0.22032525761827734 +local,b600k.cps0.acs100.s0,cps_native,tax_items,national,23,0.43861664286244684 +local,b600k.cps0.acs100.s0,cps_native,tax_items,state,344,0.14896247912328456 +local,b600k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,national,1,0.010136052807003488 +local,b600k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,state,82,0.17540191309020567 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,income_components,cd,872,0.2573326907795209 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,income_components,national,8,0.2972360408199539 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,income_components,state,308,0.2107342152095433 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,national,1,0.017211972245429037 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,state,53,0.22116412164157961 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,cd,1755,0.19875222246132418 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,national,23,0.2856630833022615 +local,b600k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,state,344,0.09722359194488588 +local,b600k.cps2022-2023-2024.acs050.s0,acs_native,demographics_pep,national,1,0.01576951353020201 +local,b600k.cps2022-2023-2024.acs050.s0,acs_native,demographics_pep,state,82,0.17558813189842468 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,income_components,cd,872,0.26088582830601276 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,income_components,national,8,0.2830318065696255 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,income_components,state,308,0.2256603840633608 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,program_receipt,national,1,0.010099248158177773 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,program_receipt,state,53,0.24308717902612242 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,tax_items,cd,1755,0.19655521457696087 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,tax_items,national,23,0.3374593957744932 +local,b600k.cps2022-2023-2024.acs050.s0,cps_native,tax_items,state,344,0.09556850042571938 +local,b600k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.01812033353474878 +local,b600k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.16790058348725412 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,872,0.2628712012827957 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8,0.27182257303377866 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308,0.22801475595028387 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.018400053924893685 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.26689463596538643 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.20038776901445057 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,23,0.43615331379058764 +local,b600k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344,0.10891701658994464 +local,b600k.cps2023-2024.acs000.s0,acs_native,demographics_pep,national,1,0.009748047331019298 +local,b600k.cps2023-2024.acs000.s0,acs_native,demographics_pep,state,82,0.17274112771628558 +local,b600k.cps2023-2024.acs000.s0,cps_native,income_components,cd,872,0.26027196248353546 +local,b600k.cps2023-2024.acs000.s0,cps_native,income_components,national,8,0.32120354337761525 +local,b600k.cps2023-2024.acs000.s0,cps_native,income_components,state,308,0.22726229991374686 +local,b600k.cps2023-2024.acs000.s0,cps_native,program_receipt,national,1,0.015818129127183264 +local,b600k.cps2023-2024.acs000.s0,cps_native,program_receipt,state,53,0.23832240721713327 +local,b600k.cps2023-2024.acs000.s0,cps_native,tax_items,cd,1755,0.1928647494876115 +local,b600k.cps2023-2024.acs000.s0,cps_native,tax_items,national,23,0.2979852601887069 +local,b600k.cps2023-2024.acs000.s0,cps_native,tax_items,state,344,0.09638255758435196 +local,b600k.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.02475917629860216 +local,b600k.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.17279267026374792 +local,b600k.cps2023-2024.acs100.s0,cps_native,income_components,cd,872,0.2606081264075344 +local,b600k.cps2023-2024.acs100.s0,cps_native,income_components,national,8,0.28282101356103123 +local,b600k.cps2023-2024.acs100.s0,cps_native,income_components,state,308,0.2236640895251088 +local,b600k.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.02135616415198129 +local,b600k.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.2654557263444992 +local,b600k.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.20188015850038163 +local,b600k.cps2023-2024.acs100.s0,cps_native,tax_items,national,23,0.44194955069191777 +local,b600k.cps2023-2024.acs100.s0,cps_native,tax_items,state,344,0.12214147564951856 +local,b600k.cps2024.acs000.s0,acs_native,demographics_pep,national,1,0.015799493172281204 +local,b600k.cps2024.acs000.s0,acs_native,demographics_pep,state,82,0.16296383138786746 +local,b600k.cps2024.acs000.s0,cps_native,income_components,cd,872,0.2655466487059627 +local,b600k.cps2024.acs000.s0,cps_native,income_components,national,8,0.33846945404864565 +local,b600k.cps2024.acs000.s0,cps_native,income_components,state,308,0.2493814685687504 +local,b600k.cps2024.acs000.s0,cps_native,program_receipt,national,1,0.013547045107091024 +local,b600k.cps2024.acs000.s0,cps_native,program_receipt,state,53,0.22907564730531144 +local,b600k.cps2024.acs000.s0,cps_native,tax_items,cd,1755,0.20108836641997946 +local,b600k.cps2024.acs000.s0,cps_native,tax_items,national,23,0.31425966531614646 +local,b600k.cps2024.acs000.s0,cps_native,tax_items,state,344,0.10892226992996659 +local,b600k.cps2024.acs050.s0,acs_native,demographics_pep,national,1,0.024562069452818306 +local,b600k.cps2024.acs050.s0,acs_native,demographics_pep,state,82,0.1683056230460101 +local,b600k.cps2024.acs050.s0,cps_native,income_components,cd,872,0.26287204115881546 +local,b600k.cps2024.acs050.s0,cps_native,income_components,national,8,0.3213737792597196 +local,b600k.cps2024.acs050.s0,cps_native,income_components,state,308,0.23432921919635682 +local,b600k.cps2024.acs050.s0,cps_native,program_receipt,national,1,0.00817443343464656 +local,b600k.cps2024.acs050.s0,cps_native,program_receipt,state,53,0.24338243766687528 +local,b600k.cps2024.acs050.s0,cps_native,tax_items,cd,1755,0.19706967294550723 +local,b600k.cps2024.acs050.s0,cps_native,tax_items,national,23,0.4077834979977588 +local,b600k.cps2024.acs050.s0,cps_native,tax_items,state,344,0.1028591653418102 +local,b600k.cps2024.acs100.s0,acs_native,demographics_pep,national,1,0.03450166581507053 +local,b600k.cps2024.acs100.s0,acs_native,demographics_pep,state,82,0.17796828282928034 +local,b600k.cps2024.acs100.s0,cps_native,income_components,cd,872,0.26300904906425776 +local,b600k.cps2024.acs100.s0,cps_native,income_components,national,8,0.29105670089519964 +local,b600k.cps2024.acs100.s0,cps_native,income_components,state,308,0.2156128538018088 +local,b600k.cps2024.acs100.s0,cps_native,program_receipt,national,1,0.030520846389040714 +local,b600k.cps2024.acs100.s0,cps_native,program_receipt,state,53,0.2972810264774454 +local,b600k.cps2024.acs100.s0,cps_native,tax_items,cd,1755,0.2072413688940883 +local,b600k.cps2024.acs100.s0,cps_native,tax_items,national,23,0.44066598840830024 +local,b600k.cps2024.acs100.s0,cps_native,tax_items,state,344,0.13087171934248212 +local,natural.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.006034169476003112 +local,natural.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.15388166362805228 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,872,0.29190097467234666 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8,0.31781093393731763 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308,0.2171361498676638 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.022028801366789155 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.2197060765645402 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.24087682593609547 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,23,0.2798020323072773 +local,natural.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344,0.10119344800103709 +local,natural.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.00867427263331132 +local,natural.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.14465280966012622 +local,natural.cps2023-2024.acs100.s0,cps_native,income_components,cd,872,0.31378962190923876 +local,natural.cps2023-2024.acs100.s0,cps_native,income_components,national,8,0.37893621702072366 +local,natural.cps2023-2024.acs100.s0,cps_native,income_components,state,308,0.2353600697008607 +local,natural.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.02751921605655528 +local,natural.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.24257472693888676 +local,natural.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.26059525363225267 +local,natural.cps2023-2024.acs100.s0,cps_native,tax_items,national,23,0.3094767377158947 +local,natural.cps2023-2024.acs100.s0,cps_native,tax_items,state,344,0.11172690325900313 +local,natural.cps2024.acs100.s0,acs_native,demographics_pep,national,1,0.024214130186158107 +local,natural.cps2024.acs100.s0,acs_native,demographics_pep,state,82,0.13138699051834574 +local,natural.cps2024.acs100.s0,cps_native,income_components,cd,872,0.36645663663238376 +local,natural.cps2024.acs100.s0,cps_native,income_components,national,8,0.41993101833940544 +local,natural.cps2024.acs100.s0,cps_native,income_components,state,308,0.2562402942508585 +local,natural.cps2024.acs100.s0,cps_native,program_receipt,national,1,0.03505467954811919 +local,natural.cps2024.acs100.s0,cps_native,program_receipt,state,53,0.24908093565333903 +local,natural.cps2024.acs100.s0,cps_native,tax_items,cd,1755,0.32131021975603746 +local,natural.cps2024.acs100.s0,cps_native,tax_items,national,23,0.37903835027335536 +local,natural.cps2024.acs100.s0,cps_native,tax_items,state,344,0.1409739736411195 +national,b1200k.cps0.acs100.s0,acs_native,demographics_pep,national,1,0.02195769910410152 +national,b1200k.cps0.acs100.s0,acs_native,demographics_pep,state,82,0.18441106064342377 +national,b1200k.cps0.acs100.s0,cps_native,income_components,cd,872,0.3068695981615837 +national,b1200k.cps0.acs100.s0,cps_native,income_components,national,8,0.26888281404126946 +national,b1200k.cps0.acs100.s0,cps_native,income_components,state,308,0.23197237474725407 +national,b1200k.cps0.acs100.s0,cps_native,program_receipt,national,1,0.025553945100445036 +national,b1200k.cps0.acs100.s0,cps_native,program_receipt,state,53,0.2996804566303589 +national,b1200k.cps0.acs100.s0,cps_native,tax_items,cd,1755,0.2949915033129878 +national,b1200k.cps0.acs100.s0,cps_native,tax_items,national,23,0.3006692293302523 +national,b1200k.cps0.acs100.s0,cps_native,tax_items,state,344,0.13521094558855334 +national,b1200k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,national,1,0.0052202385313126366 +national,b1200k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,state,82,0.16777266351564055 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,income_components,cd,872,0.3240142928853001 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,income_components,national,8,0.32928572884478957 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,income_components,state,308,0.2513346707648975 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,national,1,0.02302489934911462 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,state,53,0.20790520556155948 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,cd,1755,0.35243998638698654 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,national,23,0.23231087651861926 +national,b1200k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,state,344,0.103106292409962 +national,b1200k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.013270541157751716 +national,b1200k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.16572583257448276 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,872,0.2989290971598074 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8,0.2840843723274111 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308,0.2170112714257001 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.019110770474478306 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.23949547435783827 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.3006641692191536 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,23,0.2861091152210414 +national,b1200k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344,0.11848225108641687 +national,b1200k.cps2023-2024.acs000.s0,acs_native,demographics_pep,national,1,0.002121032115383257 +national,b1200k.cps2023-2024.acs000.s0,acs_native,demographics_pep,state,82,0.1701091296385201 +national,b1200k.cps2023-2024.acs000.s0,cps_native,income_components,cd,872,0.32821730887002326 +national,b1200k.cps2023-2024.acs000.s0,cps_native,income_components,national,8,0.32209637831406707 +national,b1200k.cps2023-2024.acs000.s0,cps_native,income_components,state,308,0.23993486065598704 +national,b1200k.cps2023-2024.acs000.s0,cps_native,program_receipt,national,1,0.02213059947226088 +national,b1200k.cps2023-2024.acs000.s0,cps_native,program_receipt,state,53,0.21081576411829464 +national,b1200k.cps2023-2024.acs000.s0,cps_native,tax_items,cd,1755,0.35473939527048703 +national,b1200k.cps2023-2024.acs000.s0,cps_native,tax_items,national,23,0.2583598355237727 +national,b1200k.cps2023-2024.acs000.s0,cps_native,tax_items,state,344,0.10524622022884024 +national,b1200k.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.016589596111195922 +national,b1200k.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.16789323516569246 +national,b1200k.cps2023-2024.acs100.s0,cps_native,income_components,cd,872,0.2966627501642725 +national,b1200k.cps2023-2024.acs100.s0,cps_native,income_components,national,8,0.2836889069129228 +national,b1200k.cps2023-2024.acs100.s0,cps_native,income_components,state,308,0.21910535458696764 +national,b1200k.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.021106496711300833 +national,b1200k.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.254270666452558 +national,b1200k.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.29843685496032896 +national,b1200k.cps2023-2024.acs100.s0,cps_native,tax_items,national,23,0.28420590180418737 +national,b1200k.cps2023-2024.acs100.s0,cps_native,tax_items,state,344,0.12140193109356652 +national,b1200k.cps2024.acs000.s0,acs_native,demographics_pep,national,1,0.0020245750337736686 +national,b1200k.cps2024.acs000.s0,acs_native,demographics_pep,state,82,0.16804774526293845 +national,b1200k.cps2024.acs000.s0,cps_native,income_components,cd,872,0.32321426176787 +national,b1200k.cps2024.acs000.s0,cps_native,income_components,national,8,0.31653521719443933 +national,b1200k.cps2024.acs000.s0,cps_native,income_components,state,308,0.27262464031059574 +national,b1200k.cps2024.acs000.s0,cps_native,program_receipt,national,1,0.02435512321864415 +national,b1200k.cps2024.acs000.s0,cps_native,program_receipt,state,53,0.21153125590840233 +national,b1200k.cps2024.acs000.s0,cps_native,tax_items,cd,1755,0.35536902701804124 +national,b1200k.cps2024.acs000.s0,cps_native,tax_items,national,23,0.24877758459348925 +national,b1200k.cps2024.acs000.s0,cps_native,tax_items,state,344,0.11162758094435697 +national,b1200k.cps2024.acs100.s0,acs_native,demographics_pep,national,1,0.020041541877410026 +national,b1200k.cps2024.acs100.s0,acs_native,demographics_pep,state,82,0.17531622479503287 +national,b1200k.cps2024.acs100.s0,cps_native,income_components,cd,872,0.30209796654927595 +national,b1200k.cps2024.acs100.s0,cps_native,income_components,national,8,0.2784779872920905 +national,b1200k.cps2024.acs100.s0,cps_native,income_components,state,308,0.22843448064670446 +national,b1200k.cps2024.acs100.s0,cps_native,program_receipt,national,1,0.02239293640499914 +national,b1200k.cps2024.acs100.s0,cps_native,program_receipt,state,53,0.26644343307680296 +national,b1200k.cps2024.acs100.s0,cps_native,tax_items,cd,1755,0.29531244493614367 +national,b1200k.cps2024.acs100.s0,cps_native,tax_items,national,23,0.28357578314364656 +national,b1200k.cps2024.acs100.s0,cps_native,tax_items,state,344,0.12662306516466945 +national,b300k.cps0.acs100.s0,acs_native,demographics_pep,national,1,0.016870192068919425 +national,b300k.cps0.acs100.s0,acs_native,demographics_pep,state,82,0.17631137645123166 +national,b300k.cps0.acs100.s0,cps_native,income_components,cd,872,0.350915568038958 +national,b300k.cps0.acs100.s0,cps_native,income_components,national,8,0.2717134961732203 +national,b300k.cps0.acs100.s0,cps_native,income_components,state,308,0.26125044364790023 +national,b300k.cps0.acs100.s0,cps_native,program_receipt,national,1,0.02724119086542924 +national,b300k.cps0.acs100.s0,cps_native,program_receipt,state,53,0.3032951550346929 +national,b300k.cps0.acs100.s0,cps_native,tax_items,cd,1755,0.3560470750567945 +national,b300k.cps0.acs100.s0,cps_native,tax_items,national,23,0.27576818516805407 +national,b300k.cps0.acs100.s0,cps_native,tax_items,state,344,0.1506784259545128 +national,b300k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,national,1,0.005167825391038847 +national,b300k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,state,82,0.16883232591661937 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,income_components,cd,872,0.3615907118288358 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,income_components,national,8,0.3297751549055941 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,income_components,state,308,0.25016928296359214 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,national,1,0.02359433133322223 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,state,53,0.20768612837662662 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,cd,1755,0.3926992075693462 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,national,23,0.2326594277107196 +national,b300k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,state,344,0.10326926102077237 +national,b300k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.008725727505773193 +national,b300k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.1694656640096662 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,872,0.34310072729086294 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8,0.2903538808568774 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308,0.2175345096397957 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.015996373905224303 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.18389306059868185 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.35558140672311955 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,23,0.1822513034232208 +national,b300k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344,0.11122761415655996 +national,b300k.cps2022-2023-2024.acs100.s1,acs_native,demographics_pep,national,1,0.007864647386341813 +national,b300k.cps2022-2023-2024.acs100.s1,acs_native,demographics_pep,state,82,0.15892294151193456 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,income_components,cd,872,0.3389154236765719 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,income_components,national,8,0.2962365744601121 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,income_components,state,308,0.2305607520155476 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,program_receipt,national,1,0.016840998167351837 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,program_receipt,state,53,0.19885977768618832 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,tax_items,cd,1755,0.36270002757416264 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,tax_items,national,23,0.3074058412484188 +national,b300k.cps2022-2023-2024.acs100.s1,cps_native,tax_items,state,344,0.11444292204091333 +national,b300k.cps2022-2023-2024.acs100.s2,acs_native,demographics_pep,national,1,0.013112172113125837 +national,b300k.cps2022-2023-2024.acs100.s2,acs_native,demographics_pep,state,82,0.16150427764582204 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,income_components,cd,872,0.3539299191123211 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,income_components,national,8,0.2864134513967582 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,income_components,state,308,0.22415015708249011 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,program_receipt,national,1,0.014709726614093675 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,program_receipt,state,53,0.21213674854359396 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,tax_items,cd,1755,0.35569242121162814 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,tax_items,national,23,0.15249122940125692 +national,b300k.cps2022-2023-2024.acs100.s2,cps_native,tax_items,state,344,0.1142276152315121 +national,b300k.cps2023-2024.acs000.s0,acs_native,demographics_pep,national,1,0.0017346938889252002 +national,b300k.cps2023-2024.acs000.s0,acs_native,demographics_pep,state,82,0.1703353292068738 +national,b300k.cps2023-2024.acs000.s0,cps_native,income_components,cd,872,0.35404209470395653 +national,b300k.cps2023-2024.acs000.s0,cps_native,income_components,national,8,0.3210570130142541 +national,b300k.cps2023-2024.acs000.s0,cps_native,income_components,state,308,0.241244989898294 +national,b300k.cps2023-2024.acs000.s0,cps_native,program_receipt,national,1,0.02305290586260365 +national,b300k.cps2023-2024.acs000.s0,cps_native,program_receipt,state,53,0.2117635469327823 +national,b300k.cps2023-2024.acs000.s0,cps_native,tax_items,cd,1755,0.3911846861594681 +national,b300k.cps2023-2024.acs000.s0,cps_native,tax_items,national,23,0.25857832146478343 +national,b300k.cps2023-2024.acs000.s0,cps_native,tax_items,state,344,0.10525161471376977 +national,b300k.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.010464550350701743 +national,b300k.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.17130848948985308 +national,b300k.cps2023-2024.acs100.s0,cps_native,income_components,cd,872,0.3401155078982905 +national,b300k.cps2023-2024.acs100.s0,cps_native,income_components,national,8,0.2972821398423096 +national,b300k.cps2023-2024.acs100.s0,cps_native,income_components,state,308,0.23613502945233358 +national,b300k.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.0168842267865189 +national,b300k.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.21720632272633086 +national,b300k.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.3591210983888976 +national,b300k.cps2023-2024.acs100.s0,cps_native,tax_items,national,23,0.2137062992316797 +national,b300k.cps2023-2024.acs100.s0,cps_native,tax_items,state,344,0.12372753888842442 +national,b300k.cps2024.acs000.s0,acs_native,demographics_pep,national,1,0.0022592479979299533 +national,b300k.cps2024.acs000.s0,acs_native,demographics_pep,state,82,0.16759991019765672 +national,b300k.cps2024.acs000.s0,cps_native,income_components,cd,872,0.34897382529589976 +national,b300k.cps2024.acs000.s0,cps_native,income_components,national,8,0.3163897216505496 +national,b300k.cps2024.acs000.s0,cps_native,income_components,state,308,0.2717766467137627 +national,b300k.cps2024.acs000.s0,cps_native,program_receipt,national,1,0.024836190989934195 +national,b300k.cps2024.acs000.s0,cps_native,program_receipt,state,53,0.21478031358230748 +national,b300k.cps2024.acs000.s0,cps_native,tax_items,cd,1755,0.3832333032768762 +national,b300k.cps2024.acs000.s0,cps_native,tax_items,national,23,0.24870944665485342 +national,b300k.cps2024.acs000.s0,cps_native,tax_items,state,344,0.11192711452186348 +national,b300k.cps2024.acs100.s0,acs_native,demographics_pep,national,1,0.00931796336678804 +national,b300k.cps2024.acs100.s0,acs_native,demographics_pep,state,82,0.1597233602579953 +national,b300k.cps2024.acs100.s0,cps_native,income_components,cd,872,0.3532582767417465 +national,b300k.cps2024.acs100.s0,cps_native,income_components,national,8,0.3012468453260867 +national,b300k.cps2024.acs100.s0,cps_native,income_components,state,308,0.2488281348041939 +national,b300k.cps2024.acs100.s0,cps_native,program_receipt,national,1,0.016939819057195896 +national,b300k.cps2024.acs100.s0,cps_native,program_receipt,state,53,0.260413002804286 +national,b300k.cps2024.acs100.s0,cps_native,tax_items,cd,1755,0.3650350030379261 +national,b300k.cps2024.acs100.s0,cps_native,tax_items,national,23,0.2994017897158572 +national,b300k.cps2024.acs100.s0,cps_native,tax_items,state,344,0.13256622347613956 +national,b300k.cps2024.acs100.s1,acs_native,demographics_pep,national,1,0.015404802601410693 +national,b300k.cps2024.acs100.s1,acs_native,demographics_pep,state,82,0.16668764568786598 +national,b300k.cps2024.acs100.s1,cps_native,income_components,cd,872,0.36062824284710077 +national,b300k.cps2024.acs100.s1,cps_native,income_components,national,8,0.2977120578359827 +national,b300k.cps2024.acs100.s1,cps_native,income_components,state,308,0.25097710482668223 +national,b300k.cps2024.acs100.s1,cps_native,program_receipt,national,1,0.0178695300297639 +national,b300k.cps2024.acs100.s1,cps_native,program_receipt,state,53,0.26814652916269605 +national,b300k.cps2024.acs100.s1,cps_native,tax_items,cd,1755,0.3739603394650393 +national,b300k.cps2024.acs100.s1,cps_native,tax_items,national,23,0.2693044479188588 +national,b300k.cps2024.acs100.s1,cps_native,tax_items,state,344,0.1292905887274339 +national,b300k.cps2024.acs100.s2,acs_native,demographics_pep,national,1,0.010001515838666585 +national,b300k.cps2024.acs100.s2,acs_native,demographics_pep,state,82,0.15140609544121633 +national,b300k.cps2024.acs100.s2,cps_native,income_components,cd,872,0.3680128642901721 +national,b300k.cps2024.acs100.s2,cps_native,income_components,national,8,0.3008031095321073 +national,b300k.cps2024.acs100.s2,cps_native,income_components,state,308,0.24795753418976757 +national,b300k.cps2024.acs100.s2,cps_native,program_receipt,national,1,0.019857064931926485 +national,b300k.cps2024.acs100.s2,cps_native,program_receipt,state,53,0.1936747199064423 +national,b300k.cps2024.acs100.s2,cps_native,tax_items,cd,1755,0.37046845113497945 +national,b300k.cps2024.acs100.s2,cps_native,tax_items,national,23,0.2702204158477625 +national,b300k.cps2024.acs100.s2,cps_native,tax_items,state,344,0.12704222296996678 +national,b600k.cps0.acs100.s0,acs_native,demographics_pep,national,1,0.02011147630101239 +national,b600k.cps0.acs100.s0,acs_native,demographics_pep,state,82,0.18272324742321502 +national,b600k.cps0.acs100.s0,cps_native,income_components,cd,872,0.34133411221951987 +national,b600k.cps0.acs100.s0,cps_native,income_components,national,8,0.2689951671881319 +national,b600k.cps0.acs100.s0,cps_native,income_components,state,308,0.24966655406897992 +national,b600k.cps0.acs100.s0,cps_native,program_receipt,national,1,0.02489297997316097 +national,b600k.cps0.acs100.s0,cps_native,program_receipt,state,53,0.2929448280688965 +national,b600k.cps0.acs100.s0,cps_native,tax_items,cd,1755,0.3220342824785925 +national,b600k.cps0.acs100.s0,cps_native,tax_items,national,23,0.32618912843370335 +national,b600k.cps0.acs100.s0,cps_native,tax_items,state,344,0.14197510217799877 +national,b600k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,national,1,0.0053365734581045385 +national,b600k.cps2022-2023-2024.acs000.s0,acs_native,demographics_pep,state,82,0.16812914955780833 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,income_components,cd,872,0.3376517065402081 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,income_components,national,8,0.3294899882420628 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,income_components,state,308,0.2497558167425825 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,national,1,0.023530777211221248 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,program_receipt,state,53,0.20797277066731495 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,cd,1755,0.3652192798948609 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,national,23,0.23240027207961358 +national,b600k.cps2022-2023-2024.acs000.s0,cps_native,tax_items,state,344,0.1031874802625938 +national,b600k.cps2022-2023-2024.acs050.s0,acs_native,demographics_pep,national,1,0.009246832451492448 +national,b600k.cps2022-2023-2024.acs050.s0,acs_native,demographics_pep,state,82,0.16310377019843816 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,income_components,cd,872,0.3189222529052004 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,income_components,national,8,0.29512682597853446 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,income_components,state,308,0.21346085314456828 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,program_receipt,national,1,0.015882587687460887 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,program_receipt,state,53,0.18740334543196172 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,tax_items,cd,1755,0.33251861837615476 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,tax_items,national,23,0.20112119255669797 +national,b600k.cps2022-2023-2024.acs050.s0,cps_native,tax_items,state,344,0.1115046834722531 +national,b600k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.008554534227795198 +national,b600k.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.15873853658076328 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,872,0.326340403464118 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8,0.28937285212056435 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308,0.2210704782651005 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.016956899842189187 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.2248545879476049 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.326722381330332 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,23,0.2592897918440134 +national,b600k.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344,0.11602189617659167 +national,b600k.cps2023-2024.acs000.s0,acs_native,demographics_pep,national,1,0.001618349308075585 +national,b600k.cps2023-2024.acs000.s0,acs_native,demographics_pep,state,82,0.17051499247871507 +national,b600k.cps2023-2024.acs000.s0,cps_native,income_components,cd,872,0.3347323694317443 +national,b600k.cps2023-2024.acs000.s0,cps_native,income_components,national,8,0.32161404183154935 +national,b600k.cps2023-2024.acs000.s0,cps_native,income_components,state,308,0.24089602188398598 +national,b600k.cps2023-2024.acs000.s0,cps_native,program_receipt,national,1,0.022775186128494364 +national,b600k.cps2023-2024.acs000.s0,cps_native,program_receipt,state,53,0.2116351652999952 +national,b600k.cps2023-2024.acs000.s0,cps_native,tax_items,cd,1755,0.368904656136587 +national,b600k.cps2023-2024.acs000.s0,cps_native,tax_items,national,23,0.2583309803393381 +national,b600k.cps2023-2024.acs000.s0,cps_native,tax_items,state,344,0.10524017537062978 +national,b600k.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.0105143654325601 +national,b600k.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.1594929954913748 +national,b600k.cps2023-2024.acs100.s0,cps_native,income_components,cd,872,0.32941047070510837 +national,b600k.cps2023-2024.acs100.s0,cps_native,income_components,national,8,0.2921733910880401 +national,b600k.cps2023-2024.acs100.s0,cps_native,income_components,state,308,0.22528352031241805 +national,b600k.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.017101683358144604 +national,b600k.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.24584572541285485 +national,b600k.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.3249393362845628 +national,b600k.cps2023-2024.acs100.s0,cps_native,tax_items,national,23,0.22130343570590474 +national,b600k.cps2023-2024.acs100.s0,cps_native,tax_items,state,344,0.12315745579178716 +national,b600k.cps2024.acs000.s0,acs_native,demographics_pep,national,1,0.0021358882635466037 +national,b600k.cps2024.acs000.s0,acs_native,demographics_pep,state,82,0.16789701330967022 +national,b600k.cps2024.acs000.s0,cps_native,income_components,cd,872,0.3396750458793437 +national,b600k.cps2024.acs000.s0,cps_native,income_components,national,8,0.31661731565981016 +national,b600k.cps2024.acs000.s0,cps_native,income_components,state,308,0.2721350308405871 +national,b600k.cps2024.acs000.s0,cps_native,program_receipt,national,1,0.024764169556657892 +national,b600k.cps2024.acs000.s0,cps_native,program_receipt,state,53,0.2137667160204601 +national,b600k.cps2024.acs000.s0,cps_native,tax_items,cd,1755,0.3625872245843673 +national,b600k.cps2024.acs000.s0,cps_native,tax_items,national,23,0.2487487501460838 +national,b600k.cps2024.acs000.s0,cps_native,tax_items,state,344,0.11175801102457911 +national,b600k.cps2024.acs050.s0,acs_native,demographics_pep,national,1,0.01059698398474791 +national,b600k.cps2024.acs050.s0,acs_native,demographics_pep,state,82,0.16224079914628323 +national,b600k.cps2024.acs050.s0,cps_native,income_components,cd,872,0.32029438996697507 +national,b600k.cps2024.acs050.s0,cps_native,income_components,national,8,0.29573623227329826 +national,b600k.cps2024.acs050.s0,cps_native,income_components,state,308,0.22744779909141397 +national,b600k.cps2024.acs050.s0,cps_native,program_receipt,national,1,0.015210309705621816 +national,b600k.cps2024.acs050.s0,cps_native,program_receipt,state,53,0.1980126668984462 +national,b600k.cps2024.acs050.s0,cps_native,tax_items,cd,1755,0.3315455914102883 +national,b600k.cps2024.acs050.s0,cps_native,tax_items,national,23,0.265495403448977 +national,b600k.cps2024.acs050.s0,cps_native,tax_items,state,344,0.11440855161234355 +national,b600k.cps2024.acs100.s0,acs_native,demographics_pep,national,1,0.016056707500882138 +national,b600k.cps2024.acs100.s0,acs_native,demographics_pep,state,82,0.16848626972379935 +national,b600k.cps2024.acs100.s0,cps_native,income_components,cd,872,0.33886879495866196 +national,b600k.cps2024.acs100.s0,cps_native,income_components,national,8,0.2875549420635022 +national,b600k.cps2024.acs100.s0,cps_native,income_components,state,308,0.23678916833887328 +national,b600k.cps2024.acs100.s0,cps_native,program_receipt,national,1,0.0190766849307172 +national,b600k.cps2024.acs100.s0,cps_native,program_receipt,state,53,0.26317788342170323 +national,b600k.cps2024.acs100.s0,cps_native,tax_items,cd,1755,0.3224528917590234 +national,b600k.cps2024.acs100.s0,cps_native,tax_items,national,23,0.27663489396783864 +national,b600k.cps2024.acs100.s0,cps_native,tax_items,state,344,0.12639218991981416 +national,natural.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.004905048111233447 +national,natural.cps2022-2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.16878172366700006 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,income_components,cd,872,0.3777395616208158 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,income_components,national,8,0.32980180744872545 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,income_components,state,308,0.2497527061900134 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.023465091254367004 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.2080660654966806 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.41925541938267114 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,tax_items,national,23,0.23291743730409104 +national,natural.cps2022-2023-2024.acs100.s0,cps_native,tax_items,state,344,0.10331386245050982 +national,natural.cps2023-2024.acs100.s0,acs_native,demographics_pep,national,1,0.0011024277947811899 +national,natural.cps2023-2024.acs100.s0,acs_native,demographics_pep,state,82,0.1702495702655267 +national,natural.cps2023-2024.acs100.s0,cps_native,income_components,cd,872,0.39878707610553554 +national,natural.cps2023-2024.acs100.s0,cps_native,income_components,national,8,0.3208192686712129 +national,natural.cps2023-2024.acs100.s0,cps_native,income_components,state,308,0.2414815948793076 +national,natural.cps2023-2024.acs100.s0,cps_native,program_receipt,national,1,0.02307626869067111 +national,natural.cps2023-2024.acs100.s0,cps_native,program_receipt,state,53,0.21174810554203347 +national,natural.cps2023-2024.acs100.s0,cps_native,tax_items,cd,1755,0.4401128715666434 +national,natural.cps2023-2024.acs100.s0,cps_native,tax_items,national,23,0.2591656956830214 +national,natural.cps2023-2024.acs100.s0,cps_native,tax_items,state,344,0.1052393000286734 +national,natural.cps2024.acs100.s0,acs_native,demographics_pep,national,1,0.00204405073150566 +national,natural.cps2024.acs100.s0,acs_native,demographics_pep,state,82,0.1677059521885838 +national,natural.cps2024.acs100.s0,cps_native,income_components,cd,872,0.4372669490700439 +national,natural.cps2024.acs100.s0,cps_native,income_components,national,8,0.31648451055614024 +national,natural.cps2024.acs100.s0,cps_native,income_components,state,308,0.2696116341504152 +national,natural.cps2024.acs100.s0,cps_native,program_receipt,national,1,0.025047315767374664 +national,natural.cps2024.acs100.s0,cps_native,program_receipt,state,53,0.21615851274709622 +national,natural.cps2024.acs100.s0,cps_native,tax_items,cd,1755,0.5062172571570394 +national,natural.cps2024.acs100.s0,cps_native,tax_items,national,23,0.2487918124208845 +national,natural.cps2024.acs100.s0,cps_native,tax_items,state,344,0.1121591199800416 diff --git a/experiments/us-support-mix-bakeoff-20260930/holdout_unsupported.csv b/experiments/us-support-mix-bakeoff-20260930/holdout_unsupported.csv new file mode 100644 index 0000000000..a7ea5371f3 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/holdout_unsupported.csv @@ -0,0 +1,61 @@ +product,arm,0 +local,b1200k.cps0.acs100.s0,2 +local,b1200k.cps2022-2023-2024.acs000.s0,2 +local,b1200k.cps2022-2023-2024.acs100.s0,2 +local,b1200k.cps2023-2024.acs000.s0,2 +local,b1200k.cps2023-2024.acs100.s0,2 +local,b1200k.cps2024.acs000.s0,2 +local,b1200k.cps2024.acs100.s0,2 +local,b300k.cps0.acs100.s0,2 +local,b300k.cps2022-2023-2024.acs000.s0,2 +local,b300k.cps2022-2023-2024.acs100.s0,2 +local,b300k.cps2022-2023-2024.acs100.s1,2 +local,b300k.cps2022-2023-2024.acs100.s2,2 +local,b300k.cps2023-2024.acs000.s0,2 +local,b300k.cps2023-2024.acs100.s0,2 +local,b300k.cps2024.acs000.s0,2 +local,b300k.cps2024.acs100.s0,2 +local,b300k.cps2024.acs100.s1,2 +local,b300k.cps2024.acs100.s2,2 +local,b600k.cps0.acs100.s0,2 +local,b600k.cps2022-2023-2024.acs000.s0,2 +local,b600k.cps2022-2023-2024.acs050.s0,2 +local,b600k.cps2022-2023-2024.acs100.s0,2 +local,b600k.cps2023-2024.acs000.s0,2 +local,b600k.cps2023-2024.acs100.s0,2 +local,b600k.cps2024.acs000.s0,2 +local,b600k.cps2024.acs050.s0,2 +local,b600k.cps2024.acs100.s0,2 +local,natural.cps2022-2023-2024.acs100.s0,2 +local,natural.cps2023-2024.acs100.s0,2 +local,natural.cps2024.acs100.s0,22 +national,b1200k.cps0.acs100.s0,2 +national,b1200k.cps2022-2023-2024.acs000.s0,2 +national,b1200k.cps2022-2023-2024.acs100.s0,2 +national,b1200k.cps2023-2024.acs000.s0,2 +national,b1200k.cps2023-2024.acs100.s0,2 +national,b1200k.cps2024.acs000.s0,2 +national,b1200k.cps2024.acs100.s0,2 +national,b300k.cps0.acs100.s0,2 +national,b300k.cps2022-2023-2024.acs000.s0,2 +national,b300k.cps2022-2023-2024.acs100.s0,2 +national,b300k.cps2022-2023-2024.acs100.s1,2 +national,b300k.cps2022-2023-2024.acs100.s2,2 +national,b300k.cps2023-2024.acs000.s0,2 +national,b300k.cps2023-2024.acs100.s0,2 +national,b300k.cps2024.acs000.s0,2 +national,b300k.cps2024.acs100.s0,2 +national,b300k.cps2024.acs100.s1,2 +national,b300k.cps2024.acs100.s2,2 +national,b600k.cps0.acs100.s0,2 +national,b600k.cps2022-2023-2024.acs000.s0,2 +national,b600k.cps2022-2023-2024.acs050.s0,2 +national,b600k.cps2022-2023-2024.acs100.s0,2 +national,b600k.cps2023-2024.acs000.s0,2 +national,b600k.cps2023-2024.acs100.s0,2 +national,b600k.cps2024.acs000.s0,2 +national,b600k.cps2024.acs050.s0,2 +national,b600k.cps2024.acs100.s0,2 +national,natural.cps2022-2023-2024.acs100.s0,2 +national,natural.cps2023-2024.acs100.s0,2 +national,natural.cps2024.acs100.s0,22 diff --git a/experiments/us-support-mix-bakeoff-20260930/replicate_spread.csv b/experiments/us-support-mix-bakeoff-20260930/replicate_spread.csv new file mode 100644 index 0000000000..e0594c1450 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/replicate_spread.csv @@ -0,0 +1,7 @@ +product,cps_years,income_components.state,income_components.cd,tax_items.state,tax_items.cd,program_receipt.state,demographics_pep.state,acs_native.state,acs_native.cd,acs_native.county +local,1,0.006379544884992923,0.01156960527790735,0.003656044965125471,0.0020583177504610857,0.024184288036940685,0.008761082783022367,0.001683529225883761,0.0013767259104605037,0.001390694195340752 +local,2,,,,,,,,, +local,3,0.006572927521882116,0.002187831181070142,0.002166421431950712,0.0019497770531794129,0.00569989826264732,0.001569968197074798,0.00026181889597088774,0.001134481468404473,0.0005354853331227933 +national,1,0.0015542320943534686,0.007985798596900882,0.002777874282566795,0.0032961036113893245,0.040946827732212004,0.007650750981897314,0.001119675876380039,0.002352977925518973,0.001579773700662283 +national,2,,,,,,,,, +national,3,0.00651339016838397,0.007025408080724732,0.00179743188387736,0.005016700663172885,0.014130265887185979,0.005495391504626003,0.00048329502674169237,0.0013786966104581211,0.0004430957410563978 diff --git a/tools/bakeoff_us_support_mix.py b/tools/bakeoff_us_support_mix.py index 88f591a3a2..edae8d28c1 100644 --- a/tools/bakeoff_us_support_mix.py +++ b/tools/bakeoff_us_support_mix.py @@ -104,7 +104,7 @@ def sha256_file(path: Path) -> str: def write_json(path: Path, payload: object) -> None: path.parent.mkdir(parents=True, exist_ok=True) - tmp = path.with_suffix(path.suffix + ".tmp") + tmp = path.with_suffix(f"{path.suffix}.{os.getpid()}.tmp") tmp.write_text(json.dumps(payload, indent=1, sort_keys=True, default=str)) tmp.replace(path) From 39025a7707355e70a4ce4b39350ad1f5679fc939 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 30 Sep 2026 07:11:43 -0400 Subject: [PATCH 09/15] Restore the os import write_json needs for its per-process temp name Co-Authored-By: Claude Opus 5.5 --- tools/bakeoff_us_support_mix.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/bakeoff_us_support_mix.py b/tools/bakeoff_us_support_mix.py index edae8d28c1..23d814dbcb 100644 --- a/tools/bakeoff_us_support_mix.py +++ b/tools/bakeoff_us_support_mix.py @@ -30,6 +30,7 @@ import importlib.util import json import math +import os import pickle import resource import sys From c2c7330b200d2600bbea7d1ad4b1b92e59a6fd0d Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 30 Sep 2026 07:34:00 -0400 Subject: [PATCH 10/15] Address the final review: loss-weighted headline, draw means, counter-readings, receipts for every claim - Verdict rests on the release's loss-weighted held-out error and three-draw means; program receipt is a wash nationally, state tax items a cost; the local file's losses to clones and the national 50/50 alternative are stated. - Rescore keeps solve-time cost; --rescore is explicit; receipts carry input and row digests so stale receipts re-solve; restored 22 solve peaks. - The SPM zero-adult flag is computed in shard/spm-flags (spm_flags.json). - SPM report rates exclude group quarters; the headline ACS-native average uses household-universe measures only. - ASEC quality table rebuilt from a committed script (asec_quality.py). - Hash mirror tested against the port branch's own draws. Co-Authored-By: Claude Opus 5.5 --- docs/us-support-mix-bakeoff.md | 461 ++++++++++-------- .../us-support-mix-bakeoff-20260930/arms.csv | 122 ++--- .../asec_quality.json | 159 ++++++ .../asec_quality.py | 111 +++++ .../dimensions_by_arm.csv | 122 ++--- .../headline.md | 120 ++--- .../materialize/acs/shard_000.r0-750000.json | 34 ++ .../acs/shard_000.r750000-1210000.json | 34 ++ .../materialize/acs/shard_001.r0-750000.json | 34 ++ .../acs/shard_001.r750000-1210000.json | 34 ++ .../materialize/acs/shard_002.r0-750000.json | 34 ++ .../acs/shard_002.r750000-1210000.json | 34 ++ .../materialize/acs/shard_003.r0-750000.json | 34 ++ .../acs/shard_003.r750000-1210000.json | 34 ++ .../materialize/acs/shard_004.r0-750000.json | 34 ++ .../acs/shard_004.r750000-1210000.json | 34 ++ .../materialize/acs/shard_005.r0-750000.json | 34 ++ .../acs/shard_005.r750000-1210000.json | 34 ++ .../materialize/acs/shard_006.r0-750000.json | 34 ++ .../acs/shard_006.r750000-1210000.json | 34 ++ .../materialize/acs/shard_007.r0-750000.json | 34 ++ .../acs/shard_007.r750000-1210000.json | 34 ++ .../materialize/acs/shard_008.r0-750000.json | 34 ++ .../acs/shard_008.r750000-1210000.json | 34 ++ .../materialize/acs/shard_009.r0-750000.json | 34 ++ .../acs/shard_009.r750000-1210000.json | 34 ++ .../materialize/acs/shard_010.r0-750000.json | 34 ++ .../acs/shard_010.r750000-1210000.json | 34 ++ .../materialize/acs/shard_011.r0-750000.json | 34 ++ .../acs/shard_011.r750000-1210000.json | 34 ++ .../materialize/acs/shard_012.r0-750000.json | 34 ++ .../acs/shard_012.r750000-1210000.json | 34 ++ .../materialize/acs/shard_013.r0-750000.json | 34 ++ .../acs/shard_013.r750000-1210000.json | 34 ++ .../materialize/acs/shard_014.r0-750000.json | 34 ++ .../acs/shard_014.r750000-1210000.json | 34 ++ .../materialize/acs/shard_015.r0-750000.json | 34 ++ .../acs/shard_015.r750000-1210000.json | 34 ++ .../materialize/acs/shard_016.r0-750000.json | 34 ++ .../acs/shard_016.r750000-1210000.json | 34 ++ .../materialize/acs/shard_017.r0-750000.json | 34 ++ .../acs/shard_017.r750000-1210000.json | 34 ++ .../materialize/acs/shard_018.r0-750000.json | 34 ++ .../acs/shard_018.r750000-1210000.json | 34 ++ .../materialize/acs/shard_019.r0-750000.json | 34 ++ .../acs/shard_019.r750000-1210000.json | 34 ++ .../materialize/acs/shard_020.r0-750000.json | 34 ++ .../acs/shard_020.r750000-1210000.json | 34 ++ .../materialize/acs/shard_021.r0-750000.json | 34 ++ .../acs/shard_021.r750000-1210000.json | 34 ++ .../materialize/acs/shard_022.r0-750000.json | 34 ++ .../acs/shard_022.r750000-1210000.json | 34 ++ .../materialize/acs/shard_023.r0-750000.json | 34 ++ .../acs/shard_023.r750000-1210000.json | 34 ++ .../materialize/acs/shard_024.r0-750000.json | 34 ++ .../acs/shard_024.r750000-1210000.json | 34 ++ .../materialize/acs/shard_025.r0-750000.json | 34 ++ .../acs/shard_025.r750000-1210000.json | 34 ++ .../materialize/acs/shard_026.r0-750000.json | 34 ++ .../acs/shard_026.r750000-1210000.json | 34 ++ .../materialize/acs/shard_027.r0-750000.json | 34 ++ .../acs/shard_027.r750000-1210000.json | 34 ++ .../materialize/acs/shard_028.r0-750000.json | 34 ++ .../acs/shard_028.r750000-1210000.json | 34 ++ .../materialize/acs/shard_029.r0-750000.json | 34 ++ .../acs/shard_029.r750000-1210000.json | 34 ++ .../materialize/acs/shard_030.r0-750000.json | 34 ++ .../acs/shard_030.r750000-1210000.json | 34 ++ .../materialize/cps/shard_000.json | 26 + .../materialize/cps/shard_001.json | 26 + .../materialize/cps/shard_002.json | 29 ++ .../materialize/cps/shard_003.json | 29 ++ .../materialize/cps/shard_004.json | 29 ++ .../materialize/cps/shard_005.json | 29 ++ .../materialize/cps/shard_006.json | 29 ++ .../materialize/cps/shard_007.json | 26 + .../materialize/measures.json | 424 ++++++++++++++++ .../memo_tables.py | 70 +++ .../replicate_mean.csv | 5 + .../replicate_spread.csv | 12 +- .../spm_flags.json | 9 + .../engine_free/us/test_us_support_mix.py | 25 + tools/bakeoff_us_support_mix.py | 153 +++++- 83 files changed, 3716 insertions(+), 408 deletions(-) create mode 100644 experiments/us-support-mix-bakeoff-20260930/asec_quality.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/asec_quality.py create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_000.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_000.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_001.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_001.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_002.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_002.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_003.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_003.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_004.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_004.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_005.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_005.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_006.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_006.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_007.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_007.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_008.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_008.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_009.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_009.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_010.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_010.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_011.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_011.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_012.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_012.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_013.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_013.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_014.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_014.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_015.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_015.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_016.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_016.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_017.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_017.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_018.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_018.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_019.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_019.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_020.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_020.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_021.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_021.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_022.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_022.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_023.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_023.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_024.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_024.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_025.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_025.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_026.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_026.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_027.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_027.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_028.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_028.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_029.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_029.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_030.r0-750000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_030.r750000-1210000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_000.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_001.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_002.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_003.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_004.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_005.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_006.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_007.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/materialize/measures.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/memo_tables.py create mode 100644 experiments/us-support-mix-bakeoff-20260930/replicate_mean.csv create mode 100644 experiments/us-support-mix-bakeoff-20260930/spm_flags.json diff --git a/docs/us-support-mix-bakeoff.md b/docs/us-support-mix-bakeoff.md index 15ee1a9a84..9c4be5dfc9 100644 --- a/docs/us-support-mix-bakeoff.md +++ b/docs/us-support-mix-bakeoff.md @@ -1,10 +1,10 @@ -# US support mix: CPS years vs ACS rows at a fixed row budget +# US support mix: CPS years vs ACS rows at a fixed household budget Status: bake-off run 2026-09-28 to 2026-09-30 on main `bda72cb02`, policyengine-us 2.2.1, pinned Chronicle feed `b8543739` (32,842 targets); 30 arms × 2 products, all scored. Receipts: -[`experiments/us-support-mix-bakeoff-20260930/`](../experiments/us-support-mix-bakeoff-20260930/). Tool: -[`tools/bakeoff_us_support_mix.py`](../tools/bakeoff_us_support_mix.py); +[`experiments/us-support-mix-bakeoff-20260930/`](../experiments/us-support-mix-bakeoff-20260930/). +Tool: [`tools/bakeoff_us_support_mix.py`](../tools/bakeoff_us_support_mix.py); primitives and invariants: [`us_runtime/support_mix.py`](../packages/microcosm-build/src/microcosm/build/us_runtime/support_mix.py). @@ -20,116 +20,164 @@ local file? ## Verdict -- **National compact file: pool the newest three CPS years and fill to - 300,000 source households with ACS.** With 2022–2024 that is 168,852 CPS - households plus 131,148 ACS households, 484,080 physical rows. Against the - three-year CPS file alone (352,932 rows), held-out state income error falls - from 0.250 to 0.218 and state program-receipt error from 0.208 to 0.184; - district and county measures improve throughout; state tax items cost 0.008 - (0.103 to 0.111). Larger ACS fills keep improving local measures but give - back national program receipt (0.184 at 300k, 0.225 at 600k, 0.239 at - 1.2M), so the compact file stops at 300k. -- **CD and county local file: pool the newest three CPS years and fill to - 1.2M source households with ACS households, not CPS location clones.** That - is 1,384,080 physical rows, 13% fewer than today's 1,588,854-row ACS local - file. At 1.2M, the ACS fill matches clones on held-out district income and - tax items (0.248 and 0.189 against 0.248 and 0.185) with 55% of the clones' - rows, and cuts ACS-native error by 40% in districts (0.123 against 0.206) - and 28% in counties (0.166 against 0.229). Against an ACS-only file of the - same size (today's local file is 57,240 CPS rows plus every ACS household), - the three CPS years cut state program-receipt error from 0.318 to 0.256 and - state tax items from 0.127 to 0.117, and ACS-native error is no worse - (0.069 / 0.123 / 0.166 against 0.074 / 0.128 / 0.172). -- **More CPS years help whenever the fill is ACS.** At 300k in the national - product, one, two and three years give state income error 0.249, 0.236 and - 0.218, program receipt 0.260, 0.217 and 0.184, and tax items 0.133, 0.124 - and 0.111. Income years 2020 and 2021 pass the response-quality check, so a - five-year pool is the next arm to run (see Follow-ups); it was not run here. -- **Clones add geography and nothing else.** In the national product they - leave every state measure where the CPS-only file had it. In both products - they improve district and county measures slowly (national-product district - income 0.378, 0.362, 0.337 and 0.324 from no clones to 1.2M), at about - twice the physical rows of an ACS fill of the same budget. - -The pattern matches the design note's reasoning. ACS rows carry real -variation in what the ACS observes, so income components (the ACS records -wages, self-employment, Social Security, retirement and investment income), -housing and local demographics improve as ACS rows enter. Program receipt on -ACS rows is imputed from CPS donors, so it degrades as the ACS share rises: -state program-receipt error is 0.208 with no ACS, 0.184 with 131k ACS -households beside three CPS years, and 0.303 with ACS alone at 300k. +The headline metric is the release's own objective on held-out targets: the +loss-weighted capped relative error over every held-out CPS-native target +(income components, tax items, program receipt) at a level, with the +release's fixed concept-budget weights. Per-dimension columns show the +trade-offs. + +- **National compact file: the newest three CPS years plus ACS to 300,000 + source households.** With 2022–2024 that is 168,852 CPS households plus + 131,148 ACS households, 484,080 physical rows (+37% over the three-year CPS + file's 352,932). Against the CPS-only file, averaged over three ACS draws: + - held-out state CPS-native error falls from 0.119 to 0.113 (draw SD + 0.0003) and district error from 0.353 to 0.291; + - state income components improve (0.250 to 0.224), state tax items get + worse (0.103 to 0.113), and state program receipt does not measurably + change (0.208 against 0.198, draw SD 0.014); + - every ACS-native level improves (district 0.236 to 0.188, county 0.307 + to 0.259). + + Stopping at 300k is a cost call. Larger ACS fills keep lowering district + error (0.291, 0.266, 0.244 at 300k, 600k, 1.2M) but leave state error flat + (0.113, 0.115, 0.113), keep raising state tax items (0.113, 0.116, 0.118) + and worsen state program receipt (0.198, 0.225, 0.239). The best state-level + arm is the 600k 50/50 fill (0.111; income 0.213, tax items 0.112, program + receipt 0.187) at 1,019,084 rows, 2.1 times the recommendation. If state tax + items and serving cost outweigh everything else, the three-year CPS-only + file remains the choice. + +- **CD and county local file: the newest three CPS years plus ACS households, + not CPS location clones, to 1.2M source households.** That is 1,384,080 + physical rows, 13% fewer than today's 1,588,854-row ACS local file. At + 1.2M: + - held-out district CPS-native error ties the clones (0.169 against 0.170) + at 55% of their rows, and state error is lower (0.112 against 0.114); + - ACS-native error is 44% lower in districts (0.141 against 0.253) and 31% + lower in counties (0.174 against 0.253); + - the clones, and the CPS-only file, do better on state program receipt + (0.218 and 0.220 against 0.256) and state tax items (0.096 and 0.101 + against 0.117). The 50/50 fill at 600k splits the difference (program + receipt 0.243, tax items 0.096, district ACS-native 0.209). + + Against an ACS-only file of the same size (today's local file is 57,240 CPS + rows plus every ACS household), the three CPS years lower state CPS-native + error from 0.120 to 0.112, state program receipt from 0.318 to 0.256 and + state tax items from 0.127 to 0.117, and ACS-native error is no worse. + One CPS year instead of three ties on districts and ACS-native measures at + 1.2M and saves 123k rows (9%), but loses on state error (0.116 against + 0.112) and, at 300k where there are three draws of each, clearly so (0.119 + against 0.112). Three years also let the local file share the national + file's CPS support. + +- **More CPS years help the national file.** At 300k, one year against three + (three draws each): state income 0.249 against 0.224, tax items 0.130 + against 0.113, program receipt 0.241 against 0.198. In the local file the + effect is mixed: each CPS year displaces ACS households within the budget, + so tax items and program receipt improve while state income and ACS-native + measures get slightly worse. Income years 2020 and 2021 pass the + response-quality check, so a five-year pool is the next arm to run; it was + not run here (see Follow-ups). + +- **Clones add geography and little else.** In the national file they leave + every state measure where the CPS-only file had it. In both files they + improve district measures slowly (national-file district CPS-native error + 0.353, then 0.332 at 300k) and household ACS-native measures barely + (local-file county 0.299, then 0.263 and 0.253 at 600k and 1.2M), at 1.3 to + 1.8 times the physical rows of an ACS fill of the same budget. + +This matches the design note's reasoning. ACS rows carry real variation in +what the ACS observes, so income components (the ACS records wages, +self-employment, Social Security, retirement and interest, dividend and rental +income), housing and local geography improve as ACS rows enter. Program +receipt on ACS rows is imputed from CPS donors: beside three CPS years it +holds level at 131k ACS households, then worsens as the fill grows, and ACS +alone at 300k scores 0.303. ## Results -All errors are mean capped relative error on held-out targets, `min(|est − -target| / max(|target|, 1), 1)`; lower is better. "ACS-native" averages -households, tenure, contract rent, real-estate taxes, household population and -two age bands against the ACS 2024 1-year tables. Rows are physical household -rows (a CPS household carries its PUF tax-detail clone rows); ESS is Kish over -distinct households (an ASEC housing unit counted once across rotation years, -PUF rows and clones). Seed 0 throughout. - -### National product (trained on the 5,683 national and state targets) - -| Arm | Rows | ESS | Income, state | Tax items, state | Program receipt, state | Income, CD | Tax items, CD | ACS-native state / CD / county | -|---|---|---|---|---|---|---|---|---| -| CPS 2022–24 only | 352,932 | 44,943 | 0.250 | 0.103 | 0.208 | 0.378 | 0.420 | 0.112 / 0.219 / 0.298 | -| CPS 2022–24 + clones to 300k | 627,089 | 44,984 | 0.250 | 0.103 | 0.208 | 0.362 | 0.393 | 0.112 / 0.208 / 0.272 | -| CPS 2024 + ACS to 300k | 361,228 | 63,297 | 0.249 | 0.133 | 0.260 | 0.353 | 0.367 | 0.075 / 0.160 / 0.253 | -| CPS 2023–24 + ACS to 300k | 422,543 | 65,908 | 0.236 | 0.124 | 0.217 | 0.341 | 0.361 | 0.084 / 0.165 / 0.250 | -| **CPS 2022–24 + ACS to 300k** | **484,080** | **69,065** | **0.218** | **0.111** | **0.184** | **0.343** | **0.356** | **0.094 / 0.174 / 0.253** | -| ACS only, 300k | 300,000 | 60,492 | 0.261 | 0.151 | 0.303 | 0.351 | 0.358 | 0.083 / 0.166 / 0.273 | -| CPS 2022–24 + 50/50 to 600k | 1,019,084 | 77,830 | 0.213 | 0.112 | 0.187 | 0.319 | 0.332 | 0.096 / 0.165 / 0.223 | -| CPS 2022–24 + ACS to 600k | 784,080 | 113,041 | 0.221 | 0.116 | 0.225 | 0.326 | 0.326 | 0.084 / 0.151 / 0.221 | -| CPS 2022–24 + ACS to 1.2M | 1,384,080 | 222,920 | 0.217 | 0.118 | 0.239 | 0.300 | 0.301 | 0.072 / 0.124 / 0.182 | -| Spread across 3 ACS draws (SD) | | | 0.007 | 0.002 | 0.014 | 0.007 | 0.005 | 0.000 / 0.001 / 0.000 | +All errors are capped relative error on held-out targets, `min(|est − target| +/ max(|target|, 1), 1)`; lower is better. "CPS-native" columns are +loss-weighted over all held-out CPS-native targets at the level; the +per-dimension columns are plain means. "ACS-native" averages households, +owner and renter households, contract rent, real-estate taxes and household +population against the ACS 2024 1-year tables (age bands, which count +group-quarters people only the ACS rows have, are in +`acs_native_by_level_measure.csv`). Rows are physical household rows (a CPS +household carries its PUF tax-detail clone rows); ESS is Kish over distinct +households (an ASEC housing unit counted once across rotation years, PUF rows +and clones). Rows marked "3 draws" average three disjoint ACS draws; the rest +are one draw. Tables are generated from the receipts by `memo_tables.py`. + +### National product (4,828 train-role national and state targets) + +| Arm | Rows | ESS | CPS-native, state | CPS-native, CD | Income, state | Tax items, state | Program receipt, state | Age (PEP), state | ACS-native state / CD / county | +|---|---|---|---|---|---|---|---|---|---| +| CPS 2022–24 only | 352,932 | 44,943 | 0.119 | 0.353 | 0.250 | 0.103 | 0.208 | 0.169 | 0.133 / 0.236 / 0.307 | +| CPS 2022–24 + clones to 300k | 627,089 | 44,984 | 0.119 | 0.332 | 0.250 | 0.103 | 0.208 | 0.169 | 0.133 / 0.226 / 0.283 | +| CPS 2024 + ACS to 300k (3 draws) | 361,228 | 64,090 | 0.117 | 0.300 | 0.249 | 0.130 | 0.241 | 0.159 | 0.086 / 0.166 / 0.255 | +| CPS 2023–24 + ACS to 300k | 422,543 | 65,908 | 0.119 | 0.288 | 0.236 | 0.124 | 0.217 | 0.171 | 0.097 / 0.175 / 0.251 | +| **CPS 2022–24 + ACS to 300k (3 draws)** | 484,080 | 69,353 | 0.113 | 0.291 | 0.224 | 0.113 | 0.198 | 0.163 | 0.110 / 0.188 / 0.259 | +| ACS only, 300k | 300,000 | 60,492 | 0.132 | 0.289 | 0.261 | 0.151 | 0.303 | 0.176 | 0.096 / 0.172 / 0.269 | +| CPS 2022–24 + 50/50 to 600k | 1,019,084 | 77,830 | 0.111 | 0.272 | 0.213 | 0.112 | 0.187 | 0.163 | 0.113 / 0.182 / 0.232 | +| CPS 2022–24 + ACS to 600k | 784,080 | 113,041 | 0.115 | 0.266 | 0.221 | 0.116 | 0.225 | 0.159 | 0.097 / 0.163 / 0.227 | +| CPS 2022–24 + ACS to 1.2M | 1,384,080 | 222,920 | 0.113 | 0.244 | 0.217 | 0.118 | 0.239 | 0.166 | 0.081 / 0.135 / 0.189 | +| SD across 3 draws (300k, 2022–24) | | | 0.000 | 0.002 | 0.007 | 0.002 | 0.014 | 0.005 | 0.001 / 0.001 / 0.002 | ### Local product (adds the 27,148 district-classified targets and district household population) -| Arm | Rows | ESS | Income, state | Tax items, state | Program receipt, state | Income, CD | Tax items, CD | ACS-native state / CD / county | -|---|---|---|---|---|---|---|---|---| -| CPS 2022–24 only | 352,932 | 52,074 | 0.217 | 0.101 | 0.220 | 0.292 | 0.240 | 0.111 / 0.219 / 0.284 | -| CPS 2022–24 + clones to 600k | 1,254,039 | 54,305 | 0.211 | 0.097 | 0.221 | 0.257 | 0.198 | 0.111 / 0.209 / 0.241 | -| CPS 2022–24 + clones to 1.2M | 2,508,197 | 54,292 | 0.214 | 0.096 | 0.218 | 0.248 | 0.185 | 0.112 / 0.206 / 0.229 | -| CPS 2022–24 + 50/50 to 600k | 1,019,084 | 91,100 | 0.226 | 0.096 | 0.243 | 0.261 | 0.195 | 0.095 / 0.173 / 0.216 | -| CPS 2022–24 + ACS to 600k | 784,080 | 150,595 | 0.228 | 0.109 | 0.267 | 0.262 | 0.199 | 0.079 / 0.142 / 0.198 | -| **CPS 2022–24 + ACS to 1.2M** | **1,384,080** | **276,474** | **0.206** | **0.117** | **0.256** | **0.248** | **0.189** | **0.069 / 0.123 / 0.166** | -| CPS 2024 + ACS to 1.2M | 1,261,228 | 281,840 | 0.204 | 0.123 | 0.278 | 0.245 | 0.191 | 0.065 / 0.121 / 0.167 | -| ACS only, 1.2M | 1,200,000 | 272,607 | 0.206 | 0.127 | 0.318 | 0.244 | 0.193 | 0.074 / 0.128 / 0.172 | -| Spread across 3 ACS draws (SD) | | | 0.007 | 0.002 | 0.006 | 0.002 | 0.002 | 0.000 / 0.001 / 0.001 | - -The spread row comes from three disjoint ACS draws of the 300k arms with -three CPS years. Differences under about 0.01 (0.03 for program receipt, -which has 53 held-out targets) are within draw-to-draw noise. National-level -held-out targets (36) are noisier still and are left out of the tables; they +| Arm | Rows | ESS | CPS-native, state | CPS-native, CD | Income, state | Tax items, state | Program receipt, state | Age (PEP), state | ACS-native state / CD / county | +|---|---|---|---|---|---|---|---|---|---| +| CPS 2022–24 only | 352,932 | 52,074 | 0.116 | 0.209 | 0.217 | 0.101 | 0.220 | 0.154 | 0.134 / 0.263 / 0.299 | +| CPS 2022–24 + clones to 600k | 1,254,039 | 54,305 | 0.114 | 0.179 | 0.211 | 0.097 | 0.221 | 0.175 | 0.134 / 0.256 / 0.263 | +| CPS 2022–24 + clones to 1.2M | 2,508,197 | 54,292 | 0.114 | 0.170 | 0.214 | 0.096 | 0.218 | 0.183 | 0.135 / 0.253 / 0.253 | +| CPS 2022–24 + 50/50 to 600k | 1,019,084 | 91,100 | 0.111 | 0.173 | 0.226 | 0.096 | 0.243 | 0.176 | 0.113 / 0.209 / 0.232 | +| CPS 2022–24 + ACS to 600k | 784,080 | 150,595 | 0.115 | 0.179 | 0.228 | 0.109 | 0.267 | 0.168 | 0.092 / 0.166 / 0.207 | +| **CPS 2022–24 + ACS to 1.2M** | 1,384,080 | 276,474 | 0.112 | 0.169 | 0.206 | 0.117 | 0.256 | 0.184 | 0.078 / 0.141 / 0.174 | +| CPS 2024 + ACS to 1.2M | 1,261,228 | 281,840 | 0.116 | 0.169 | 0.204 | 0.123 | 0.278 | 0.188 | 0.072 / 0.136 / 0.174 | +| ACS only, 1.2M | 1,200,000 | 272,607 | 0.120 | 0.170 | 0.206 | 0.127 | 0.318 | 0.193 | 0.084 / 0.146 / 0.180 | +| SD across 3 draws (300k, 2022–24) | | | 0.001 | 0.002 | 0.007 | 0.002 | 0.006 | 0.002 | 0.000 / 0.002 / 0.000 | + +Differences under about twice the draw SD are noise. The one-year arms are +noisier than the three-year arms (program receipt SD 0.041 national and +0.024 local at 300k; `replicate_spread.csv`). National-level held-out +targets (36) are too few to rank arms and are left out of the tables; they are in the receipts. -**Where the local file gives ground.** Program receipt and state tax items -are the two dimensions an ACS fill worsens. If program-receipt accuracy -matters more than local housing and demographics, the 50/50 fill at 600k is -the middle choice: program receipt 0.243 and tax items 0.096, at district -ACS-native 0.173. +**Calibration worsens held-out state age cells, in every arm.** The mean +capped error on held-out Census PEP state age bands is 0.066 at the starting +weights and 0.168 after calibration, across all 60 calibrations (0.131 to +0.193). The design weights already carry Census age controls, and the solve +trades them away for its training targets. Arms differ by less than the trade +(national 0.159 to 0.176 in the table), so the ranking stands; the size of the +trade is a finding about the calibration objective, filed as a follow-up. **Report only: SPM poverty** (never calibrated or gated). In the national product the SPM rate is 12.8% for the three-year CPS file, 12.2% for the -recommended 300k mix and 12.3% for ACS only; child SPM poverty is 14.7%, 13.6% -and 12.3%. ACS rows' SPM resources rest on imputed CPS-only inputs, so these -differences are a property of the imputation as much as of the support. +recommended 300k mix (seed 0) and 12.3% for ACS only; child SPM poverty is +14.7%, 13.6% and 12.3%. These rates include the ACS group-quarters persons +still in the support, whom Census places outside the SPM universe; the tool +now excludes them, and these receipts predate that fix. ACS rows' SPM +resources rest on imputed CPS-only inputs, so the differences reflect the +imputation as much as the support. ## Cost | | Measured | |---|---| -| Engine pass (all 419 concepts), wall time per household on the shared host | CPS rows about 25 ms, ACS rows about 50 ms; 5,000-household engine batches, peak 16–23 GB per 50,000-household shard | +| Engine pass (all 419 concepts), wall time per household on the shared host | CPS parts 7.7 to 57 ms (median 26); ACS parts 7.5 to 226 ms (median 39); 5,000-household engine batches | +| Engine pass peak RSS | 50,000-household CPS shards 5.8 to 15.6 GB; up to 22.7 GB per ACS process (a running maximum over its parts) | | Calibration, national recommendation (484k rows, 1,500 epochs) | 22 min, 6.2 GB peak | | Calibration, local recommendation (1.38M rows, 1,500 epochs) | 36 min, 15.9 GB peak | -| Calibration, local clones to 1.2M (2.51M rows) | 55–210 min, 18–28 GB peak | +| Calibration, local clones to 1.2M (2.51M rows) | 55 to 210 min, 18 to 28 GB peak | | Serving | proportional to physical rows: 484k national (+37% over CPS only), 1.38M local (−13% against today's local file) | -Wall times were measured with the host at load 10 to 400 and are comparable -only within this run. Training loss still fell a median 5.5% between epochs -1,000 and 1,500; every arm had the same budget. - +Wall times were measured with the host at load 10 to 400 and compare only +within this run. Training loss still fell a median 5.5% between epochs 1,000 +and 1,500 (`arms.csv` has `loss_1000` and `loss_final`); every arm had the +same 1,500-epoch budget. For 22 arms first scored before scoring covered +every level, the receipts carry the solve peak restored from the grid log and +no solve wall time. ## Design @@ -153,8 +201,7 @@ the budget with: proportion to ACS household weight (group-quarters rows excluded), the way Route A draws rows independently. A clone keeps its source row's engine values, so anything that varies by county within a state (ACA benchmark - premiums by rating area) is carried from the origin county. Re-running the - engine per clone would remove this approximation; + premiums by rating area) is carried from the origin county; - a 50/50 mix (`acs050`, at 600k only). | Budget | CPS years | Fills | @@ -168,8 +215,8 @@ the budget with: That is 30 arms. Each is calibrated twice, once per product: - **national compact**: the release's `national_state` surface (5,683 - usable national and state targets before the split), with loss weights - computed on that surface as the release does; + usable national and state targets, 4,828 of them train-role after the + split), with loss weights computed on that surface as the release does; - **local**: the full surface, which adds 27,148 targets the release classifies as district targets (24,340 district-level, plus 2,808 state and national totals from the SOI district file), plus district household @@ -180,12 +227,13 @@ That is 30 arms. Each is calibrated twice, once per product: Replicate arms take the next disjoint blocks of the one fixed ACS order, so they are independent draws; seed-0 arms are nested across budgets. -Group-quarters households (12% of ACS records) stay in the ACS side, as in -the ACS local release; the CPS has none. The 5,246 group-quarters records -(0.34% of ACS records, all group quarters) whose SPM unit has no member the -pinned engine classifies as an adult are excluded: policyengine-us 2.2.1 -refuses them, and Census puts ACS group quarters outside the SPM universe -(`us_runtime/spm_universe_source.py`). +Group-quarters households (11.96% of ACS records) stay in the ACS side, as in +the ACS local release; the CPS has none. The 5,246 ACS records (0.34%, all +group quarters) whose SPM unit has no member the pinned engine counts as an +adult are excluded: policyengine-us 2.2.1 refuses them, and Census puts ACS +group quarters outside the SPM universe (`us_runtime/spm_universe_source.py`). +`shard` and `spm-flags` compute the flag with the engine's rule +(`spm_flags.json`). **Five CPS years were not run.** Income years 2020 and 2021 pass the response-quality check below, but main pinned ASEC role and person sources @@ -210,40 +258,42 @@ reweights subsets: households with CPS-only inputs transferred from the 57,240-household receipt-qualified donor spine). The staging's own 57,240 donor rows are not used. The staging carries `is_spm_independent_minor_role` as all-null on - ACS rows; the column is dropped so the engine derives the role from - household structure (its formula), as the production ACS local build did. + ACS rows; the column is dropped so the engine derives the role from its + formula (`is_household_head | is_household_spouse`), as the production ACS + local build did. Both carry the same PolicyEngine input schema (141 and 140 person inputs). Imputations are fixed across arms: an ACS row's CPS-only variables come from the same donor spine whatever CPS years the arm pools. The bake-off therefore measures the support effect with donor quality held constant; in a -real rebuild, a 1-year arm would also have a thinner donor pool. +real rebuild, a one-year arm would also have a thinner donor pool. **Concepts.** The release materializer builds each state or district target's household column as a geography-free value times an indicator of the household's own state or district (`_base_simulation_household_columns`). `compile` groups the 32,842 targets into 419 such concepts, and `materialize` runs the release tool's own -`_materialize_target_frame` on them in 50,000-household shards (peak 16–23 -GB). Every arm's target matrix is then concept value × geography mask, -assembled sparse. `diffcheck` verifies the identity on real rows: production -per-target columns and concept × mask agree exactly on sampled state and -district targets of every family (see Evidence). The 11 JCT tax-expenditure -targets need reform simulations and are excluded from every arm. +`_materialize_target_frame` on them in household shards. Every arm's target +matrix is then concept value × geography mask, assembled sparse. `diffcheck` +verifies the identity on real rows (see Evidence). The 11 JCT +tax-expenditure targets need reform simulations and are excluded from every +arm. ### Holdout The US holdout ("Port the UK holdout to US release targets") has not merged. -The bake-off mirrors its pending `target_split` spec byte for byte: SHA-256 -of `salt + "\x1f" + key`, sealed if below 0.05 on the sealed salt, otherwise -held out if below 0.10 on the holdout salt. District children take their -state parent's key, so a held-out state total is held out with all its -districts; national and state targets are drawn independently, so a -held-out national total can still be pinned by trained state targets. -Vintage tokens are dropped from keys. The pending spec's pins, which force -some groups to train, were not yet written and are not mirrored, so the -bake-off split differs from the eventual release split for pinned groups. -Sealed targets are neither trained nor scored. +The bake-off mirrors its pending spec: SHA-256 of `salt + "\x1f" + key`, +sealed if below 0.05 on the sealed salt, otherwise held out if below 0.10 on +the holdout salt. The hash is tested against draws from the port branch's own +implementation (`PORT_BRANCH_FIXTURES`); the group-key and role rules follow +the port session's written spec, since its module had not been written. +District children take their state parent's key, so a held-out state total is +held out with all its districts; national and state targets are drawn +independently, so a held-out national total can still be pinned by trained +state targets. Vintage tokens are dropped from keys. The spec's pins, which +force some groups to train, are not mirrored, so this split differs from the +eventual release split for pinned groups. Sealed targets are neither trained +nor scored. On the pinned feed: 27,711 train, 3,470 holdout (36 national, 787 state, 2,647 district), 1,661 sealed. @@ -253,24 +303,24 @@ targets. ACS-native dimensions are scored against the ACS 2024 1-year table-based summary file (B25003 tenure, B25060 and B25065 aggregate rent, B25090 aggregate real-estate taxes, B25008 and B01003 population, B01001 age and sex) at national, state, district (119th Congress) and county (the 850 -counties the 1-year file covers). They are never calibrated, except -district total population in the local product. These tables come from the -same ACS year as the ACS rows; the PUMS is a subsample of the published +counties the 1-year file covers). None are calibrated, except district +household population (B25008) in the local product. These tables come from +the same ACS year as the ACS rows; the PUMS is a subsample of the published sample and district and county are drawn from PUMA, so ACS rows do not reproduce them by construction, but they share its sampling error. Treat -ACS-native scores as consistency with the published ACS, not as truth. +ACS-native scores as consistency with the published ACS. ### Calibration Every arm uses the production optimizer, `microcosm.calibrate.solve._optimize`, -with the fiscal release's optimizer settings: Adam on log-weights, learning rate 0.02, -capped relative error (cap 1.0), mass conserved, max weight ratio 5, the -release's concept-budget loss weights computed once per surface (the +with the fiscal release's optimizer settings: Adam on log-weights, learning +rate 0.02, capped relative error (cap 1.0), mass conserved, max weight ratio 5, +the release's concept-budget loss weights computed once per surface (the national_state surface for the national product, the full registry for the local one) before the split, so train and holdout keep fixed weights; district -household-population rows weigh 1 each; no L0 pruning (so the row budget -stays fixed). A sparse operator with a precomputed transpose replaces the -torch sparse-CSR backward pass, which was the bottleneck; the objective and +household-population rows weigh 1 each; no L0 pruning, so the row budget +stays fixed. A sparse operator with a precomputed transpose replaces the torch +sparse-CSR backward pass, which was the bottleneck; the objective and projections are unchanged. Starting weights: each CPS income year gets an equal share of the CPS mass; @@ -285,70 +335,73 @@ weights are positive, sum to the requested mass, give each CPS year an equal share and split CPS and ACS in proportion to households; distinct-household ESS never exceeds row ESS or the distinct-unit count; the holdout role is a pure function of the group key and never moves with a vintage token. -**Differential**: `diffcheck` compares production per-target materialization -with concept × mask. +**Differential**: the sparse target matrix equals a naive dense construction, +including cells that carry several targets; `diffcheck` compares production +per-target materialization with concept × mask on real rows. ### Scoring -- **Registry holdout**: capped relative error `min(|est − target| / - max(|target|, 1), 1)`, mean and loss-weighted mean, by dimension (CPS-native: +- **Registry holdout**: capped relative error by dimension (CPS-native: income components, tax items, program receipt; ACS-native: PEP - demographics) and level. A target no row in the arm can move scores as a - miss (error 1), so every arm is averaged over the same held-out set; a - common-support table is reported too. + demographics) and level, as a mean and loss-weighted. A target no row in the + arm can move scores as a miss (error 1), so every arm is averaged over the + same held-out set; a common-support table is reported too. Two held-out + targets are unsupported in every arm, and 22 in the one-year CPS-only arm. - **ACS-native**: households, tenure, aggregate rent (the model's `pre_subsidy_rent`, scored against both contract rent B25060 and gross rent - B25065) and real-estate taxes, household population (B25008) and total - population, age and sex (B01003, B01001; these include group quarters), by - level including county. Household measures exclude group-quarters rows. -- **ESS** over distinct households: weights summed within each household - unit (an ASEC housing unit, `H_IDNUM`, counted once across rotation years, - PUF clone rows and location clones; an ACS `SERIALNO`), then Kish; also the - median across districts. + B25065) and real-estate taxes, household population (B25008), and total + population, age and sex (B01003, B01001), by level including county. + Household measures exclude group-quarters rows. +- **ESS** over distinct households: weights summed within each household unit, + then Kish; also the median across districts. - **Cost**: calibration wall time and peak RSS per arm; engine seconds per household from the materialization receipts; physical rows as the serving cost driver. -- **Report only**: SPM poverty rate, all persons and children. Never - calibrated or gated. +- **Report only**: SPM poverty rate, all persons and children. ## CPS year response quality `census_cps_YYYY.h5` is keyed by income year (ASEC collected in YYYY+1). -Checked from the Census microdata and technical documentation: - -| File (income year) | ASEC | Households | Combined response rate | Whole-supplement imputed | Earnings allocated | -|---|---|---|---|---|---| -| 2019 | 2020 | 60,460 | 61.1% | 21.6% | 29.4% | -| 2020 | 2021 | 62,850 | 65.0% | 20.3% | 30.1% | -| 2021 | 2022 | 59,148 | 61.4% | 20.5% | 29.5% | -| 2022 | 2023 | 56,839 | 59.6% | 20.0% | 28.8% | -| 2023 | 2024 | 56,251 | 59.3% | 19.2% | 27.8% | -| 2024 | 2025 | 55,762 | 60.1% | 17.8% | 28.1% | - -Combined response is the product of basic-CPS and ASEC household response, -from each year's Source and Accuracy statement; imputation and allocation -are weighted shares computed from the Census microdata (`FL_665 != 1`; -earnings allocated among respondent earners). - -Income years 2020 and 2021 **pass** on response and processing quality: -their combined response rates are above the pinned years', their imputation, -allocation and weight-dispersion metrics sit within about 1.5 points of the -pinned years', and they show no composition break. Three caveats: +`asec_quality.py` computes the table from the processed files and the Census +public-use archives; the response rates are Census's own. + +| Income year (ASEC) | Households | Combined response rate | Earners, whole record imputed | Earners, items allocated | Homeownership | UC recipients | +|---|---|---|---|---|---|---| +| 2018 (2019) | 68,345 | 67.6% | 24.2% | 21.3% | 64.5% | 1,723 | +| 2019 (2020) | 60,460 | 61.1% | 23.8% | 21.3% | 66.4% | 1,563 | +| 2020 (2021) | 62,850 | 65.0% | 22.4% | 22.6% | 65.8% | 10,915 | +| 2021 (2022) | 59,148 | 61.4% | 22.4% | 21.8% | 65.5% | 4,065 | +| 2022 (2023) | 56,839 | 59.6% | 21.9% | 21.7% | 65.9% | 1,225 | +| 2023 (2024) | 56,251 | 59.3% | 20.7% | 21.0% | 65.6% | 1,360 | +| 2024 (2025) | 55,762 | 60.1% | 19.3% | 21.5% | 65.1% | 1,400 | + +Combined response is basic-CPS times ASEC household response, from each +year's CPS ASEC Source and Accuracy statement. Imputation shares are +`A_FNLWGT`-weighted among wage earners (`I_ERNVAL` 9 is a whole imputed +record; 1–8 an allocated item). Household weights have a coefficient of +variation of 0.598 to 0.610 and a Kish share of 0.729 to 0.737 in every year. +The public-use archives give whole-supplement imputation (`FL_665`) of 20.5%, +20.0%, 19.2%, 17.8% and 16.7% for income years 2021 to 2025. + +Income years 2020 and 2021 **pass**: their response rates are above the +pinned years', their imputation and allocation shares sit between the +pre-pandemic years' and the pinned years', and homeownership and weight +dispersion show no break. Three caveats: - Census asks users to take care comparing data years 2019, 2020 and 2021 with other years, and documents that nonrespondents in the 2020–2026 surveys differ more from respondents than before (2026 CPS ASEC technical - documentation). That caution covers the pinned 2022–2024 years' collections - too. + documentation). That caution covers the pinned 2022–2024 years too. - Their income years carry pandemic program receipt: 10,915 and 4,065 - unemployment-compensation recipients, against about 1,200–1,700 in other + unemployment-compensation recipients, against 1,225 to 1,723 in other years. That matters for program-receipt targets. -- About 35% of each file's households repeat in the neighbouring year. +- About a third of each file's households repeat in the neighbouring year + (32.5% to 37.8%). Income year 2019 (ASEC 2020, collected as COVID hit) is the file that fails: -it shows composition jumps in characteristics that are not weighting -controls (weighted BA+ share +1.5 points, homeownership +1.9 points, a 11.5% -smaller household sample). +homeownership jumps 1.9 points (64.5% to 66.4%) and falls back the next year, +and the sample has 11.5% fewer households than the year before (60,460 +against 68,345). Rotation overlap: a housing unit appears in at most two adjacent files, so 2022–2024 has 130,294 distinct units in 168,852 households (77.2%), and @@ -361,49 +414,51 @@ Rotation overlap: a housing unit appears in at most two adjacent files, so 2023–2025 export is the rerun. - **Imputations are held fixed.** ACS rows' CPS-only inputs come from one 57,240-household donor spine in every arm. A production one-year build - would also impute from a thinner donor pool, which would widen the - one-year arms' program-receipt gap. + would also impute from a thinner donor pool. - **Clones keep their origin row's engine values**, including anything that varies by county within a state. -- **The holdout mirrors the unmerged US split without its pins**, and holds out - district children with their state parent but national and state targets - independently. Scores are comparable across arms, not with the eventual - release split. +- **The holdout mirrors the unmerged US split without its pins.** Scores are + comparable across arms, not with the eventual release split. - **ACS-native truth is the published ACS 2024 1-year**, the same survey year as the ACS rows. Read it as consistency with the published ACS. -- **Older CPS years are not uprated**, as in Route A: calibration absorbs the +- **Older CPS years are not uprated**, as in Route A; calibration absorbs the 2022–2024 nominal income gap. -- **Group-quarters minors with no SPM adult are out of the ACS support** (5,246 - records), pending the engine's SPM-universe input (policyengine-us#9462). -- **JCT tax-expenditure targets are excluded** (they need reform simulations). +- **5,246 group-quarters records with no SPM adult are out of the ACS + support**, pending the engine's SPM-universe input (policyengine-us#9462). +- **JCT tax-expenditure targets are excluded**; they need reform simulations. ## Follow-ups -- Rerun the CPS-involving arms on the newest three years (2023–2025) once a - Route A export on main at or after `5187fce25` exists: shard it, run - `materialize --source cps`, delete the CPS receipts and rerun the grid. The - ACS concepts are reused. +- Rerun on the newest three CPS years (2023–2025) once a Route A export on main + at or after `5187fce25` exists: `shard --source cps` on it, `materialize + --source cps`, then `run-grid`. Receipts carry digests of their inputs, so + `run-grid` re-solves every arm whose inputs changed and keeps the ACS-only + arms. - Add five-year arms (2020–2024 or 2021–2025) once those years have Route A enrichment. -- Swap the split mirror for `microcosm.build.us_runtime.target_split` when it - merges, and rescore from the saved weights (`arm` re-scores a receipt whose - weights exist without re-solving). +- When `microcosm.build.us_runtime.target_split` merges, swap it in and + **re-solve**: a new split changes the training set, so saved weights cannot + simply be re-scored. +- Find out why calibration worsens held-out state age cells 2.5-fold. ## Evidence - Differential: production per-target materialization against concept × mask, 4,000 households from each source, 349 state and district targets - across nine family-level groups: maximum scaled difference 0.0 for both CPS - and ACS rows (`diffcheck.json`). -- Property and differential tests: `test_us_support_mix.py` (14 tests). -- Independent review (Opus 5.5, Subfleet): three high-severity and six - medium-severity findings, all fixed before the grid ran. -- Receipts (in `experiments/us-support-mix-bakeoff-20260930/`): - `dimensions_by_arm.csv`, `headline.md`, `arms.csv`, - `holdout_by_dimension_level.csv`, `holdout_by_dimension_level_common_support.csv`, - `replicate_spread.csv`, `compile.json`, `diffcheck.json`, `acs_truth.json`. + across nine family-level groups: maximum scaled difference 0.0 for both + (`diffcheck.json`). The ACS half was written by the tool on 2026-09-29; the + CPS half is the tool's own log line from 2026-09-28, copied into the file + after the CPS shard files were removed to free disk. +- Tests: `test_us_support_mix.py`, 22 tests (properties, the dense + differential and the port-branch hash fixtures). +- Independent review (Opus 5.5, Subfleet), two rounds; every finding is fixed + or stated here. +- Receipts in `experiments/us-support-mix-bakeoff-20260930/`: the report + tables, `compile.json`, `diffcheck.json`, `spm_flags.json`, + `asec_quality.json` (with its script), `acs_truth.json`, and the + per-part materialization receipts under `materialize/`. Reproduce: `compile`, `shard` (both sources), `truth`, `materialize` (both sources; ACS by rank range), `diffcheck`, `run-grid --products national` and -`--products local`, `report`. Each step writes a receipt with wall time and -peak RSS. +`--products local`, `report`, then `memo_tables.py`. Each step writes a receipt +with wall time and peak RSS. diff --git a/experiments/us-support-mix-bakeoff-20260930/arms.csv b/experiments/us-support-mix-bakeoff-20260930/arms.csv index 7022a550bc..94712e66ad 100644 --- a/experiments/us-support-mix-bakeoff-20260930/arms.csv +++ b/experiments/us-support-mix-bakeoff-20260930/arms.csv @@ -1,61 +1,61 @@ -arm,product,budget,cps_years,acs_fill_share,seed,acs,clones,cps,rows_acs,rows_cps_physical,rows_total,distinct_households,ess_cd_distinct_median,ess_cd_distinct_p10,ess_distinct_households,ess_distinct_households_initial,ess_rows,ess_rows_initial,ess_source_records,train_loss_final,train_targets,runtime_epochs,runtime_peak_rss_gb,runtime_solve_s,runtime_threads,runtime_wall_s,report_report.spm_poor_children,report_report.spm_poor_persons,report_spm_child_rate,report_spm_rate -b1200k.cps0.acs100.s0,local,1200000,0,1.0,0,1200000,0,0,1200000,0,1200000,1200000,636.5990995208797,459.6782619090842,272607.14156716655,637875.3901337923,272607.14156716655,637875.3901337923,272607.14156716655,0.0673326700925827,28117,1500,13.81,1863.2,4,1886.3,9706792.913847022,43565989.28294736,0.12262800619806784,0.1296146310854488 -b1200k.cps2022-2023-2024.acs000.s0,local,1200000,3,0.0,0,0,1031148,168852,0,2508197,2508197,130294,748.4166677718274,546.7182397113581,54291.8721808348,86558.24850894252,623489.3470239063,1763224.2814842558,434099.0452579522,0.048716843128204346,28120,1500,27.87,3290.7,4,3332.2,11988965.648844972,47089390.14461281,0.15666657007852755,0.1398509828547955 -b1200k.cps2022-2023-2024.acs100.s0,local,1200000,3,1.0,0,1031148,0,168852,1031148,352932,1384080,1161442,755.6606664571596,564.4997279533579,276474.1544207648,634911.9042601348,324232.6203824569,701288.0088424678,297379.04862366506,0.06211160123348236,28120,1500,15.86,2143.4,4,2173.3,10270918.428785808,44123094.02452402,0.13101462183085877,0.13108506908279016 -b1200k.cps2023-2024.acs000.s0,local,1200000,2,0.0,0,0,1087987,112013,0,2512844,2512844,92547,627.771262112879,427.73007308594583,38732.49652443986,62206.50135809787,636276.3483267163,1762923.5167594533,441457.4362367083,0.050769366323947906,28120,1500,17.97,12600.2,6,12789.2,11759675.23438855,46790443.02373776,0.1535449563501897,0.13889392986163127 -b1200k.cps2023-2024.acs100.s0,local,1200000,2,1.0,0,1087987,0,112013,1087987,234556,1322543,1180534,723.5489724300639,531.0370034191171,278972.2214834125,640683.4177700127,309737.8669671637,678604.2884228699,290788.2528424138,0.06619999557733536,28120,1500,15.18,2220.5,4,2252.5,10119732.913427562,43951757.3943063,0.1286390438138022,0.13061483508748364 -b1200k.cps2024.acs000.s0,local,1200000,1,0.0,0,0,1144238,55762,0,2517604,2517604,55762,452.07332576470174,290.42941934839746,23842.90159991112,40937.95655924153,655826.3274084858,1762585.2056385933,452019.63633752876,0.05482560396194458,28117,1500,20.77,8391.4,6,171.0,11640442.073896125,47028176.19078167,0.15159195490070432,0.1396951194421348 -b1200k.cps2024.acs100.s0,local,1200000,1,1.0,0,1144238,0,55762,1144238,116990,1261228,1200000,683.0307460946972,493.1350930635777,281840.1947789175,646750.5618705589,291688.996097182,657982.5655365874,281840.1947789174,0.07089728862047195,28120,1500,14.55,2318.2,4,2346.2,9932355.443103073,43795380.26192823,0.1257795622778522,0.13021968662598798 -b300k.cps0.acs100.s0,local,300000,0,1.0,0,300000,0,0,300000,0,300000,300000,208.76683350509938,152.5010010892675,88739.42584862383,159507.19151006124,88739.42584862383,159507.19151006124,88739.42584862383,0.09662018716335297,28111,1500,6.01,1131.6,4,1151.0,9994140.472411707,45838969.392857686,0.12793070598915623,0.13651280143787808 -b300k.cps2022-2023-2024.acs000.s0,local,300000,3,0.0,0,0,131148,168852,0,627089,627089,130294,293.1242316066317,234.0589912011114,53840.515783674804,86558.24850894253,152426.09046800868,406235.7429873301,105855.91877918108,0.05896691977977753,28120,1500,8.02,1258.7,6,50.4,11728490.304637432,47140068.62695289,0.15267437847183218,0.1395504285318954 -b300k.cps2022-2023-2024.acs100.s0,local,300000,3,1.0,0,131148,0,168852,131148,352932,484080,261442,267.98911404640273,199.8776713284787,83424.32729710112,156488.83620453524,118261.9895609146,249684.87617608104,96319.21710963502,0.054382581263780594,28120,1500,7.62,2123.3,4,2171.7,11010424.81658316,45877035.76649492,0.14210509344328076,0.136025536219776 -b300k.cps2022-2023-2024.acs100.s1,local,300000,3,1.0,1,131148,0,168852,131148,352932,484080,261442,270.8175557388307,207.4290743654512,84651.23842388003,156197.67624045914,120786.86390138796,248944.47269304335,97885.88459997045,0.05536476522684097,28120,1500,7.71,748.4,4,764.3,11251992.610887837,46439322.54574382,0.14546151210114885,0.1377226526604065 -b300k.cps2022-2023-2024.acs100.s2,local,300000,3,1.0,2,131148,0,168852,131148,352932,484080,261442,266.85349799871017,198.15991625881577,83676.01853855501,156281.15768732992,119274.72231531299,249156.59368635973,96718.89670479513,0.05362273007631302,28120,1500,7.73,1147.5,4,1173.5,11318567.330588162,46255362.98305111,0.1463442417427448,0.13725096388199526 -b300k.cps2023-2024.acs000.s0,local,300000,2,0.0,0,0,187987,112013,0,628217,628217,92547,288.65011252571776,236.55103167715947,39843.02064573599,62206.501358097885,164053.0018089385,425920.40023749234,112941.6994813622,0.06245909258723259,28120,1500,7.77,1418.3,6,62.9,11696127.455528975,47240268.85376501,0.15196137143398145,0.13985880127297973 -b300k.cps2023-2024.acs100.s0,local,300000,2,1.0,0,187987,0,112013,187987,234556,422543,280534,258.28781500238244,188.41344471630833,85272.64611894479,162363.95916515277,111345.61534092923,209930.75528175358,93972.5567800582,0.0621991790831089,28120,1500,7.24,1701.6,4,1742.3,10819954.753928734,45818397.78469345,0.13921452614647642,0.13595159977380228 -b300k.cps2024.acs000.s0,local,300000,1,0.0,0,0,244238,55762,0,629368,629368,55762,272.12073195851656,210.86143249640017,25941.420332837297,40937.956559241524,180320.44405138228,437374.19822877704,121687.38177596574,0.06928373873233795,28117,1500,8.14,1381.5,6,49.9,11658871.663017869,47383894.11827624,0.150164421240316,0.1401801960058113 -b300k.cps2024.acs100.s0,local,300000,1,1.0,0,244238,0,55762,244238,116990,361228,300000,247.76764484201772,178.74622000515888,93725.70814697331,168415.93548620763,104383.5510354031,181311.31435542594,93725.70814697334,0.07791590690612793,28120,1500,2.36,2042.0,4,2192.1,10475134.279326146,45962042.86457038,0.1336279078690531,0.13643628189887907 -b300k.cps2024.acs100.s1,local,300000,1,1.0,1,244238,0,55762,244238,116990,361228,300000,250.67828327126307,182.75149307418616,94328.32142441272,168324.0567321345,105202.23781161537,181204.8313243854,94328.32142441267,0.07790804654359818,28120,1500,6.68,655.0,4,666.3,10887165.394025274,46695876.58953652,0.13899435387194597,0.13871900849756835 -b300k.cps2024.acs100.s2,local,300000,1,1.0,2,244238,0,55762,244238,116990,361228,300000,254.46022594661866,179.49914879266868,96019.8351263429,168066.56509829275,107165.45812145126,180906.45837064926,96019.8351263429,0.07939135283231735,28118,1500,6.67,556.7,4,567.3,10752683.877311276,46458386.26648162,0.1371049151150891,0.1378664031982895 -b600k.cps0.acs100.s0,local,600000,0,1.0,0,600000,0,0,600000,0,600000,600000,364.9598893722962,261.3860070074219,155143.02481544143,319190.3362905997,155143.02481544143,319190.3362905997,155143.02481544143,0.07882141321897507,28117,1500,8.3,1078.2,4,1094.6,10009604.216547772,45125376.066546336,0.12705498826495873,0.13430688708821398 -b600k.cps2022-2023-2024.acs000.s0,local,600000,3,0.0,0,0,431148,168852,0,1254039,1254039,130294,500.7993519200179,395.0783737978023,54304.648500122195,86558.24850894253,310443.028954894,865150.5896769182,215764.97453751817,0.05234654247760773,28120,1500,8.85,2287.2,6,117.4,11912006.84935975,47202039.79063299,0.1554219572278197,0.13999598485576026 -b600k.cps2022-2023-2024.acs050.s0,local,600000,3,0.5,0,215574,215574,168852,215574,803510,1019084,345868,462.3112487701133,351.84198407069437,91100.40128899252,170471.51209940494,224994.0707954942,533833.497843238,182205.06479474533,0.047680094838142395,28120,1500,13.13,1731.8,4,1756.4,11369900.929462682,45904557.96444516,0.14713191895172575,0.13634912759357135 -b600k.cps2022-2023-2024.acs100.s0,local,600000,3,1.0,0,431148,0,168852,431148,352932,784080,561442,448.63763079873604,329.9962314886902,150595.0505577627,315955.71431784425,194306.5847555616,389301.29107731656,168316.10695033797,0.05774381011724472,28120,1500,10.46,1478.4,4,1499.8,10694379.845899804,45186803.03944273,0.13732852485974276,0.13419978680180616 -b600k.cps2023-2024.acs000.s0,local,600000,2,0.0,0,0,487987,112013,0,1256347,1256347,92547,452.2526460360601,345.8264044377955,39229.840755440826,62206.501358097914,322095.43995491986,876506.2056315144,222908.5410778321,0.055385854095220566,28120,1500,13.67,2367.6,6,71.9,11769767.391806126,47163669.81806761,0.15344127483400752,0.13986043582834667 -b600k.cps2023-2024.acs100.s0,local,600000,2,1.0,0,487987,0,112013,487987,234556,722543,580534,432.5169083712294,320.2611921732755,155524.49115215163,322031.188009703,185081.49131379533,362791.050186207,166213.91257173623,0.0653921589255333,28120,1500,9.91,1561.6,4,1590.8,10497679.488581907,44969203.40838291,0.13413985166711637,0.1335468745502098 -b600k.cps2024.acs000.s0,local,600000,1,0.0,0,0,544238,55762,0,1258830,1258830,55762,373.88410477679975,263.72638535233403,24855.053519465826,40937.956559241546,343332.58508595044,880334.3437453978,234488.23139657328,0.060912467539310455,28117,1500,8.07,2523.8,6,98.2,11614913.053483784,47234704.62444273,0.15061274517588585,0.1400389874165899 -b600k.cps2024.acs050.s0,local,600000,1,0.5,0,272119,272119,55762,272119,687926,960045,327881,406.59225511494594,318.3977985048655,55461.583853714335,114749.21018201848,221123.9520490093,489715.30208010477,183622.0879160021,0.051492102444171906,28120,1500,10.57,1785.4,4,1813.3,11054844.387464229,45850319.01790954,0.14283335729350186,0.13626589274397086 -b600k.cps2024.acs100.s0,local,600000,1,1.0,0,544238,0,55762,544238,116990,661228,600000,406.1440568158041,294.3440927223149,161804.4264631515,327923.64802453225,172362.61011996653,339683.81864361133,161804.42646315147,0.07427364587783813,28120,1500,8.08,1789.4,4,1817.9,10317732.631550636,45084822.43033208,0.13127018767687001,0.13403165416587537 -natural.cps2022-2023-2024.acs100.s0,local,0,3,1.0,0,0,0,168852,0,352932,352932,130294,190.7662588538194,155.42287055966597,52073.705552568616,86558.24850894253,94025.73865812777,248529.95030437905,64952.22984653852,0.06600123643875122,28120,1500,4.71,774.9,6,34.5,11418350.796070099,46569084.67845273,0.14802659835552862,0.13765586462752047 -natural.cps2023-2024.acs100.s0,local,0,2,1.0,0,0,0,112013,0,234556,234556,92547,141.04816128725298,114.23123748491122,38975.87635266753,62206.501358097885,68731.28222973633,164873.26090208263,46551.89785019205,0.08072442561388016,28103,1500,5.16,699.6,6,18.5,11429484.050330639,46866444.97094107,0.1470708857488013,0.13833162882321093 -natural.cps2024.acs100.s0,local,0,1,1.0,0,0,0,55762,0,116990,116990,55762,84.95913408732991,67.1108572841234,26267.168734799732,40937.95655924153,40526.9309224063,81941.59918861713,26267.168734799732,0.11376915127038956,27984,1500,3.25,365.6,6,67.5,11688267.860393524,47292341.423835754,0.147717267270404,0.139334032941409 -b1200k.cps0.acs100.s0,national,1200000,0,1.0,0,1200000,0,0,1200000,0,1200000,1200000,543.912125861377,394.5499851383779,233507.8983854827,637875.3901337923,233507.8983854827,637875.3901337923,233507.8983854827,0.03640918433666229,4825,1500,10.01,1180.4,4,1202.2,9591966.75317985,41048256.57024999,0.12247718332286353,0.12096273503666487 -b1200k.cps2022-2023-2024.acs000.s0,national,1200000,3,0.0,0,0,1031148,168852,0,2508197,2508197,130294,683.0389799169452,523.1623581302406,45160.28249329324,86558.24850894252,573925.0839945227,1763224.2814842558,395171.5229703896,0.022894863039255142,4828,1500,15.04,6435.3,6,252.2,11355374.259827435,43616010.283807576,0.1465062564067782,0.12760347727080348 -b1200k.cps2022-2023-2024.acs100.s0,national,1200000,3,1.0,0,1031148,0,168852,1031148,352932,1384080,1161442,634.7976658792697,486.8391155777681,222919.7725749223,634911.9042601348,275179.2243128017,701288.0088424678,245283.75333559135,0.04171165078878403,4828,1500,11.28,1434.0,4,1464.8,10313150.380732972,41392224.84187276,0.13183373401652163,0.12156959046638176 -b1200k.cps2023-2024.acs000.s0,national,1200000,2,0.0,0,0,1087987,112013,0,2512844,2512844,92547,555.4792248827257,415.19865534973974,31904.85055324262,62206.50135809787,580498.744451579,1762923.5167594533,400010.2992546738,0.024002769961953163,4828,1500,12.98,3054.9,6,162.0,11382479.562117398,43869199.15454179,0.14649550773967193,0.1283199041914545 -b1200k.cps2023-2024.acs100.s0,national,1200000,2,1.0,0,1087987,0,112013,1087987,234556,1322543,1180534,609.1911053311032,465.1256245917265,230272.02491931393,640683.4177700127,264712.2175271768,678604.2884228699,243196.91667149164,0.0478442944586277,4828,1500,10.96,1377.3,4,1406.4,10113787.189620176,41133426.019427866,0.1292435570215891,0.12094641834021345 -b1200k.cps2024.acs000.s0,national,1200000,1,0.0,0,0,1144238,55762,0,2517604,2517604,55762,389.9251916514208,271.21734318759843,18675.74777381174,40937.95655924153,585223.1069359366,1762585.2056385933,401730.2326073889,0.026821570470929146,4825,1500,14.43,3011.8,6,139.6,11369278.149812996,44416300.947438374,0.146897055231995,0.12986795044057076 -b1200k.cps2024.acs100.s0,national,1200000,1,1.0,0,1144238,0,55762,1144238,116990,1261228,1200000,579.9641480581517,426.03935885991893,239079.8688512916,646750.5618705589,250350.08231436514,657982.5655365874,239079.86885129148,0.05501589924097061,4828,1500,10.55,1437.8,4,1461.2,9896746.1838122,41104424.76558627,0.12642986740365167,0.12098644519345499 -b300k.cps0.acs100.s0,national,300000,0,1.0,0,300000,0,0,300000,0,300000,300000,143.7717104162282,101.51991639123493,60492.10872186916,159507.19151006124,60492.10872186916,159507.19151006124,60492.10872186916,0.040227945894002914,4825,1500,5.01,1087.3,4,1114.9,9641597.450175056,41796155.872448415,0.12305950584913734,0.12306176471961369 -b300k.cps2022-2023-2024.acs000.s0,national,300000,3,0.0,0,0,131148,168852,0,627089,627089,130294,251.6042025696189,212.24511310208516,44983.64315566284,86558.24850894253,131797.69918104677,406235.7429873301,90821.32297287899,0.023094959557056427,4828,1500,5.9,923.5,6,42.8,11374899.039060831,43807871.84648985,0.14672511505628388,0.128145449001727 -b300k.cps2022-2023-2024.acs100.s0,national,300000,3,1.0,0,131148,0,168852,131148,352932,484080,261442,215.23450369169024,159.42105617247114,69064.95015142651,156488.83620453524,95019.59244673677,249684.87617608104,78646.03072777389,0.02002881094813347,4828,1500,6.2,1295.1,4,1336.5,10584715.73811039,41685376.53160183,0.1358619284794174,0.12216750220843431 -b300k.cps2022-2023-2024.acs100.s1,national,300000,3,1.0,1,131148,0,168852,131148,352932,484080,261442,218.29003440104339,162.42046647139554,69333.01365841262,156197.67624045914,95821.48676280671,248944.47269304335,79062.22527509344,0.02108600363135338,4828,1500,6.2,612.2,4,624.9,11021438.86652263,42455789.65204207,0.14160616590720937,0.1244076265597218 -b300k.cps2022-2023-2024.acs100.s2,national,300000,3,1.0,2,131148,0,168852,131148,352932,484080,261442,216.55363338989582,166.09240250416968,69661.27215264387,156281.15768732992,96148.07779713064,249156.59368635973,79390.61168351417,0.020376406610012054,4828,1500,5.92,585.4,4,600.5,10861576.97654386,42038924.56430028,0.14008589708860206,0.12330797192083484 -b300k.cps2023-2024.acs000.s0,national,300000,2,0.0,0,0,187987,112013,0,628217,628217,92547,246.6306178320836,202.3404539529643,31712.95601798473,62206.501358097885,139424.29536662524,425920.40023749234,96140.03694340873,0.024160226806998253,4828,1500,5.65,943.7,6,56.0,11432612.989863634,44080022.004617095,0.14709869508613466,0.1288981482812852 -b300k.cps2023-2024.acs100.s0,national,300000,2,1.0,0,187987,0,112013,187987,234556,422543,280534,196.92729743904806,140.65406142695804,65907.76439890644,162363.95916515277,84145.60518735563,209930.75528175358,71894.01417896678,0.022902067750692368,4828,1500,5.83,614.0,4,635.7,10581508.900618356,41651178.46120613,0.13537529690507638,0.12209002420026782 -b300k.cps2024.acs000.s0,national,300000,1,0.0,0,0,244238,55762,0,629368,629368,55762,219.88090668456755,169.45317852319738,18566.939722103863,40937.956559241524,144526.3683928753,437374.19822877704,99170.14517170061,0.02702220343053341,4825,1500,6.19,906.6,6,43.2,11388008.222690105,44598437.878023386,0.14715074007796508,0.13038711883029216 -b300k.cps2024.acs100.s0,national,300000,1,1.0,0,244238,0,55762,244238,116990,361228,300000,171.18927088274563,120.72213545828625,63296.633070639335,168415.93548620763,72515.77093181499,181311.31435542594,63296.63307063933,0.0373963788151741,4828,1500,1.41,802.3,4,1030.1,10294694.07570061,41673720.0904639,0.13138742782002952,0.12218612824893674 -b300k.cps2024.acs100.s1,national,300000,1,1.0,1,244238,0,55762,244238,116990,361228,300000,170.33106956800424,126.28911015883793,63661.665857208754,168324.0567321345,72997.50108399754,181204.8313243854,63661.665857208776,0.03637304902076721,4828,1500,5.48,446.1,4,457.7,10461103.222164685,42055014.77905263,0.13405258593041433,0.12348572402303655 -b300k.cps2024.acs100.s2,national,300000,1,1.0,2,244238,0,55762,244238,116990,361228,300000,173.70731044745685,129.131949389442,65310.50293694685,168066.56509829275,75001.11849491969,180906.45837064926,65310.50293694685,0.036883339285850525,4828,1500,5.36,412.3,4,422.8,10375724.657162812,42051714.29241819,0.13290495142731462,0.12331530934208841 -b600k.cps0.acs100.s0,national,600000,0,1.0,0,600000,0,0,600000,0,600000,600000,275.2207044872443,200.5672447286007,119288.30412767422,319190.3362905997,119288.30412767422,319190.3362905997,119288.30412767422,0.03836475685238838,4825,1500,6.55,856.6,4,870.6,9725483.486029487,41574001.55281273,0.12417225908539854,0.12247343785129945 -b600k.cps2022-2023-2024.acs000.s0,national,600000,3,0.0,0,0,431148,168852,0,1254039,1254039,130294,454.7753961817672,365.9812050151028,45050.38874639817,86558.24850894253,280281.331022451,865150.5896769182,193068.26427151615,0.022988269105553627,4828,1500,8.44,1486.9,6,101.0,11371756.135731876,43750251.109125644,0.14667396210625794,0.12798974699289783 -b600k.cps2022-2023-2024.acs050.s0,national,600000,3,0.5,0,215574,215574,168852,215574,803510,1019084,345868,397.18834157306765,317.194185879134,77830.18085078364,170471.51209940494,193136.0566511478,533833.497843238,157550.8032433334,0.019354643300175667,4828,1500,9.32,1204.5,4,1228.1,10818248.952591147,42031960.58418137,0.1390709414567029,0.1231790923431293 -b600k.cps2022-2023-2024.acs100.s0,national,600000,3,1.0,0,431148,0,168852,431148,352932,784080,561442,343.98726405602747,264.11520392021356,113040.62619633827,315955.71431784425,151507.81294054587,389301.29107731656,128327.01916547072,0.023899151012301445,4828,1500,7.93,996.9,4,1024.0,10726110.603100806,42260022.086715564,0.1373884972456171,0.12397400507814195 -b600k.cps2023-2024.acs000.s0,national,600000,2,0.0,0,0,487987,112013,0,1256347,1256347,92547,407.432608967661,318.0259011306876,31780.55376763681,62206.501358097914,287428.0976136814,876506.2056315144,198151.41973040573,0.024079127237200737,4828,1500,9.43,1609.5,6,59.0,11412792.855736494,43997041.19816533,0.14684513849505035,0.12867326104459959 -b600k.cps2023-2024.acs100.s0,national,600000,2,1.0,0,487987,0,112013,487987,234556,722543,580534,324.10843024060046,251.381966421416,114433.20966057874,322031.188009703,142440.39644767783,362791.050186207,124304.35082513398,0.0358051136136055,4828,1500,7.49,1327.1,4,1354.9,10440162.816235783,41550040.864334404,0.13339031800201104,0.12193002120303904 -b600k.cps2024.acs000.s0,national,600000,1,0.0,0,0,544238,55762,0,1258830,1258830,55762,310.47344920072624,225.91142117354306,18612.508981182837,40937.956559241546,291487.9745290404,880334.3437453978,200108.9125813431,0.026919201016426086,4825,1500,7.47,1621.4,6,85.3,11372131.305653334,44538257.58970815,0.1469275383118905,0.13021938841996092 -b600k.cps2024.acs050.s0,national,600000,1,0.5,0,272119,272119,55762,272119,687926,960045,327881,343.8278869112812,268.51730477671015,45347.92882155529,114749.21018201848,184474.2557012649,489715.30208010477,155148.95997585973,0.021330222487449646,4828,1500,9.15,1195.0,4,1224.6,10719044.044821162,42154177.302658916,0.1377625434927752,0.12352896615205017 -b600k.cps2024.acs100.s0,national,600000,1,1.0,0,544238,0,55762,544238,116990,661228,600000,308.4210871605093,227.44736055047443,121891.03572378987,327923.64802453225,132440.09677401997,339683.81864361133,121891.03572378986,0.04838469624519348,4828,1500,7.0,1435.0,4,1457.6,10107732.423939351,41379590.19807629,0.12916048039766112,0.12163801582352916 -natural.cps2022-2023-2024.acs100.s0,national,0,3,1.0,0,0,0,168852,0,352932,352932,130294,162.07307651019124,135.8825931190194,44942.90129089897,86558.24850894253,80524.24306066195,248529.95030437905,55412.73795665963,0.02311604470014572,4828,1500,3.98,494.9,6,30.9,11386375.854607224,43843039.51912677,0.14687699979485672,0.1282397736539901 -natural.cps2023-2024.acs100.s0,national,0,2,1.0,0,0,0,112013,0,234556,234556,92547,110.2017029609713,90.97968053735669,31671.325578832886,62206.501358097885,53851.125087605615,164873.26090208263,37114.08063691554,0.02424626424908638,4828,1500,4.56,461.8,6,16.7,11443507.481101513,44138225.16565478,0.1471996237820945,0.12904456215569654 -natural.cps2024.acs100.s0,national,0,1,1.0,0,0,0,55762,0,116990,116990,55762,56.46558618528475,44.74623298966674,18525.796531333322,40937.95655924153,27014.978824456142,81941.59918861713,18525.796531333322,0.027136798948049545,4825,1500,3.36,268.8,6,64.2,11400368.045695305,44687541.00171065,0.147337092895218,0.13063829061507248 +arm,product,budget,cps_years,acs_fill_share,seed,acs,clones,cps,rows_acs,rows_cps_physical,rows_total,rescored,loss_1000,loss_final,distinct_households,ess_cd_distinct_median,ess_cd_distinct_p10,ess_distinct_households,ess_distinct_households_initial,ess_rows,ess_rows_initial,ess_source_records,train_loss_final,train_targets,runtime_epochs,runtime_peak_rss_gb,runtime_solve_s,runtime_threads,runtime_wall_s,report_report.spm_poor_children,report_report.spm_poor_persons,report_spm_child_rate,report_spm_rate,runtime_rescore_peak_rss_gb,runtime_rescore_wall_s,runtime_restored +b1200k.cps0.acs100.s0,local,1200000,0,1.0,0,1200000,0,0,1200000,0,1200000,False,0.07103973627090454,0.0673326700925827,1200000,636.5990995208797,459.6782619090842,272607.14156716655,637875.3901337923,272607.14156716655,637875.3901337923,272607.14156716655,0.0673326700925827,28117,1500,13.81,1863.2,4,1886.3,9706792.913847022,43565989.28294736,0.12262800619806784,0.1296146310854488,,, +b1200k.cps2022-2023-2024.acs000.s0,local,1200000,3,0.0,0,0,1031148,168852,0,2508197,2508197,False,0.0505693256855011,0.048716843128204346,130294,748.4166677718274,546.7182397113581,54291.8721808348,86558.24850894252,623489.3470239063,1763224.2814842558,434099.0452579522,0.048716843128204346,28120,1500,27.87,3290.7,4,3332.2,11988965.648844972,47089390.14461281,0.15666657007852755,0.1398509828547955,,, +b1200k.cps2022-2023-2024.acs100.s0,local,1200000,3,1.0,0,1031148,0,168852,1031148,352932,1384080,False,0.06497742980718613,0.06211160123348236,1161442,755.6606664571596,564.4997279533579,276474.1544207648,634911.9042601348,324232.6203824569,701288.0088424678,297379.04862366506,0.06211160123348236,28120,1500,15.86,2143.4,4,2173.3,10270918.428785808,44123094.02452402,0.13101462183085877,0.13108506908279016,,, +b1200k.cps2023-2024.acs000.s0,local,1200000,2,0.0,0,0,1087987,112013,0,2512844,2512844,False,0.053092144429683685,0.050769366323947906,92547,627.771262112879,427.73007308594583,38732.49652443986,62206.50135809787,636276.3483267163,1762923.5167594533,441457.4362367083,0.050769366323947906,28120,1500,17.97,12600.2,6,12789.2,11759675.23438855,46790443.02373776,0.1535449563501897,0.13889392986163127,,, +b1200k.cps2023-2024.acs100.s0,local,1200000,2,1.0,0,1087987,0,112013,1087987,234556,1322543,False,0.06953004002571106,0.06619999557733536,1180534,723.5489724300639,531.0370034191171,278972.2214834125,640683.4177700127,309737.8669671637,678604.2884228699,290788.2528424138,0.06619999557733536,28120,1500,15.18,2220.5,4,2252.5,10119732.913427562,43951757.3943063,0.1286390438138022,0.13061483508748364,,, +b1200k.cps2024.acs000.s0,local,1200000,1,0.0,0,0,1144238,55762,0,2517604,2517604,True,0.05791730061173439,0.05482560396194458,55762,452.07332576470174,290.42941934839746,23842.90159991112,40937.95655924153,655826.3274084858,1762585.2056385933,452019.63633752876,0.05482560396194458,28117,1500,27.0,8391.4,6,,11640442.073896125,47028176.19078167,0.15159195490070432,0.1396951194421348,20.77,171.0,solve peak from grid-local.log line at 2026-09-29 06:33:24; solve wall time not recorded +b1200k.cps2024.acs100.s0,local,1200000,1,1.0,0,1144238,0,55762,1144238,116990,1261228,False,0.07439278066158295,0.07089728862047195,1200000,683.0307460946972,493.1350930635777,281840.1947789175,646750.5618705589,291688.996097182,657982.5655365874,281840.1947789174,0.07089728862047195,28120,1500,14.55,2318.2,4,2346.2,9932355.443103073,43795380.26192823,0.1257795622778522,0.13021968662598798,,, +b300k.cps0.acs100.s0,local,300000,0,1.0,0,300000,0,0,300000,0,300000,False,0.10084562748670578,0.09662018716335297,300000,208.76683350509938,152.5010010892675,88739.42584862383,159507.19151006124,88739.42584862383,159507.19151006124,88739.42584862383,0.09662018716335297,28111,1500,6.01,1131.6,4,1151.0,9994140.472411707,45838969.392857686,0.12793070598915623,0.13651280143787808,,, +b300k.cps2022-2023-2024.acs000.s0,local,300000,3,0.0,0,0,131148,168852,0,627089,627089,True,0.06197219714522362,0.05896691977977753,130294,293.1242316066317,234.0589912011114,53840.515783674804,86558.24850894253,152426.09046800868,406235.7429873301,105855.91877918108,0.05896691977977753,28120,1500,9.2,1258.7,6,,11728490.304637432,47140068.62695289,0.15267437847183218,0.1395504285318954,8.02,50.4,solve peak from grid-local.log line at 2026-09-29 02:01:01; solve wall time not recorded +b300k.cps2022-2023-2024.acs100.s0,local,300000,3,1.0,0,131148,0,168852,131148,352932,484080,False,0.05747527256608009,0.054382581263780594,261442,267.98911404640273,199.8776713284787,83424.32729710112,156488.83620453524,118261.9895609146,249684.87617608104,96319.21710963502,0.054382581263780594,28120,1500,7.62,2123.3,4,2171.7,11010424.81658316,45877035.76649492,0.14210509344328076,0.136025536219776,,, +b300k.cps2022-2023-2024.acs100.s1,local,300000,3,1.0,1,131148,0,168852,131148,352932,484080,False,0.058328188955783844,0.05536476522684097,261442,270.8175557388307,207.4290743654512,84651.23842388003,156197.67624045914,120786.86390138796,248944.47269304335,97885.88459997045,0.05536476522684097,28120,1500,7.71,748.4,4,764.3,11251992.610887837,46439322.54574382,0.14546151210114885,0.1377226526604065,,, +b300k.cps2022-2023-2024.acs100.s2,local,300000,3,1.0,2,131148,0,168852,131148,352932,484080,False,0.056938815861940384,0.05362273007631302,261442,266.85349799871017,198.15991625881577,83676.01853855501,156281.15768732992,119274.72231531299,249156.59368635973,96718.89670479513,0.05362273007631302,28120,1500,7.73,1147.5,4,1173.5,11318567.330588162,46255362.98305111,0.1463442417427448,0.13725096388199526,,, +b300k.cps2023-2024.acs000.s0,local,300000,2,0.0,0,0,187987,112013,0,628217,628217,True,0.06602660566568375,0.06245909258723259,92547,288.65011252571776,236.55103167715947,39843.02064573599,62206.501358097885,164053.0018089385,425920.40023749234,112941.6994813622,0.06245909258723259,28120,1500,9.4,1418.3,6,,11696127.455528975,47240268.85376501,0.15196137143398145,0.13985880127297973,7.77,62.9,solve peak from grid-local.log line at 2026-09-29 01:36:46; solve wall time not recorded +b300k.cps2023-2024.acs100.s0,local,300000,2,1.0,0,187987,0,112013,187987,234556,422543,False,0.06609753519296646,0.0621991790831089,280534,258.28781500238244,188.41344471630833,85272.64611894479,162363.95916515277,111345.61534092923,209930.75528175358,93972.5567800582,0.0621991790831089,28120,1500,7.24,1701.6,4,1742.3,10819954.753928734,45818397.78469345,0.13921452614647642,0.13595159977380228,,, +b300k.cps2024.acs000.s0,local,300000,1,0.0,0,0,244238,55762,0,629368,629368,True,0.07355623692274094,0.06928373873233795,55762,272.12073195851656,210.86143249640017,25941.420332837297,40937.956559241524,180320.44405138228,437374.19822877704,121687.38177596574,0.06928373873233795,28117,1500,9.4,1381.5,6,,11658871.663017869,47383894.11827624,0.150164421240316,0.1401801960058113,8.14,49.9,solve peak from grid-local.log line at 2026-09-29 01:11:15; solve wall time not recorded +b300k.cps2024.acs100.s0,local,300000,1,1.0,0,244238,0,55762,244238,116990,361228,False,0.08230788260698318,0.07791590690612793,300000,247.76764484201772,178.74622000515888,93725.70814697331,168415.93548620763,104383.5510354031,181311.31435542594,93725.70814697334,0.07791590690612793,28120,1500,2.36,2042.0,4,2192.1,10475134.279326146,45962042.86457038,0.1336279078690531,0.13643628189887907,,, +b300k.cps2024.acs100.s1,local,300000,1,1.0,1,244238,0,55762,244238,116990,361228,False,0.08203397691249847,0.07790804654359818,300000,250.67828327126307,182.75149307418616,94328.32142441272,168324.0567321345,105202.23781161537,181204.8313243854,94328.32142441267,0.07790804654359818,28120,1500,6.68,655.0,4,666.3,10887165.394025274,46695876.58953652,0.13899435387194597,0.13871900849756835,,, +b300k.cps2024.acs100.s2,local,300000,1,1.0,2,244238,0,55762,244238,116990,361228,False,0.08394557982683182,0.07939135283231735,300000,254.46022594661866,179.49914879266868,96019.8351263429,168066.56509829275,107165.45812145126,180906.45837064926,96019.8351263429,0.07939135283231735,28118,1500,6.67,556.7,4,567.3,10752683.877311276,46458386.26648162,0.1371049151150891,0.1378664031982895,,, +b600k.cps0.acs100.s0,local,600000,0,1.0,0,600000,0,0,600000,0,600000,False,0.08315679430961609,0.07882141321897507,600000,364.9598893722962,261.3860070074219,155143.02481544143,319190.3362905997,155143.02481544143,319190.3362905997,155143.02481544143,0.07882141321897507,28117,1500,8.3,1078.2,4,1094.6,10009604.216547772,45125376.066546336,0.12705498826495873,0.13430688708821398,,, +b600k.cps2022-2023-2024.acs000.s0,local,600000,3,0.0,0,0,431148,168852,0,1254039,1254039,True,0.054585784673690796,0.05234654247760773,130294,500.7993519200179,395.0783737978023,54304.648500122195,86558.24850894253,310443.028954894,865150.5896769182,215764.97453751817,0.05234654247760773,28120,1500,14.7,2287.2,6,,11912006.84935975,47202039.79063299,0.1554219572278197,0.13999598485576026,8.85,117.4,solve peak from grid-local.log line at 2026-09-29 04:10:34; solve wall time not recorded +b600k.cps2022-2023-2024.acs050.s0,local,600000,3,0.5,0,215574,215574,168852,215574,803510,1019084,False,0.05014830082654953,0.047680094838142395,345868,462.3112487701133,351.84198407069437,91100.40128899252,170471.51209940494,224994.0707954942,533833.497843238,182205.06479474533,0.047680094838142395,28120,1500,13.13,1731.8,4,1756.4,11369900.929462682,45904557.96444516,0.14713191895172575,0.13634912759357135,,, +b600k.cps2022-2023-2024.acs100.s0,local,600000,3,1.0,0,431148,0,168852,431148,352932,784080,False,0.06163938716053963,0.05774381011724472,561442,448.63763079873604,329.9962314886902,150595.0505577627,315955.71431784425,194306.5847555616,389301.29107731656,168316.10695033797,0.05774381011724472,28120,1500,10.46,1478.4,4,1499.8,10694379.845899804,45186803.03944273,0.13732852485974276,0.13419978680180616,,, +b600k.cps2023-2024.acs000.s0,local,600000,2,0.0,0,0,487987,112013,0,1256347,1256347,True,0.0583859421312809,0.055385854095220566,92547,452.2526460360601,345.8264044377955,39229.840755440826,62206.501358097914,322095.43995491986,876506.2056315144,222908.5410778321,0.055385854095220566,28120,1500,15.5,2367.6,6,,11769767.391806126,47163669.81806761,0.15344127483400752,0.13986043582834667,13.67,71.9,solve peak from grid-local.log line at 2026-09-29 03:28:42; solve wall time not recorded +b600k.cps2023-2024.acs100.s0,local,600000,2,1.0,0,487987,0,112013,487987,234556,722543,False,0.06882898509502411,0.0653921589255333,580534,432.5169083712294,320.2611921732755,155524.49115215163,322031.188009703,185081.49131379533,362791.050186207,166213.91257173623,0.0653921589255333,28120,1500,9.91,1561.6,4,1590.8,10497679.488581907,44969203.40838291,0.13413985166711637,0.1335468745502098,,, +b600k.cps2024.acs000.s0,local,600000,1,0.0,0,0,544238,55762,0,1258830,1258830,True,0.0645085871219635,0.060912467539310455,55762,373.88410477679975,263.72638535233403,24855.053519465826,40937.956559241546,343332.58508595044,880334.3437453978,234488.23139657328,0.060912467539310455,28117,1500,15.6,2523.8,6,,11614913.053483784,47234704.62444273,0.15061274517588585,0.1400389874165899,8.07,98.2,solve peak from grid-local.log line at 2026-09-29 02:46:27; solve wall time not recorded +b600k.cps2024.acs050.s0,local,600000,1,0.5,0,272119,272119,55762,272119,687926,960045,False,0.054635610431432724,0.051492102444171906,327881,406.59225511494594,318.3977985048655,55461.583853714335,114749.21018201848,221123.9520490093,489715.30208010477,183622.0879160021,0.051492102444171906,28120,1500,10.57,1785.4,4,1813.3,11054844.387464229,45850319.01790954,0.14283335729350186,0.13626589274397086,,, +b600k.cps2024.acs100.s0,local,600000,1,1.0,0,544238,0,55762,544238,116990,661228,False,0.07838045060634613,0.07427364587783813,600000,406.1440568158041,294.3440927223149,161804.4264631515,327923.64802453225,172362.61011996653,339683.81864361133,161804.42646315147,0.07427364587783813,28120,1500,8.08,1789.4,4,1817.9,10317732.631550636,45084822.43033208,0.13127018767687001,0.13403165416587537,,, +natural.cps2022-2023-2024.acs100.s0,local,0,3,1.0,0,0,0,168852,0,352932,352932,True,0.06911672651767731,0.06600123643875122,130294,190.7662588538194,155.42287055966597,52073.705552568616,86558.24850894253,94025.73865812777,248529.95030437905,64952.22984653852,0.06600123643875122,28120,1500,6.4,774.9,6,,11418350.796070099,46569084.67845273,0.14802659835552862,0.13765586462752047,4.71,34.5,solve peak from grid-local.log line at 2026-09-29 00:44:58; solve wall time not recorded +natural.cps2023-2024.acs100.s0,local,0,2,1.0,0,0,0,112013,0,234556,234556,True,0.08473091572523117,0.08072442561388016,92547,141.04816128725298,114.23123748491122,38975.87635266753,62206.501358097885,68731.28222973633,164873.26090208263,46551.89785019205,0.08072442561388016,28103,1500,5.4,699.6,6,,11429484.050330639,46866444.97094107,0.1470708857488013,0.13833162882321093,5.16,18.5,solve peak from grid-local.log line at 2026-09-29 00:28:06; solve wall time not recorded +natural.cps2024.acs100.s0,local,0,1,1.0,0,0,0,55762,0,116990,116990,True,0.11794913560152054,0.11376915127038956,55762,84.95913408732991,67.1108572841234,26267.168734799732,40937.95655924153,40526.9309224063,81941.59918861713,26267.168734799732,0.11376915127038956,27984,1500,4.3,365.6,6,,11688267.860393524,47292341.423835754,0.147717267270404,0.139334032941409,3.25,67.5,solve peak from grid-local.log line at 2026-09-29 00:13:00; solve wall time not recorded +b1200k.cps0.acs100.s0,national,1200000,0,1.0,0,1200000,0,0,1200000,0,1200000,False,0.03872077912092209,0.03640918433666229,1200000,543.912125861377,394.5499851383779,233507.8983854827,637875.3901337923,233507.8983854827,637875.3901337923,233507.8983854827,0.03640918433666229,4825,1500,10.01,1180.4,4,1202.2,9591966.75317985,41048256.57024999,0.12247718332286353,0.12096273503666487,,, +b1200k.cps2022-2023-2024.acs000.s0,national,1200000,3,0.0,0,0,1031148,168852,0,2508197,2508197,True,0.02433282695710659,0.022894863039255142,130294,683.0389799169452,523.1623581302406,45160.28249329324,86558.24850894252,573925.0839945227,1763224.2814842558,395171.5229703896,0.022894863039255142,4828,1500,18.3,6435.3,6,,11355374.259827435,43616010.283807576,0.1465062564067782,0.12760347727080348,15.04,252.2,solve peak from grid-national.log line at 2026-09-29 06:47:59; solve wall time not recorded +b1200k.cps2022-2023-2024.acs100.s0,national,1200000,3,1.0,0,1031148,0,168852,1031148,352932,1384080,False,0.043582621961832047,0.04171165078878403,1161442,634.7976658792697,486.8391155777681,222919.7725749223,634911.9042601348,275179.2243128017,701288.0088424678,245283.75333559135,0.04171165078878403,4828,1500,11.28,1434.0,4,1464.8,10313150.380732972,41392224.84187276,0.13183373401652163,0.12156959046638176,,, +b1200k.cps2023-2024.acs000.s0,national,1200000,2,0.0,0,0,1087987,112013,0,2512844,2512844,True,0.025224192067980766,0.024002769961953163,92547,555.4792248827257,415.19865534973974,31904.85055324262,62206.50135809787,580498.744451579,1762923.5167594533,400010.2992546738,0.024002769961953163,4828,1500,17.1,3054.9,6,,11382479.562117398,43869199.15454179,0.14649550773967193,0.1283199041914545,12.98,162.0,solve peak from grid-national.log line at 2026-09-29 04:45:05; solve wall time not recorded +b1200k.cps2023-2024.acs100.s0,national,1200000,2,1.0,0,1087987,0,112013,1087987,234556,1322543,False,0.04984426498413086,0.0478442944586277,1180534,609.1911053311032,465.1256245917265,230272.02491931393,640683.4177700127,264712.2175271768,678604.2884228699,243196.91667149164,0.0478442944586277,4828,1500,10.96,1377.3,4,1406.4,10113787.189620176,41133426.019427866,0.1292435570215891,0.12094641834021345,,, +b1200k.cps2024.acs000.s0,national,1200000,1,0.0,0,0,1144238,55762,0,2517604,2517604,True,0.028063807636499405,0.026821570470929146,55762,389.9251916514208,271.21734318759843,18675.74777381174,40937.95655924153,585223.1069359366,1762585.2056385933,401730.2326073889,0.026821570470929146,4825,1500,18.3,3011.8,6,,11369278.149812996,44416300.947438374,0.146897055231995,0.12986795044057076,14.43,139.6,solve peak from grid-national.log line at 2026-09-29 03:50:41; solve wall time not recorded +b1200k.cps2024.acs100.s0,national,1200000,1,1.0,0,1144238,0,55762,1144238,116990,1261228,False,0.05713044852018356,0.05501589924097061,1200000,579.9641480581517,426.03935885991893,239079.8688512916,646750.5618705589,250350.08231436514,657982.5655365874,239079.86885129148,0.05501589924097061,4828,1500,10.55,1437.8,4,1461.2,9896746.1838122,41104424.76558627,0.12642986740365167,0.12098644519345499,,, +b300k.cps0.acs100.s0,national,300000,0,1.0,0,300000,0,0,300000,0,300000,False,0.0425904281437397,0.040227945894002914,300000,143.7717104162282,101.51991639123493,60492.10872186916,159507.19151006124,60492.10872186916,159507.19151006124,60492.10872186916,0.040227945894002914,4825,1500,5.01,1087.3,4,1114.9,9641597.450175056,41796155.872448415,0.12305950584913734,0.12306176471961369,,, +b300k.cps2022-2023-2024.acs000.s0,national,300000,3,0.0,0,0,131148,168852,0,627089,627089,True,0.02439185604453087,0.023094959557056427,130294,251.6042025696189,212.24511310208516,44983.64315566284,86558.24850894253,131797.69918104677,406235.7429873301,90821.32297287899,0.023094959557056427,4828,1500,6.8,923.5,6,,11374899.039060831,43807871.84648985,0.14672511505628388,0.128145449001727,5.9,42.8,solve peak from grid-national.log line at 2026-09-29 01:27:56; solve wall time not recorded +b300k.cps2022-2023-2024.acs100.s0,national,300000,3,1.0,0,131148,0,168852,131148,352932,484080,False,0.0213861595839262,0.02002881094813347,261442,215.23450369169024,159.42105617247114,69064.95015142651,156488.83620453524,95019.59244673677,249684.87617608104,78646.03072777389,0.02002881094813347,4828,1500,6.2,1295.1,4,1336.5,10584715.73811039,41685376.53160183,0.1358619284794174,0.12216750220843431,,, +b300k.cps2022-2023-2024.acs100.s1,national,300000,3,1.0,1,131148,0,168852,131148,352932,484080,False,0.02272064797580242,0.02108600363135338,261442,218.29003440104339,162.42046647139554,69333.01365841262,156197.67624045914,95821.48676280671,248944.47269304335,79062.22527509344,0.02108600363135338,4828,1500,6.2,612.2,4,624.9,11021438.86652263,42455789.65204207,0.14160616590720937,0.1244076265597218,,, +b300k.cps2022-2023-2024.acs100.s2,national,300000,3,1.0,2,131148,0,168852,131148,352932,484080,False,0.02167442999780178,0.020376406610012054,261442,216.55363338989582,166.09240250416968,69661.27215264387,156281.15768732992,96148.07779713064,249156.59368635973,79390.61168351417,0.020376406610012054,4828,1500,5.92,585.4,4,600.5,10861576.97654386,42038924.56430028,0.14008589708860206,0.12330797192083484,,, +b300k.cps2023-2024.acs000.s0,national,300000,2,0.0,0,0,187987,112013,0,628217,628217,True,0.025224341079592705,0.024160226806998253,92547,246.6306178320836,202.3404539529643,31712.95601798473,62206.501358097885,139424.29536662524,425920.40023749234,96140.03694340873,0.024160226806998253,4828,1500,7.1,943.7,6,,11432612.989863634,44080022.004617095,0.14709869508613466,0.1288981482812852,5.65,56.0,solve peak from grid-national.log line at 2026-09-29 01:10:13; solve wall time not recorded +b300k.cps2023-2024.acs100.s0,national,300000,2,1.0,0,187987,0,112013,187987,234556,422543,False,0.02435688115656376,0.022902067750692368,280534,196.92729743904806,140.65406142695804,65907.76439890644,162363.95916515277,84145.60518735563,209930.75528175358,71894.01417896678,0.022902067750692368,4828,1500,5.83,614.0,4,635.7,10581508.900618356,41651178.46120613,0.13537529690507638,0.12209002420026782,,, +b300k.cps2024.acs000.s0,national,300000,1,0.0,0,0,244238,55762,0,629368,629368,True,0.0282257292419672,0.02702220343053341,55762,219.88090668456755,169.45317852319738,18566.939722103863,40937.956559241524,144526.3683928753,437374.19822877704,99170.14517170061,0.02702220343053341,4825,1500,7.1,906.6,6,,11388008.222690105,44598437.878023386,0.14715074007796508,0.13038711883029216,6.19,43.2,solve peak from grid-national.log line at 2026-09-29 00:51:34; solve wall time not recorded +b300k.cps2024.acs100.s0,national,300000,1,1.0,0,244238,0,55762,244238,116990,361228,False,0.039431530982255936,0.0373963788151741,300000,171.18927088274563,120.72213545828625,63296.633070639335,168415.93548620763,72515.77093181499,181311.31435542594,63296.63307063933,0.0373963788151741,4828,1500,1.41,802.3,4,1030.1,10294694.07570061,41673720.0904639,0.13138742782002952,0.12218612824893674,,, +b300k.cps2024.acs100.s1,national,300000,1,1.0,1,244238,0,55762,244238,116990,361228,False,0.03853805735707283,0.03637304902076721,300000,170.33106956800424,126.28911015883793,63661.665857208754,168324.0567321345,72997.50108399754,181204.8313243854,63661.665857208776,0.03637304902076721,4828,1500,5.48,446.1,4,457.7,10461103.222164685,42055014.77905263,0.13405258593041433,0.12348572402303655,,, +b300k.cps2024.acs100.s2,national,300000,1,1.0,2,244238,0,55762,244238,116990,361228,False,0.03928820788860321,0.036883339285850525,300000,173.70731044745685,129.131949389442,65310.50293694685,168066.56509829275,75001.11849491969,180906.45837064926,65310.50293694685,0.036883339285850525,4828,1500,5.36,412.3,4,422.8,10375724.657162812,42051714.29241819,0.13290495142731462,0.12331530934208841,,, +b600k.cps0.acs100.s0,national,600000,0,1.0,0,600000,0,0,600000,0,600000,False,0.04054223746061325,0.03836475685238838,600000,275.2207044872443,200.5672447286007,119288.30412767422,319190.3362905997,119288.30412767422,319190.3362905997,119288.30412767422,0.03836475685238838,4825,1500,6.55,856.6,4,870.6,9725483.486029487,41574001.55281273,0.12417225908539854,0.12247343785129945,,, +b600k.cps2022-2023-2024.acs000.s0,national,600000,3,0.0,0,0,431148,168852,0,1254039,1254039,True,0.024382643401622772,0.022988269105553627,130294,454.7753961817672,365.9812050151028,45050.38874639817,86558.24850894253,280281.331022451,865150.5896769182,193068.26427151615,0.022988269105553627,4828,1500,10.8,1486.9,6,,11371756.135731876,43750251.109125644,0.14667396210625794,0.12798974699289783,8.44,101.0,solve peak from grid-national.log line at 2026-09-29 02:56:54; solve wall time not recorded +b600k.cps2022-2023-2024.acs050.s0,national,600000,3,0.5,0,215574,215574,168852,215574,803510,1019084,False,0.02069520577788353,0.019354643300175667,345868,397.18834157306765,317.194185879134,77830.18085078364,170471.51209940494,193136.0566511478,533833.497843238,157550.8032433334,0.019354643300175667,4828,1500,9.32,1204.5,4,1228.1,10818248.952591147,42031960.58418137,0.1390709414567029,0.1231790923431293,,, +b600k.cps2022-2023-2024.acs100.s0,national,600000,3,1.0,0,431148,0,168852,431148,352932,784080,False,0.025421563535928726,0.023899151012301445,561442,343.98726405602747,264.11520392021356,113040.62619633827,315955.71431784425,151507.81294054587,389301.29107731656,128327.01916547072,0.023899151012301445,4828,1500,7.93,996.9,4,1024.0,10726110.603100806,42260022.086715564,0.1373884972456171,0.12397400507814195,,, +b600k.cps2023-2024.acs000.s0,national,600000,2,0.0,0,0,487987,112013,0,1256347,1256347,True,0.02516903541982174,0.024079127237200737,92547,407.432608967661,318.0259011306876,31780.55376763681,62206.501358097914,287428.0976136814,876506.2056315144,198151.41973040573,0.024079127237200737,4828,1500,10.6,1609.5,6,,11412792.855736494,43997041.19816533,0.14684513849505035,0.12867326104459959,9.43,59.0,solve peak from grid-national.log line at 2026-09-29 02:28:51; solve wall time not recorded +b600k.cps2023-2024.acs100.s0,national,600000,2,1.0,0,487987,0,112013,487987,234556,722543,False,0.037997834384441376,0.0358051136136055,580534,324.10843024060046,251.381966421416,114433.20966057874,322031.188009703,142440.39644767783,362791.050186207,124304.35082513398,0.0358051136136055,4828,1500,7.49,1327.1,4,1354.9,10440162.816235783,41550040.864334404,0.13339031800201104,0.12193002120303904,,, +b600k.cps2024.acs000.s0,national,600000,1,0.0,0,0,544238,55762,0,1258830,1258830,True,0.0281167421489954,0.026919201016426086,55762,310.47344920072624,225.91142117354306,18612.508981182837,40937.956559241546,291487.9745290404,880334.3437453978,200108.9125813431,0.026919201016426086,4825,1500,11.0,1621.4,6,,11372131.305653334,44538257.58970815,0.1469275383118905,0.13021938841996092,7.47,85.3,solve peak from grid-national.log line at 2026-09-29 01:59:14; solve wall time not recorded +b600k.cps2024.acs050.s0,national,600000,1,0.5,0,272119,272119,55762,272119,687926,960045,False,0.022764919325709343,0.021330222487449646,327881,343.8278869112812,268.51730477671015,45347.92882155529,114749.21018201848,184474.2557012649,489715.30208010477,155148.95997585973,0.021330222487449646,4828,1500,9.15,1195.0,4,1224.6,10719044.044821162,42154177.302658916,0.1377625434927752,0.12352896615205017,,, +b600k.cps2024.acs100.s0,national,600000,1,1.0,0,544238,0,55762,544238,116990,661228,False,0.05047328770160675,0.04838469624519348,600000,308.4210871605093,227.44736055047443,121891.03572378987,327923.64802453225,132440.09677401997,339683.81864361133,121891.03572378986,0.04838469624519348,4828,1500,7.0,1435.0,4,1457.6,10107732.423939351,41379590.19807629,0.12916048039766112,0.12163801582352916,,, +natural.cps2022-2023-2024.acs100.s0,national,0,3,1.0,0,0,0,168852,0,352932,352932,True,0.024450428783893585,0.02311604470014572,130294,162.07307651019124,135.8825931190194,44942.90129089897,86558.24850894253,80524.24306066195,248529.95030437905,55412.73795665963,0.02311604470014572,4828,1500,5.1,494.9,6,,11386375.854607224,43843039.51912677,0.14687699979485672,0.1282397736539901,3.98,30.9,solve peak from grid-national.log line at 2026-09-29 00:33:39; solve wall time not recorded +natural.cps2023-2024.acs100.s0,national,0,2,1.0,0,0,0,112013,0,234556,234556,True,0.025277292355895042,0.02424626424908638,92547,110.2017029609713,90.97968053735669,31671.325578832886,62206.501358097885,53851.125087605615,164873.26090208263,37114.08063691554,0.02424626424908638,4828,1500,4.6,461.8,6,,11443507.481101513,44138225.16565478,0.1471996237820945,0.12904456215569654,4.56,16.7,solve peak from grid-national.log line at 2026-09-29 00:21:38; solve wall time not recorded +natural.cps2024.acs100.s0,national,0,1,1.0,0,0,0,55762,0,116990,116990,True,0.028257571160793304,0.027136798948049545,55762,56.46558618528475,44.74623298966674,18525.796531333322,40937.95655924153,27014.978824456142,81941.59918861713,18525.796531333322,0.027136798948049545,4825,1500,4.0,268.8,6,,11400368.045695305,44687541.00171065,0.147337092895218,0.13063829061507248,3.36,64.2,solve peak from grid-national.log line at 2026-09-29 00:11:23; solve wall time not recorded diff --git a/experiments/us-support-mix-bakeoff-20260930/asec_quality.json b/experiments/us-support-mix-bakeoff-20260930/asec_quality.json new file mode 100644 index 0000000000..ccd2aa52be --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/asec_quality.json @@ -0,0 +1,159 @@ +{ + "processed_h5_by_income_year": [ + { + "income_year": 2018, + "survey_year": 2019, + "households": 68345, + "distinct_h_idnum": 68345, + "share_households_in_prior_file": null, + "household_weight_total_millions": 128.67448709, + "household_weight_cv": 0.6025358837852475, + "household_weight_kish_share": 0.7336490761489285, + "homeownership_weighted": 0.6447575960568765, + "unemployment_compensation_recipients": 1723, + "earners_whole_record_imputed_weighted": 0.242330658014494, + "earners_item_allocated_weighted": 0.21330270102200033 + }, + { + "income_year": 2019, + "survey_year": 2020, + "households": 60460, + "distinct_h_idnum": 60460, + "share_households_in_prior_file": 0.3777704267284155, + "household_weight_total_millions": 128.58819972, + "household_weight_cv": 0.6099413348000816, + "household_weight_kish_share": 0.7288478698774934, + "homeownership_weighted": 0.6639244541559711, + "unemployment_compensation_recipients": 1563, + "earners_whole_record_imputed_weighted": 0.2381596300674719, + "earners_item_allocated_weighted": 0.2125500232438193 + }, + { + "income_year": 2020, + "survey_year": 2021, + "households": 62850, + "distinct_h_idnum": 62850, + "share_households_in_prior_file": 0.32513922036595067, + "household_weight_total_millions": 130.0231343, + "household_weight_cv": 0.5979707232435548, + "household_weight_kish_share": 0.7366108171432274, + "homeownership_weighted": 0.6575969944911564, + "unemployment_compensation_recipients": 10915, + "earners_whole_record_imputed_weighted": 0.2243862480395746, + "earners_item_allocated_weighted": 0.22633534476314407 + }, + { + "income_year": 2021, + "survey_year": 2022, + "households": 59148, + "distinct_h_idnum": 59148, + "share_households_in_prior_file": 0.34988503415161964, + "household_weight_total_millions": 131.31471499, + "household_weight_cv": 0.607226259555364, + "household_weight_kish_share": 0.7306076294779332, + "homeownership_weighted": 0.6544510986947999, + "unemployment_compensation_recipients": 4065, + "earners_whole_record_imputed_weighted": 0.22397363113999202, + "earners_item_allocated_weighted": 0.21762532030886778 + }, + { + "income_year": 2022, + "survey_year": 2023, + "households": 56839, + "distinct_h_idnum": 56839, + "share_households_in_prior_file": 0.34770140220623164, + "household_weight_total_millions": 131.66090909, + "household_weight_cv": 0.599646329065834, + "household_weight_kish_share": 0.7355235793912631, + "homeownership_weighted": 0.6592966302599605, + "unemployment_compensation_recipients": 1225, + "earners_whole_record_imputed_weighted": 0.2186550960443649, + "earners_item_allocated_weighted": 0.2167998316454706 + }, + { + "income_year": 2023, + "survey_year": 2024, + "households": 56251, + "distinct_h_idnum": 56251, + "share_households_in_prior_file": 0.339407299425788, + "household_weight_total_millions": 132.39192545, + "household_weight_cv": 0.5979118733636303, + "household_weight_kish_share": 0.7366490056630862, + "homeownership_weighted": 0.6563332517043623, + "unemployment_compensation_recipients": 1360, + "earners_whole_record_imputed_weighted": 0.2070184806918598, + "earners_item_allocated_weighted": 0.20988846004956252 + }, + { + "income_year": 2024, + "survey_year": 2025, + "households": 55762, + "distinct_h_idnum": 55762, + "share_households_in_prior_file": 0.34909077866647537, + "household_weight_total_millions": 134.96389280000002, + "household_weight_cv": 0.6017557642286367, + "household_weight_kish_share": 0.7341550977232084, + "homeownership_weighted": 0.6511854704001246, + "unemployment_compensation_recipients": 1400, + "earners_whole_record_imputed_weighted": 0.1932919011043821, + "earners_item_allocated_weighted": 0.215243237218826 + } + ], + "pools": { + "2022-2023-2024": { + "households": 168852, + "distinct_h_idnum": 130294 + }, + "2020-2021-2022-2023-2024": { + "households": 290850, + "distinct_h_idnum": 211834 + } + }, + "public_use_archives_by_survey_year": [ + { + "survey_year": 2022, + "income_year": 2021, + "persons": 152732, + "whole_supplement_imputed_weighted": 0.2046639035877903, + "bachelors_or_higher_25plus_weighted": 0.376611355994884 + }, + { + "survey_year": 2023, + "income_year": 2022, + "persons": 146133, + "whole_supplement_imputed_weighted": 0.1994541476607985, + "bachelors_or_higher_25plus_weighted": 0.3834978999842217 + }, + { + "survey_year": 2024, + "income_year": 2023, + "persons": 144265, + "whole_supplement_imputed_weighted": 0.19164278967548057, + "bachelors_or_higher_25plus_weighted": 0.38686143531005024 + }, + { + "survey_year": 2025, + "income_year": 2024, + "persons": 142125, + "whole_supplement_imputed_weighted": 0.1782697407007112, + "bachelors_or_higher_25plus_weighted": 0.39343967585037093 + }, + { + "survey_year": 2026, + "income_year": 2025, + "persons": 134729, + "whole_supplement_imputed_weighted": 0.16678632658230516, + "bachelors_or_higher_25plus_weighted": 0.4024180140213014 + } + ], + "combined_unweighted_response_rate_by_survey_year": { + "source": "CPS ASEC technical documentation, Source and Accuracy statements (combined basic-CPS x ASEC household nonresponse), transcribed 2026-09-28", + "2019": 0.676, + "2020": 0.611, + "2021": 0.65, + "2022": 0.614, + "2023": 0.596, + "2024": 0.593, + "2025": 0.601 + } +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/asec_quality.py b/experiments/us-support-mix-bakeoff-20260930/asec_quality.py new file mode 100644 index 0000000000..bba6dfc23a --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/asec_quality.py @@ -0,0 +1,111 @@ +"""CPS ASEC response and processing quality by income year (receipt script). + +Writes ``asec_quality.json`` next to this file. Two local sources: + +- ``census_cps_{2018..2024}.h5`` (policyengine-us-data processed ASEC, keyed by + income year): households, survey year, distinct and repeated ``H_IDNUM``, + household-weight dispersion, homeownership, unemployment-compensation + recipients, and the earnings imputation flag ``I_ERNVAL`` (9 = whole record + imputed, 1-8 = item allocated) among wage earners. +- the Census public-use ASEC CSV archives ``asecpub{22..26}csv.zip`` (income + years 2021-2025): the whole-supplement imputation flag ``FL_665`` (persons, + ``MARSUPWT``-weighted) and the weighted bachelor's-or-higher share among + adults 25 and over (``A_HGA`` >= 43). + +Run: ``uv run python experiments/us-support-mix-bakeoff-20260930/asec_quality.py`` +""" + +from __future__ import annotations + +import json +import zipfile +from pathlib import Path + +import numpy as np +import pandas as pd + +STORAGE = Path("/Users/maxghenis/PolicyEngine/policyengine-us-data/policyengine_us_data/storage") +ZIPS = Path("/Users/maxghenis/PolicyEngine/_buildm-runtime/inputs/asec_education") +OUT = Path(__file__).resolve().parent / "asec_quality.json" + + +def h5_metrics(income_year: int, previous_ids: set | None) -> tuple[dict, set]: + path = STORAGE / f"census_cps_{income_year}.h5" + with pd.HDFStore(path, "r") as store: + hh = store["household"][["H_IDNUM", "H_YEAR", "H_TENURE", "HSUP_WGT"]] + person = store["person"][["A_FNLWGT", "I_ERNVAL", "UC_VAL", "WSAL_VAL"]] + w = hh["HSUP_WGT"].to_numpy(np.float64) / 100 + ids = set(hh["H_IDNUM"].astype(str)) + earners = person[person["WSAL_VAL"] > 0] + ew = earners["A_FNLWGT"].to_numpy(np.float64) + flag = earners["I_ERNVAL"].to_numpy() + metrics = { + "income_year": income_year, + "survey_year": int(hh["H_YEAR"].iloc[0]), + "households": int(len(hh)), + "distinct_h_idnum": len(ids), + "share_households_in_prior_file": ( + None if previous_ids is None else len(ids & previous_ids) / len(ids) + ), + "household_weight_total_millions": float(w.sum() / 1e6), + "household_weight_cv": float(w.std() / w.mean()), + "household_weight_kish_share": float(w.sum() ** 2 / np.square(w).sum() / len(w)), + "homeownership_weighted": float(w[hh["H_TENURE"].to_numpy() == 1].sum() / w.sum()), + "unemployment_compensation_recipients": int((person["UC_VAL"] > 0).sum()), + "earners_whole_record_imputed_weighted": float(ew[flag == 9].sum() / ew.sum()), + "earners_item_allocated_weighted": float(ew[(flag >= 1) & (flag <= 8)].sum() / ew.sum()), + } + return metrics, ids + + +def zip_metrics(survey_year: int) -> dict: + path = ZIPS / f"asecpub{survey_year % 100:02d}csv.zip" + with zipfile.ZipFile(path) as archive: + name = next(n for n in archive.namelist() if n.lower().startswith("pppub") and n.lower().endswith(".csv")) + with archive.open(name) as handle: + person = pd.read_csv(handle, usecols=["FL_665", "MARSUPWT", "A_AGE", "A_HGA"]) + w = person["MARSUPWT"].to_numpy(np.float64) + adults = person["A_AGE"].to_numpy() >= 25 + return { + "survey_year": survey_year, + "income_year": survey_year - 1, + "persons": int(len(person)), + "whole_supplement_imputed_weighted": float(w[person["FL_665"].to_numpy() != 1].sum() / w.sum()), + "bachelors_or_higher_25plus_weighted": float( + w[adults & (person["A_HGA"].to_numpy() >= 43)].sum() / w[adults].sum() + ), + } + + +def main() -> None: + files, previous = [], None + for year in range(2018, 2025): + metrics, previous = h5_metrics(year, previous) + files.append(metrics) + pools = {} + for years in ((2022, 2023, 2024), (2020, 2021, 2022, 2023, 2024)): + households, distinct = 0, set() + for year in years: + with pd.HDFStore(STORAGE / f"census_cps_{year}.h5", "r") as store: + ids = store["household"]["H_IDNUM"].astype(str) + households += len(ids) + distinct |= set(ids) + pools["-".join(map(str, years))] = {"households": households, "distinct_h_idnum": len(distinct)} + archives = [zip_metrics(year) for year in range(2022, 2027) if (ZIPS / f"asecpub{year % 100:02d}csv.zip").exists()] + payload = { + "processed_h5_by_income_year": files, + "pools": pools, + "public_use_archives_by_survey_year": archives, + "combined_unweighted_response_rate_by_survey_year": { + "source": "CPS ASEC technical documentation, Source and Accuracy statements " + "(combined basic-CPS x ASEC household nonresponse), transcribed 2026-09-28", + "2019": 0.676, "2020": 0.611, "2021": 0.650, "2022": 0.614, + "2023": 0.596, "2024": 0.593, "2025": 0.601, + }, + } + OUT.write_text(json.dumps(payload, indent=1)) + print(json.dumps(payload, indent=1)) + + +if __name__ == "__main__": + main() diff --git a/experiments/us-support-mix-bakeoff-20260930/dimensions_by_arm.csv b/experiments/us-support-mix-bakeoff-20260930/dimensions_by_arm.csv index c641b8ffca..092b25ace9 100644 --- a/experiments/us-support-mix-bakeoff-20260930/dimensions_by_arm.csv +++ b/experiments/us-support-mix-bakeoff-20260930/dimensions_by_arm.csv @@ -1,61 +1,61 @@ -product,arm,budget,cps_years,acs_fill_share,seed,rows,ess_distinct,income_components.state,income_components.cd,tax_items.state,tax_items.cd,program_receipt.state,demographics_pep.state,acs_native.state,acs_native.cd,acs_native.county -local,natural.cps2024.acs100.s0,0,1,1.0,0,116990,26267.168734799732,0.2562402942508585,0.368628785306787,0.1409739736411195,0.32782135195928086,0.24908093565333903,0.13138699051834574,0.11182332572602155,0.23973518972246494,0.3343099532297555 -local,natural.cps2023-2024.acs100.s0,0,2,1.0,0,234556,38975.87635266753,0.2353600697008607,0.3150915957351537,0.11172690325900313,0.26165240206543205,0.24257472693888676,0.14465280966012622,0.11096222317541098,0.22423425042220685,0.30456935477272384 -local,natural.cps2022-2023-2024.acs100.s0,0,3,1.0,0,352932,52073.705552568616,0.2171361498676638,0.2924916286167124,0.10119344800103709,0.2404734489025593,0.2197060765645402,0.15388166362805228,0.11092059440992556,0.21917682085079754,0.28404637960250445 -local,b300k.cps0.acs100.s0,300000,0,1.0,0,300000,88739.42584862383,0.23429272769351714,0.294729466333595,0.16692357646531517,0.24936527410608197,0.37258429822471645,0.16305527686288307,0.07511966857179753,0.1344304044603935,0.22472859669987288 -local,b300k.cps2024.acs000.s0,300000,1,0.0,0,629368,25941.420332837297,0.2557141656365252,0.2877610780859453,0.11267807862514273,0.21868788082614773,0.23760123984607007,0.15011568577342907,0.10983705222835778,0.2177786252028223,0.25858338825146937 -local,b300k.cps2024.acs100.s0,300000,1,1.0,0,361228,93725.70814697331,0.22237544973362444,0.27773335987883097,0.13611389092845289,0.22506711078100425,0.2925484443868418,0.1549464681677243,0.07044780319392784,0.1359890461267516,0.21982448638980487 -local,b300k.cps2024.acs100.s1,300000,1,1.0,1,361228,94328.32142441272,0.23419690043695096,0.28571427478389977,0.14052842598636905,0.2289217975598675,0.30919132639747754,0.16845330693532218,0.07218404237633766,0.13451708191286718,0.21758370759235868 -local,b300k.cps2024.acs100.s2,300000,1,1.0,2,361228,96019.8351263429,0.22412856083303512,0.3005332842780463,0.1332729999290088,0.22824587666633092,0.26153923293957276,0.15203325967658674,0.06881753989027596,0.1332378435077109,0.21727711632528773 -local,b300k.cps2023-2024.acs000.s0,300000,2,0.0,0,628217,39843.02064573599,0.23299819017636778,0.27907417105340565,0.10086916449026685,0.21248577583951866,0.24221674734488627,0.16418836448595092,0.11020652871951987,0.21442938070083725,0.26011641804975855 -local,b300k.cps2023-2024.acs100.s0,300000,2,1.0,0,422543,85272.64611894479,0.2320873385842164,0.2809150155724099,0.11975072727313722,0.22387840042788953,0.27350756252784914,0.15692966173306047,0.08155348712492251,0.1562817728619675,0.22898260932911663 -local,b300k.cps2022-2023-2024.acs000.s0,300000,3,0.0,0,627089,53840.515783674804,0.21636417669259378,0.2777977077074786,0.09789246569895065,0.21735445534264175,0.22075797974313865,0.1621728690297679,0.11071947436597335,0.21460326869276525,0.2632056039195863 -local,b300k.cps2022-2023-2024.acs100.s0,300000,3,1.0,0,484080,83424.32729710112,0.23627019274520367,0.2788047270466411,0.10353524278489439,0.2153780787255036,0.24352550167912812,0.1638588636538814,0.0920402316121175,0.17224502897803276,0.23888283992736484 -local,b300k.cps2022-2023-2024.acs100.s1,300000,3,1.0,1,484080,84651.23842388003,0.22564925876059017,0.2810324406006082,0.1049204503493655,0.21924479189506244,0.234554556947064,0.16658090945865134,0.09190141220572101,0.1727709403336561,0.23908712915629882 -local,b300k.cps2022-2023-2024.acs100.s2,300000,3,1.0,2,484080,83676.01853855501,0.22425100384819646,0.28318014557709364,0.10067242177324874,0.21774880085486237,0.23294838474251595,0.16657533865686952,0.09240807959286322,0.1705965172768449,0.23989544215159464 -local,b600k.cps0.acs100.s0,600000,0,1.0,0,600000,155143.02481544143,0.2167636412860519,0.2775302429807402,0.14896247912328456,0.21918527936460727,0.3329885935813031,0.18202600101728358,0.07268728326143165,0.12829168478495254,0.19542166511214448 -local,b600k.cps2024.acs000.s0,600000,1,0.0,0,1258830,24855.053519465826,0.2493814685687504,0.2656953207189058,0.10892226992996659,0.20023622828585266,0.22907564730531144,0.16296383138786746,0.10941384732414132,0.21181620881403695,0.24107481817769838 -local,b600k.cps2024.acs050.s0,600000,1,0.5,0,960045,55461.583853714335,0.23432921919635682,0.26250895012461006,0.1028591653418102,0.1959079928120096,0.24338243766687528,0.1683056230460101,0.08678822627504323,0.16445708794075126,0.21170641454866881 -local,b600k.cps2024.acs100.s0,600000,1,1.0,0,661228,161804.4264631515,0.2156128538018088,0.2629066416936514,0.13087171934248212,0.20627381142528392,0.2972810264774454,0.17796828282928034,0.06463291791620522,0.12170665256698268,0.1884630281308155 -local,b600k.cps2023-2024.acs000.s0,600000,2,0.0,0,1256347,39229.840755440826,0.22726229991374686,0.26006802013216795,0.09638255758435196,0.19193938886986364,0.23832240721713327,0.17274112771628558,0.11018467600581666,0.21036449796660026,0.2412275076723288 -local,b600k.cps2023-2024.acs100.s0,600000,2,1.0,0,722543,155524.49115215163,0.2236640895251088,0.26024206825732665,0.12214147564951856,0.20066761534376518,0.2654557263444992,0.17279267026374792,0.0710782775223844,0.12986607857931248,0.19175074589860552 -local,b600k.cps2022-2023-2024.acs000.s0,600000,3,0.0,0,1254039,54304.648500122195,0.2107342152095433,0.2571939974229721,0.09722359194488588,0.1978848454201713,0.22116412164157961,0.17540191309020567,0.11120560744763126,0.2092242036092987,0.24089870708358485 -local,b600k.cps2022-2023-2024.acs050.s0,600000,3,0.5,0,1019084,91100.40128899252,0.2256603840633608,0.2605500603745919,0.09556850042571938,0.19540517208401864,0.24308717902612242,0.17558813189842468,0.09468741911901286,0.17328021368989313,0.2163917222039306 -local,b600k.cps2022-2023-2024.acs100.s0,600000,3,1.0,0,784080,150595.0505577627,0.22801475595028387,0.2624714665203537,0.10891701658994464,0.19925786008259666,0.26689463596538643,0.16790058348725412,0.07903262369854992,0.14150365443925006,0.19811247873806706 -local,b1200k.cps0.acs100.s0,1200000,0,1.0,0,1200000,272607.14156716655,0.2064762143680669,0.24448238340214953,0.1271958904838077,0.19346215236328823,0.31823459303351853,0.19286922548605295,0.07423434272339187,0.12808067349525182,0.17237888538394763 -local,b1200k.cps2024.acs000.s0,1200000,1,0.0,0,2517604,23842.90159991112,0.2510104848956959,0.24886446782578253,0.10541087233889969,0.18464326791535787,0.23151973362356593,0.17394744597746561,0.10972889409186887,0.20931090310719097,0.23206082201655123 -local,b1200k.cps2024.acs100.s0,1200000,1,1.0,0,1261228,281840.1947789175,0.20351433911134775,0.2449950653366499,0.12267272174567183,0.1906566975362283,0.2780238101680827,0.18843601526452441,0.06506454319258005,0.12055918210301766,0.16681754104797403 -local,b1200k.cps2023-2024.acs000.s0,1200000,2,0.0,0,2512844,38732.49652443986,0.22520642293189733,0.24566005803881902,0.09461582123755304,0.18103017107743002,0.23728528309773528,0.18091450159282604,0.10995405935231696,0.2062377238604117,0.2294340902985313 -local,b1200k.cps2023-2024.acs100.s0,1200000,2,1.0,0,1322543,278972.2214834125,0.2087877041138612,0.24589179935651825,0.11928718518775158,0.19078676057249827,0.2633482939579282,0.18693261085783902,0.06519418058617725,0.11944908191655185,0.16521051155753275 -local,b1200k.cps2022-2023-2024.acs000.s0,1200000,3,0.0,0,2508197,54291.8721808348,0.21367843862950298,0.24795960398287115,0.09556674683309047,0.18474428591598085,0.2177241262978927,0.18276741791355144,0.11175650621913985,0.2063771609000472,0.22861805086780612 -local,b1200k.cps2022-2023-2024.acs100.s0,1200000,3,1.0,0,1384080,276474.1544207648,0.20573088273723014,0.24778391771824335,0.11694219144644435,0.1890844995883244,0.25620828156733094,0.1842746202541827,0.06916455180934589,0.12303141627531228,0.16590487808830948 -national,natural.cps2024.acs100.s0,0,1,1.0,0,116990,18525.796531333322,0.2696116341504152,0.43919631953037513,0.1121591199800416,0.510954450513885,0.21615851274709622,0.1677059521885838,0.10904770553924113,0.26091718942439857,0.38195475529225076 -national,natural.cps2023-2024.acs100.s0,0,2,1.0,0,234556,31671.325578832886,0.2414815948793076,0.4004000810655697,0.1052393000286734,0.441756711126377,0.21174810554203347,0.1702495702655267,0.10867817839640465,0.22813719325646137,0.32530204841107396 -national,natural.cps2022-2023-2024.acs100.s0,0,3,1.0,0,352932,44942.90129089897,0.2497527061900134,0.377900474158411,0.10331386245050982,0.4196982722736993,0.2080660654966806,0.16878172366700006,0.11150799879023887,0.2188638982972472,0.29775431144589004 -national,b300k.cps0.acs100.s0,300000,0,1.0,0,300000,60492.10872186916,0.26125044364790023,0.35128318424714394,0.1506784259545128,0.3582662830085487,0.3032951550346929,0.17631137645123166,0.08291411454629433,0.16598754587886827,0.2733731253752591 -national,b300k.cps2024.acs000.s0,300000,1,0.0,0,629368,18566.939722103863,0.2717766467137627,0.3494025113619567,0.11192711452186348,0.3837250371889004,0.21478031358230748,0.16759991019765672,0.10900435153465846,0.20878971453531148,0.27111314672182785 -national,b300k.cps2024.acs100.s0,300000,1,1.0,0,361228,63296.633070639335,0.2488281348041939,0.3526511848914447,0.13256622347613956,0.3674673000569755,0.260413002804286,0.1597233602579953,0.07450330211228677,0.16044298864151008,0.2534584825304903 -national,b300k.cps2024.acs100.s1,300000,1,1.0,1,361228,63661.665857208754,0.25097710482668223,0.3612127672330394,0.1292905887274339,0.3738662138340741,0.26814652916269605,0.16668764568786598,0.07644212428557479,0.1604181055586044,0.2565081754196152 -national,b300k.cps2024.acs100.s2,300000,1,1.0,2,361228,65310.50293694685,0.24795753418976757,0.3686085945173797,0.12704222296996678,0.37203909943411284,0.1936747199064423,0.15140609544121633,0.07450227585437046,0.15635512675632854,0.2556985805373917 -national,b300k.cps2023-2024.acs000.s0,300000,2,0.0,0,628217,31712.95601798473,0.241244989898294,0.3541385957210492,0.10525161471376977,0.3912707474902042,0.2117635469327823,0.1703353292068738,0.10855847729508801,0.20557349148110568,0.26915601765958747 -national,b300k.cps2023-2024.acs100.s0,300000,2,1.0,0,422543,65907.76439890644,0.23613502945233358,0.34100599629947437,0.12372753888842442,0.36061429401905143,0.21720632272633086,0.17130848948985308,0.08414831832448029,0.16460021968343813,0.24971085752799574 -national,b300k.cps2022-2023-2024.acs000.s0,300000,3,0.0,0,627089,44983.64315566284,0.25016928296359214,0.36163690746942406,0.10326926102077237,0.3931206653033833,0.20768612837662662,0.16883232591661937,0.11153631643441365,0.20767970731232213,0.27152634399585995 -national,b300k.cps2022-2023-2024.acs100.s0,300000,3,1.0,0,484080,69064.95015142651,0.2175345096397957,0.3433914082891061,0.11122761415655996,0.3557118942484613,0.18389306059868185,0.1694656640096662,0.09446456678739014,0.17431536900317618,0.25281103632772034 -national,b300k.cps2022-2023-2024.acs100.s1,300000,3,1.0,1,484080,69333.01365841262,0.2305607520155476,0.34018024084652343,0.11444292204091333,0.36409657696436076,0.19885977768618832,0.15892294151193456,0.09371890401419548,0.17664209238189657,0.2527618555819351 -national,b300k.cps2022-2023-2024.acs100.s2,300000,3,1.0,2,484080,69661.27215264387,0.22415015708249011,0.35363214799932335,0.1142276152315121,0.35513195329635117,0.21213674854359396,0.16150427764582204,0.09355908868849327,0.17419725429000174,0.25355272752703856 -national,b600k.cps0.acs100.s0,600000,0,1.0,0,600000,119288.30412767422,0.24966655406897992,0.34241876849049036,0.14197510217799877,0.32361559846110066,0.2929448280688965,0.18272324742321502,0.07977405633737264,0.1476038895776312,0.2300347147082848 -national,b600k.cps2024.acs000.s0,600000,1,0.0,0,1258830,18612.508981182837,0.2721350308405871,0.33999991743309776,0.11175801102457911,0.36217559115777576,0.2137667160204601,0.16789701330967022,0.10916980151991057,0.20041392600593685,0.24600104804595346 -national,b600k.cps2024.acs050.s0,600000,1,0.5,0,960045,45347.92882155529,0.22744779909141397,0.3195168688854576,0.11440855161234355,0.33195568945586346,0.1980126668984462,0.16224079914628323,0.08984917136470014,0.15957975644232797,0.22246059401969046 -national,b600k.cps2024.acs100.s0,600000,1,1.0,0,661228,121891.03572378987,0.23678916833887328,0.3386348678000625,0.12639218991981416,0.32380095096613976,0.26317788342170323,0.16848626972379935,0.06661151164375591,0.13490757511980064,0.21428279634743777 -national,b600k.cps2023-2024.acs000.s0,600000,2,0.0,0,1256347,31780.55376763681,0.24089602188398598,0.33438566321263324,0.10524017537062978,0.3679213205348031,0.2116351652999952,0.17051499247871507,0.10859953818225078,0.19677274526715133,0.2442881838438087 -national,b600k.cps2023-2024.acs100.s0,600000,2,1.0,0,722543,114433.20966057874,0.22528352031241805,0.329919322491642,0.12315745579178716,0.32541715634264745,0.24584572541285485,0.1594929954913748,0.07574607752055182,0.14177830608085248,0.21445390196300543 -national,b600k.cps2022-2023-2024.acs000.s0,600000,3,0.0,0,1254039,45050.38874639817,0.2497558167425825,0.33705595250545295,0.1031874802625938,0.3648460542048347,0.20797277066731495,0.16812914955780833,0.11154187944041932,0.1978215347841774,0.24523732599523937 -national,b600k.cps2022-2023-2024.acs050.s0,600000,3,0.5,0,1019084,77830.18085078364,0.21346085314456828,0.3188925375284966,0.1115046834722531,0.33195745787437014,0.18740334543196172,0.16310377019843816,0.09619278408621106,0.16534906911738684,0.22274395036409647 -national,b600k.cps2022-2023-2024.acs100.s0,600000,3,1.0,0,784080,113040.62619633827,0.2210704782651005,0.32624272978471713,0.11602189617659167,0.3264735047442763,0.2248545879476049,0.15873853658076328,0.08440349589495853,0.1506984420752451,0.22102329895426534 -national,b1200k.cps0.acs100.s0,1200000,0,1.0,0,1200000,233507.8983854827,0.23197237474725407,0.30764609969672274,0.13521094558855334,0.29586659384861,0.2996804566303589,0.18441106064342377,0.0797590427584525,0.13710723003194417,0.19926310603387148 -national,b1200k.cps2024.acs000.s0,1200000,1,0.0,0,2517604,18675.74777381174,0.27262464031059574,0.3231392586379741,0.11162758094435697,0.3544144309845088,0.21153125590840233,0.16804774526293845,0.10913365197971178,0.19671469742101833,0.2335821920384311 -national,b1200k.cps2024.acs100.s0,1200000,1,1.0,0,1261228,239079.8688512916,0.22843448064670446,0.30307481919080115,0.12662306516466945,0.2962492517299004,0.26644343307680296,0.17531622479503287,0.06754437205568672,0.1248100570308532,0.18584872384665377 -national,b1200k.cps2023-2024.acs000.s0,1200000,2,0.0,0,2512844,31904.85055324262,0.23993486065598704,0.32792238604490337,0.10524622022884024,0.35415598544893173,0.21081576411829464,0.1701091296385201,0.10857817874500757,0.19312224241188444,0.23107821021237102 -national,b1200k.cps2023-2024.acs100.s0,1200000,2,1.0,0,1322543,230272.02491931393,0.21910535458696764,0.297947321629199,0.12140193109356652,0.2990649297438268,0.254270666452558,0.16789323516569246,0.06641570377838507,0.12163233537133702,0.18115700694315529 -national,b1200k.cps2022-2023-2024.acs000.s0,1200000,3,0.0,0,2508197,45160.28249329324,0.2513346707648975,0.3235953533512478,0.103106292409962,0.35154523730343396,0.20790520556155948,0.16777266351564055,0.11145998003710832,0.19269438430467156,0.22895770676867241 -national,b1200k.cps2022-2023-2024.acs100.s0,1200000,3,1.0,0,1384080,222919.7725749223,0.2170112714257001,0.30008669635968993,0.11848225108641687,0.3009724729875966,0.23949547435783827,0.16572583257448276,0.07219451814730155,0.12416101183000863,0.18204516757932784 +product,arm,budget,cps_years,acs_fill_share,seed,rows,ess_distinct,cps_native_weighted.state,cps_native_weighted.cd,income_components.state,income_components.cd,tax_items.state,tax_items.cd,program_receipt.state,demographics_pep.state,acs_native.state,acs_native.cd,acs_native.county +local,natural.cps2024.acs100.s0,0,1,1.0,0,116990,26267.168734799732,0.13988907944788584,0.26982559244311777,0.2562402942508585,0.368628785306787,0.1409739736411195,0.32782135195928086,0.24908093565333903,0.13138699051834574,0.1312090190491272,0.2781213343284405,0.34225493884421215 +local,natural.cps2023-2024.acs100.s0,0,2,1.0,0,234556,38975.87635266753,0.12366293435387953,0.22202347910365358,0.2353600697008607,0.3150915957351537,0.11172690325900313,0.26165240206543205,0.24257472693888676,0.14465280966012622,0.1332678034709188,0.2664854242757982,0.31559512742870954 +local,natural.cps2022-2023-2024.acs100.s0,0,3,1.0,0,352932,52073.705552568616,0.11630036428536247,0.20918799149251538,0.2171361498676638,0.2924916286167124,0.10119344800103709,0.2404734489025593,0.2197060765645402,0.15388166362805228,0.13414271223116667,0.26338105805738965,0.2985811492810862 +local,b300k.cps0.acs100.s0,300000,0,1.0,0,300000,88739.42584862383,0.13521469683132492,0.20322294104403613,0.23429272769351714,0.294729466333595,0.16692357646531517,0.24936527410608197,0.37258429822471645,0.16305527686288307,0.08196402047177245,0.15106780989338248,0.22369602708311276 +local,b300k.cps2024.acs000.s0,300000,1,0.0,0,629368,25941.420332837297,0.1223066780110918,0.19172633377640774,0.2557141656365252,0.2877610780859453,0.11267807862514273,0.21868788082614773,0.23760123984607007,0.15011568577342907,0.13115579133430383,0.26457570025654703,0.2785245604889571 +local,b300k.cps2024.acs100.s0,300000,1,1.0,0,361228,93725.70814697331,0.1185864559996078,0.18820290304901868,0.22237544973362444,0.27773335987883097,0.13611389092845289,0.22506711078100425,0.2925484443868418,0.1549464681677243,0.07994127142566784,0.1548359798612499,0.22294114711272878 +local,b300k.cps2024.acs100.s1,300000,1,1.0,1,361228,94328.32142441272,0.12123740431226827,0.19480728770828887,0.23419690043695096,0.28571427478389977,0.14052842598636905,0.2289217975598675,0.30919132639747754,0.16845330693532218,0.08140994949870244,0.1518804674508249,0.2195127700022409 +local,b300k.cps2024.acs100.s2,300000,1,1.0,2,361228,96019.8351263429,0.1170056820776438,0.19216127518833778,0.22412856083303512,0.3005332842780463,0.1332729999290088,0.22824587666633092,0.26153923293957276,0.15203325967658674,0.07740144949963844,0.1510454075543548,0.21900819017104672 +local,b300k.cps2023-2024.acs000.s0,300000,2,0.0,0,628217,39843.02064573599,0.11778397298645633,0.18721730056155442,0.23299819017636778,0.27907417105340565,0.10086916449026685,0.21248577583951866,0.24221674734488627,0.16418836448595092,0.13311944245202448,0.26134690680787614,0.27819669296930083 +local,b300k.cps2023-2024.acs100.s0,300000,2,1.0,0,422543,85272.64611894479,0.11691788298368513,0.18977754194383192,0.2320873385842164,0.2809150155724099,0.11975072727313722,0.22387840042788953,0.27350756252784914,0.15692966173306047,0.0960938367399439,0.18396842645681372,0.23500455911363338 +local,b300k.cps2022-2023-2024.acs000.s0,300000,3,0.0,0,627089,53840.515783674804,0.11411377942794056,0.19309180716509766,0.21636417669259378,0.2777977077074786,0.09789246569895065,0.21735445534264175,0.22075797974313865,0.1621728690297679,0.1338969427048625,0.2603077214186516,0.2811845361517984 +local,b300k.cps2022-2023-2024.acs100.s0,300000,3,1.0,0,484080,83424.32729710112,0.11305897785288188,0.18629552604486727,0.23627019274520367,0.2788047270466411,0.10353524278489439,0.2153780787255036,0.24352550167912812,0.1638588636538814,0.10969956915480833,0.20491682517591076,0.2505315781295922 +local,b300k.cps2022-2023-2024.acs100.s1,300000,3,1.0,1,484080,84651.23842388003,0.11220351313714906,0.18951122005219645,0.22564925876059017,0.2810324406006082,0.1049204503493655,0.21924479189506244,0.234554556947064,0.16658090945865134,0.10958702566885979,0.20521579155685976,0.2501376757890562 +local,b300k.cps2022-2023-2024.acs100.s2,300000,3,1.0,2,484080,83676.01853855501,0.11115894372530616,0.18961988447543948,0.22425100384819646,0.28318014557709364,0.10067242177324874,0.21774880085486237,0.23294838474251595,0.16657533865686952,0.11002205325531467,0.20224998834242794,0.25110625367342454 +local,b600k.cps0.acs100.s0,600000,0,1.0,0,600000,155143.02481544143,0.1275144077655716,0.1876996582007501,0.2167636412860519,0.2775302429807402,0.14896247912328456,0.21918527936460727,0.3329885935813031,0.18202600101728358,0.08083134510715864,0.1454300198858715,0.19829443763219337 +local,b600k.cps2024.acs000.s0,600000,1,0.0,0,1258830,24855.053519465826,0.11877694453977253,0.17680395745009028,0.2493814685687504,0.2656953207189058,0.10892226992996659,0.20023622828585266,0.22907564730531144,0.16296383138786746,0.13105083685865165,0.2597983512024205,0.26501232705384486 +local,b600k.cps2024.acs050.s0,600000,1,0.5,0,960045,55461.583853714335,0.11248043166463478,0.17453691078898995,0.23432921919635682,0.26250895012461006,0.1028591653418102,0.1959079928120096,0.24338243766687528,0.1683056230460101,0.10238996266908044,0.1980519331231945,0.2258714958237272 +local,b600k.cps2024.acs100.s0,600000,1,1.0,0,661228,161804.4264631515,0.11765874312267996,0.17955182545588866,0.2156128538018088,0.2629066416936514,0.13087171934248212,0.20627381142528392,0.2972810264774454,0.17796828282928034,0.07177952705529453,0.13706247961699447,0.19233372872151291 +local,b600k.cps2023-2024.acs000.s0,600000,2,0.0,0,1256347,39229.840755440826,0.11412476667747028,0.17316246675353408,0.22726229991374686,0.26006802013216795,0.09638255758435196,0.19193938886986364,0.23832240721713327,0.17274112771628558,0.13321136195419295,0.25727838002070136,0.26352878336961755 +local,b600k.cps2023-2024.acs100.s0,600000,2,1.0,0,722543,155524.49115215163,0.11525290455200288,0.1770139784712007,0.2236640895251088,0.26024206825732665,0.12214147564951856,0.20066761534376518,0.2654557263444992,0.17279267026374792,0.08142177716253882,0.1495849738316336,0.1980060865656155 +local,b600k.cps2022-2023-2024.acs000.s0,600000,3,0.0,0,1254039,54304.648500122195,0.11410861050180121,0.17884903114114922,0.2107342152095433,0.2571939974229721,0.09722359194488588,0.1978848454201713,0.22116412164157961,0.17540191309020567,0.13427467248120709,0.2560036963169387,0.2634369478156212 +local,b600k.cps2022-2023-2024.acs050.s0,600000,3,0.5,0,1019084,91100.40128899252,0.11113820043967697,0.17263625620442757,0.2256603840633608,0.2605500603745919,0.09556850042571938,0.19540517208401864,0.24308717902612242,0.17558813189842468,0.11288732946108254,0.2091762793777027,0.23199637724724315 +local,b600k.cps2022-2023-2024.acs100.s0,600000,3,1.0,0,784080,150595.0505577627,0.114789468412254,0.1789329188416786,0.22801475595028387,0.2624714665203537,0.10891701658994464,0.19925786008259666,0.26689463596538643,0.16790058348725412,0.09245370096570511,0.16594369048785165,0.20690356338027988 +local,b1200k.cps0.acs100.s0,1200000,0,1.0,0,1200000,272607.14156716655,0.12009737290034002,0.1701355440552087,0.2064762143680669,0.24448238340214953,0.1271958904838077,0.19346215236328823,0.31823459303351853,0.19286922548605295,0.08377822842847181,0.146085628057843,0.17986335417522795 +local,b1200k.cps2024.acs000.s0,1200000,1,0.0,0,2517604,23842.90159991112,0.11641484559341059,0.16354791273995997,0.2510104848956959,0.24886446782578253,0.10541087233889969,0.18464326791535787,0.23151973362356593,0.17394744597746561,0.13168696307055947,0.2576876935081074,0.2568528351366444 +local,b1200k.cps2024.acs100.s0,1200000,1,1.0,0,1261228,281840.1947789175,0.11608102079866424,0.16894518110206463,0.20351433911134775,0.2449950653366499,0.12267272174567183,0.1906566975362283,0.2780238101680827,0.18843601526452441,0.07203914294295263,0.13632614558291786,0.17434799937487183 +local,b1200k.cps2023-2024.acs000.s0,1200000,2,0.0,0,2512844,38732.49652443986,0.11294597103103093,0.16295377877192208,0.22520642293189733,0.24566005803881902,0.09461582123755304,0.18103017107743002,0.23728528309773528,0.18091450159282604,0.13280686435982325,0.25357586737212845,0.2542804791038048 +local,b1200k.cps2023-2024.acs100.s0,1200000,2,1.0,0,1322543,278972.2214834125,0.11384964933410756,0.16910860642346667,0.2087877041138612,0.24589179935651825,0.11928718518775158,0.19078676057249827,0.2633482939579282,0.18693261085783902,0.07262779714232684,0.13575081670413913,0.17293727782930754 +local,b1200k.cps2022-2023-2024.acs000.s0,1200000,3,0.0,0,2508197,54291.8721808348,0.11442109267333646,0.1697465581137168,0.21367843862950298,0.24795960398287115,0.09556674683309047,0.18474428591598085,0.2177241262978927,0.18276741791355144,0.13500677718039364,0.25333931489785033,0.25305811365915726 +local,b1200k.cps2022-2023-2024.acs100.s0,1200000,3,1.0,0,1384080,276474.1544207648,0.11186055630023281,0.16908634247241222,0.20573088273723014,0.24778391771824335,0.11694219144644435,0.1890844995883244,0.25620828156733094,0.1842746202541827,0.07832999721526701,0.14074632726969327,0.17427100458629496 +national,natural.cps2024.acs100.s0,0,1,1.0,0,116990,18525.796531333322,0.12049983597210771,0.4162022514092171,0.2696116341504152,0.43919631953037513,0.1121591199800416,0.510954450513885,0.21615851274709622,0.1677059521885838,0.1293147045191051,0.27135322259468203,0.38058905989516406 +national,natural.cps2023-2024.acs100.s0,0,2,1.0,0,234556,31671.325578832886,0.11576155147355198,0.37538545244223415,0.2414815948793076,0.4004000810655697,0.1052393000286734,0.441756711126377,0.21174810554203347,0.1702495702655267,0.1290686746808808,0.24199563749570693,0.3307910796607623 +national,natural.cps2022-2023-2024.acs100.s0,0,3,1.0,0,352932,44942.90129089897,0.11860534730445384,0.3529233623194683,0.2497527061900134,0.377900474158411,0.10331386245050982,0.4196982722736993,0.2080660654966806,0.16878172366700006,0.13279008542371948,0.23553119972668884,0.3065896363426867 +national,b300k.cps0.acs100.s0,300000,0,1.0,0,300000,60492.10872186916,0.13169304429605677,0.28858515868432055,0.26125044364790023,0.35128318424714394,0.1506784259545128,0.3582662830085487,0.3032951550346929,0.17631137645123166,0.09625284915048912,0.1715016414699746,0.2687232158535489 +national,b300k.cps2024.acs000.s0,300000,1,0.0,0,629368,18566.939722103863,0.12063198826076389,0.32189089866483583,0.2717766467137627,0.3494025113619567,0.11192711452186348,0.3837250371889004,0.21478031358230748,0.16759991019765672,0.12924684142693119,0.22736645623756077,0.28332760642798005 +national,b300k.cps2024.acs100.s0,300000,1,1.0,0,361228,63296.633070639335,0.11953903904096654,0.2978400607957836,0.2488281348041939,0.3526511848914447,0.13256622347613956,0.3674673000569755,0.260413002804286,0.1597233602579953,0.08437693701326647,0.16781924184640074,0.2523281129652437 +national,b300k.cps2024.acs100.s1,300000,1,1.0,1,361228,63661.665857208754,0.11661914840475808,0.30168358520759253,0.25097710482668223,0.3612127672330394,0.1292905887274339,0.3738662138340741,0.26814652916269605,0.16668764568786598,0.08717123825305195,0.16713712232365704,0.25849148695700774 +national,b300k.cps2024.acs100.s2,300000,1,1.0,2,361228,65310.50293694685,0.11541598940902557,0.3005220010224059,0.24795753418976757,0.3686085945173797,0.12704222296996678,0.37203909943411284,0.1936747199064423,0.15140609544121633,0.08533563592623239,0.16393389505788147,0.254166588886442 +national,b300k.cps2023-2024.acs000.s0,300000,2,0.0,0,628217,31712.95601798473,0.11562764400908253,0.33054147462091266,0.241244989898294,0.3541385957210492,0.10525161471376977,0.3912707474902042,0.2117635469327823,0.1703353292068738,0.12890778289864524,0.2231795994140469,0.28072080399957905 +national,b300k.cps2023-2024.acs100.s0,300000,2,1.0,0,422543,65907.76439890644,0.11888640763864694,0.2878142425229445,0.23613502945233358,0.34100599629947437,0.12372753888842442,0.36061429401905143,0.21720632272633086,0.17130848948985308,0.09677859722087798,0.17523798284035028,0.25050935671635044 +national,b300k.cps2022-2023-2024.acs000.s0,300000,3,0.0,0,627089,44983.64315566284,0.11854427670272775,0.3321059867888933,0.25016928296359214,0.36163690746942406,0.10326926102077237,0.3931206653033833,0.20768612837662662,0.16883232591661937,0.13281746235379505,0.22605383311475916,0.2826408179097745 +national,b300k.cps2022-2023-2024.acs100.s0,300000,3,1.0,0,484080,69064.95015142651,0.11331166686918707,0.28861273444626007,0.2175345096397957,0.3433914082891061,0.11122761415655996,0.3557118942484613,0.18389306059868185,0.1694656640096662,0.11069211048143446,0.18794391029654156,0.2565155370254675 +national,b300k.cps2022-2023-2024.acs100.s1,300000,3,1.0,1,484080,69333.01365841262,0.11376496397463738,0.29300968619110856,0.2305607520155476,0.34018024084652343,0.11444292204091333,0.36409657696436076,0.19885977768618832,0.15892294151193456,0.10997438651139074,0.18969600467703118,0.258482206028408 +national,b300k.cps2022-2023-2024.acs100.s2,300000,3,1.0,2,484080,69661.27215264387,0.11325548479881786,0.2901801531316787,0.22415015708249011,0.35363214799932335,0.1142276152315121,0.35513195329635117,0.21213674854359396,0.16150427764582204,0.10941265707477578,0.18722235416021119,0.26094218345547 +national,b600k.cps0.acs100.s0,600000,0,1.0,0,600000,119288.30412767422,0.1262291246707833,0.2616982759657887,0.24966655406897992,0.34241876849049036,0.14197510217799877,0.32361559846110066,0.2929448280688965,0.18272324742321502,0.09199438516595929,0.15584750034837894,0.23180857341310068 +national,b600k.cps2024.acs000.s0,600000,1,0.0,0,1258830,18612.508981182837,0.12057185251169063,0.30687692340538353,0.2721350308405871,0.33999991743309776,0.11175801102457911,0.36217559115777576,0.2137667160204601,0.16789701330967022,0.12942095040140011,0.21997932104710263,0.26236143430082415 +national,b600k.cps2024.acs050.s0,600000,1,0.5,0,960045,45347.92882155529,0.11229787192101229,0.2717570068677701,0.22744779909141397,0.3195168688854576,0.11440855161234355,0.33195568945586346,0.1980126668984462,0.16224079914628323,0.10443356070238295,0.17423734863805407,0.2304157731970084 +national,b600k.cps2024.acs100.s0,600000,1,1.0,0,661228,121891.03572378987,0.11908144246826739,0.26175712201284923,0.23678916833887328,0.3386348678000625,0.12639218991981416,0.32380095096613976,0.26317788342170323,0.16848626972379935,0.07397479512640652,0.1428218204216333,0.21662867894568788 +national,b600k.cps2023-2024.acs000.s0,600000,2,0.0,0,1256347,31780.55376763681,0.11542272966741521,0.31332495815823175,0.24089602188398598,0.33438566321263324,0.10524017537062978,0.3679213205348031,0.2116351652999952,0.17051499247871507,0.1289320903995661,0.21499031399206195,0.25916742070039467 +national,b600k.cps2023-2024.acs100.s0,600000,2,1.0,0,722543,114433.20966057874,0.11471415226363739,0.2632056561288949,0.22528352031241805,0.329919322491642,0.12315745579178716,0.32541715634264745,0.24584572541285485,0.1594929954913748,0.0858102792358803,0.15195663710199417,0.21782355348432747 +national,b600k.cps2022-2023-2024.acs000.s0,600000,3,0.0,0,1254039,45050.38874639817,0.11833054582309997,0.31285834793313,0.2497558167425825,0.33705595250545295,0.1031874802625938,0.3648460542048347,0.20797277066731495,0.16812914955780833,0.13282925144140414,0.21775201596271673,0.2605295301294965 +national,b600k.cps2022-2023-2024.acs050.s0,600000,3,0.5,0,1019084,77830.18085078364,0.11140789359832513,0.27158268963159177,0.21346085314456828,0.3188925375284966,0.1115046834722531,0.33195745787437014,0.18740334543196172,0.16310377019843816,0.11295379863337626,0.18167231191613473,0.23213254921021667 +national,b600k.cps2022-2023-2024.acs100.s0,600000,3,1.0,0,784080,113040.62619633827,0.11535204156468655,0.26556257898190716,0.2210704782651005,0.32624272978471713,0.11602189617659167,0.3264735047442763,0.2248545879476049,0.15873853658076328,0.0974352559919048,0.16329383882848475,0.22746881055474846 +national,b1200k.cps0.acs100.s0,1200000,0,1.0,0,1200000,233507.8983854827,0.12454062249495829,0.24097675335257274,0.23197237474725407,0.30764609969672274,0.13521094558855334,0.29586659384861,0.2996804566303589,0.18441106064342377,0.0917842035176887,0.1466813554821483,0.20483903709451692 +national,b1200k.cps2024.acs000.s0,1200000,1,0.0,0,2517604,18675.74777381174,0.12040645674548298,0.30086799088948174,0.27262464031059574,0.3231392586379741,0.11162758094435697,0.3544144309845088,0.21153125590840233,0.16804774526293845,0.12940805275643452,0.21681713600225846,0.25153887807826525 +national,b1200k.cps2024.acs100.s0,1200000,1,1.0,0,1261228,239079.8688512916,0.11974241438910847,0.23870036086549926,0.22843448064670446,0.30307481919080115,0.12662306516466945,0.2962492517299004,0.26644343307680296,0.17531622479503287,0.07530363394825186,0.13386317682334467,0.19145386195131606 +national,b1200k.cps2023-2024.acs000.s0,1200000,2,0.0,0,2512844,31904.85055324262,0.11527960793480384,0.3030122806705822,0.23993486065598704,0.32792238604490337,0.10524622022884024,0.35415598544893173,0.21081576411829464,0.1701091296385201,0.12894951123162934,0.21222202625655778,0.24812939069358525 +national,b1200k.cps2023-2024.acs100.s0,1200000,2,1.0,0,1322543,230272.02491931393,0.11573533800600526,0.24047861362866643,0.21910535458696764,0.297947321629199,0.12140193109356652,0.2990649297438268,0.254270666452558,0.16789323516569246,0.07369448258832513,0.1311205970234169,0.1869661997719246 +national,b1200k.cps2022-2023-2024.acs000.s0,1200000,3,0.0,0,2508197,45160.28249329324,0.11867196264629083,0.30242409456170055,0.2513346707648975,0.3235953533512478,0.103106292409962,0.35154523730343396,0.20790520556155948,0.16777266351564055,0.13275665907083536,0.21254249073410422,0.2468187433405679 +national,b1200k.cps2022-2023-2024.acs100.s0,1200000,3,1.0,0,1384080,222919.7725749223,0.11332654624626497,0.24370249674460634,0.2170112714257001,0.30008669635968993,0.11848225108641687,0.3009724729875966,0.23949547435783827,0.16572583257448276,0.081210585041972,0.13451133959848416,0.18857556042057552 diff --git a/experiments/us-support-mix-bakeoff-20260930/headline.md b/experiments/us-support-mix-bakeoff-20260930/headline.md index c1bff3df35..ae9def5bda 100644 --- a/experiments/us-support-mix-bakeoff-20260930/headline.md +++ b/experiments/us-support-mix-bakeoff-20260930/headline.md @@ -2,68 +2,68 @@ | Arm | Rows | Distinct hh | ESS (distinct) | CPS-native nat | state | CD | PEP demog | ACS-native state | CD | county | Solve min | Peak GB | |---|---|---|---|---|---|---|---|---|---|---|---|---| -| natural.cps2024.acs100.s0 | 116,990 | 55,762 | 26,267 | 0.356 | 0.199 | 0.341 | 0.130 | 0.112 | 0.240 | 0.334 | 6.1 | 3.2 | -| natural.cps2023-2024.acs100.s0 | 234,556 | 92,547 | 38,976 | 0.299 | 0.176 | 0.279 | 0.143 | 0.111 | 0.224 | 0.305 | 11.7 | 5.2 | -| natural.cps2022-2023-2024.acs100.s0 | 352,932 | 130,294 | 52,074 | 0.265 | 0.161 | 0.258 | 0.152 | 0.111 | 0.219 | 0.284 | 12.9 | 4.7 | -| b300k.cps0.acs100.s0 | 300,000 | 300,000 | 88,739 | 0.375 | 0.212 | 0.264 | 0.162 | 0.075 | 0.134 | 0.225 | 18.9 | 6.0 | -| b300k.cps2024.acs000.s0 | 629,368 | 55,762 | 25,941 | 0.301 | 0.185 | 0.242 | 0.149 | 0.110 | 0.218 | 0.259 | 23.0 | 8.1 | -| b300k.cps2024.acs100.s0 | 361,228 | 300,000 | 93,726 | 0.380 | 0.186 | 0.242 | 0.153 | 0.070 | 0.136 | 0.220 | 34.0 | 2.4 | -| b300k.cps2024.acs100.s1 | 361,228 | 300,000 | 94,328 | 0.337 | 0.194 | 0.248 | 0.167 | 0.072 | 0.135 | 0.218 | 10.9 | 6.7 | -| b300k.cps2024.acs100.s2 | 361,228 | 300,000 | 96,020 | 0.368 | 0.183 | 0.252 | 0.151 | 0.069 | 0.133 | 0.217 | 9.3 | 6.7 | -| b300k.cps2023-2024.acs000.s0 | 628,217 | 92,547 | 39,843 | 0.276 | 0.169 | 0.234 | 0.162 | 0.110 | 0.214 | 0.260 | 23.6 | 7.8 | -| b300k.cps2023-2024.acs100.s0 | 422,543 | 280,534 | 85,273 | 0.338 | 0.180 | 0.243 | 0.155 | 0.082 | 0.156 | 0.229 | 28.4 | 7.2 | -| b300k.cps2022-2023-2024.acs000.s0 | 627,089 | 130,294 | 53,841 | 0.262 | 0.159 | 0.237 | 0.160 | 0.111 | 0.215 | 0.263 | 21.0 | 8.0 | -| b300k.cps2022-2023-2024.acs100.s0 | 484,080 | 261,442 | 83,424 | 0.304 | 0.172 | 0.236 | 0.162 | 0.092 | 0.172 | 0.239 | 35.4 | 7.6 | -| b300k.cps2022-2023-2024.acs100.s1 | 484,080 | 261,442 | 84,651 | 0.337 | 0.167 | 0.240 | 0.165 | 0.092 | 0.173 | 0.239 | 12.5 | 7.7 | -| b300k.cps2022-2023-2024.acs100.s2 | 484,080 | 261,442 | 83,676 | 0.310 | 0.165 | 0.239 | 0.165 | 0.092 | 0.171 | 0.240 | 19.1 | 7.7 | -| b600k.cps0.acs100.s0 | 600,000 | 600,000 | 155,143 | 0.371 | 0.192 | 0.238 | 0.180 | 0.073 | 0.128 | 0.195 | 18.0 | 8.3 | -| b600k.cps2024.acs000.s0 | 1,258,830 | 55,762 | 24,855 | 0.293 | 0.179 | 0.222 | 0.161 | 0.109 | 0.212 | 0.241 | 42.1 | 8.1 | -| b600k.cps2024.acs050.s0 | 960,045 | 327,881 | 55,462 | 0.352 | 0.171 | 0.218 | 0.167 | 0.087 | 0.164 | 0.212 | 29.8 | 10.6 | -| b600k.cps2024.acs100.s0 | 661,228 | 600,000 | 161,804 | 0.367 | 0.180 | 0.225 | 0.176 | 0.065 | 0.122 | 0.188 | 29.8 | 8.1 | -| b600k.cps2023-2024.acs000.s0 | 1,256,347 | 92,547 | 39,230 | 0.278 | 0.164 | 0.214 | 0.171 | 0.110 | 0.210 | 0.241 | 39.5 | 13.7 | -| b600k.cps2023-2024.acs100.s0 | 722,543 | 580,534 | 155,524 | 0.366 | 0.177 | 0.220 | 0.171 | 0.071 | 0.130 | 0.192 | 26.0 | 9.9 | -| b600k.cps2022-2023-2024.acs000.s0 | 1,254,039 | 130,294 | 54,305 | 0.264 | 0.156 | 0.217 | 0.173 | 0.111 | 0.209 | 0.241 | 38.1 | 8.8 | -| b600k.cps2022-2023-2024.acs050.s0 | 1,019,084 | 345,868 | 91,100 | 0.295 | 0.163 | 0.217 | 0.174 | 0.095 | 0.173 | 0.216 | 28.9 | 13.1 | -| b600k.cps2022-2023-2024.acs100.s0 | 784,080 | 561,442 | 150,595 | 0.360 | 0.173 | 0.220 | 0.166 | 0.079 | 0.142 | 0.198 | 24.6 | 10.5 | -| b1200k.cps0.acs100.s0 | 1,200,000 | 1,200,000 | 272,607 | 0.364 | 0.176 | 0.210 | 0.191 | 0.074 | 0.128 | 0.172 | 31.1 | 13.8 | -| b1200k.cps2024.acs000.s0 | 2,517,604 | 55,762 | 23,843 | 0.286 | 0.179 | 0.206 | 0.172 | 0.110 | 0.209 | 0.232 | 139.9 | 20.8 | -| b1200k.cps2024.acs100.s0 | 1,261,228 | 1,200,000 | 281,840 | 0.357 | 0.170 | 0.209 | 0.187 | 0.065 | 0.121 | 0.167 | 38.6 | 14.6 | -| b1200k.cps2023-2024.acs000.s0 | 2,512,844 | 92,547 | 38,732 | 0.275 | 0.162 | 0.202 | 0.179 | 0.110 | 0.206 | 0.229 | 210.0 | 18.0 | -| b1200k.cps2023-2024.acs100.s0 | 1,322,543 | 1,180,534 | 278,972 | 0.353 | 0.169 | 0.209 | 0.185 | 0.065 | 0.119 | 0.165 | 37.0 | 15.2 | -| b1200k.cps2022-2023-2024.acs000.s0 | 2,508,197 | 130,294 | 54,292 | 0.263 | 0.156 | 0.206 | 0.181 | 0.112 | 0.206 | 0.229 | 54.8 | 27.9 | -| b1200k.cps2022-2023-2024.acs100.s0 | 1,384,080 | 1,161,442 | 276,474 | 0.346 | 0.166 | 0.208 | 0.182 | 0.069 | 0.123 | 0.166 | 35.7 | 15.9 | +| natural.cps2024.acs100.s0 | 116,990 | 55,762 | 26,267 | 0.356 | 0.199 | 0.341 | 0.130 | 0.131 | 0.278 | 0.342 | 6.1 | 4.3 | +| natural.cps2023-2024.acs100.s0 | 234,556 | 92,547 | 38,976 | 0.299 | 0.176 | 0.279 | 0.143 | 0.133 | 0.266 | 0.316 | 11.7 | 5.4 | +| natural.cps2022-2023-2024.acs100.s0 | 352,932 | 130,294 | 52,074 | 0.265 | 0.161 | 0.258 | 0.152 | 0.134 | 0.263 | 0.299 | 12.9 | 6.4 | +| b300k.cps0.acs100.s0 | 300,000 | 300,000 | 88,739 | 0.375 | 0.212 | 0.264 | 0.162 | 0.082 | 0.151 | 0.224 | 18.9 | 6.0 | +| b300k.cps2024.acs000.s0 | 629,368 | 55,762 | 25,941 | 0.301 | 0.185 | 0.242 | 0.149 | 0.131 | 0.265 | 0.279 | 23.0 | 9.4 | +| b300k.cps2024.acs100.s0 | 361,228 | 300,000 | 93,726 | 0.380 | 0.186 | 0.242 | 0.153 | 0.080 | 0.155 | 0.223 | 34.0 | 2.4 | +| b300k.cps2024.acs100.s1 | 361,228 | 300,000 | 94,328 | 0.337 | 0.194 | 0.248 | 0.167 | 0.081 | 0.152 | 0.220 | 10.9 | 6.7 | +| b300k.cps2024.acs100.s2 | 361,228 | 300,000 | 96,020 | 0.368 | 0.183 | 0.252 | 0.151 | 0.077 | 0.151 | 0.219 | 9.3 | 6.7 | +| b300k.cps2023-2024.acs000.s0 | 628,217 | 92,547 | 39,843 | 0.276 | 0.169 | 0.234 | 0.162 | 0.133 | 0.261 | 0.278 | 23.6 | 9.4 | +| b300k.cps2023-2024.acs100.s0 | 422,543 | 280,534 | 85,273 | 0.338 | 0.180 | 0.243 | 0.155 | 0.096 | 0.184 | 0.235 | 28.4 | 7.2 | +| b300k.cps2022-2023-2024.acs000.s0 | 627,089 | 130,294 | 53,841 | 0.262 | 0.159 | 0.237 | 0.160 | 0.134 | 0.260 | 0.281 | 21.0 | 9.2 | +| b300k.cps2022-2023-2024.acs100.s0 | 484,080 | 261,442 | 83,424 | 0.304 | 0.172 | 0.236 | 0.162 | 0.110 | 0.205 | 0.251 | 35.4 | 7.6 | +| b300k.cps2022-2023-2024.acs100.s1 | 484,080 | 261,442 | 84,651 | 0.337 | 0.167 | 0.240 | 0.165 | 0.110 | 0.205 | 0.250 | 12.5 | 7.7 | +| b300k.cps2022-2023-2024.acs100.s2 | 484,080 | 261,442 | 83,676 | 0.310 | 0.165 | 0.239 | 0.165 | 0.110 | 0.202 | 0.251 | 19.1 | 7.7 | +| b600k.cps0.acs100.s0 | 600,000 | 600,000 | 155,143 | 0.371 | 0.192 | 0.238 | 0.180 | 0.081 | 0.145 | 0.198 | 18.0 | 8.3 | +| b600k.cps2024.acs000.s0 | 1,258,830 | 55,762 | 24,855 | 0.293 | 0.179 | 0.222 | 0.161 | 0.131 | 0.260 | 0.265 | 42.1 | 15.6 | +| b600k.cps2024.acs050.s0 | 960,045 | 327,881 | 55,462 | 0.352 | 0.171 | 0.218 | 0.167 | 0.102 | 0.198 | 0.226 | 29.8 | 10.6 | +| b600k.cps2024.acs100.s0 | 661,228 | 600,000 | 161,804 | 0.367 | 0.180 | 0.225 | 0.176 | 0.072 | 0.137 | 0.192 | 29.8 | 8.1 | +| b600k.cps2023-2024.acs000.s0 | 1,256,347 | 92,547 | 39,230 | 0.278 | 0.164 | 0.214 | 0.171 | 0.133 | 0.257 | 0.264 | 39.5 | 15.5 | +| b600k.cps2023-2024.acs100.s0 | 722,543 | 580,534 | 155,524 | 0.366 | 0.177 | 0.220 | 0.171 | 0.081 | 0.150 | 0.198 | 26.0 | 9.9 | +| b600k.cps2022-2023-2024.acs000.s0 | 1,254,039 | 130,294 | 54,305 | 0.264 | 0.156 | 0.217 | 0.173 | 0.134 | 0.256 | 0.263 | 38.1 | 14.7 | +| b600k.cps2022-2023-2024.acs050.s0 | 1,019,084 | 345,868 | 91,100 | 0.295 | 0.163 | 0.217 | 0.174 | 0.113 | 0.209 | 0.232 | 28.9 | 13.1 | +| b600k.cps2022-2023-2024.acs100.s0 | 784,080 | 561,442 | 150,595 | 0.360 | 0.173 | 0.220 | 0.166 | 0.092 | 0.166 | 0.207 | 24.6 | 10.5 | +| b1200k.cps0.acs100.s0 | 1,200,000 | 1,200,000 | 272,607 | 0.364 | 0.176 | 0.210 | 0.191 | 0.084 | 0.146 | 0.180 | 31.1 | 13.8 | +| b1200k.cps2024.acs000.s0 | 2,517,604 | 55,762 | 23,843 | 0.286 | 0.179 | 0.206 | 0.172 | 0.132 | 0.258 | 0.257 | 139.9 | 27.0 | +| b1200k.cps2024.acs100.s0 | 1,261,228 | 1,200,000 | 281,840 | 0.357 | 0.170 | 0.209 | 0.187 | 0.072 | 0.136 | 0.174 | 38.6 | 14.6 | +| b1200k.cps2023-2024.acs000.s0 | 2,512,844 | 92,547 | 38,732 | 0.275 | 0.162 | 0.202 | 0.179 | 0.133 | 0.254 | 0.254 | 210.0 | 18.0 | +| b1200k.cps2023-2024.acs100.s0 | 1,322,543 | 1,180,534 | 278,972 | 0.353 | 0.169 | 0.209 | 0.185 | 0.073 | 0.136 | 0.173 | 37.0 | 15.2 | +| b1200k.cps2022-2023-2024.acs000.s0 | 2,508,197 | 130,294 | 54,292 | 0.263 | 0.156 | 0.206 | 0.181 | 0.135 | 0.253 | 0.253 | 54.8 | 27.9 | +| b1200k.cps2022-2023-2024.acs100.s0 | 1,384,080 | 1,161,442 | 276,474 | 0.346 | 0.166 | 0.208 | 0.182 | 0.078 | 0.141 | 0.174 | 35.7 | 15.9 | ### national product | Arm | Rows | Distinct hh | ESS (distinct) | CPS-native nat | state | CD | PEP demog | ACS-native state | CD | county | Solve min | Peak GB | |---|---|---|---|---|---|---|---|---|---|---|---|---| -| natural.cps2024.acs100.s0 | 116,990 | 55,762 | 18,526 | 0.244 | 0.189 | 0.487 | 0.166 | 0.109 | 0.261 | 0.382 | 4.5 | 3.4 | -| natural.cps2023-2024.acs100.s0 | 234,556 | 92,547 | 31,671 | 0.251 | 0.173 | 0.428 | 0.168 | 0.109 | 0.228 | 0.325 | 7.7 | 4.6 | -| natural.cps2022-2023-2024.acs100.s0 | 352,932 | 130,294 | 44,943 | 0.236 | 0.175 | 0.406 | 0.167 | 0.112 | 0.219 | 0.298 | 8.2 | 4.0 | -| b300k.cps0.acs100.s0 | 300,000 | 300,000 | 60,492 | 0.251 | 0.210 | 0.356 | 0.174 | 0.083 | 0.166 | 0.273 | 18.1 | 5.0 | -| b300k.cps2024.acs000.s0 | 629,368 | 55,762 | 18,567 | 0.243 | 0.189 | 0.372 | 0.166 | 0.109 | 0.209 | 0.271 | 15.1 | 6.2 | -| b300k.cps2024.acs100.s0 | 361,228 | 300,000 | 63,297 | 0.274 | 0.193 | 0.363 | 0.158 | 0.075 | 0.160 | 0.253 | 13.4 | 1.4 | -| b300k.cps2024.acs100.s1 | 361,228 | 300,000 | 63,662 | 0.253 | 0.193 | 0.370 | 0.165 | 0.076 | 0.160 | 0.257 | 7.4 | 5.5 | -| b300k.cps2024.acs100.s2 | 361,228 | 300,000 | 65,311 | 0.254 | 0.185 | 0.371 | 0.150 | 0.075 | 0.156 | 0.256 | 6.9 | 5.4 | -| b300k.cps2023-2024.acs000.s0 | 628,217 | 92,547 | 31,713 | 0.251 | 0.173 | 0.379 | 0.168 | 0.109 | 0.206 | 0.269 | 15.7 | 5.7 | -| b300k.cps2023-2024.acs100.s0 | 422,543 | 280,534 | 65,908 | 0.215 | 0.180 | 0.354 | 0.169 | 0.084 | 0.165 | 0.250 | 10.2 | 5.8 | -| b300k.cps2022-2023-2024.acs000.s0 | 627,089 | 130,294 | 44,984 | 0.236 | 0.175 | 0.383 | 0.167 | 0.112 | 0.208 | 0.272 | 15.4 | 5.9 | -| b300k.cps2022-2023-2024.acs100.s0 | 484,080 | 261,442 | 69,065 | 0.192 | 0.163 | 0.352 | 0.168 | 0.094 | 0.174 | 0.253 | 21.6 | 6.2 | -| b300k.cps2022-2023-2024.acs100.s1 | 484,080 | 261,442 | 69,333 | 0.278 | 0.172 | 0.356 | 0.157 | 0.094 | 0.177 | 0.253 | 10.2 | 6.2 | -| b300k.cps2022-2023-2024.acs100.s2 | 484,080 | 261,442 | 69,661 | 0.171 | 0.170 | 0.355 | 0.160 | 0.094 | 0.174 | 0.254 | 9.8 | 5.9 | -| b600k.cps0.acs100.s0 | 600,000 | 600,000 | 119,288 | 0.285 | 0.200 | 0.330 | 0.181 | 0.080 | 0.148 | 0.230 | 14.3 | 6.5 | -| b600k.cps2024.acs000.s0 | 1,258,830 | 55,762 | 18,613 | 0.243 | 0.189 | 0.355 | 0.166 | 0.109 | 0.200 | 0.246 | 27.0 | 7.5 | -| b600k.cps2024.acs050.s0 | 960,045 | 327,881 | 45,348 | 0.250 | 0.170 | 0.328 | 0.160 | 0.090 | 0.160 | 0.222 | 19.9 | 9.2 | -| b600k.cps2024.acs100.s0 | 661,228 | 600,000 | 121,891 | 0.255 | 0.185 | 0.329 | 0.167 | 0.067 | 0.135 | 0.214 | 23.9 | 7.0 | -| b600k.cps2023-2024.acs000.s0 | 1,256,347 | 92,547 | 31,781 | 0.251 | 0.173 | 0.357 | 0.168 | 0.109 | 0.197 | 0.244 | 26.8 | 9.4 | -| b600k.cps2023-2024.acs100.s0 | 722,543 | 580,534 | 114,433 | 0.219 | 0.177 | 0.327 | 0.158 | 0.076 | 0.142 | 0.214 | 22.1 | 7.5 | -| b600k.cps2022-2023-2024.acs000.s0 | 1,254,039 | 130,294 | 45,050 | 0.235 | 0.175 | 0.356 | 0.166 | 0.112 | 0.198 | 0.245 | 24.8 | 8.4 | -| b600k.cps2022-2023-2024.acs050.s0 | 1,019,084 | 345,868 | 77,830 | 0.206 | 0.162 | 0.328 | 0.161 | 0.096 | 0.165 | 0.223 | 20.1 | 9.3 | -| b600k.cps2022-2023-2024.acs100.s0 | 784,080 | 561,442 | 113,041 | 0.244 | 0.170 | 0.326 | 0.157 | 0.084 | 0.151 | 0.221 | 16.6 | 7.9 | -| b1200k.cps0.acs100.s0 | 1,200,000 | 1,200,000 | 233,508 | 0.267 | 0.190 | 0.300 | 0.182 | 0.080 | 0.137 | 0.199 | 19.7 | 10.0 | -| b1200k.cps2024.acs000.s0 | 2,517,604 | 55,762 | 18,676 | 0.243 | 0.189 | 0.344 | 0.166 | 0.109 | 0.197 | 0.234 | 50.2 | 14.4 | -| b1200k.cps2024.acs100.s0 | 1,261,228 | 1,200,000 | 239,080 | 0.258 | 0.182 | 0.299 | 0.173 | 0.068 | 0.125 | 0.186 | 24.0 | 10.6 | -| b1200k.cps2023-2024.acs000.s0 | 2,512,844 | 92,547 | 31,905 | 0.251 | 0.172 | 0.345 | 0.168 | 0.109 | 0.193 | 0.231 | 50.9 | 13.0 | -| b1200k.cps2023-2024.acs100.s0 | 1,322,543 | 1,180,534 | 230,272 | 0.260 | 0.174 | 0.299 | 0.166 | 0.066 | 0.122 | 0.181 | 23.0 | 11.0 | -| b1200k.cps2022-2023-2024.acs000.s0 | 2,508,197 | 130,294 | 45,160 | 0.235 | 0.176 | 0.342 | 0.166 | 0.111 | 0.193 | 0.229 | 107.3 | 15.0 | -| b1200k.cps2022-2023-2024.acs100.s0 | 1,384,080 | 1,161,442 | 222,920 | 0.261 | 0.171 | 0.301 | 0.164 | 0.072 | 0.124 | 0.182 | 23.9 | 11.3 | +| natural.cps2024.acs100.s0 | 116,990 | 55,762 | 18,526 | 0.244 | 0.189 | 0.487 | 0.166 | 0.129 | 0.271 | 0.381 | 4.5 | 4.0 | +| natural.cps2023-2024.acs100.s0 | 234,556 | 92,547 | 31,671 | 0.251 | 0.173 | 0.428 | 0.168 | 0.129 | 0.242 | 0.331 | 7.7 | 4.6 | +| natural.cps2022-2023-2024.acs100.s0 | 352,932 | 130,294 | 44,943 | 0.236 | 0.175 | 0.406 | 0.167 | 0.133 | 0.236 | 0.307 | 8.2 | 5.1 | +| b300k.cps0.acs100.s0 | 300,000 | 300,000 | 60,492 | 0.251 | 0.210 | 0.356 | 0.174 | 0.096 | 0.172 | 0.269 | 18.1 | 5.0 | +| b300k.cps2024.acs000.s0 | 629,368 | 55,762 | 18,567 | 0.243 | 0.189 | 0.372 | 0.166 | 0.129 | 0.227 | 0.283 | 15.1 | 7.1 | +| b300k.cps2024.acs100.s0 | 361,228 | 300,000 | 63,297 | 0.274 | 0.193 | 0.363 | 0.158 | 0.084 | 0.168 | 0.252 | 13.4 | 1.4 | +| b300k.cps2024.acs100.s1 | 361,228 | 300,000 | 63,662 | 0.253 | 0.193 | 0.370 | 0.165 | 0.087 | 0.167 | 0.258 | 7.4 | 5.5 | +| b300k.cps2024.acs100.s2 | 361,228 | 300,000 | 65,311 | 0.254 | 0.185 | 0.371 | 0.150 | 0.085 | 0.164 | 0.254 | 6.9 | 5.4 | +| b300k.cps2023-2024.acs000.s0 | 628,217 | 92,547 | 31,713 | 0.251 | 0.173 | 0.379 | 0.168 | 0.129 | 0.223 | 0.281 | 15.7 | 7.1 | +| b300k.cps2023-2024.acs100.s0 | 422,543 | 280,534 | 65,908 | 0.215 | 0.180 | 0.354 | 0.169 | 0.097 | 0.175 | 0.251 | 10.2 | 5.8 | +| b300k.cps2022-2023-2024.acs000.s0 | 627,089 | 130,294 | 44,984 | 0.236 | 0.175 | 0.383 | 0.167 | 0.133 | 0.226 | 0.283 | 15.4 | 6.8 | +| b300k.cps2022-2023-2024.acs100.s0 | 484,080 | 261,442 | 69,065 | 0.192 | 0.163 | 0.352 | 0.168 | 0.111 | 0.188 | 0.257 | 21.6 | 6.2 | +| b300k.cps2022-2023-2024.acs100.s1 | 484,080 | 261,442 | 69,333 | 0.278 | 0.172 | 0.356 | 0.157 | 0.110 | 0.190 | 0.258 | 10.2 | 6.2 | +| b300k.cps2022-2023-2024.acs100.s2 | 484,080 | 261,442 | 69,661 | 0.171 | 0.170 | 0.355 | 0.160 | 0.109 | 0.187 | 0.261 | 9.8 | 5.9 | +| b600k.cps0.acs100.s0 | 600,000 | 600,000 | 119,288 | 0.285 | 0.200 | 0.330 | 0.181 | 0.092 | 0.156 | 0.232 | 14.3 | 6.5 | +| b600k.cps2024.acs000.s0 | 1,258,830 | 55,762 | 18,613 | 0.243 | 0.189 | 0.355 | 0.166 | 0.129 | 0.220 | 0.262 | 27.0 | 11.0 | +| b600k.cps2024.acs050.s0 | 960,045 | 327,881 | 45,348 | 0.250 | 0.170 | 0.328 | 0.160 | 0.104 | 0.174 | 0.230 | 19.9 | 9.2 | +| b600k.cps2024.acs100.s0 | 661,228 | 600,000 | 121,891 | 0.255 | 0.185 | 0.329 | 0.167 | 0.074 | 0.143 | 0.217 | 23.9 | 7.0 | +| b600k.cps2023-2024.acs000.s0 | 1,256,347 | 92,547 | 31,781 | 0.251 | 0.173 | 0.357 | 0.168 | 0.129 | 0.215 | 0.259 | 26.8 | 10.6 | +| b600k.cps2023-2024.acs100.s0 | 722,543 | 580,534 | 114,433 | 0.219 | 0.177 | 0.327 | 0.158 | 0.086 | 0.152 | 0.218 | 22.1 | 7.5 | +| b600k.cps2022-2023-2024.acs000.s0 | 1,254,039 | 130,294 | 45,050 | 0.235 | 0.175 | 0.356 | 0.166 | 0.133 | 0.218 | 0.261 | 24.8 | 10.8 | +| b600k.cps2022-2023-2024.acs050.s0 | 1,019,084 | 345,868 | 77,830 | 0.206 | 0.162 | 0.328 | 0.161 | 0.113 | 0.182 | 0.232 | 20.1 | 9.3 | +| b600k.cps2022-2023-2024.acs100.s0 | 784,080 | 561,442 | 113,041 | 0.244 | 0.170 | 0.326 | 0.157 | 0.097 | 0.163 | 0.227 | 16.6 | 7.9 | +| b1200k.cps0.acs100.s0 | 1,200,000 | 1,200,000 | 233,508 | 0.267 | 0.190 | 0.300 | 0.182 | 0.092 | 0.147 | 0.205 | 19.7 | 10.0 | +| b1200k.cps2024.acs000.s0 | 2,517,604 | 55,762 | 18,676 | 0.243 | 0.189 | 0.344 | 0.166 | 0.129 | 0.217 | 0.252 | 50.2 | 18.3 | +| b1200k.cps2024.acs100.s0 | 1,261,228 | 1,200,000 | 239,080 | 0.258 | 0.182 | 0.299 | 0.173 | 0.075 | 0.134 | 0.191 | 24.0 | 10.6 | +| b1200k.cps2023-2024.acs000.s0 | 2,512,844 | 92,547 | 31,905 | 0.251 | 0.172 | 0.345 | 0.168 | 0.129 | 0.212 | 0.248 | 50.9 | 17.1 | +| b1200k.cps2023-2024.acs100.s0 | 1,322,543 | 1,180,534 | 230,272 | 0.260 | 0.174 | 0.299 | 0.166 | 0.074 | 0.131 | 0.187 | 23.0 | 11.0 | +| b1200k.cps2022-2023-2024.acs000.s0 | 2,508,197 | 130,294 | 45,160 | 0.235 | 0.176 | 0.342 | 0.166 | 0.133 | 0.213 | 0.247 | 107.3 | 18.3 | +| b1200k.cps2022-2023-2024.acs100.s0 | 1,384,080 | 1,161,442 | 222,920 | 0.261 | 0.171 | 0.301 | 0.164 | 0.081 | 0.135 | 0.189 | 23.9 | 11.3 | diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_000.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_000.r0-750000.json new file mode 100644 index 0000000000..92a25dbb53 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_000.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24008, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 216.3, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 24008 + }, + "households": 24008, + "missing_measures": [], + "nnz": 321574, + "peak_rss_gb": 7.57, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_000.pkl", + "wall_s": 1210.0 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_000.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_000.r750000-1210000.json new file mode 100644 index 0000000000..0ccdc6ad60 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_000.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 3, + "group_nesting_verified": true, + "households": 14494, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 186.1, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 14494 + }, + "households": 14494, + "missing_measures": [], + "nnz": 194475, + "peak_rss_gb": 9.36, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_000.pkl", + "wall_s": 375.2 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_001.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_001.r0-750000.json new file mode 100644 index 0000000000..71cbae95d4 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_001.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 23816, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 214.1, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 23816 + }, + "households": 23816, + "missing_measures": [], + "nnz": 318729, + "peak_rss_gb": 7.72, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_001.pkl", + "wall_s": 1210.1 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_001.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_001.r750000-1210000.json new file mode 100644 index 0000000000..09c450602b --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_001.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 3, + "group_nesting_verified": true, + "households": 14504, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 162.7, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 14504 + }, + "households": 14504, + "missing_measures": [], + "nnz": 192938, + "peak_rss_gb": 8.16, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_001.pkl", + "wall_s": 1659.8 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_002.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_002.r0-750000.json new file mode 100644 index 0000000000..fd54114d0e --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_002.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 23719, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 384.4, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 23719 + }, + "households": 23719, + "missing_measures": [], + "nnz": 319847, + "peak_rss_gb": 10.35, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_002.pkl", + "wall_s": 1848.6 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_002.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_002.r750000-1210000.json new file mode 100644 index 0000000000..a71023c9be --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_002.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 3, + "group_nesting_verified": true, + "households": 14616, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 310.4, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 14616 + }, + "households": 14616, + "missing_measures": [], + "nnz": 194501, + "peak_rss_gb": 10.63, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_002.pkl", + "wall_s": 239.2 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_003.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_003.r0-750000.json new file mode 100644 index 0000000000..e84b5f7ae2 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_003.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24202, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 427.1, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36121 + }, + "households": 24202, + "missing_measures": [], + "nnz": 438523, + "peak_rss_gb": 10.74, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_003.pkl", + "wall_s": 1957.2 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_003.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_003.r750000-1210000.json new file mode 100644 index 0000000000..a8d7661844 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_003.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 3, + "group_nesting_verified": true, + "households": 14835, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 306.0, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 21837 + }, + "households": 14835, + "missing_measures": [], + "nnz": 265990, + "peak_rss_gb": 13.65, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_003.pkl", + "wall_s": 1304.8 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_004.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_004.r0-750000.json new file mode 100644 index 0000000000..0c98e3fa9a --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_004.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24118, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 703.3, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58026 + }, + "households": 24118, + "missing_measures": [], + "nnz": 645906, + "peak_rss_gb": 11.5, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_004.pkl", + "wall_s": 1792.2 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_004.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_004.r750000-1210000.json new file mode 100644 index 0000000000..556d46ded8 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_004.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15253, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 467.1, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36788 + }, + "households": 15253, + "missing_measures": [], + "nnz": 409314, + "peak_rss_gb": 16.34, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_004.pkl", + "wall_s": 232.9 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_005.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_005.r0-750000.json new file mode 100644 index 0000000000..cc3aa493ac --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_005.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24361, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 747.0, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58545 + }, + "households": 24361, + "missing_measures": [], + "nnz": 652456, + "peak_rss_gb": 11.65, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_005.pkl", + "wall_s": 1704.6 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_005.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_005.r750000-1210000.json new file mode 100644 index 0000000000..6d4328f721 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_005.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15178, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 298.7, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36586 + }, + "households": 15178, + "missing_measures": [], + "nnz": 405978, + "peak_rss_gb": 14.64, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_005.pkl", + "wall_s": 543.6 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_006.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_006.r0-750000.json new file mode 100644 index 0000000000..766c6fb174 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_006.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24499, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1044.0, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58930 + }, + "households": 24499, + "missing_measures": [], + "nnz": 658167, + "peak_rss_gb": 12.44, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_006.pkl", + "wall_s": 1504.8 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_006.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_006.r750000-1210000.json new file mode 100644 index 0000000000..6e81eddd40 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_006.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15018, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 614.5, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36230 + }, + "households": 15018, + "missing_measures": [], + "nnz": 401773, + "peak_rss_gb": 17.46, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_006.pkl", + "wall_s": 226.3 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_007.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_007.r0-750000.json new file mode 100644 index 0000000000..4e8aa8a654 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_007.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24365, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1080.6, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58485 + }, + "households": 24365, + "missing_measures": [], + "nnz": 653135, + "peak_rss_gb": 12.55, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_007.pkl", + "wall_s": 1471.5 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_007.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_007.r750000-1210000.json new file mode 100644 index 0000000000..b19bfc7b3b --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_007.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 3, + "group_nesting_verified": true, + "households": 14914, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 445.8, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 35824 + }, + "households": 14914, + "missing_measures": [], + "nnz": 401258, + "peak_rss_gb": 17.47, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_007.pkl", + "wall_s": 180.7 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_008.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_008.r0-750000.json new file mode 100644 index 0000000000..f60919e62e --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_008.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24450, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1332.5, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58996 + }, + "households": 24450, + "missing_measures": [], + "nnz": 660030, + "peak_rss_gb": 13.4, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_008.pkl", + "wall_s": 1464.4 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_008.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_008.r750000-1210000.json new file mode 100644 index 0000000000..a212ac41d2 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_008.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 3, + "group_nesting_verified": true, + "households": 14939, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 792.1, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 35816 + }, + "households": 14939, + "missing_measures": [], + "nnz": 401461, + "peak_rss_gb": 18.83, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_008.pkl", + "wall_s": 265.2 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_009.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_009.r0-750000.json new file mode 100644 index 0000000000..1deb7f0f1b --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_009.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24446, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1370.0, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58836 + }, + "households": 24446, + "missing_measures": [], + "nnz": 652976, + "peak_rss_gb": 13.2, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_009.pkl", + "wall_s": 1499.1 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_009.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_009.r750000-1210000.json new file mode 100644 index 0000000000..080cae87d2 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_009.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 3, + "group_nesting_verified": true, + "households": 14900, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 588.2, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 35910 + }, + "households": 14900, + "missing_measures": [], + "nnz": 400342, + "peak_rss_gb": 18.31, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_009.pkl", + "wall_s": 226.8 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_010.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_010.r0-750000.json new file mode 100644 index 0000000000..77576b0cc0 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_010.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24309, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1640.3, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58246 + }, + "households": 24309, + "missing_measures": [], + "nnz": 651279, + "peak_rss_gb": 13.4, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_010.pkl", + "wall_s": 5502.1 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_010.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_010.r750000-1210000.json new file mode 100644 index 0000000000..70a1246045 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_010.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15058, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 966.9, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36166 + }, + "households": 15058, + "missing_measures": [], + "nnz": 403602, + "peak_rss_gb": 19.53, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_010.pkl", + "wall_s": 243.6 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_011.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_011.r0-750000.json new file mode 100644 index 0000000000..636ece4e3e --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_011.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24478, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1679.4, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58887 + }, + "households": 24478, + "missing_measures": [], + "nnz": 659237, + "peak_rss_gb": 13.2, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_011.pkl", + "wall_s": 2248.3 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_011.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_011.r750000-1210000.json new file mode 100644 index 0000000000..9295eb94a6 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_011.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 3, + "group_nesting_verified": true, + "households": 14992, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 742.7, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36043 + }, + "households": 14992, + "missing_measures": [], + "nnz": 401622, + "peak_rss_gb": 19.09, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_011.pkl", + "wall_s": 234.0 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_012.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_012.r0-750000.json new file mode 100644 index 0000000000..86ae82270b --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_012.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24417, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1976.7, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58840 + }, + "households": 24417, + "missing_measures": [], + "nnz": 654129, + "peak_rss_gb": 14.48, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_012.pkl", + "wall_s": 1007.5 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_012.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_012.r750000-1210000.json new file mode 100644 index 0000000000..d4b55bcc3c --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_012.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15110, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1155.1, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36286 + }, + "households": 15110, + "missing_measures": [], + "nnz": 403765, + "peak_rss_gb": 20.3, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_012.pkl", + "wall_s": 262.3 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_013.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_013.r0-750000.json new file mode 100644 index 0000000000..dabd58bb39 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_013.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24450, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1986.5, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58957 + }, + "households": 24450, + "missing_measures": [], + "nnz": 656744, + "peak_rss_gb": 13.2, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_013.pkl", + "wall_s": 1142.0 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_013.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_013.r750000-1210000.json new file mode 100644 index 0000000000..46f75c193a --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_013.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15079, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 933.7, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36075 + }, + "households": 15079, + "missing_measures": [], + "nnz": 406006, + "peak_rss_gb": 19.43, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_013.pkl", + "wall_s": 276.2 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_014.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_014.r0-750000.json new file mode 100644 index 0000000000..47e68a0879 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_014.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24444, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 2320.4, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58476 + }, + "households": 24444, + "missing_measures": [], + "nnz": 655994, + "peak_rss_gb": 14.48, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_014.pkl", + "wall_s": 2684.3 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_014.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_014.r750000-1210000.json new file mode 100644 index 0000000000..bb4c4e7892 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_014.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15010, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1331.2, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 35829 + }, + "households": 15010, + "missing_measures": [], + "nnz": 400557, + "peak_rss_gb": 20.65, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_014.pkl", + "wall_s": 215.4 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_015.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_015.r0-750000.json new file mode 100644 index 0000000000..7c0f6224f6 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_015.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24731, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 2330.3, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 59184 + }, + "households": 24731, + "missing_measures": [], + "nnz": 660186, + "peak_rss_gb": 13.2, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_015.pkl", + "wall_s": 1280.5 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_015.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_015.r750000-1210000.json new file mode 100644 index 0000000000..bc6c233257 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_015.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 3, + "group_nesting_verified": true, + "households": 14923, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1094.1, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 35618 + }, + "households": 14923, + "missing_measures": [], + "nnz": 398516, + "peak_rss_gb": 19.88, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_015.pkl", + "wall_s": 224.4 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_016.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_016.r0-750000.json new file mode 100644 index 0000000000..cfea31ad35 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_016.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24430, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 2649.1, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58804 + }, + "households": 24430, + "missing_measures": [], + "nnz": 654620, + "peak_rss_gb": 14.94, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_016.pkl", + "wall_s": 1810.4 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_016.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_016.r750000-1210000.json new file mode 100644 index 0000000000..26e1edb621 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_016.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15019, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1488.5, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 35883 + }, + "households": 15019, + "missing_measures": [], + "nnz": 403174, + "peak_rss_gb": 21.02, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_016.pkl", + "wall_s": 223.4 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_017.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_017.r0-750000.json new file mode 100644 index 0000000000..b5f7f6916f --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_017.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24731, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 2674.7, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 59030 + }, + "households": 24731, + "missing_measures": [], + "nnz": 663577, + "peak_rss_gb": 15.69, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_017.pkl", + "wall_s": 1446.6 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_017.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_017.r750000-1210000.json new file mode 100644 index 0000000000..4baec13fec --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_017.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 3, + "group_nesting_verified": true, + "households": 14836, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1275.3, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36014 + }, + "households": 14836, + "missing_measures": [], + "nnz": 399792, + "peak_rss_gb": 20.34, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_017.pkl", + "wall_s": 263.0 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_018.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_018.r0-750000.json new file mode 100644 index 0000000000..d66bc9dac1 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_018.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24492, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 2958.0, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58744 + }, + "households": 24492, + "missing_measures": [], + "nnz": 657118, + "peak_rss_gb": 16.31, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_018.pkl", + "wall_s": 1152.1 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_018.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_018.r750000-1210000.json new file mode 100644 index 0000000000..07f4f5e24a --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_018.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15021, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1643.6, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 35969 + }, + "households": 15021, + "missing_measures": [], + "nnz": 401656, + "peak_rss_gb": 21.26, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_018.pkl", + "wall_s": 233.7 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_019.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_019.r0-750000.json new file mode 100644 index 0000000000..e170ae7fcf --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_019.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24518, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 3016.5, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58645 + }, + "households": 24518, + "missing_measures": [], + "nnz": 658818, + "peak_rss_gb": 15.69, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_019.pkl", + "wall_s": 2873.8 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_019.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_019.r750000-1210000.json new file mode 100644 index 0000000000..a3e6f9bcbc --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_019.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15003, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1429.3, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36035 + }, + "households": 15003, + "missing_measures": [], + "nnz": 402583, + "peak_rss_gb": 20.53, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_019.pkl", + "wall_s": 201.3 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_020.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_020.r0-750000.json new file mode 100644 index 0000000000..26ea479a07 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_020.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24527, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 3288.1, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 59016 + }, + "households": 24527, + "missing_measures": [], + "nnz": 661106, + "peak_rss_gb": 16.31, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_020.pkl", + "wall_s": 1497.7 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_020.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_020.r750000-1210000.json new file mode 100644 index 0000000000..aecac6b616 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_020.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15182, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1781.2, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36499 + }, + "households": 15182, + "missing_measures": [], + "nnz": 406928, + "peak_rss_gb": 21.53, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_020.pkl", + "wall_s": 215.1 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_021.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_021.r0-750000.json new file mode 100644 index 0000000000..ba86d63994 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_021.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24528, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 3360.2, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 59039 + }, + "households": 24528, + "missing_measures": [], + "nnz": 658964, + "peak_rss_gb": 15.69, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_021.pkl", + "wall_s": 1462.2 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_021.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_021.r750000-1210000.json new file mode 100644 index 0000000000..46bf0d52d4 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_021.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 3, + "group_nesting_verified": true, + "households": 14990, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1592.4, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36189 + }, + "households": 14990, + "missing_measures": [], + "nnz": 401645, + "peak_rss_gb": 20.8, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_021.pkl", + "wall_s": 239.4 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_022.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_022.r0-750000.json new file mode 100644 index 0000000000..f5ed8c2b4b --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_022.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24336, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 3610.3, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58431 + }, + "households": 24336, + "missing_measures": [], + "nnz": 651484, + "peak_rss_gb": 16.31, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_022.pkl", + "wall_s": 1308.7 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_022.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_022.r750000-1210000.json new file mode 100644 index 0000000000..396633a205 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_022.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 3, + "group_nesting_verified": true, + "households": 14883, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1915.8, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 35846 + }, + "households": 14883, + "missing_measures": [], + "nnz": 397527, + "peak_rss_gb": 21.78, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_022.pkl", + "wall_s": 193.3 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_023.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_023.r0-750000.json new file mode 100644 index 0000000000..f84a447d23 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_023.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24363, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 3676.2, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58225 + }, + "households": 24363, + "missing_measures": [], + "nnz": 654120, + "peak_rss_gb": 18.17, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_023.pkl", + "wall_s": 1186.3 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_023.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_023.r750000-1210000.json new file mode 100644 index 0000000000..8ae8ccb9cb --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_023.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15123, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1731.3, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36268 + }, + "households": 15123, + "missing_measures": [], + "nnz": 404461, + "peak_rss_gb": 20.92, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_023.pkl", + "wall_s": 224.3 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_024.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_024.r0-750000.json new file mode 100644 index 0000000000..b308730412 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_024.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24498, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 3856.7, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 59066 + }, + "households": 24498, + "missing_measures": [], + "nnz": 657380, + "peak_rss_gb": 16.72, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_024.pkl", + "wall_s": 868.9 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_024.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_024.r750000-1210000.json new file mode 100644 index 0000000000..6e128c8ce8 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_024.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 3, + "group_nesting_verified": true, + "households": 14929, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 2045.5, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 35850 + }, + "households": 14929, + "missing_measures": [], + "nnz": 399688, + "peak_rss_gb": 22.09, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_024.pkl", + "wall_s": 155.3 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_025.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_025.r0-750000.json new file mode 100644 index 0000000000..f8264e1e3b --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_025.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24556, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 4005.5, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 59209 + }, + "households": 24556, + "missing_measures": [], + "nnz": 657005, + "peak_rss_gb": 19.1, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_025.pkl", + "wall_s": 1279.4 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_025.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_025.r750000-1210000.json new file mode 100644 index 0000000000..ddebde6831 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_025.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 3, + "group_nesting_verified": true, + "households": 14859, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1859.9, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36090 + }, + "households": 14859, + "missing_measures": [], + "nnz": 400977, + "peak_rss_gb": 21.4, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_025.pkl", + "wall_s": 200.1 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_026.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_026.r0-750000.json new file mode 100644 index 0000000000..72cb300909 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_026.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24396, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 4169.4, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58633 + }, + "households": 24396, + "missing_measures": [], + "nnz": 657190, + "peak_rss_gb": 17.61, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_026.pkl", + "wall_s": 2054.9 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_026.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_026.r750000-1210000.json new file mode 100644 index 0000000000..6e5d55d837 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_026.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15071, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 2167.7, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36483 + }, + "households": 15071, + "missing_measures": [], + "nnz": 403221, + "peak_rss_gb": 22.46, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_026.pkl", + "wall_s": 130.2 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_027.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_027.r0-750000.json new file mode 100644 index 0000000000..d618d0d3c8 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_027.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24777, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 4319.3, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 59228 + }, + "households": 24777, + "missing_measures": [], + "nnz": 665835, + "peak_rss_gb": 19.1, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_027.pkl", + "wall_s": 1300.4 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_027.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_027.r750000-1210000.json new file mode 100644 index 0000000000..0f49490151 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_027.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 3, + "group_nesting_verified": true, + "households": 14953, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 1990.8, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 35948 + }, + "households": 14953, + "missing_measures": [], + "nnz": 400581, + "peak_rss_gb": 21.65, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_027.pkl", + "wall_s": 151.0 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_028.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_028.r0-750000.json new file mode 100644 index 0000000000..def36673d1 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_028.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24475, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 283.0, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 58424 + }, + "households": 24475, + "missing_measures": [], + "nnz": 659290, + "peak_rss_gb": 12.4, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_028.pkl", + "wall_s": 823.7 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_028.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_028.r750000-1210000.json new file mode 100644 index 0000000000..edbe00e485 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_028.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15105, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 2274.3, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36079 + }, + "households": 15105, + "missing_measures": [], + "nnz": 403961, + "peak_rss_gb": 22.72, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_028.pkl", + "wall_s": 113.2 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_029.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_029.r0-750000.json new file mode 100644 index 0000000000..b3e7f4c343 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_029.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 5, + "group_nesting_verified": true, + "households": 24599, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 4632.0, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 59066 + }, + "households": 24599, + "missing_measures": [], + "nnz": 660416, + "peak_rss_gb": 19.1, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_029.pkl", + "wall_s": 1318.3 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_029.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_029.r750000-1210000.json new file mode 100644 index 0000000000..1f460d72d3 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_029.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15063, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 2129.8, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 36491 + }, + "households": 15063, + "missing_measures": [], + "nnz": 402516, + "peak_rss_gb": 21.97, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_029.pkl", + "wall_s": 146.1 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_030.r0-750000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_030.r0-750000.json new file mode 100644 index 0000000000..b5b90d6a4e --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_030.r0-750000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 4, + "group_nesting_verified": true, + "households": 15426, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 198.0, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 37138 + }, + "households": 15426, + "missing_measures": [], + "nnz": 414033, + "peak_rss_gb": 12.0, + "rank_range": [ + 0, + 750000 + ], + "shard": "shard_030.pkl", + "wall_s": 664.6 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_030.r750000-1210000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_030.r750000-1210000.json new file mode 100644 index 0000000000..d881d1ed09 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/acs/shard_030.r750000-1210000.json @@ -0,0 +1,34 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 2, + "group_nesting_verified": true, + "households": 9578, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 2357.8, + "formula_derived_inputs": { + "person.is_spm_independent_minor_role": 22938 + }, + "households": 9578, + "missing_measures": [], + "nnz": 255123, + "peak_rss_gb": 22.72, + "rank_range": [ + 750000, + 1210000 + ], + "shard": "shard_030.pkl", + "wall_s": 95.0 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_000.json b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_000.json new file mode 100644 index 0000000000..0f464322bc --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_000.json @@ -0,0 +1,26 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 10, + "group_nesting_verified": true, + "households": 50000, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "households": 50000, + "missing_measures": [], + "nnz": 1176034, + "peak_rss_gb": 5.79, + "shard": "shard_000.pkl", + "wall_s": 2868.4 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_001.json b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_001.json new file mode 100644 index 0000000000..fefc44da67 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_001.json @@ -0,0 +1,26 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 10, + "group_nesting_verified": true, + "households": 50000, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "households": 50000, + "missing_measures": [], + "nnz": 1176937, + "peak_rss_gb": 9.1, + "shard": "shard_001.pkl", + "wall_s": 1477.8 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_002.json b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_002.json new file mode 100644 index 0000000000..d46d05438b --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_002.json @@ -0,0 +1,29 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 10, + "group_nesting_verified": true, + "households": 50000, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 263.4, + "default_filled_inputs": {}, + "households": 50000, + "missing_measures": [], + "nnz": 1160667, + "peak_rss_gb": 8.4, + "rank_range": null, + "shard": "shard_002.pkl", + "wall_s": 1355.6 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_003.json b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_003.json new file mode 100644 index 0000000000..92e2ca324b --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_003.json @@ -0,0 +1,29 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 10, + "group_nesting_verified": true, + "households": 50000, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 513.2, + "default_filled_inputs": {}, + "households": 50000, + "missing_measures": [], + "nnz": 1370784, + "peak_rss_gb": 10.2, + "rank_range": null, + "shard": "shard_003.pkl", + "wall_s": 516.0 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_004.json b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_004.json new file mode 100644 index 0000000000..7cc1dc79f4 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_004.json @@ -0,0 +1,29 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 10, + "group_nesting_verified": true, + "households": 50000, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 790.9, + "default_filled_inputs": {}, + "households": 50000, + "missing_measures": [], + "nnz": 1487652, + "peak_rss_gb": 10.35, + "rank_range": null, + "shard": "shard_004.pkl", + "wall_s": 386.7 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_005.json b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_005.json new file mode 100644 index 0000000000..887897f83a --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_005.json @@ -0,0 +1,29 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 10, + "group_nesting_verified": true, + "households": 50000, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 261.8, + "default_filled_inputs": {}, + "households": 50000, + "missing_measures": [], + "nnz": 1476724, + "peak_rss_gb": 8.23, + "rank_range": null, + "shard": "shard_005.pkl", + "wall_s": 1345.7 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_006.json b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_006.json new file mode 100644 index 0000000000..48aae71354 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_006.json @@ -0,0 +1,29 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 10, + "group_nesting_verified": true, + "households": 50000, + "jct_reform_families_simulated": 0, + "largest_batch_households": 5000, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "cpu_s": 567.4, + "default_filled_inputs": {}, + "households": 50000, + "missing_measures": [], + "nnz": 1569083, + "peak_rss_gb": 15.59, + "rank_range": null, + "shard": "shard_006.pkl", + "wall_s": 641.6 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_007.json b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_007.json new file mode 100644 index 0000000000..a229f25049 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/cps/shard_007.json @@ -0,0 +1,26 @@ +{ + "batching": { + "base_household_columns": 423, + "batches": 1, + "group_nesting_verified": true, + "households": 2932, + "jct_reform_families_simulated": 0, + "largest_batch_households": 2932, + "maximum_microsim_batch_size": 5000, + "method": "household_position_batches", + "population_aggregate_guard_armed": true, + "population_aggregate_variables_checked": [ + "household_income_decile", + "medicaid_slcsp_state_average_cost_index", + "medicaid_slcsp_state_denominator", + "spm_unit_income_decile" + ] + }, + "compiled_concepts": 421, + "households": 2932, + "missing_measures": [], + "nnz": 107555, + "peak_rss_gb": 5.13, + "shard": "shard_007.pkl", + "wall_s": 75.2 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/materialize/measures.json b/experiments/us-support-mix-bakeoff-20260930/materialize/measures.json new file mode 100644 index 0000000000..11f409f661 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/materialize/measures.json @@ -0,0 +1,424 @@ +[ + "bakeoff_concept_00000", + "bakeoff_concept_00001", + "bakeoff_concept_00002", + "bakeoff_concept_00003", + "bakeoff_concept_00004", + "bakeoff_concept_00005", + "bakeoff_concept_00006", + "bakeoff_concept_00007", + "bakeoff_concept_00008", + "bakeoff_concept_00009", + "bakeoff_concept_00010", + "bakeoff_concept_00011", + "bakeoff_concept_00012", + "bakeoff_concept_00013", + "bakeoff_concept_00014", + "bakeoff_concept_00015", + "bakeoff_concept_00016", + "bakeoff_concept_00017", + "bakeoff_concept_00018", + "bakeoff_concept_00019", + "bakeoff_concept_00020", + "bakeoff_concept_00021", + "bakeoff_concept_00022", + "bakeoff_concept_00023", + "bakeoff_concept_00024", + "bakeoff_concept_00025", + "bakeoff_concept_00026", + "bakeoff_concept_00027", + "bakeoff_concept_00028", + "bakeoff_concept_00029", + "bakeoff_concept_00030", + "bakeoff_concept_00031", + "bakeoff_concept_00032", + "bakeoff_concept_00033", + "bakeoff_concept_00034", + "bakeoff_concept_00035", + "bakeoff_concept_00036", + "bakeoff_concept_00037", + "bakeoff_concept_00038", + "bakeoff_concept_00039", + "bakeoff_concept_00040", + "bakeoff_concept_00041", + "bakeoff_concept_00042", + "bakeoff_concept_00043", + "bakeoff_concept_00044", + "bakeoff_concept_00045", + "bakeoff_concept_00046", + "bakeoff_concept_00047", + "bakeoff_concept_00048", + "bakeoff_concept_00049", + "bakeoff_concept_00050", + "bakeoff_concept_00051", + "bakeoff_concept_00052", + "bakeoff_concept_00053", + "bakeoff_concept_00054", + "bakeoff_concept_00055", + "bakeoff_concept_00056", + "bakeoff_concept_00057", + "bakeoff_concept_00058", + "bakeoff_concept_00059", + "bakeoff_concept_00060", + "bakeoff_concept_00061", + "bakeoff_concept_00062", + "bakeoff_concept_00063", + "bakeoff_concept_00064", + "bakeoff_concept_00065", + "bakeoff_concept_00066", + "bakeoff_concept_00067", + "bakeoff_concept_00068", + "bakeoff_concept_00069", + "bakeoff_concept_00070", + "bakeoff_concept_00071", + "bakeoff_concept_00072", + "bakeoff_concept_00073", + "bakeoff_concept_00074", + "bakeoff_concept_00075", + "bakeoff_concept_00076", + "bakeoff_concept_00077", + "bakeoff_concept_00078", + "bakeoff_concept_00079", + "bakeoff_concept_00080", + "bakeoff_concept_00081", + "bakeoff_concept_00082", + "bakeoff_concept_00083", + "bakeoff_concept_00084", + "bakeoff_concept_00085", + "bakeoff_concept_00086", + "bakeoff_concept_00087", + "bakeoff_concept_00088", + "bakeoff_concept_00089", + "bakeoff_concept_00090", + "bakeoff_concept_00091", + "bakeoff_concept_00092", + "bakeoff_concept_00093", + "bakeoff_concept_00094", + "bakeoff_concept_00095", + "bakeoff_concept_00096", + "bakeoff_concept_00097", + "bakeoff_concept_00098", + "bakeoff_concept_00099", + "bakeoff_concept_00100", + "bakeoff_concept_00101", + "bakeoff_concept_00102", + "bakeoff_concept_00103", + "bakeoff_concept_00104", + "bakeoff_concept_00105", + "bakeoff_concept_00106", + "bakeoff_concept_00107", + "bakeoff_concept_00108", + "bakeoff_concept_00109", + "bakeoff_concept_00110", + "bakeoff_concept_00111", + "bakeoff_concept_00112", + "bakeoff_concept_00113", + "bakeoff_concept_00114", + "bakeoff_concept_00115", + "bakeoff_concept_00116", + "bakeoff_concept_00117", + "bakeoff_concept_00118", + "bakeoff_concept_00119", + "bakeoff_concept_00120", + "bakeoff_concept_00121", + "bakeoff_concept_00122", + "bakeoff_concept_00123", + "bakeoff_concept_00124", + "bakeoff_concept_00125", + "bakeoff_concept_00126", + "bakeoff_concept_00127", + "bakeoff_concept_00128", + "bakeoff_concept_00129", + "bakeoff_concept_00130", + "bakeoff_concept_00131", + "bakeoff_concept_00132", + "bakeoff_concept_00133", + "bakeoff_concept_00134", + "bakeoff_concept_00135", + "bakeoff_concept_00136", + "bakeoff_concept_00137", + "bakeoff_concept_00138", + "bakeoff_concept_00139", + "bakeoff_concept_00140", + "bakeoff_concept_00141", + "bakeoff_concept_00142", + "bakeoff_concept_00143", + "bakeoff_concept_00144", + "bakeoff_concept_00145", + "bakeoff_concept_00146", + "bakeoff_concept_00147", + "bakeoff_concept_00148", + "bakeoff_concept_00149", + "bakeoff_concept_00150", + "bakeoff_concept_00151", + "bakeoff_concept_00152", + "bakeoff_concept_00153", + "bakeoff_concept_00154", + "bakeoff_concept_00155", + "bakeoff_concept_00156", + "bakeoff_concept_00157", + "bakeoff_concept_00158", + "bakeoff_concept_00159", + "bakeoff_concept_00160", + "bakeoff_concept_00161", + "bakeoff_concept_00162", + "bakeoff_concept_00163", + "bakeoff_concept_00164", + "bakeoff_concept_00165", + "bakeoff_concept_00166", + "bakeoff_concept_00167", + "bakeoff_concept_00168", + "bakeoff_concept_00169", + "bakeoff_concept_00170", + "bakeoff_concept_00171", + "bakeoff_concept_00172", + "bakeoff_concept_00173", + "bakeoff_concept_00174", + "bakeoff_concept_00175", + "bakeoff_concept_00176", + "bakeoff_concept_00177", + "bakeoff_concept_00178", + "bakeoff_concept_00179", + "bakeoff_concept_00180", + "bakeoff_concept_00181", + "bakeoff_concept_00182", + "bakeoff_concept_00183", + "bakeoff_concept_00184", + "bakeoff_concept_00185", + "bakeoff_concept_00186", + "bakeoff_concept_00187", + "bakeoff_concept_00188", + "bakeoff_concept_00189", + "bakeoff_concept_00190", + "bakeoff_concept_00191", + "bakeoff_concept_00192", + "bakeoff_concept_00193", + "bakeoff_concept_00194", + "bakeoff_concept_00195", + "bakeoff_concept_00196", + "bakeoff_concept_00197", + "bakeoff_concept_00198", + "bakeoff_concept_00199", + "bakeoff_concept_00200", + "bakeoff_concept_00201", + "bakeoff_concept_00202", + "bakeoff_concept_00203", + "bakeoff_concept_00204", + "bakeoff_concept_00205", + "bakeoff_concept_00206", + "bakeoff_concept_00207", + "bakeoff_concept_00208", + "bakeoff_concept_00209", + "bakeoff_concept_00210", + "bakeoff_concept_00211", + "bakeoff_concept_00212", + "bakeoff_concept_00213", + "bakeoff_concept_00214", + "bakeoff_concept_00215", + "bakeoff_concept_00216", + "bakeoff_concept_00217", + "bakeoff_concept_00218", + "bakeoff_concept_00219", + "bakeoff_concept_00220", + "bakeoff_concept_00221", + "bakeoff_concept_00222", + "bakeoff_concept_00223", + "bakeoff_concept_00224", + "bakeoff_concept_00225", + "bakeoff_concept_00226", + "bakeoff_concept_00227", + "bakeoff_concept_00228", + "bakeoff_concept_00229", + "bakeoff_concept_00230", + "bakeoff_concept_00231", + "bakeoff_concept_00232", + "bakeoff_concept_00233", + "bakeoff_concept_00234", + "bakeoff_concept_00235", + "bakeoff_concept_00236", + "bakeoff_concept_00237", + "bakeoff_concept_00238", + "bakeoff_concept_00239", + "bakeoff_concept_00240", + "bakeoff_concept_00241", + "bakeoff_concept_00242", + "bakeoff_concept_00243", + "bakeoff_concept_00244", + "bakeoff_concept_00245", + "bakeoff_concept_00246", + "bakeoff_concept_00247", + "bakeoff_concept_00248", + "bakeoff_concept_00249", + "bakeoff_concept_00250", + "bakeoff_concept_00251", + "bakeoff_concept_00252", + "bakeoff_concept_00253", + "bakeoff_concept_00254", + "bakeoff_concept_00255", + "bakeoff_concept_00256", + "bakeoff_concept_00257", + "bakeoff_concept_00258", + "bakeoff_concept_00259", + "bakeoff_concept_00260", + "bakeoff_concept_00261", + "bakeoff_concept_00262", + "bakeoff_concept_00263", + "bakeoff_concept_00264", + "bakeoff_concept_00265", + "bakeoff_concept_00266", + "bakeoff_concept_00267", + "bakeoff_concept_00268", + "bakeoff_concept_00269", + "bakeoff_concept_00270", + "bakeoff_concept_00271", + "bakeoff_concept_00272", + "bakeoff_concept_00273", + "bakeoff_concept_00274", + "bakeoff_concept_00275", + "bakeoff_concept_00276", + "bakeoff_concept_00277", + "bakeoff_concept_00278", + "bakeoff_concept_00279", + "bakeoff_concept_00280", + "bakeoff_concept_00281", + "bakeoff_concept_00282", + "bakeoff_concept_00283", + "bakeoff_concept_00284", + "bakeoff_concept_00285", + "bakeoff_concept_00286", + "bakeoff_concept_00287", + "bakeoff_concept_00288", + "bakeoff_concept_00289", + "bakeoff_concept_00290", + "bakeoff_concept_00291", + "bakeoff_concept_00292", + "bakeoff_concept_00293", + "bakeoff_concept_00294", + "bakeoff_concept_00295", + "bakeoff_concept_00296", + "bakeoff_concept_00297", + "bakeoff_concept_00298", + "bakeoff_concept_00299", + "bakeoff_concept_00300", + "bakeoff_concept_00301", + "bakeoff_concept_00302", + "bakeoff_concept_00303", + "bakeoff_concept_00304", + "bakeoff_concept_00305", + "bakeoff_concept_00306", + "bakeoff_concept_00307", + "bakeoff_concept_00308", + "bakeoff_concept_00309", + "bakeoff_concept_00310", + "bakeoff_concept_00311", + "bakeoff_concept_00312", + "bakeoff_concept_00313", + "bakeoff_concept_00314", + "bakeoff_concept_00315", + "bakeoff_concept_00316", + "bakeoff_concept_00317", + "bakeoff_concept_00318", + "bakeoff_concept_00319", + "bakeoff_concept_00320", + "bakeoff_concept_00321", + "bakeoff_concept_00322", + "bakeoff_concept_00323", + "bakeoff_concept_00324", + "bakeoff_concept_00325", + "bakeoff_concept_00326", + "bakeoff_concept_00327", + "bakeoff_concept_00328", + "bakeoff_concept_00329", + "bakeoff_concept_00330", + "bakeoff_concept_00331", + "bakeoff_concept_00332", + "bakeoff_concept_00333", + "bakeoff_concept_00334", + "bakeoff_concept_00335", + "bakeoff_concept_00336", + "bakeoff_concept_00337", + "bakeoff_concept_00338", + "bakeoff_concept_00339", + "bakeoff_concept_00340", + "bakeoff_concept_00341", + "bakeoff_concept_00342", + "bakeoff_concept_00343", + "bakeoff_concept_00344", + "bakeoff_concept_00345", + "bakeoff_concept_00346", + "bakeoff_concept_00347", + "bakeoff_concept_00348", + "bakeoff_concept_00349", + "bakeoff_concept_00350", + "bakeoff_concept_00351", + "bakeoff_concept_00352", + "bakeoff_concept_00353", + "bakeoff_concept_00354", + "bakeoff_concept_00355", + "bakeoff_concept_00356", + "bakeoff_concept_00357", + "bakeoff_concept_00358", + "bakeoff_concept_00359", + "bakeoff_concept_00360", + "bakeoff_concept_00361", + "bakeoff_concept_00362", + "bakeoff_concept_00363", + "bakeoff_concept_00364", + "bakeoff_concept_00365", + "bakeoff_concept_00366", + "bakeoff_concept_00367", + "bakeoff_concept_00368", + "bakeoff_concept_00369", + "bakeoff_concept_00370", + "bakeoff_concept_00371", + "bakeoff_concept_00372", + "bakeoff_concept_00373", + "bakeoff_concept_00374", + "bakeoff_concept_00375", + "bakeoff_concept_00376", + "bakeoff_concept_00377", + "bakeoff_concept_00378", + "bakeoff_concept_00379", + "bakeoff_concept_00380", + "bakeoff_concept_00381", + "bakeoff_concept_00382", + "bakeoff_concept_00383", + "bakeoff_concept_00384", + "bakeoff_concept_00385", + "bakeoff_concept_00386", + "bakeoff_concept_00387", + "bakeoff_concept_00388", + "bakeoff_concept_00389", + "bakeoff_concept_00390", + "bakeoff_concept_00391", + "bakeoff_concept_00392", + "bakeoff_concept_00393", + "bakeoff_concept_00394", + "bakeoff_concept_00395", + "bakeoff_concept_00396", + "bakeoff_concept_00397", + "bakeoff_concept_00398", + "bakeoff_concept_00399", + "bakeoff_concept_00400", + "bakeoff_concept_00401", + "bakeoff_concept_00402", + "bakeoff_concept_00403", + "bakeoff_concept_00404", + "bakeoff_concept_00405", + "bakeoff_concept_00406", + "bakeoff_concept_00407", + "bakeoff_concept_00408", + "bakeoff_concept_00409", + "bakeoff_concept_00410", + "bakeoff_concept_00411", + "bakeoff_concept_00412", + "bakeoff_concept_00413", + "bakeoff_concept_00414", + "bakeoff_concept_00415", + "bakeoff_concept_00416", + "bakeoff_concept_00417", + "bakeoff_concept_00418", + "bakeoff_report_spm_poor_persons", + "bakeoff_report_spm_poor_children", + "state_income_tax" +] \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/memo_tables.py b/experiments/us-support-mix-bakeoff-20260930/memo_tables.py new file mode 100644 index 0000000000..02c649c46d --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/memo_tables.py @@ -0,0 +1,70 @@ +"""Build the memo's results tables from the report receipts (no hand copying). + +Reads dimensions_by_arm.csv; arms with three ACS draws (the 300k one- and +three-year ACS arms) are shown as the mean of the draws. +Run: uv run python experiments/us-support-mix-bakeoff-20260930/memo_tables.py +""" + +from pathlib import Path + +import pandas as pd + +HERE = Path(__file__).resolve().parent +ROWS = { + "national": [ + ("CPS 2022–24 only", "natural.cps2022-2023-2024.acs100"), + ("CPS 2022–24 + clones to 300k", "b300k.cps2022-2023-2024.acs000"), + ("CPS 2024 + ACS to 300k (3 draws)", "b300k.cps2024.acs100"), + ("CPS 2023–24 + ACS to 300k", "b300k.cps2023-2024.acs100"), + ("**CPS 2022–24 + ACS to 300k (3 draws)**", "b300k.cps2022-2023-2024.acs100"), + ("ACS only, 300k", "b300k.cps0.acs100"), + ("CPS 2022–24 + 50/50 to 600k", "b600k.cps2022-2023-2024.acs050"), + ("CPS 2022–24 + ACS to 600k", "b600k.cps2022-2023-2024.acs100"), + ("CPS 2022–24 + ACS to 1.2M", "b1200k.cps2022-2023-2024.acs100"), + ], + "local": [ + ("CPS 2022–24 only", "natural.cps2022-2023-2024.acs100"), + ("CPS 2022–24 + clones to 600k", "b600k.cps2022-2023-2024.acs000"), + ("CPS 2022–24 + clones to 1.2M", "b1200k.cps2022-2023-2024.acs000"), + ("CPS 2022–24 + 50/50 to 600k", "b600k.cps2022-2023-2024.acs050"), + ("CPS 2022–24 + ACS to 600k", "b600k.cps2022-2023-2024.acs100"), + ("**CPS 2022–24 + ACS to 1.2M**", "b1200k.cps2022-2023-2024.acs100"), + ("CPS 2024 + ACS to 1.2M", "b1200k.cps2024.acs100"), + ("ACS only, 1.2M", "b1200k.cps0.acs100"), + ], +} +COLUMNS = [ + ("cps_native_weighted.state", "CPS-native, state"), + ("cps_native_weighted.cd", "CPS-native, CD"), + ("income_components.state", "Income, state"), + ("tax_items.state", "Tax items, state"), + ("program_receipt.state", "Program receipt, state"), + ("demographics_pep.state", "Age (PEP), state"), +] + + +def main() -> None: + table = pd.read_csv(HERE / "dimensions_by_arm.csv") + table["stem"] = table["arm"].str.replace(r"\.s\d+$", "", regex=True) + for product, rows in ROWS.items(): + print(f"### {product}\n") + head = "| Arm | Rows | ESS | " + " | ".join(label for _, label in COLUMNS) + " | ACS-native state / CD / county |" + print(head) + print("|" + "---|" * (head.count("|") - 1)) + for label, stem in rows: + group = table[(table["product"] == product) & (table["stem"] == stem)] + if "draws" not in label: + group = group[group["seed"] == 0] + mean = group.mean(numeric_only=True) + cells = [f"{mean[c]:.3f}" for c, _ in COLUMNS] + acs = " / ".join(f"{mean[f'acs_native.{lv}']:.3f}" for lv in ("state", "cd", "county")) + print(f"| {label} | {int(mean['rows']):,} | {mean['ess_distinct']:,.0f} | " + " | ".join(cells) + f" | {acs} |") + spread = table[(table["product"] == product) & table["stem"].eq(rows[4][1] if product == "national" else "b300k.cps2022-2023-2024.acs100")] + sd = spread.std(numeric_only=True) + cells = [f"{sd[c]:.3f}" for c, _ in COLUMNS] + acs = " / ".join(f"{sd[f'acs_native.{lv}']:.3f}" for lv in ("state", "cd", "county")) + print("| SD across 3 draws (300k, 2022–24) | | | " + " | ".join(cells) + f" | {acs} |\n") + + +if __name__ == "__main__": + main() diff --git a/experiments/us-support-mix-bakeoff-20260930/replicate_mean.csv b/experiments/us-support-mix-bakeoff-20260930/replicate_mean.csv new file mode 100644 index 0000000000..511937c908 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/replicate_mean.csv @@ -0,0 +1,5 @@ +product,cps_years,cps_native_weighted.state,cps_native_weighted.cd,income_components.state,income_components.cd,tax_items.state,tax_items.cd,program_receipt.state,demographics_pep.state,acs_native.state,acs_native.cd,acs_native.county +local,1,0.11894318079650662,0.19172382198188176,0.22690030366787017,0.28799363964692565,0.13663843894794359,0.2274115950024009,0.28775966790796403,0.15847767825987774,0.07958422347466958,0.15258728495547655,0.2204873690953388 +local,3,0.1121404782384457,0.18847554352416773,0.22872348511799676,0.28100577107478103,0.10304270496916955,0.2174572238251428,0.23700948112290268,0.1656717039231341,0.10976954935966093,0.20412753502506617,0.2505918358640243 +national,1,0.11719139228491672,0.3000152156752607,0.24925425794021458,0.3608241822139546,0.12963301172451341,0.37112420444172084,0.24074475062447478,0.15927236712902587,0.0856279370641836,0.16629675307597977,0.2549953962695645 +national,3,0.11344403854754743,0.29060085792301577,0.22408180624594445,0.34573459904498427,0.1132993838096618,0.35831347483639103,0.19829652894282138,0.16329762772247428,0.11002638468920033,0.18828742304459464,0.2586466421697818 diff --git a/experiments/us-support-mix-bakeoff-20260930/replicate_spread.csv b/experiments/us-support-mix-bakeoff-20260930/replicate_spread.csv index e0594c1450..e255404d45 100644 --- a/experiments/us-support-mix-bakeoff-20260930/replicate_spread.csv +++ b/experiments/us-support-mix-bakeoff-20260930/replicate_spread.csv @@ -1,7 +1,5 @@ -product,cps_years,income_components.state,income_components.cd,tax_items.state,tax_items.cd,program_receipt.state,demographics_pep.state,acs_native.state,acs_native.cd,acs_native.county -local,1,0.006379544884992923,0.01156960527790735,0.003656044965125471,0.0020583177504610857,0.024184288036940685,0.008761082783022367,0.001683529225883761,0.0013767259104605037,0.001390694195340752 -local,2,,,,,,,,, -local,3,0.006572927521882116,0.002187831181070142,0.002166421431950712,0.0019497770531794129,0.00569989826264732,0.001569968197074798,0.00026181889597088774,0.001134481468404473,0.0005354853331227933 -national,1,0.0015542320943534686,0.007985798596900882,0.002777874282566795,0.0032961036113893245,0.040946827732212004,0.007650750981897314,0.001119675876380039,0.002352977925518973,0.001579773700662283 -national,2,,,,,,,,, -national,3,0.00651339016838397,0.007025408080724732,0.00179743188387736,0.005016700663172885,0.014130265887185979,0.005495391504626003,0.00048329502674169237,0.0013786966104581211,0.0004430957410563978 +product,cps_years,cps_native_weighted.state,cps_native_weighted.cd,income_components.state,income_components.cd,tax_items.state,tax_items.cd,program_receipt.state,demographics_pep.state,acs_native.state,acs_native.cd,acs_native.county +local,1,0.0021382955135564566,0.0033238529093177044,0.006379544884992923,0.01156960527790735,0.003656044965125471,0.0020583177504610857,0.024184288036940685,0.008761082783022367,0.00202796215204033,0.001991683419148612,0.0021399579716624606 +local,3,0.000951584189827157,0.0018887321532608471,0.006572927521882116,0.002187831181070142,0.002166421431950712,0.0019497770531794129,0.00569989826264732,0.001569968197074798,0.00022579896378769324,0.0016328598786634271,0.00048709241981480315 +national,1,0.0021202551404598457,0.001971241618144151,0.0015542320943534686,0.007985798596900882,0.002777874282566795,0.0032961036113893245,0.040946827732212004,0.007650750981897314,0.0014198978206555368,0.0020745229020417114,0.003164172245521262 +national,3,0.000279345580907213,0.0022284614766071424,0.00651339016838397,0.007025408080724732,0.00179743188387736,0.005016700663172885,0.014130265887185979,0.005495391504626003,0.0006413096855843224,0.0012720996328500355,0.002217899701858923 diff --git a/experiments/us-support-mix-bakeoff-20260930/spm_flags.json b/experiments/us-support-mix-bakeoff-20260930/spm_flags.json new file mode 100644 index 0000000000..ccbe6974e9 --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/spm_flags.json @@ -0,0 +1,9 @@ +{ + "acs_households": 1531614, + "group_quarters_households": 183206, + "group_quarters_share": 0.11961630019051797, + "rule": "age >= 18 or (age >= 15 and (is_household_head or is_household_spouse)), per SPM unit", + "spm_zero_adult_households": 5246, + "spm_zero_adult_in_group_quarters": 5246, + "spm_zero_adult_share": 0.003425144977781608 +} \ No newline at end of file diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py b/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py index 24d23feed7..5b268890d2 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py @@ -60,6 +60,31 @@ def test_hash_uniform_matches_the_release_primitive() -> None: hash_uniform("key", salt="") +#: (key, salt, draw) computed 2026-09-30 by the holdout port branch's own +#: ``microcosm.build.holdout.hash_holdout_uniform`` (us-target-roles-holdout +#: working copy), so the mirror is checked against that implementation, not +#: only against a re-typed formula. +PORT_BRANCH_FIXTURES = ( + ("irs_soi.congressional_district_2022.all_returns.wv_total.net_capital_gains_returns", + "microcosm.us.target_split.v1.sealed", 0.568527776442365), + ("irs_soi.congressional_district_2022.all_returns.wv_total.net_capital_gains_returns", + "microcosm.us.target_split.v1.holdout", 0.2332024720189108), + ("census_pep.national_resident_population_age.20_to_24.population", + "microcosm.us.target_split.v1.sealed", 0.6698038027150819), + ("census_pep.national_resident_population_age.20_to_24.population", + "microcosm.us.target_split.v1.holdout", 0.888848284264564), + ("k0", "microcosm.us.target_split.v1.sealed", 0.13405297471660024), + ("k0", "microcosm.us.target_split.v1.holdout", 0.994075647032073), + ("usda_snap.state.06.households", "microcosm.us.target_split.v1.sealed", 0.20260546634959004), + ("usda_snap.state.06.households", "microcosm.us.target_split.v1.holdout", 0.9762431428888598), +) + + +@pytest.mark.parametrize(("key", "salt", "draw"), PORT_BRANCH_FIXTURES) +def test_hash_uniform_matches_the_port_branch_fixtures(key: str, salt: str, draw: float) -> None: + assert hash_uniform(key, salt=salt) == draw + + @given(st.text(min_size=1, max_size=40), st.text(min_size=1, max_size=20)) def test_hash_uniform_is_a_unit_interval_draw(key: str, salt: str) -> None: u = hash_uniform(key, salt=salt) diff --git a/tools/bakeoff_us_support_mix.py b/tools/bakeoff_us_support_mix.py index 23d814dbcb..83f0c999a6 100644 --- a/tools/bakeoff_us_support_mix.py +++ b/tools/bakeoff_us_support_mix.py @@ -475,6 +475,28 @@ def _write_shard(path: Path, tables: dict[str, pd.DataFrame], weights: np.ndarra tmp.replace(path) +def spm_zero_adult_households(tables: dict[str, pd.DataFrame]) -> np.ndarray: + """Households with an SPM unit the pinned engine has no adult for. + + spm_calculator's policyengine adapter counts a member as an adult when + ``age >= 18`` or ``age >= 15`` with ``is_spm_independent_minor_role``, + whose formula is ``is_household_head | is_household_spouse``; a unit with + no such member raises ``SPMInputError``. Returns one flag per household + row, in household-table order. + """ + hh, person = tables["household"], tables["person"] + age = pd.to_numeric(person["age"], errors="coerce").fillna(0).to_numpy() + role = np.zeros(len(person), dtype=bool) + for column in ("is_household_head", "is_household_spouse"): + if column in person: + role |= pd.Series(person[column]).fillna(False).astype(bool).to_numpy() + adult = (age >= 18) | ((age >= 15) & role) + unit_adults = pd.Series(adult).groupby(person["person_spm_unit_id"].to_numpy()).sum() + empty_units = unit_adults.index[unit_adults.to_numpy() == 0] + flagged = person.loc[person["person_spm_unit_id"].isin(empty_units), "person_household_id"] + return np.isin(hh["household_id"].to_numpy(), flagged.to_numpy()) + + def _row_index_columns(tables: dict[str, pd.DataFrame], source: str) -> pd.DataFrame: """Per-household identity, geography and ACS-native evaluation columns.""" hh = tables["household"] @@ -525,6 +547,7 @@ def per_household(values) -> np.ndarray: out["channel"] = "acs" out["clone_index"] = 0 out["group_quarters"] = pd.to_numeric(hh["TYPEHUGQ"], errors="coerce").fillna(1).to_numpy() != 1 + out["spm_zero_adult_unit"] = spm_zero_adult_households(tables) return out @@ -610,10 +633,41 @@ def do_shard(args) -> None: "source": args.source, "h5": str(args.h5), "h5_sha256": sha256_file(args.h5), "design_h5": str(args.design_h5) if args.design_h5 else None, "shards": len(index_parts), "households": len(index), + "group_quarters_households": int(index["group_quarters"].sum()), + "spm_zero_adult_households": int(index.get("spm_zero_adult_unit", pd.Series(dtype=bool)).sum()), + "spm_zero_adult_in_group_quarters": int( + (index.get("spm_zero_adult_unit", False) & index["group_quarters"]).sum() + ), "wall_s": round(time.time() - started, 1), "peak_rss_gb": round(peak_rss_gb(), 2), }) +def do_spm_flags(args) -> None: + """Recompute the SPM zero-adult flag on existing ACS shards (receipt).""" + rows = pd.read_parquet(args.work / "rows_acs.parquet") + flag = np.zeros(len(rows), dtype=bool) + for shard in sorted(rows["shard"].unique()): + with open(args.work / "shards" / "acs" / f"shard_{shard:03d}.pkl", "rb") as handle: + tables = pickle.load(handle)["tables"] + index = np.flatnonzero(rows["shard"].to_numpy() == shard) + if not np.array_equal(rows["household_id"].to_numpy()[index], tables["household"]["household_id"].to_numpy()): + raise SystemExit(f"shard {shard}: row index and shard disagree on household order") + flag[index] = spm_zero_adult_households(tables) + rows["spm_zero_adult_unit"] = flag + rows.to_parquet(args.work / "rows_acs.parquet", index=False) + gq = rows["group_quarters"].to_numpy() + write_json(args.work / "spm_flags.json", { + "acs_households": int(len(rows)), + "group_quarters_households": int(gq.sum()), + "group_quarters_share": float(gq.mean()), + "spm_zero_adult_households": int(flag.sum()), + "spm_zero_adult_share": float(flag.mean()), + "spm_zero_adult_in_group_quarters": int((flag & gq).sum()), + "rule": "age >= 18 or (age >= 15 and (is_household_head or is_household_spouse)), per SPM unit", + }) + log(f"spm flags: {int(flag.sum())} households ({int((flag & gq).sum())} in group quarters)") + + # ------------------------------------------------------------------ materialize @@ -681,6 +735,28 @@ def _materialize_frame(frame, concept_specs, *, summary_path: Path | None, batch return household, [spec.measure for spec in registry.specs], compilation, dropped +def arm_inputs(work: Path, truth: Path, epochs: int) -> dict: + """Digests of everything an arm receipt depends on, so stale receipts rerun.""" + return { + "targets": sha256_file(work / "targets.parquet"), + "rows_cps": sha256_file(work / "rows_cps.parquet"), + "rows_acs": sha256_file(work / "rows_acs.parquet"), + "truth": sha256_file(truth), + "concepts_cps": _concept_digest(work, "cps"), + "concepts_acs": _concept_digest(work, "acs"), + "epochs": int(epochs), + } + + +def _concept_digest(work: Path, source: str) -> str: + digest = hashlib.sha256() + for path in sorted((work / "concepts" / source).glob("shard_*.npz")): + if not path.name.endswith(".tmp.npz"): + digest.update(path.name.encode()) + digest.update(str(path.stat().st_size).encode()) + return digest.hexdigest() + + def acs_rank(work: Path) -> np.ndarray: """Each ACS row's position in the fixed salted selection order (cached, keyed by a digest of the row index's unit-key sequence).""" @@ -820,6 +896,8 @@ def do_diffcheck(args) -> None: cd = pd.to_numeric(direct["congressional_district_geoid"]).to_numpy() worst, checked, skipped = 0.0, 0, 0 per_family = {} + if targets["name"].duplicated().any(): + raise SystemExit("target names are not unique; diffcheck keys on them") by_name = targets.set_index("name") for spec in sample_specs: row = by_name.loc[spec.name] @@ -1053,10 +1131,15 @@ def do_arm(args) -> None: arm = parse_arm(args.arm) out = args.work / "arms" / args.product / f"{arm.label}.json" previous = json.loads(out.read_text()) if out.exists() else None - if previous is not None and previous.get("scored_all_levels") and not args.force: + inputs = arm_inputs(args.work, args.truth, args.epochs) + rescore = ( + previous is not None and out.with_suffix(".weights.npy").exists() and not args.force + and (args.rescore or not previous.get("scored_all_levels")) + ) + if (previous is not None and previous.get("scored_all_levels") and previous.get("inputs") == inputs + and not args.force and not args.rescore): log(f"{out} exists") return - rescore = previous is not None and out.with_suffix(".weights.npy").exists() and not args.force wait_for_memory(args.min_available_gb) import torch @@ -1136,6 +1219,8 @@ def do_arm(args) -> None: benchmark = float(release_tool().US_BASE_PERSON_POPULATION_BENCHMARK) mass_factor = benchmark / float(selected["persons"].to_numpy() @ w0) w0 = w0 * mass_factor + rows_digest = hashlib.sha256(pd.util.hash_pandas_object( + selected[["source", "row", "copy", "cd_geoid"]], index=False).to_numpy().tobytes()).hexdigest() # ---------------- concept values for the selected rows stores = {} blocks = [] @@ -1200,7 +1285,7 @@ def do_arm(args) -> None: if rescore: # Re-score saved weights (a scoring change, no re-solve). weights = np.load(out.with_suffix(".weights.npy")).astype(np.float64) - if len(weights) != len(w0): + if len(weights) != len(w0) or previous.get("rows_digest", rows_digest) != rows_digest: raise SystemExit(f"{arm.label}: saved weights do not match the arm's rows") trajectory = np.array([previous["train"]["loss_initial"], previous["train"]["loss_final"]]) else: @@ -1283,13 +1368,16 @@ def errors(matrix, target_values, w): float(est0_map.get(geo_code, 0.0)), float(est1_map.get(geo_code, 0.0)))) acs_eval = pd.DataFrame(acs_eval, columns=["level", "measure", "geo", "truth", "estimate_initial", "estimate"]) report = {} + # Census puts ACS group quarters outside the SPM universe; report the + # rates over household rows only. + in_universe = ~selected["group_quarters"].astype(bool).to_numpy() for name in REPORT_SPECS: measure = f"bakeoff_{name.replace('.', '_')}" if measure in measure_col: - col = values[:, measure_col[measure]].toarray().ravel() + col = values[:, measure_col[measure]].toarray().ravel() * in_universe report[name] = {"initial": float(col @ w0), "calibrated": float(col @ weights)} - persons = selected["persons"].to_numpy() - children = selected["persons_0_17"].to_numpy() + persons = selected["persons"].to_numpy() * in_universe + children = selected["persons_0_17"].to_numpy() * in_universe if "report.spm_poor_persons" in report: report["spm_rate"] = {k: report["report.spm_poor_persons"][k] / float(persons @ w) for k, w in (("initial", w0), ("calibrated", weights))} report["spm_child_rate"] = {k: report["report.spm_poor_children"][k] / float(children @ w) for k, w in (("initial", w0), ("calibrated", weights))} @@ -1322,9 +1410,15 @@ def errors(matrix, target_values, w): "report_only": report, "weights": {"mass": float(weights.sum()), "population_mass_factor": mass_factor, "max_ratio": float((weights / w0).max()), "min_ratio": float((weights / w0).min())}, - "runtime": {"wall_s": round(time.time() - started, 1), "solve_s": round(solve_s, 1), - "epochs": args.epochs, "threads": args.threads, - "peak_rss_gb": round(peak_rss_gb(), 2)}, + "runtime": ( + {**previous["runtime"], "rescore_wall_s": round(time.time() - started, 1), + "rescore_peak_rss_gb": round(peak_rss_gb(), 2)} + if rescore else + {"wall_s": round(time.time() - started, 1), "solve_s": round(solve_s, 1), + "epochs": args.epochs, "threads": args.threads, "peak_rss_gb": round(peak_rss_gb(), 2)} + ), + "inputs": inputs, + "rows_digest": rows_digest, } write_json(out, receipt) np.save(out.with_suffix(".weights.npy"), weights.astype(np.float32)) @@ -1337,13 +1431,16 @@ def do_run_grid(args) -> None: import subprocess arms = [a.label for a in arm_grid(not args.no_largest)] + current = arm_inputs(args.work, args.truth, args.epochs) if args.only: arms = [a for a in arms if any(token in a for token in args.only.split(","))] for product in args.products.split(","): for label in arms: out = args.work / "arms" / product / f"{label}.json" - if out.exists() and json.loads(out.read_text()).get("scored_all_levels"): - continue + if out.exists(): + receipt = json.loads(out.read_text()) + if receipt.get("scored_all_levels") and receipt.get("inputs") == current: + continue wait_for_memory(args.min_available_gb) command = [sys.executable, str(Path(__file__).resolve()), "arm", "--work", str(args.work), "--arm", label, "--product", product, "--truth", str(args.truth), @@ -1370,7 +1467,10 @@ def do_report(args) -> None: records.append({**base, **t}) for a in receipt["acs_native"]: acs_records.append({**base, **a}) + loss_at = receipt["train"].get("loss_at", {}) summary.append({**base, **receipt["counts"], **{f"rows_{k}": v for k, v in receipt["rows"].items()}, + "rescored": bool(receipt.get("rescored")), + "loss_1000": loss_at.get("1000"), "loss_final": receipt["train"]["loss_final"], "distinct_households": receipt["distinct_households"], **{f"ess_{k}": v for k, v in receipt["ess"].items()}, "train_loss_final": receipt["train"]["loss_final"], @@ -1378,6 +1478,10 @@ def do_report(args) -> None: **{f"runtime_{k}": v for k, v in receipt["runtime"].items()}, **{f"report_{k}": (v["calibrated"] if isinstance(v, dict) else v) for k, v in receipt["report_only"].items()}}) + expected = {(product, arm.label) for product in ("national", "local") for arm in arm_grid(True)} + found = {(r["product"], r["arm"]) for r in summary} + if expected - found: + log(f"WARNING: {len(expected - found)} expected receipts missing: {sorted(expected - found)[:5]}") holdout = pd.DataFrame(records) acs_native = pd.DataFrame(acs_records) arms = pd.DataFrame(summary) @@ -1431,6 +1535,11 @@ def do_report(args) -> None: def _write_dimensions(out: Path, arms: pd.DataFrame, holdout: pd.DataFrame, acs_native: pd.DataFrame) -> None: """Per-dimension held-out error (seed-0 arms; replicate spread alongside).""" by_dim = holdout.groupby(["product", "arm", "dimension", "level"])["capped"].mean() + # The release's own objective: loss-weighted capped error over every + # CPS-native held-out target at a level (fixed full-surface weights). + native = holdout[holdout["dimension_group"] == "cps_native"] + weighted = native.groupby(["product", "arm", "level"]).apply( + lambda g: np.average(g["capped"], weights=g["loss_weight"])) acs = acs_native[acs_native["measure"].isin(HEADLINE_ACS_MEASURES)].copy() acs["capped"] = acs["rel"].clip(upper=1.0) acs = acs.groupby(["product", "arm", "level"])["capped"].mean() @@ -1440,6 +1549,8 @@ def _write_dimensions(out: Path, arms: pd.DataFrame, holdout: pd.DataFrame, acs_ "cps_years": record.cps_years, "acs_fill_share": record.acs_fill_share, "seed": record.seed, "rows": record.rows_total, "ess_distinct": record.ess_distinct_households} + for level in ("state", "cd"): + row[f"cps_native_weighted.{level}"] = weighted.get((record.product, record.arm, level), np.nan) for dimension, level in DIMENSION_COLUMNS: row[f"{dimension}.{level}"] = by_dim.get((record.product, record.arm, dimension, level), np.nan) for level in ("state", "cd", "county"): @@ -1448,13 +1559,20 @@ def _write_dimensions(out: Path, arms: pd.DataFrame, holdout: pd.DataFrame, acs_ table = pd.DataFrame(rows).sort_values(["product", "budget", "cps_years", "acs_fill_share", "seed"]) table.to_csv(out / "dimensions_by_arm.csv", index=False) replicate = table[table["arm"].str.contains("b300k") & table["acs_fill_share"].eq(1.0) & table["cps_years"].gt(0)] - spread = replicate.groupby(["product", "cps_years"])[[c for c in table.columns if "." in c]].std() - spread.to_csv(out / "replicate_spread.csv") + groups = replicate.groupby(["product", "cps_years"]) + measures = [c for c in table.columns if "." in c] + seeded = [key for key, g in groups if g["seed"].nunique() > 1] + replicate = replicate.set_index(["product", "cps_years"]).loc[seeded].reset_index() + replicate.groupby(["product", "cps_years"])[measures].std().to_csv(out / "replicate_spread.csv") + replicate.groupby(["product", "cps_years"])[measures].mean().to_csv(out / "replicate_mean.csv") +#: Household-universe measures only: the age bands count group-quarters people +#: in both the truth and the ACS rows, and CPS rows have none, which would tilt +#: the average toward ACS arms. Age bands stay in acs_native_by_level_measure.csv. HEADLINE_ACS_MEASURES = ( "households", "owner", "renter", "rent_contract_annual_aggregate", - "real_estate_taxes_aggregate", "persons_in_households", "persons_0_17", "persons_65p", + "real_estate_taxes_aggregate", "persons_in_households", ) @@ -1530,7 +1648,8 @@ def main(argv=None) -> None: a.add_argument("--epochs", type=int, default=1_500) a.add_argument("--threads", type=int, default=6) a.add_argument("--exclude-gq", action="store_true") - a.add_argument("--force", action="store_true") + a.add_argument("--force", action="store_true", help="re-solve even if a receipt exists") + a.add_argument("--rescore", action="store_true", help="re-score saved weights without re-solving") a.add_argument("--min-available-gb", type=float, default=20.0) g = sub.add_parser("grid") g.add_argument("--no-largest", action="store_true") @@ -1543,6 +1662,8 @@ def main(argv=None) -> None: rg.add_argument("--only") rg.add_argument("--no-largest", action="store_true") rg.add_argument("--min-available-gb", type=float, default=20.0) + f = sub.add_parser("spm-flags") + f.add_argument("--work", type=Path, required=True) r = sub.add_parser("report") r.add_argument("--work", type=Path, required=True) r.add_argument("--out", type=Path, required=True) @@ -1550,7 +1671,7 @@ def main(argv=None) -> None: { "compile": do_compile, "shard": do_shard, "materialize": do_materialize, "diffcheck": do_diffcheck, "truth": do_truth, "arm": do_arm, "report": do_report, - "run-grid": do_run_grid, + "run-grid": do_run_grid, "spm-flags": do_spm_flags, "grid": lambda a: print("\n".join(arm.label for arm in arm_grid(not a.no_largest))), }[args.command](args) From 85b25e1f1817b8cc566c9f73a73287d3d53153a3 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 30 Sep 2026 08:26:20 -0400 Subject: [PATCH 11/15] Address review 3: staleness guards for reruns, noise-aware one- vs three-year readings - Arm receipts record only the inputs their arm reads (ACS-only arms skip the CPS rows and concepts), concept digests hash contents, and run-grid and report take --newest-year, so a 2023-2025 rerun keeps the ACS-only arms and re-solves the rest. - materialize refuses concept parts cut from another source h5 unless given --replace-stale; the concept store refuses them too. - Re-scoring saved weights requires the same rows digest and inputs; an explicit --rescore otherwise refuses, an implicit one re-solves. - run-grid exits non-zero when an arm fails; report refuses missing receipts unless --allow-missing; spm-flags leaves an unchanged row index alone; the SPM adult rule refuses a person table without role columns. - 13 driver tests; the weight test now checks within-year shape directly. - Memo: at 1.2M one and three CPS years are not separated on CPS-native measures and one year is better on ACS-native ones; more years cost the national file ACS-native accuracy; the 2020-21 allocation shares are the highest of seven years; loss drop 5.2%; rounding and clone-ratio fixes; receipt inputs disclosed as added after the solves. Co-Authored-By: Claude Opus 5.5 --- docs/us-support-mix-bakeoff.md | 110 ++++++---- .../us-support-mix-bakeoff-20260930/README.md | 5 + .../us/test_bakeoff_us_support_mix_tool.py | 195 ++++++++++++++++++ .../engine_free/us/test_us_support_mix.py | 8 + tools/bakeoff_us_support_mix.py | 192 +++++++++++++---- 5 files changed, 434 insertions(+), 76 deletions(-) create mode 100644 packages/microcosm-build/tests/engine_free/us/test_bakeoff_us_support_mix_tool.py diff --git a/docs/us-support-mix-bakeoff.md b/docs/us-support-mix-bakeoff.md index 9c4be5dfc9..d5f76e9729 100644 --- a/docs/us-support-mix-bakeoff.md +++ b/docs/us-support-mix-bakeoff.md @@ -40,12 +40,18 @@ trade-offs. Stopping at 300k is a cost call. Larger ACS fills keep lowering district error (0.291, 0.266, 0.244 at 300k, 600k, 1.2M) but leave state error flat - (0.113, 0.115, 0.113), keep raising state tax items (0.113, 0.116, 0.118) - and worsen state program receipt (0.198, 0.225, 0.239). The best state-level - arm is the 600k 50/50 fill (0.111; income 0.213, tax items 0.112, program - receipt 0.187) at 1,019,084 rows, 2.1 times the recommendation. If state tax - items and serving cost outweigh everything else, the three-year CPS-only - file remains the choice. + (0.113, 0.115, 0.113), edge state tax items up (0.113, 0.116, 0.118) and do + not help state program receipt (0.198, 0.225, 0.239; the 600k and 1.2M arms + are single draws, and only the 1.2M gap exceeds draw noise). The best + state-level arm is the 600k 50/50 fill (0.111; income 0.213, tax items + 0.112, program receipt 0.187) at 1,019,084 rows, 2.1 times the + recommendation. Against one CPS year plus ACS to 300k, three years buy state + income (0.249 to 0.224) and tax items (0.130 to 0.113) with ACS-native + accuracy (state 0.086 to 0.110, district 0.166 to 0.188). The + recommendation puts the CPS-native gains first; if ACS-native accuracy + matters as much for the national file, one year plus ACS is the + alternative. If state tax items and serving cost outweigh everything else, + the three-year CPS-only file remains the choice. - **CD and county local file: the newest three CPS years plus ACS households, not CPS location clones, to 1.2M source households.** That is 1,384,080 @@ -64,34 +70,48 @@ trade-offs. rows plus every ACS household), the three CPS years lower state CPS-native error from 0.120 to 0.112, state program receipt from 0.318 to 0.256 and state tax items from 0.127 to 0.117, and ACS-native error is no worse. - One CPS year instead of three ties on districts and ACS-native measures at - 1.2M and saves 123k rows (9%), but loses on state error (0.116 against - 0.112) and, at 300k where there are three draws of each, clearly so (0.119 - against 0.112). Three years also let the local file share the national - file's CPS support. - -- **More CPS years help the national file.** At 300k, one year against three - (three draws each): state income 0.249 against 0.224, tax items 0.130 - against 0.113, program receipt 0.241 against 0.198. In the local file the - effect is mixed: each CPS year displaces ACS households within the budget, - so tax items and program receipt improve while state income and ACS-native - measures get slightly worse. Income years 2020 and 2021 pass the - response-quality check, so a five-year pool is the next arm to run; it was - not run here (see Follow-ups). + One CPS year instead of three saves 123k rows (9%) at 1.2M. There the data + do not separate them on CPS-native measures: district error is level + (0.169 each), and the state gaps (0.116 against 0.112; tax items 0.123 + against 0.117; program receipt 0.278 against 0.256, single draws) sit + within the one-year arms' draw noise, or for state error at its edge. One + year is better on ACS-native state and district measures (0.072 and 0.136 + against 0.078 and 0.141). Three years win at 300k, where there are three + draws of each: clearly on state error (0.119 against 0.112) and tax items + (0.137 against 0.103), and just beyond draw noise on program receipt (0.288 + against 0.237). The three-year choice rests on that, on the national + evidence below, and on the local file sharing the national file's CPS + support. + +- **More CPS years improve CPS-native measures and cost ACS-native ones.** + Within a budget, each CPS year displaces ACS households. In the national + file at 300k, one year against three (three draws each): state income 0.249 + against 0.224 and tax items 0.130 against 0.113, both well beyond draw + noise; program receipt 0.241 against 0.198 is within the one-year arms' + draw noise (SD 0.041), and so is the loss-weighted state error (0.117 + against 0.113, SD 0.002). ACS-native error rises (state 0.086 to 0.110, + district 0.166 to 0.188; county level at 0.255 and 0.259). The local file at + 300k shows the same trade more strongly: tax items (0.137 to 0.103) and + program receipt (0.288 to 0.237) improve, state income is level, and + ACS-native error rises by a third or more (state 0.080 to 0.110, district + 0.153 to 0.204). At 1.2M the displacement is small (see above). Income + years 2020 and 2021 pass the response-quality check, so a five-year pool is + the next arm to run; it was not run here (see Follow-ups). - **Clones add geography and little else.** In the national file they leave every state measure where the CPS-only file had it. In both files they improve district measures slowly (national-file district CPS-native error 0.353, then 0.332 at 300k) and household ACS-native measures barely (local-file county 0.299, then 0.263 and 0.253 at 600k and 1.2M), at 1.3 to - 1.8 times the physical rows of an ACS fill of the same budget. + 2.0 times the physical rows of an ACS fill of the same budget (1.3 to 1.8 + for three-year clones). This matches the design note's reasoning. ACS rows carry real variation in what the ACS observes, so income components (the ACS records wages, self-employment, Social Security, retirement and interest, dividend and rental income), housing and local geography improve as ACS rows enter. Program receipt on ACS rows is imputed from CPS donors: beside three CPS years it -holds level at 131k ACS households, then worsens as the fill grows, and ACS +holds level at 131k ACS households, is clearly worse by 1.2M (0.239), and ACS alone at 300k scores 0.303. ## Results @@ -148,9 +168,10 @@ are in the receipts. capped error on held-out Census PEP state age bands is 0.066 at the starting weights and 0.168 after calibration, across all 60 calibrations (0.131 to 0.193). The design weights already carry Census age controls, and the solve -trades them away for its training targets. Arms differ by less than the trade -(national 0.159 to 0.176 in the table), so the ranking stands; the size of the -trade is a finding about the calibration objective, filed as a follow-up. +trades them away for its training targets. The age column is reported, not +ranked on: it does separate arms (national 0.159 to 0.176, draw SD 0.005), but +every arm pays the trade, and its size is a finding about the calibration +objective, filed as a follow-up. **Report only: SPM poverty** (never calibrated or gated). In the national product the SPM rate is 12.8% for the three-year CPS file, 12.2% for the @@ -173,11 +194,13 @@ imputation as much as the support. | Serving | proportional to physical rows: 484k national (+37% over CPS only), 1.38M local (−13% against today's local file) | Wall times were measured with the host at load 10 to 400 and compare only -within this run. Training loss still fell a median 5.5% between epochs 1,000 -and 1,500 (`arms.csv` has `loss_1000` and `loss_final`); every arm had the -same 1,500-epoch budget. For 22 arms first scored before scoring covered -every level, the receipts carry the solve peak restored from the grid log and -no solve wall time. +within this run. Training loss still fell a median 5.2% of its epoch-1,000 +value between epochs 1,000 and 1,500 (`arms.csv` has `loss_1000` and +`loss_final`); every arm had the same 1,500-epoch budget. For 22 arms first +scored before scoring covered every level, the receipts carry the solve peak +restored from the grid log and no solve wall time. Every receipt's `inputs` +digests were added after its solve, once the tool recorded them, from the +files then in place (`inputs_note` says so in each receipt). ## Design @@ -370,7 +393,7 @@ public-use archives; the response rates are Census's own. | 2018 (2019) | 68,345 | 67.6% | 24.2% | 21.3% | 64.5% | 1,723 | | 2019 (2020) | 60,460 | 61.1% | 23.8% | 21.3% | 66.4% | 1,563 | | 2020 (2021) | 62,850 | 65.0% | 22.4% | 22.6% | 65.8% | 10,915 | -| 2021 (2022) | 59,148 | 61.4% | 22.4% | 21.8% | 65.5% | 4,065 | +| 2021 (2022) | 59,148 | 61.4% | 22.4% | 21.8% | 65.4% | 4,065 | | 2022 (2023) | 56,839 | 59.6% | 21.9% | 21.7% | 65.9% | 1,225 | | 2023 (2024) | 56,251 | 59.3% | 20.7% | 21.0% | 65.6% | 1,360 | | 2024 (2025) | 55,762 | 60.1% | 19.3% | 21.5% | 65.1% | 1,400 | @@ -381,12 +404,13 @@ year's CPS ASEC Source and Accuracy statement. Imputation shares are record; 1–8 an allocated item). Household weights have a coefficient of variation of 0.598 to 0.610 and a Kish share of 0.729 to 0.737 in every year. The public-use archives give whole-supplement imputation (`FL_665`) of 20.5%, -20.0%, 19.2%, 17.8% and 16.7% for income years 2021 to 2025. +19.9%, 19.2%, 17.8% and 16.7% for income years 2021 to 2025. Income years 2020 and 2021 **pass**: their response rates are above the -pinned years', their imputation and allocation shares sit between the -pre-pandemic years' and the pinned years', and homeownership and weight -dispersion show no break. Three caveats: +pinned years'; their whole-record imputation shares sit between the +pre-pandemic years' and the pinned years'; their item-allocation shares are +the highest of the seven years (22.6% and 21.8%) but within 1.6 points of +every other year; and homeownership and weight dispersion show no break. Three caveats: - Census asks users to take care comparing data years 2019, 2020 and 2021 with other years, and documents that nonrespondents in the 2020–2026 @@ -431,9 +455,11 @@ Rotation overlap: a housing unit appears in at most two adjacent files, so - Rerun on the newest three CPS years (2023–2025) once a Route A export on main at or after `5187fce25` exists: `shard --source cps` on it, `materialize - --source cps`, then `run-grid`. Receipts carry digests of their inputs, so - `run-grid` re-solves every arm whose inputs changed and keeps the ACS-only - arms. + --source cps --replace-stale`, `diffcheck --sources cps`, then `run-grid + --newest-year 2025` and `report --newest-year 2025`. `materialize` refuses + concept parts cut from another source h5 unless told to replace them, and + each receipt carries digests of only the inputs its arm reads, so the + ACS-only arms are kept and every arm with CPS rows is solved fresh. - Add five-year arms (2020–2024 or 2021–2025) once those years have Route A enrichment. - When `microcosm.build.us_runtime.target_split` merges, swap it in and @@ -450,9 +476,11 @@ Rotation overlap: a housing unit appears in at most two adjacent files, so CPS half is the tool's own log line from 2026-09-28, copied into the file after the CPS shard files were removed to free disk. - Tests: `test_us_support_mix.py`, 22 tests (properties, the dense - differential and the port-branch hash fixtures). -- Independent review (Opus 5.5, Subfleet), two rounds; every finding is fixed - or stated here. + differential and the port-branch hash fixtures), and + `test_bakeoff_us_support_mix_tool.py`, 13 tests of the driver's SPM flag, + staleness guards, grid and report. +- Independent review (Opus 5.5, Subfleet), three rounds; every finding is + fixed or stated here. - Receipts in `experiments/us-support-mix-bakeoff-20260930/`: the report tables, `compile.json`, `diffcheck.json`, `spm_flags.json`, `asec_quality.json` (with its script), `acs_truth.json`, and the diff --git a/experiments/us-support-mix-bakeoff-20260930/README.md b/experiments/us-support-mix-bakeoff-20260930/README.md index e2350aeb9c..dc9b26050e 100644 --- a/experiments/us-support-mix-bakeoff-20260930/README.md +++ b/experiments/us-support-mix-bakeoff-20260930/README.md @@ -14,10 +14,15 @@ receipts. The design, verdict and caveats are in | `holdout_by_dimension_level_common_support.csv` | The same over targets every arm supports | | `holdout_unsupported.csv` | Held-out targets no row in an arm can move | | `replicate_spread.csv` | SD across three disjoint ACS draws (300k arms) | +| `replicate_mean.csv` | Mean across the same three draws | | `acs_native_by_level_measure.csv` | ACS-native error by product, arm, level and measure | | `compile.json` | Registry compile: 32,842 specs, 419 concepts, split roles by level | | `diffcheck.json` | Production per-target columns vs concept × mask on 4,000 households per source: max scaled difference 0.0 | | `acs_truth.json` | ACS 2024 1-year summary-file cells and their SHA-256 | +| `spm_flags.json` | ACS group-quarters share and the SPM zero-adult records excluded from the support (`spm-flags`) | +| `materialize/` | Per-part engine-pass receipts (households, wall time, peak RSS) and the measure list | +| `asec_quality.py`, `asec_quality.json` | CPS year response-quality check (script and its output) | +| `memo_tables.py` | Builds the memo's results tables from these files | Per-arm receipts (with every held-out target's estimate) and saved weights stay in the run's work directory; they are 10–15 MB each. diff --git a/packages/microcosm-build/tests/engine_free/us/test_bakeoff_us_support_mix_tool.py b/packages/microcosm-build/tests/engine_free/us/test_bakeoff_us_support_mix_tool.py new file mode 100644 index 0000000000..3c82830348 --- /dev/null +++ b/packages/microcosm-build/tests/engine_free/us/test_bakeoff_us_support_mix_tool.py @@ -0,0 +1,195 @@ +"""Bookkeeping in the support-mix bake-off driver (tools/bakeoff_us_support_mix.py). + +Invariants: + +- SPM flag: a household is flagged exactly when one of its SPM units has no + member the pinned engine counts as an adult, and the rule refuses a person + table without household-role columns rather than falling back to age; +- staleness: an arm's receipt depends only on the inputs its arm reads, the + concept digest moves with part contents (not just sizes), a concept part is + reusable only if built from the current shards' source h5, and saved + weights are re-scored only for the same rows and inputs; +- grid: ACS-only arms carry no years, so a grid on newer CPS years keeps them; +- reporting: replicate tables cover only groups with more than one draw, and + a report with missing receipts is refused unless asked for. +""" + +from __future__ import annotations + +import argparse +import importlib.util +import json +import pickle +import sys + +import numpy as np +import pandas as pd +import pytest +import scipy.sparse as sp + +from test_support.paths import paths_for + +_TEST_PATHS = paths_for("microcosm-build") + + +@pytest.fixture(scope="module") +def tool(): + path = _TEST_PATHS.repository / "tools" / "bakeoff_us_support_mix.py" + spec = importlib.util.spec_from_file_location("bakeoff_us_support_mix", path) + module = importlib.util.module_from_spec(spec) + assert spec.loader is not None + sys.modules[spec.name] = module + spec.loader.exec_module(module) + return module + + +def _tables(people): + """``people``: (household, spm unit, age, head, spouse) per person.""" + person = pd.DataFrame(people, columns=["person_household_id", "person_spm_unit_id", "age", + "is_household_head", "is_household_spouse"]) + household = pd.DataFrame({"household_id": sorted(set(person["person_household_id"]))}) + return {"household": household, "person": person} + + +def test_spm_flag_marks_units_without_a_classified_adult(tool) -> None: + tables = _tables([ + (1, 10, 40, True, False), # adult + (2, 20, 16, True, False), # 15-17 head counts as an adult + (3, 30, 16, False, False), # 15-17 non-head, no adult in unit + (4, 40, 35, True, False), # household 4: one unit with an adult... + (4, 41, 10, False, False), # ...and one with only a child + (5, 50, 14, True, False), # under 15 never counts, even as head + ]) + flags = tool.spm_zero_adult_households(tables) + assert flags.tolist() == [False, False, True, True, True] + + +def test_spm_flag_refuses_a_table_without_role_columns(tool) -> None: + tables = _tables([(1, 10, 16, True, False)]) + tables["person"] = tables["person"].drop(columns=["is_household_head", "is_household_spouse"]) + with pytest.raises(ValueError, match="neither"): + tool.spm_zero_adult_households(tables) + + +def test_spm_flags_leaves_an_unchanged_row_index_alone(tool, tmp_path) -> None: + tables = _tables([(1, 10, 40, True, False), (2, 20, 16, False, False)]) + shard_dir = tmp_path / "shards" / "acs" + shard_dir.mkdir(parents=True) + with open(shard_dir / "shard_000.pkl", "wb") as handle: + pickle.dump({"tables": tables}, handle) + rows = pd.DataFrame({"household_id": [1, 2], "shard": [0, 0], "group_quarters": [False, True], + "spm_zero_adult_unit": [False, True]}) + rows.to_parquet(tmp_path / "rows_acs.parquet", index=False) + before = (tmp_path / "rows_acs.parquet").read_bytes() + tool.do_spm_flags(argparse.Namespace(work=tmp_path)) + assert (tmp_path / "rows_acs.parquet").read_bytes() == before + receipt = json.loads((tmp_path / "spm_flags.json").read_text()) + assert receipt["spm_zero_adult_households"] == 1 == receipt["spm_zero_adult_in_group_quarters"] + rows.assign(spm_zero_adult_unit=False).to_parquet(tmp_path / "rows_acs.parquet", index=False) + tool.do_spm_flags(argparse.Namespace(work=tmp_path)) + assert pd.read_parquet(tmp_path / "rows_acs.parquet")["spm_zero_adult_unit"].tolist() == [False, True] + + +@pytest.mark.parametrize("newest", [2024, 2025]) +def test_arm_inputs_cover_exactly_what_each_arm_reads(tool, newest) -> None: + for arm in tool.arm_grid(True, newest): + keys = set(tool.arm_input_keys(arm)) + assert {"targets", "truth", "epochs"} <= keys + assert ({"rows_cps", "concepts_cps"} <= keys) == bool(arm.cps_income_years) + assert ({"rows_cps", "concepts_cps"} & keys == set()) == (not arm.cps_income_years) + assert ({"rows_acs", "concepts_acs"} <= keys) == (arm.budget is not None) + + +def test_acs_only_arms_survive_a_newer_cps_grid(tool) -> None: + assert tool.year_sets(2025) == ((2025,), (2024, 2025), (2023, 2024, 2025)) + old = {a.label for a in tool.arm_grid(True, 2024)} + new = {a.label for a in tool.arm_grid(True, 2025)} + assert len(old) == len(new) == 30 + assert old & new == {label for label in old if ".cps0." in label} + + +def test_inputs_current_compares_only_the_arms_inputs(tool) -> None: + current = {"targets": "t", "truth": "u", "epochs": 1500} + assert tool.inputs_current({**current, "rows_cps": "old"}, current) + assert not tool.inputs_current({**current, "targets": "x"}, current) + assert not tool.inputs_current({"targets": "t", "truth": "u"}, current) + assert not tool.inputs_current(None, current) + + +def test_rescore_needs_the_same_rows_and_inputs(tool) -> None: + inputs = {"targets": "t", "epochs": 1500} + previous = {"rows_digest": "r", "inputs": inputs} + assert tool.rescore_refusal(previous, inputs, "r") is None + assert "rows digest" in tool.rescore_refusal({"inputs": inputs}, inputs, "r") + assert "rows digest" in tool.rescore_refusal(previous, inputs, "other") + assert "inputs" in tool.rescore_refusal(previous, {**inputs, "targets": "new"}, "r") + + +def _write_part(directory, name, values, source_sha=None, rows=None): + directory.mkdir(parents=True, exist_ok=True) + sp.save_npz(directory / f"{name}.npz", sp.csr_matrix(np.asarray(values, dtype=np.float32))) + if rows is not None: + np.save(directory / f"{name}.rows.npy", np.asarray(rows, dtype=np.int64)) + if source_sha is not None: + (directory / f"{name}.json").write_text(json.dumps({"source_h5_sha256": source_sha})) + + +def test_concept_digest_moves_with_contents_of_the_same_size(tool, tmp_path) -> None: + directory = tmp_path / "concepts" / "acs" + _write_part(directory, "shard_000", [[1.0, 0.0], [0.0, 2.0]], rows=[0, 1]) + first = tool._concept_digest(tmp_path, "acs") + size = (directory / "shard_000.npz").stat().st_size + _write_part(directory, "shard_000", [[3.0, 0.0], [0.0, 4.0]], rows=[0, 1]) + assert (directory / "shard_000.npz").stat().st_size == size + second = tool._concept_digest(tmp_path, "acs") + assert second != first + _write_part(directory, "shard_000", [[3.0, 0.0], [0.0, 4.0]], rows=[1, 0]) + assert tool._concept_digest(tmp_path, "acs") != second + + +def test_stale_parts_are_those_not_built_from_the_current_source(tool, tmp_path) -> None: + directory = tmp_path / "parts" + _write_part(directory, "shard_000", [[1.0]], source_sha="new") + _write_part(directory, "shard_001", [[1.0]], source_sha="old") + _write_part(directory, "shard_002", [[1.0]]) + assert [p.name for p in tool.stale_concept_parts(directory, "new")] == ["shard_001.npz", "shard_002.npz"] + + +def _materialize_args(work, replace_stale): + return argparse.Namespace(work=work, source="cps", replace_stale=replace_stale, rank_range=None, + only=None, summary=None, batch=5_000, min_available_gb=0.0) + + +def test_materialize_refuses_then_replaces_stale_parts(tool, tmp_path) -> None: + (tmp_path / "concept_specs.pkl").write_bytes(pickle.dumps([])) + (tmp_path / "shards" / "cps").mkdir(parents=True) + (tmp_path / "shards" / "cps" / "shard.json").write_text(json.dumps({"h5_sha256": "new"})) + pd.DataFrame({"shard": pd.Series([], dtype=np.int64)}).to_parquet(tmp_path / "rows_cps.parquet") + concepts = tmp_path / "concepts" / "cps" + _write_part(concepts, "shard_000", [[1.0]], source_sha="old", rows=[0]) + with pytest.raises(SystemExit, match="replace-stale"): + tool.do_materialize(_materialize_args(tmp_path, replace_stale=False)) + assert (concepts / "shard_000.npz").exists() + tool.do_materialize(_materialize_args(tmp_path, replace_stale=True)) + assert not list(concepts.glob("shard_000*")) + + +def test_replicate_tables_cover_only_groups_with_several_draws(tool) -> None: + table = pd.DataFrame({ + "product": ["national"] * 5, + "arm": ["b300k.cps2024.acs100.s0", "b300k.cps2024.acs100.s1", "b300k.cps2024.acs100.s2", + "b300k.cps2023-2024.acs100.s0", "b600k.cps2024.acs100.s0"], + "cps_years": [1, 1, 1, 2, 1], "acs_fill_share": [1.0] * 5, "seed": [0, 1, 2, 0, 0], + "x.state": [0.1, 0.2, 0.3, 0.9, 0.9], + }) + spread, mean = tool.replicate_summary(table) + assert list(mean.index) == [("national", 1)] == list(spread.index) + assert mean.loc[("national", 1), "x.state"] == pytest.approx(0.2) + assert spread.loc[("national", 1), "x.state"] == pytest.approx(0.1) + + +def test_report_refuses_missing_receipts(tool, tmp_path) -> None: + (tmp_path / "arms").mkdir() + args = argparse.Namespace(work=tmp_path, out=tmp_path / "report", newest_year=2024, allow_missing=False) + with pytest.raises(SystemExit, match="60 expected receipts missing"): + tool.do_report(args) diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py b/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py index 5b268890d2..8777e262bc 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py @@ -175,6 +175,14 @@ def test_initial_weights_conserve_and_split_mass(cps, acs, clones, mass) -> None assert np.isclose(expanded.sum(), cps_share * mass, rtol=1e-9) per_year = [expanded[years == y].sum() for y in np.unique(years)] assert np.allclose(per_year, per_year[0], rtol=1e-9) + # A row's copies sum back to its per-year weight, which keeps the + # within-year design-weight shape; ACS rows keep theirs. + for y in np.unique(years): + in_year = years == y + assert np.allclose(expanded[in_year], weights[in_year] * (per_year[0] / weights[in_year].sum()), + rtol=1e-9) + if len(acs): + assert np.allclose(acs_out, acs_w * (acs_out.sum() / acs_w.sum()), rtol=1e-9) def test_initial_weights_refuse_bad_inputs() -> None: diff --git a/tools/bakeoff_us_support_mix.py b/tools/bakeoff_us_support_mix.py index 83f0c999a6..5b57bcccaf 100644 --- a/tools/bakeoff_us_support_mix.py +++ b/tools/bakeoff_us_support_mix.py @@ -17,8 +17,9 @@ household shards for the concept specs. ``arm`` then selects rows, assembles the sparse target matrix, calls the production ``_optimize`` and scores. -Subcommands, in order: compile, shard, materialize, diffcheck, truth, arm, -report. Every subcommand writes a JSON receipt with wall time and peak RSS. +Subcommands, in order: compile, shard, spm-flags, materialize, diffcheck, +truth, arm (or run-grid for every arm), report. Every subcommand writes a JSON +receipt with wall time and peak RSS. """ from __future__ import annotations @@ -486,10 +487,12 @@ def spm_zero_adult_households(tables: dict[str, pd.DataFrame]) -> np.ndarray: """ hh, person = tables["household"], tables["person"] age = pd.to_numeric(person["age"], errors="coerce").fillna(0).to_numpy() + role_columns = [c for c in ("is_household_head", "is_household_spouse") if c in person] + if not role_columns: + raise ValueError("person table has neither is_household_head nor is_household_spouse") role = np.zeros(len(person), dtype=bool) - for column in ("is_household_head", "is_household_spouse"): - if column in person: - role |= pd.Series(person[column]).fillna(False).astype(bool).to_numpy() + for column in role_columns: + role |= pd.Series(person[column]).fillna(False).astype(bool).to_numpy() adult = (age >= 18) | ((age >= 15) & role) unit_adults = pd.Series(adult).groupby(person["person_spm_unit_id"].to_numpy()).sum() empty_units = unit_adults.index[unit_adults.to_numpy() == 0] @@ -653,8 +656,13 @@ def do_spm_flags(args) -> None: if not np.array_equal(rows["household_id"].to_numpy()[index], tables["household"]["household_id"].to_numpy()): raise SystemExit(f"shard {shard}: row index and shard disagree on household order") flag[index] = spm_zero_adult_households(tables) - rows["spm_zero_adult_unit"] = flag - rows.to_parquet(args.work / "rows_acs.parquet", index=False) + # Rewriting the row index changes its digest and so every arm's inputs; + # write only when the flag changed. + if "spm_zero_adult_unit" in rows and np.array_equal(rows["spm_zero_adult_unit"].to_numpy(bool), flag): + log("spm flags unchanged; row index left as is") + else: + rows["spm_zero_adult_unit"] = flag + rows.to_parquet(args.work / "rows_acs.parquet", index=False) gq = rows["group_quarters"].to_numpy() write_json(args.work / "spm_flags.json", { "acs_households": int(len(rows)), @@ -735,8 +743,8 @@ def _materialize_frame(frame, concept_specs, *, summary_path: Path | None, batch return household, [spec.measure for spec in registry.specs], compilation, dropped -def arm_inputs(work: Path, truth: Path, epochs: int) -> dict: - """Digests of everything an arm receipt depends on, so stale receipts rerun.""" +def input_digests(work: Path, truth: Path, epochs: int) -> dict: + """Digests of every input an arm receipt can depend on.""" return { "targets": sha256_file(work / "targets.parquet"), "rows_cps": sha256_file(work / "rows_cps.parquet"), @@ -748,15 +756,80 @@ def arm_inputs(work: Path, truth: Path, epochs: int) -> dict: } +def arm_input_keys(arm: SupportMixArm) -> tuple[str, ...]: + """The inputs an arm's result depends on. + + An arm without CPS years reads the CPS row index only for the starting + mass, which the population mass repair rescales away; an arm without a + budget has no ACS fill and no clones (clones draw geography from ACS rows). + """ + keys = ["targets", "truth", "epochs"] + if arm.cps_income_years: + keys += ["rows_cps", "concepts_cps"] + if arm.budget is not None: + keys += ["rows_acs", "concepts_acs"] + return tuple(keys) + + +def arm_inputs(digests: dict, arm: SupportMixArm) -> dict: + return {key: digests[key] for key in arm_input_keys(arm)} + + +def inputs_current(previous: dict | None, current: dict) -> bool: + """A receipt is current when every input its arm depends on is unchanged.""" + return isinstance(previous, dict) and all(previous.get(k) == v for k, v in current.items()) + + +def rescore_refusal(previous: dict, inputs: dict, rows_digest: str) -> str | None: + """Why saved weights may not be re-scored, or ``None`` when they may. + + Re-scoring is for a scoring change only: the weights must come from the + same rows and the same targets, split, truth, concepts and epochs. + """ + if previous.get("rows_digest") != rows_digest: + return "the receipt has no rows digest or a different one" + if not inputs_current(previous.get("inputs"), inputs): + return "the arm's inputs changed since the solve" + return None + + def _concept_digest(work: Path, source: str) -> str: + """Content digest of a source's materialized parts (values and row maps).""" digest = hashlib.sha256() for path in sorted((work / "concepts" / source).glob("shard_*.npz")): - if not path.name.endswith(".tmp.npz"): - digest.update(path.name.encode()) - digest.update(str(path.stat().st_size).encode()) + if path.name.endswith(".tmp.npz"): + continue + digest.update(path.name.encode()) + digest.update(sha256_file(path).encode()) + rows_path = path.with_suffix(".rows.npy") + if rows_path.exists(): + digest.update(sha256_file(rows_path).encode()) return digest.hexdigest() +def shard_source_sha(work: Path, source: str) -> str: + """The sha256 of the h5 the source's shards were cut from (``shard.json``).""" + return json.loads((work / "shards" / source / "shard.json").read_text())["h5_sha256"] + + +def stale_concept_parts(directory: Path, source_sha: str) -> list[Path]: + """Materialized parts not built from the current shards' source h5. + + A part's receipt records the h5 digest its shard came from; a part with + no receipt or another digest holds values for rows that may no longer + exist or may now be different households. + """ + stale = [] + for path in sorted(directory.glob("shard_*.npz")): + if path.name.endswith(".tmp.npz"): + continue + receipt = path.with_suffix(".json") + recorded = json.loads(receipt.read_text()).get("source_h5_sha256") if receipt.exists() else None + if recorded != source_sha: + stale.append(path) + return stale + + def acs_rank(work: Path) -> np.ndarray: """Each ACS row's position in the fixed salted selection order (cached, keyed by a digest of the row index's unit-key sequence).""" @@ -780,6 +853,15 @@ def do_materialize(args) -> None: shard_dir = args.work / "shards" / args.source out_dir = args.work / "concepts" / args.source out_dir.mkdir(parents=True, exist_ok=True) + source_sha = shard_source_sha(args.work, args.source) + stale = stale_concept_parts(out_dir, source_sha) + if stale and not args.replace_stale: + raise SystemExit(f"{len(stale)} {args.source} concept parts (e.g. {stale[0].name}) were not built " + "from the current shards; rerun with --replace-stale to rebuild them") + for path in stale: + for old in (path, path.with_suffix(".rows.npy"), path.with_suffix(".json")): + old.unlink(missing_ok=True) + log(f"removed stale {path.name}") rows = pd.read_parquet(args.work / f"rows_{args.source}.parquet") rows["row"] = np.arange(len(rows)) if "spm_zero_adult_unit" in rows: @@ -829,7 +911,8 @@ def do_materialize(args) -> None: sp.save_npz(out.with_suffix(".tmp.npz"), csr) out.with_suffix(".tmp.npz").replace(out) write_json(out.with_suffix(".json"), { - "shard": shard_path.name, "rank_range": [low, high] if args.rank_range else None, + "shard": shard_path.name, "source_h5_sha256": source_sha, + "rank_range": [low, high] if args.rank_range else None, "households": len(household), "nnz": int(csr.nnz), "missing_measures": missing, "compiled_concepts": len(compiled), "batching": compilation.get("target_materialization_batching"), @@ -997,19 +1080,27 @@ def truth_table(path: Path) -> pd.DataFrame: # ------------------------------------------------------------------ arms BUDGETS = (300_000, 600_000, 1_200_000) -YEAR_SETS = ((2024,), (2023, 2024), (2022, 2023, 2024)) +NEWEST_INCOME_YEAR = 2024 + +def year_sets(newest: int = NEWEST_INCOME_YEAR) -> tuple[tuple[int, ...], ...]: + """The newest one, two and three CPS income years.""" + return tuple(tuple(range(newest - k, newest + 1)) for k in range(3)) -def arm_grid(include_largest: bool = True) -> list[SupportMixArm]: + +def arm_grid(include_largest: bool = True, newest: int = NEWEST_INCOME_YEAR) -> list[SupportMixArm]: + """The 30 arms. ACS-only arms carry no years, so their labels (and + receipts) are shared across grids with different newest years.""" arms: list[SupportMixArm] = [] - for years in YEAR_SETS: + sets = year_sets(newest) + for years in sets: arms.append(SupportMixArm(budget=None, cps_income_years=years)) for budget in BUDGETS if include_largest else BUDGETS[:2]: - for years in YEAR_SETS: + for years in sets: arms.append(SupportMixArm(budget=budget, cps_income_years=years, acs_fill_share=1.0)) arms.append(SupportMixArm(budget=budget, cps_income_years=years, acs_fill_share=0.0)) arms.append(SupportMixArm(budget=budget, cps_income_years=(), acs_fill_share=1.0)) - for years in ((2024,), (2022, 2023, 2024)): + for years in (sets[0], sets[2]): arms.append(SupportMixArm(budget=600_000, cps_income_years=years, acs_fill_share=0.5)) for seed in (1, 2): arms.append(SupportMixArm(budget=300_000, cps_income_years=years, acs_fill_share=1.0, seed=seed)) @@ -1036,6 +1127,10 @@ class _ConceptStore: def __init__(self, work: Path, source: str): directory = work / "concepts" / source + stale = stale_concept_parts(directory, shard_source_sha(work, source)) + if stale: + raise RuntimeError(f"{len(stale)} {source} concept parts (e.g. {stale[0].name}) were not built " + "from the current shards; rerun materialize --replace-stale") shard_of = pd.read_parquet(work / f"rows_{source}.parquet", columns=["shard"])["shard"].to_numpy() n_rows = len(shard_of) self.measures = json.loads((directory / "measures.json").read_text()) @@ -1131,12 +1226,12 @@ def do_arm(args) -> None: arm = parse_arm(args.arm) out = args.work / "arms" / args.product / f"{arm.label}.json" previous = json.loads(out.read_text()) if out.exists() else None - inputs = arm_inputs(args.work, args.truth, args.epochs) + inputs = arm_inputs(input_digests(args.work, args.truth, args.epochs), arm) rescore = ( previous is not None and out.with_suffix(".weights.npy").exists() and not args.force and (args.rescore or not previous.get("scored_all_levels")) ) - if (previous is not None and previous.get("scored_all_levels") and previous.get("inputs") == inputs + if (previous is not None and previous.get("scored_all_levels") and inputs_current(previous.get("inputs"), inputs) and not args.force and not args.rescore): log(f"{out} exists") return @@ -1182,7 +1277,9 @@ def do_arm(args) -> None: if len(block) < counts.acs: raise SystemExit(f"{arm.label}: replicate block exceeds the ACS rows available") acs_rows = rows_acs.iloc[np.sort(block)].reset_index(drop=True) - total_mass = float(rows_cps.loc[rows_cps["income_year"] == 2024, "design_weight"].sum() * 3) + # Pre-repair mass only: the population mass repair below sets the level. + newest = rows_cps["income_year"].max() + total_mass = float(rows_cps.loc[rows_cps["income_year"] == newest, "design_weight"].sum() * 3) cps_w, acs_w = arm_initial_weights( cps_design_weights=cps_rows["design_weight"].to_numpy(), cps_income_year=cps_rows["income_year"].to_numpy(), @@ -1281,11 +1378,16 @@ def do_arm(args) -> None: nonzero = np.diff(a_train.indptr) > 0 a_train, b_train, loss_w = a_train[nonzero], b_train[nonzero], loss_w[nonzero] scales = default_target_loss_scales(b_train) + if rescore and (refusal := rescore_refusal(previous, inputs, rows_digest)): + if args.rescore: + raise SystemExit(f"{arm.label}: cannot re-score the saved weights: {refusal}; re-solve with --force") + log(f"{arm.label}: re-solving instead of re-scoring: {refusal}") + rescore = False solve_started = time.time() if rescore: # Re-score saved weights (a scoring change, no re-solve). weights = np.load(out.with_suffix(".weights.npy")).astype(np.float64) - if len(weights) != len(w0) or previous.get("rows_digest", rows_digest) != rows_digest: + if len(weights) != len(w0): raise SystemExit(f"{arm.label}: saved weights do not match the arm's rows") trajectory = np.array([previous["train"]["loss_initial"], previous["train"]["loss_final"]]) else: @@ -1417,7 +1519,7 @@ def errors(matrix, target_values, w): {"wall_s": round(time.time() - started, 1), "solve_s": round(solve_s, 1), "epochs": args.epochs, "threads": args.threads, "peak_rss_gb": round(peak_rss_gb(), 2)} ), - "inputs": inputs, + "inputs": previous["inputs"] if rescore else inputs, "rows_digest": rows_digest, } write_json(out, receipt) @@ -1430,16 +1532,18 @@ def do_run_grid(args) -> None: """Run every missing (arm, product) receipt, one subprocess each.""" import subprocess - arms = [a.label for a in arm_grid(not args.no_largest)] - current = arm_inputs(args.work, args.truth, args.epochs) + arms = [a.label for a in arm_grid(not args.no_largest, args.newest_year)] + digests = input_digests(args.work, args.truth, args.epochs) if args.only: arms = [a for a in arms if any(token in a for token in args.only.split(","))] + failed = [] for product in args.products.split(","): for label in arms: out = args.work / "arms" / product / f"{label}.json" if out.exists(): receipt = json.loads(out.read_text()) - if receipt.get("scored_all_levels") and receipt.get("inputs") == current: + current = arm_inputs(digests, parse_arm(label)) + if receipt.get("scored_all_levels") and inputs_current(receipt.get("inputs"), current): continue wait_for_memory(args.min_available_gb) command = [sys.executable, str(Path(__file__).resolve()), "arm", "--work", str(args.work), @@ -1450,6 +1554,9 @@ def do_run_grid(args) -> None: result = subprocess.run(command, check=False) if result.returncode: log(f"FAILED {product} {label}: exit {result.returncode}") + failed.append(f"{product} {label}") + if failed: + raise SystemExit(f"{len(failed)} arms failed: {', '.join(failed)}") # ------------------------------------------------------------------ report @@ -1478,10 +1585,11 @@ def do_report(args) -> None: **{f"runtime_{k}": v for k, v in receipt["runtime"].items()}, **{f"report_{k}": (v["calibrated"] if isinstance(v, dict) else v) for k, v in receipt["report_only"].items()}}) - expected = {(product, arm.label) for product in ("national", "local") for arm in arm_grid(True)} - found = {(r["product"], r["arm"]) for r in summary} - if expected - found: - log(f"WARNING: {len(expected - found)} expected receipts missing: {sorted(expected - found)[:5]}") + expected = {(product, arm.label) for product in ("national", "local") for arm in arm_grid(True, args.newest_year)} + missing = sorted(expected - {(r["product"], r["arm"]) for r in summary}) + if missing and not args.allow_missing: + raise SystemExit(f"{len(missing)} expected receipts missing (e.g. {missing[:3]}); " + "pass --allow-missing for a partial report") holdout = pd.DataFrame(records) acs_native = pd.DataFrame(acs_records) arms = pd.DataFrame(summary) @@ -1558,13 +1666,20 @@ def _write_dimensions(out: Path, arms: pd.DataFrame, holdout: pd.DataFrame, acs_ rows.append(row) table = pd.DataFrame(rows).sort_values(["product", "budget", "cps_years", "acs_fill_share", "seed"]) table.to_csv(out / "dimensions_by_arm.csv", index=False) + spread, mean = replicate_summary(table) + spread.to_csv(out / "replicate_spread.csv") + mean.to_csv(out / "replicate_mean.csv") + + +def replicate_summary(table: pd.DataFrame) -> tuple[pd.DataFrame, pd.DataFrame]: + """SD and mean over ACS draws of the 300k ACS-fill arms, per product and + CPS year count; groups with a single draw are left out.""" replicate = table[table["arm"].str.contains("b300k") & table["acs_fill_share"].eq(1.0) & table["cps_years"].gt(0)] - groups = replicate.groupby(["product", "cps_years"]) measures = [c for c in table.columns if "." in c] - seeded = [key for key, g in groups if g["seed"].nunique() > 1] + seeded = [key for key, g in replicate.groupby(["product", "cps_years"]) if g["seed"].nunique() > 1] replicate = replicate.set_index(["product", "cps_years"]).loc[seeded].reset_index() - replicate.groupby(["product", "cps_years"])[measures].std().to_csv(out / "replicate_spread.csv") - replicate.groupby(["product", "cps_years"])[measures].mean().to_csv(out / "replicate_mean.csv") + groups = replicate.groupby(["product", "cps_years"])[measures] + return groups.std(), groups.mean() #: Household-universe measures only: the age bands count group-quarters people @@ -1629,6 +1744,8 @@ def main(argv=None) -> None: m.add_argument("--only") m.add_argument("--rank-range", help="ACS only: materialize rows whose selection rank is in [LO,HI)") m.add_argument("--min-available-gb", type=float, default=20.0) + m.add_argument("--replace-stale", action="store_true", + help="delete and rebuild parts not built from the current shards' source h5") d = sub.add_parser("diffcheck") d.add_argument("--work", type=Path, required=True) d.add_argument("--feed", type=Path, required=True) @@ -1653,6 +1770,7 @@ def main(argv=None) -> None: a.add_argument("--min-available-gb", type=float, default=20.0) g = sub.add_parser("grid") g.add_argument("--no-largest", action="store_true") + g.add_argument("--newest-year", type=int, default=NEWEST_INCOME_YEAR) rg = sub.add_parser("run-grid") rg.add_argument("--work", type=Path, required=True) rg.add_argument("--truth", type=Path, required=True) @@ -1661,18 +1779,22 @@ def main(argv=None) -> None: rg.add_argument("--threads", type=int, default=6) rg.add_argument("--only") rg.add_argument("--no-largest", action="store_true") + rg.add_argument("--newest-year", type=int, default=NEWEST_INCOME_YEAR, + help="newest CPS income year in rows_cps; arms use the newest 1, 2 and 3 years") rg.add_argument("--min-available-gb", type=float, default=20.0) f = sub.add_parser("spm-flags") f.add_argument("--work", type=Path, required=True) r = sub.add_parser("report") r.add_argument("--work", type=Path, required=True) r.add_argument("--out", type=Path, required=True) + r.add_argument("--newest-year", type=int, default=NEWEST_INCOME_YEAR) + r.add_argument("--allow-missing", action="store_true", help="write a report even if receipts are missing") args = parser.parse_args(argv) { "compile": do_compile, "shard": do_shard, "materialize": do_materialize, "diffcheck": do_diffcheck, "truth": do_truth, "arm": do_arm, "report": do_report, "run-grid": do_run_grid, "spm-flags": do_spm_flags, - "grid": lambda a: print("\n".join(arm.label for arm in arm_grid(not a.no_largest))), + "grid": lambda a: print("\n".join(arm.label for arm in arm_grid(not a.no_largest, a.newest_year))), }[args.command](args) From 8dc5e7dcf80a4be72a5079c9faa68e5906326dcb Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 30 Sep 2026 08:42:21 -0400 Subject: [PATCH 12/15] Address review 4: concept-spec provenance, partcheck differential, report reads only current receipts - Concept parts record the concept specs and null-fill summary they were built under; materialize and the concept store treat a mismatch as stale (measures.json names are positional, so a recompile would otherwise relabel old columns). do_arm refuses CPS and ACS stores with different columns. - partcheck: re-materializes a sample of each stored part's households with the current specs and compares with the stored values. - report reads only receipts of its own grid, refuses stale ones unless --allow-stale, and takes --truth and --epochs to check them. - Arm options (--exclude-gq) are part of an arm's inputs. - Tests: recompile staleness, provenance fields, report grid and stale filtering, arm options, spm-flags no-rewrite via a refusing to_parquet, and linearity of the starting weights in the requested mass. - Memo: state error at 600k is slightly worse, not flat; reproduce steps. Co-Authored-By: Claude Opus 5.5 --- docs/us-support-mix-bakeoff.md | 11 +- .../us/test_bakeoff_us_support_mix_tool.py | 100 +++++++--- .../engine_free/us/test_us_support_mix.py | 10 +- tools/bakeoff_us_support_mix.py | 179 +++++++++++++++--- 4 files changed, 248 insertions(+), 52 deletions(-) diff --git a/docs/us-support-mix-bakeoff.md b/docs/us-support-mix-bakeoff.md index d5f76e9729..5873146683 100644 --- a/docs/us-support-mix-bakeoff.md +++ b/docs/us-support-mix-bakeoff.md @@ -40,7 +40,8 @@ trade-offs. Stopping at 300k is a cost call. Larger ACS fills keep lowering district error (0.291, 0.266, 0.244 at 300k, 600k, 1.2M) but leave state error flat - (0.113, 0.115, 0.113), edge state tax items up (0.113, 0.116, 0.118) and do + at 300k and 1.2M (0.113) and slightly worse at 600k (0.115), edge state tax + items up (0.113, 0.116, 0.118) and do not help state program receipt (0.198, 0.225, 0.239; the 600k and 1.2M arms are single draws, and only the 1.2M gap exceeds draw noise). The best state-level arm is the 600k 50/50 fill (0.111; income 0.213, tax items @@ -456,7 +457,7 @@ Rotation overlap: a housing unit appears in at most two adjacent files, so - Rerun on the newest three CPS years (2023–2025) once a Route A export on main at or after `5187fce25` exists: `shard --source cps` on it, `materialize --source cps --replace-stale`, `diffcheck --sources cps`, then `run-grid - --newest-year 2025` and `report --newest-year 2025`. `materialize` refuses + --newest-year 2025` and `report --newest-year 2025 --truth `. `materialize` refuses concept parts cut from another source h5 unless told to replace them, and each receipt carries digests of only the inputs its arm reads, so the ACS-only arms are kept and every arm with CPS rows is solved fresh. @@ -487,6 +488,6 @@ Rotation overlap: a housing unit appears in at most two adjacent files, so per-part materialization receipts under `materialize/`. Reproduce: `compile`, `shard` (both sources), `truth`, `materialize` (both -sources; ACS by rank range), `diffcheck`, `run-grid --products national` and -`--products local`, `report`, then `memo_tables.py`. Each step writes a receipt -with wall time and peak RSS. +sources; ACS by rank range), `diffcheck`, `partcheck` (both sources), +`run-grid --products national` and `--products local`, `report --truth`, then +`memo_tables.py`. Each step writes a receipt with wall time and peak RSS. diff --git a/packages/microcosm-build/tests/engine_free/us/test_bakeoff_us_support_mix_tool.py b/packages/microcosm-build/tests/engine_free/us/test_bakeoff_us_support_mix_tool.py index 3c82830348..9246ee84db 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_bakeoff_us_support_mix_tool.py +++ b/packages/microcosm-build/tests/engine_free/us/test_bakeoff_us_support_mix_tool.py @@ -5,13 +5,15 @@ - SPM flag: a household is flagged exactly when one of its SPM units has no member the pinned engine counts as an adult, and the rule refuses a person table without household-role columns rather than falling back to age; -- staleness: an arm's receipt depends only on the inputs its arm reads, the - concept digest moves with part contents (not just sizes), a concept part is - reusable only if built from the current shards' source h5, and saved - weights are re-scored only for the same rows and inputs; +- staleness: an arm's receipt depends only on the inputs and options its arm + reads, the concept digest moves with part contents (not just sizes), a + concept part is reusable only if built from the current shards' source h5, + concept specs and null-fill summary, and saved weights are re-scored only + for the same rows and inputs; - grid: ACS-only arms carry no years, so a grid on newer CPS years keeps them; -- reporting: replicate tables cover only groups with more than one draw, and - a report with missing receipts is refused unless asked for. +- reporting: a report reads only current receipts of its own grid, + replicate tables cover only groups with more than one draw, and a report + with missing or stale receipts is refused unless asked for. """ from __future__ import annotations @@ -21,6 +23,7 @@ import json import pickle import sys +from types import SimpleNamespace import numpy as np import pandas as pd @@ -80,9 +83,12 @@ def test_spm_flags_leaves_an_unchanged_row_index_alone(tool, tmp_path) -> None: rows = pd.DataFrame({"household_id": [1, 2], "shard": [0, 0], "group_quarters": [False, True], "spm_zero_adult_unit": [False, True]}) rows.to_parquet(tmp_path / "rows_acs.parquet", index=False) - before = (tmp_path / "rows_acs.parquet").read_bytes() - tool.do_spm_flags(argparse.Namespace(work=tmp_path)) - assert (tmp_path / "rows_acs.parquet").read_bytes() == before + def refuse(*_args, **_kwargs): + raise AssertionError("an unchanged row index was rewritten") + + with pytest.MonkeyPatch.context() as patch: + patch.setattr(pd.DataFrame, "to_parquet", refuse) + tool.do_spm_flags(argparse.Namespace(work=tmp_path)) receipt = json.loads((tmp_path / "spm_flags.json").read_text()) assert receipt["spm_zero_adult_households"] == 1 == receipt["spm_zero_adult_in_group_quarters"] rows.assign(spm_zero_adult_unit=False).to_parquet(tmp_path / "rows_acs.parquet", index=False) @@ -98,6 +104,7 @@ def test_arm_inputs_cover_exactly_what_each_arm_reads(tool, newest) -> None: assert ({"rows_cps", "concepts_cps"} <= keys) == bool(arm.cps_income_years) assert ({"rows_cps", "concepts_cps"} & keys == set()) == (not arm.cps_income_years) assert ({"rows_acs", "concepts_acs"} <= keys) == (arm.budget is not None) + assert tool.arm_inputs(dict.fromkeys(keys, "d"), arm)["exclude_gq"] is False def test_acs_only_arms_survive_a_newer_cps_grid(tool) -> None: @@ -114,6 +121,10 @@ def test_inputs_current_compares_only_the_arms_inputs(tool) -> None: assert not tool.inputs_current({**current, "targets": "x"}, current) assert not tool.inputs_current({"targets": "t", "truth": "u"}, current) assert not tool.inputs_current(None, current) + # Arm options: a receipt that predates recording them was solved with the default. + assert tool.inputs_current(current, {**current, "exclude_gq": False}) + assert not tool.inputs_current(current, {**current, "exclude_gq": True}) + assert not tool.inputs_current({**current, "exclude_gq": True}, {**current, "exclude_gq": False}) def test_rescore_needs_the_same_rows_and_inputs(tool) -> None: @@ -125,13 +136,13 @@ def test_rescore_needs_the_same_rows_and_inputs(tool) -> None: assert "inputs" in tool.rescore_refusal(previous, {**inputs, "targets": "new"}, "r") -def _write_part(directory, name, values, source_sha=None, rows=None): +def _write_part(directory, name, values, receipt=None, rows=None): directory.mkdir(parents=True, exist_ok=True) sp.save_npz(directory / f"{name}.npz", sp.csr_matrix(np.asarray(values, dtype=np.float32))) if rows is not None: np.save(directory / f"{name}.rows.npy", np.asarray(rows, dtype=np.int64)) - if source_sha is not None: - (directory / f"{name}.json").write_text(json.dumps({"source_h5_sha256": source_sha})) + if receipt is not None: + (directory / f"{name}.json").write_text(json.dumps(receipt)) def test_concept_digest_moves_with_contents_of_the_same_size(tool, tmp_path) -> None: @@ -147,12 +158,20 @@ def test_concept_digest_moves_with_contents_of_the_same_size(tool, tmp_path) -> assert tool._concept_digest(tmp_path, "acs") != second -def test_stale_parts_are_those_not_built_from_the_current_source(tool, tmp_path) -> None: +def test_stale_parts_are_those_not_built_from_the_current_provenance(tool, tmp_path) -> None: directory = tmp_path / "parts" - _write_part(directory, "shard_000", [[1.0]], source_sha="new") - _write_part(directory, "shard_001", [[1.0]], source_sha="old") - _write_part(directory, "shard_002", [[1.0]]) - assert [p.name for p in tool.stale_concept_parts(directory, "new")] == ["shard_001.npz", "shard_002.npz"] + current = {"source_h5_sha256": "new", "concept_specs_sha256": "specs", "summary_sha256": None} + _write_part(directory, "shard_000", [[1.0]], receipt=current) + _write_part(directory, "shard_001", [[1.0]], receipt={**current, "source_h5_sha256": "old"}) + _write_part(directory, "shard_002", [[1.0]], receipt={**current, "concept_specs_sha256": "older"}) + _write_part(directory, "shard_003", [[1.0]], receipt={**current, "summary_sha256": "filled"}) + _write_part(directory, "shard_004", [[1.0]], receipt={"source_h5_sha256": "new"}) + _write_part(directory, "shard_005", [[1.0]]) + stale = [p.name for p in tool.stale_concept_parts(directory, current)] + assert stale == [f"shard_00{i}.npz" for i in range(1, 6)] + # The concept store checks the source and specs only. + without_summary = {k: v for k, v in current.items() if k != "summary_sha256"} + assert "shard_003.npz" not in [p.name for p in tool.stale_concept_parts(directory, without_summary)] def _materialize_args(work, replace_stale): @@ -160,18 +179,35 @@ def _materialize_args(work, replace_stale): only=None, summary=None, batch=5_000, min_available_gb=0.0) -def test_materialize_refuses_then_replaces_stale_parts(tool, tmp_path) -> None: +def _materialize_work(tmp_path): (tmp_path / "concept_specs.pkl").write_bytes(pickle.dumps([])) (tmp_path / "shards" / "cps").mkdir(parents=True) (tmp_path / "shards" / "cps" / "shard.json").write_text(json.dumps({"h5_sha256": "new"})) pd.DataFrame({"shard": pd.Series([], dtype=np.int64)}).to_parquet(tmp_path / "rows_cps.parquet") - concepts = tmp_path / "concepts" / "cps" - _write_part(concepts, "shard_000", [[1.0]], source_sha="old", rows=[0]) + return tmp_path / "concepts" / "cps" + + +def test_materialize_refuses_then_replaces_stale_parts(tool, tmp_path) -> None: + concepts = _materialize_work(tmp_path) + current = tool.part_provenance(tmp_path, "cps", None) + _write_part(concepts, "shard_000", [[1.0]], receipt={**current, "source_h5_sha256": "old"}, rows=[0]) + _write_part(concepts, "shard_001", [[1.0]], receipt=current, rows=[1]) with pytest.raises(SystemExit, match="replace-stale"): tool.do_materialize(_materialize_args(tmp_path, replace_stale=False)) assert (concepts / "shard_000.npz").exists() tool.do_materialize(_materialize_args(tmp_path, replace_stale=True)) assert not list(concepts.glob("shard_000*")) + assert (concepts / "shard_001.npz").exists() + + +def test_a_recompile_makes_every_part_stale(tool, tmp_path) -> None: + concepts = _materialize_work(tmp_path) + _write_part(concepts, "shard_000", [[1.0]], receipt=tool.part_provenance(tmp_path, "cps", None), rows=[0]) + assert not tool.stale_concept_parts(concepts, tool.part_provenance(tmp_path, "cps", None)) + (tmp_path / "concept_specs.pkl").write_bytes(pickle.dumps([SimpleNamespace(measure="bakeoff_concept_00000")])) + assert tool.stale_concept_parts(concepts, tool.part_provenance(tmp_path, "cps", None)) + with pytest.raises(SystemExit, match="replace-stale"): + tool.do_materialize(_materialize_args(tmp_path, replace_stale=False)) def test_replicate_tables_cover_only_groups_with_several_draws(tool) -> None: @@ -188,8 +224,28 @@ def test_replicate_tables_cover_only_groups_with_several_draws(tool) -> None: assert spread.loc[("national", 1), "x.state"] == pytest.approx(0.1) +def _report_work(tmp_path): + for name in ("targets.parquet", "rows_cps.parquet", "rows_acs.parquet", "truth.parquet"): + pd.DataFrame({"x": [1]}).to_parquet(tmp_path / name) + (tmp_path / "arms" / "national").mkdir(parents=True) + return argparse.Namespace(work=tmp_path, out=tmp_path / "report", newest_year=2024, truth=tmp_path / "truth.parquet", + epochs=1500, allow_missing=False, allow_stale=False) + + def test_report_refuses_missing_receipts(tool, tmp_path) -> None: - (tmp_path / "arms").mkdir() - args = argparse.Namespace(work=tmp_path, out=tmp_path / "report", newest_year=2024, allow_missing=False) + args = _report_work(tmp_path) + with pytest.raises(SystemExit, match="60 expected receipts missing"): + tool.do_report(args) + + +def test_report_skips_other_grids_and_refuses_stale_receipts(tool, tmp_path) -> None: + args = _report_work(tmp_path) + arms = tmp_path / "arms" / "national" + (arms / "b300k.cps2025.acs100.s0.json").write_text(json.dumps( + {"arm": "b300k.cps2025.acs100.s0", "product": "national", "inputs": {}})) with pytest.raises(SystemExit, match="60 expected receipts missing"): + tool.do_report(args) # the 2025-grid receipt is skipped, not counted or read + (arms / "b300k.cps0.acs100.s0.json").write_text(json.dumps( + {"arm": "b300k.cps0.acs100.s0", "product": "national", "inputs": {"targets": "old"}})) + with pytest.raises(SystemExit, match="1 receipts are stale"): tool.do_report(args) diff --git a/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py b/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py index 8777e262bc..67ba6680cd 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py +++ b/packages/microcosm-build/tests/engine_free/us/test_us_support_mix.py @@ -10,7 +10,8 @@ one across households; - mass: starting weights are positive, sum to the requested total, give each CPS income year an equal share, and split CPS and ACS mass in proportion to - source households; a row's copies sum back to its per-year weight; + source households; a row's copies sum back to its per-year weight; the + weights are linear in the requested total; - ESS: distinct-unit ESS never exceeds the row ESS or the number of distinct units, and equals the row ESS when every unit is distinct; - assembly (differential): the sparse target matrix equals a naive dense @@ -183,6 +184,13 @@ def test_initial_weights_conserve_and_split_mass(cps, acs, clones, mass) -> None rtol=1e-9) if len(acs): assert np.allclose(acs_out, acs_w * (acs_out.sum() / acs_w.sum()), rtol=1e-9) + # Linear in the mass, so the driver's population mass repair (a common + # rescale) makes the repaired weights independent of it. + cps_k, acs_k = arm_initial_weights( + cps_design_weights=weights, cps_income_year=years, cps_copies=copies, + acs_design_weights=acs_w, counts=counts, total_mass=2.5 * mass, + ) + assert np.allclose(cps_k, 2.5 * cps_out, rtol=1e-12) and np.allclose(acs_k, 2.5 * acs_out, rtol=1e-12) def test_initial_weights_refuse_bad_inputs() -> None: diff --git a/tools/bakeoff_us_support_mix.py b/tools/bakeoff_us_support_mix.py index 5b57bcccaf..2947d55c54 100644 --- a/tools/bakeoff_us_support_mix.py +++ b/tools/bakeoff_us_support_mix.py @@ -18,7 +18,7 @@ the sparse target matrix, calls the production ``_optimize`` and scores. Subcommands, in order: compile, shard, spm-flags, materialize, diffcheck, -truth, arm (or run-grid for every arm), report. Every subcommand writes a JSON +partcheck, truth, arm (or run-grid for every arm), report. Every subcommand writes a JSON receipt with wall time and peak RSS. """ @@ -487,6 +487,8 @@ def spm_zero_adult_households(tables: dict[str, pd.DataFrame]) -> np.ndarray: """ hh, person = tables["household"], tables["person"] age = pd.to_numeric(person["age"], errors="coerce").fillna(0).to_numpy() + # Either role column alone still classifies its members; with neither, + # 15-17-year-old heads and spouses would silently count as minors. role_columns = [c for c in ("is_household_head", "is_household_spouse") if c in person] if not role_columns: raise ValueError("person table has neither is_household_head nor is_household_spouse") @@ -760,8 +762,10 @@ def arm_input_keys(arm: SupportMixArm) -> tuple[str, ...]: """The inputs an arm's result depends on. An arm without CPS years reads the CPS row index only for the starting - mass, which the population mass repair rescales away; an arm without a - budget has no ACS fill and no clones (clones draw geography from ACS rows). + mass, which the population mass repair rescales away (the starting + weights are linear in it), and for validations that raise rather than + change results; an arm without a budget has no ACS fill and no clones + (clones draw geography from ACS rows). """ keys = ["targets", "truth", "epochs"] if arm.cps_income_years: @@ -771,13 +775,20 @@ def arm_input_keys(arm: SupportMixArm) -> tuple[str, ...]: return tuple(keys) -def arm_inputs(digests: dict, arm: SupportMixArm) -> dict: - return {key: digests[key] for key in arm_input_keys(arm)} +#: Arm options that change results, with the value a receipt that does not +#: record them was solved under. +ARM_OPTION_DEFAULTS = {"exclude_gq": False} + + +def arm_inputs(digests: dict, arm: SupportMixArm, *, exclude_gq: bool = False) -> dict: + return {**{key: digests[key] for key in arm_input_keys(arm)}, "exclude_gq": bool(exclude_gq)} def inputs_current(previous: dict | None, current: dict) -> bool: """A receipt is current when every input its arm depends on is unchanged.""" - return isinstance(previous, dict) and all(previous.get(k) == v for k, v in current.items()) + return isinstance(previous, dict) and all( + previous.get(k, ARM_OPTION_DEFAULTS.get(k)) == v for k, v in current.items() + ) def rescore_refusal(previous: dict, inputs: dict, rows_digest: str) -> str | None: @@ -812,20 +823,36 @@ def shard_source_sha(work: Path, source: str) -> str: return json.loads((work / "shards" / source / "shard.json").read_text())["h5_sha256"] -def stale_concept_parts(directory: Path, source_sha: str) -> list[Path]: - """Materialized parts not built from the current shards' source h5. +def part_provenance(work: Path, source: str, summary: Path | None = None, *, with_summary: bool = True) -> dict: + """What a materialized part's values depend on besides its rows. + + The source h5 fixes the households, the compiled concept specs fix what + each column means (``measures.json`` names are positional), and the + reviewed-null summary fixes how null inputs were filled. + """ + provenance = { + "source_h5_sha256": shard_source_sha(work, source), + "concept_specs_sha256": sha256_file(work / "concept_specs.pkl"), + } + if with_summary: + provenance["summary_sha256"] = sha256_file(summary) if summary else None + return provenance + + +def stale_concept_parts(directory: Path, expected: dict) -> list[Path]: + """Materialized parts whose receipt does not match ``expected`` provenance. - A part's receipt records the h5 digest its shard came from; a part with - no receipt or another digest holds values for rows that may no longer - exist or may now be different households. + A part with no receipt, a different source h5, different concept specs + or a different null-fill summary may hold values for other households or + under other column meanings. """ stale = [] for path in sorted(directory.glob("shard_*.npz")): if path.name.endswith(".tmp.npz"): continue receipt = path.with_suffix(".json") - recorded = json.loads(receipt.read_text()).get("source_h5_sha256") if receipt.exists() else None - if recorded != source_sha: + recorded = json.loads(receipt.read_text()) if receipt.exists() else {} + if any(recorded.get(key, "missing") != value for key, value in expected.items()): stale.append(path) return stale @@ -846,18 +873,24 @@ def acs_rank(work: Path) -> np.ndarray: return rank +def compiled_measures(work: Path) -> list[str]: + """Column names of every materialized part, in order.""" + with open(work / "concept_specs.pkl", "rb") as handle: + return [spec.measure for spec in pickle.load(handle)] + ["state_income_tax"] + + def do_materialize(args) -> None: with open(args.work / "concept_specs.pkl", "rb") as handle: concept_specs = pickle.load(handle) - measures = [spec.measure for spec in concept_specs] + ["state_income_tax"] + measures = compiled_measures(args.work) shard_dir = args.work / "shards" / args.source out_dir = args.work / "concepts" / args.source out_dir.mkdir(parents=True, exist_ok=True) - source_sha = shard_source_sha(args.work, args.source) - stale = stale_concept_parts(out_dir, source_sha) + provenance = part_provenance(args.work, args.source, args.summary) + stale = stale_concept_parts(out_dir, provenance) if stale and not args.replace_stale: raise SystemExit(f"{len(stale)} {args.source} concept parts (e.g. {stale[0].name}) were not built " - "from the current shards; rerun with --replace-stale to rebuild them") + "from the current shards, concept specs and summary; rerun with --replace-stale") for path in stale: for old in (path, path.with_suffix(".rows.npy"), path.with_suffix(".json")): old.unlink(missing_ok=True) @@ -911,7 +944,7 @@ def do_materialize(args) -> None: sp.save_npz(out.with_suffix(".tmp.npz"), csr) out.with_suffix(".tmp.npz").replace(out) write_json(out.with_suffix(".json"), { - "shard": shard_path.name, "source_h5_sha256": source_sha, + "shard": shard_path.name, **provenance, "rank_range": [low, high] if args.rank_range else None, "households": len(household), "nnz": int(csr.nnz), "missing_measures": missing, "compiled_concepts": len(compiled), @@ -927,6 +960,76 @@ def do_materialize(args) -> None: write_json(out_dir / "measures.json", measures) +def do_partcheck(args) -> None: + """Differential: re-materialize a sample of each stored part's households + with the current concept specs and compare with the stored values. + + Guards against parts whose columns no longer mean what ``measures.json`` + says (a part built under other concept specs) or whose rows are other + households. ``--shards`` points at shard pickles cut from the same h5 when + the work directory's own were removed. + """ + started = time.time() + with open(args.work / "concept_specs.pkl", "rb") as handle: + concept_specs = pickle.load(handle) + measures = compiled_measures(args.work) + shards_dir = args.shards or (args.work / "shards" / args.source) + shard_sha = json.loads((shards_dir / "shard.json").read_text())["h5_sha256"] + if shard_sha != shard_source_sha(args.work, args.source): + raise SystemExit(f"{shards_dir} was cut from another h5 than the work directory's {args.source} shards") + rows = pd.read_parquet(args.work / f"rows_{args.source}.parquet", columns=["household_id", "shard"]) + parts = sorted(p for p in (args.work / "concepts" / args.source).glob("shard_*.npz") + if not p.name.endswith(".tmp.npz")) + if args.parts: + wanted = {x.strip() for x in args.parts.split(",") if x.strip()} + parts = [p for p in parts if p.stem in wanted] + rng = np.random.default_rng(20260930) + results = {} + for path in parts: + wait_for_memory(args.min_available_gb) + shard = int(path.stem.split("_")[1].split(".")[0]) + rows_path = path.with_suffix(".rows.npy") + positions = (np.load(rows_path) if rows_path.exists() + else np.flatnonzero(rows["shard"].to_numpy() == shard)) + stored = sp.load_npz(path).tocsr() + if stored.shape != (len(positions), len(measures)): + raise SystemExit(f"{path.name}: shape {stored.shape} vs {len(positions)} rows x {len(measures)} measures") + pick = np.sort(rng.choice(len(positions), min(args.per_part, len(positions)), replace=False)) + hh_ids = rows["household_id"].to_numpy()[positions[pick]] + frame = _load_shard_frame(shards_dir / f"shard_{shard:03d}.pkl") + frame = frame.select(np.isin(frame.table("person")["person_household_id"].to_numpy(), hh_ids)) + household, _, _, _ = _materialize_frame(frame, concept_specs, summary_path=args.summary, batch=args.batch) + order = pd.Series(np.arange(len(household)), index=household["household_id"].to_numpy()).reindex(hh_ids) + if order.isna().any(): + raise SystemExit(f"{path.name}: sampled households missing from the re-materialized frame") + fresh = np.column_stack([ + household[m].to_numpy(np.float64) if m in household.columns else np.zeros(len(household)) + for m in measures + ])[order.to_numpy().astype(np.int64)] + old = stored[pick].toarray().astype(np.float64) + scaled = np.abs(fresh - old).max(axis=0) / np.maximum(1.0, np.abs(fresh).max(axis=0)) + bad = np.flatnonzero(scaled > args.tolerance) + results[path.name] = { + "households": int(len(pick)), "max_scaled_abs_diff": float(scaled.max()), + "columns_over_tolerance": [measures[j] for j in bad[:20]], "n_columns_over_tolerance": int(len(bad)), + } + log(f"partcheck {args.source} {path.name}: {len(pick)} hh, max scaled diff {scaled.max():.2e}, " + f"{len(bad)} columns over {args.tolerance:g}") + del frame, household + gc.collect() + receipt = { + "source": args.source, "shards": str(shards_dir), "source_h5_sha256": shard_sha, + "concept_specs_sha256": sha256_file(args.work / "concept_specs.pkl"), + "summary_sha256": sha256_file(args.summary) if args.summary else None, + "tolerance": args.tolerance, "per_part": args.per_part, "parts": results, + "max_scaled_abs_diff": max((r["max_scaled_abs_diff"] for r in results.values()), default=0.0), + "wall_s": round(time.time() - started, 1), "peak_rss_gb": round(peak_rss_gb(), 2), + } + write_json(args.work / f"partcheck_{args.source}.json", receipt) + if any(r["n_columns_over_tolerance"] for r in results.values()): + raise SystemExit(f"partcheck {args.source}: stored values disagree with the current concept specs") + + # ------------------------------------------------------------------ diffcheck @@ -1127,13 +1230,15 @@ class _ConceptStore: def __init__(self, work: Path, source: str): directory = work / "concepts" / source - stale = stale_concept_parts(directory, shard_source_sha(work, source)) + stale = stale_concept_parts(directory, part_provenance(work, source, with_summary=False)) if stale: raise RuntimeError(f"{len(stale)} {source} concept parts (e.g. {stale[0].name}) were not built " - "from the current shards; rerun materialize --replace-stale") + "from the current shards and concept specs; rerun materialize --replace-stale") shard_of = pd.read_parquet(work / f"rows_{source}.parquet", columns=["shard"])["shard"].to_numpy() n_rows = len(shard_of) self.measures = json.loads((directory / "measures.json").read_text()) + if self.measures != compiled_measures(work): + raise RuntimeError(f"{source} measures.json disagrees with concept_specs.pkl; rerun materialize") rows_parts, parts = [], [] self.materialized = np.zeros(n_rows, dtype=bool) for path in sorted(directory.glob("shard_*.npz")): @@ -1226,7 +1331,7 @@ def do_arm(args) -> None: arm = parse_arm(args.arm) out = args.work / "arms" / args.product / f"{arm.label}.json" previous = json.loads(out.read_text()) if out.exists() else None - inputs = arm_inputs(input_digests(args.work, args.truth, args.epochs), arm) + inputs = arm_inputs(input_digests(args.work, args.truth, args.epochs), arm, exclude_gq=args.exclude_gq) rescore = ( previous is not None and out.with_suffix(".weights.npy").exists() and not args.force and (args.rescore or not previous.get("scored_all_levels")) @@ -1331,6 +1436,8 @@ def do_arm(args) -> None: if unmaterialized: raise SystemExit(f"{arm.label}: {unmaterialized} {source} rows are not materialized yet") blocks.append(stores[source].matrix[needed]) + if len({tuple(store.measures) for store in stores.values()}) > 1: + raise SystemExit("CPS and ACS concept stores disagree on their columns") measures = next(iter(stores.values())).measures values = sp.vstack(blocks, format="csr") del stores @@ -1564,10 +1671,19 @@ def do_run_grid(args) -> None: def do_report(args) -> None: records, acs_records, summary = [], [], [] + expected = {(product, arm.label) for product in ("national", "local") for arm in arm_grid(True, args.newest_year)} + digests = input_digests(args.work, args.truth, args.epochs) + stale = [] for path in sorted((args.work / "arms").glob("*/*.json")): receipt = json.loads(path.read_text()) - base = {"arm": receipt["arm"], "product": receipt["product"]} + if (receipt["product"], receipt["arm"]) not in expected: + log(f"report: skipping {receipt['product']} {receipt['arm']} (not in the {args.newest_year} grid)") + continue arm = parse_arm(receipt["arm"]) + if not inputs_current(receipt.get("inputs"), arm_inputs(digests, arm)): + stale.append(f"{receipt['product']} {receipt['arm']}") + continue + base = {"arm": receipt["arm"], "product": receipt["product"]} base.update({"budget": arm.budget or 0, "cps_years": len(arm.cps_income_years), "acs_fill_share": arm.acs_fill_share, "seed": arm.seed}) for t in receipt["holdout_targets"]: @@ -1585,7 +1701,9 @@ def do_report(args) -> None: **{f"runtime_{k}": v for k, v in receipt["runtime"].items()}, **{f"report_{k}": (v["calibrated"] if isinstance(v, dict) else v) for k, v in receipt["report_only"].items()}}) - expected = {(product, arm.label) for product in ("national", "local") for arm in arm_grid(True, args.newest_year)} + if stale and not args.allow_stale: + raise SystemExit(f"{len(stale)} receipts are stale against the current inputs (e.g. {stale[:3]}); " + "re-solve them or pass --allow-stale to leave them out") missing = sorted(expected - {(r["product"], r["arm"]) for r in summary}) if missing and not args.allow_missing: raise SystemExit(f"{len(missing)} expected receipts missing (e.g. {missing[:3]}); " @@ -1746,6 +1864,16 @@ def main(argv=None) -> None: m.add_argument("--min-available-gb", type=float, default=20.0) m.add_argument("--replace-stale", action="store_true", help="delete and rebuild parts not built from the current shards' source h5") + pc = sub.add_parser("partcheck") + pc.add_argument("--work", type=Path, required=True) + pc.add_argument("--source", choices=("cps", "acs"), required=True) + pc.add_argument("--shards", type=Path, help="shard pickles cut from the same h5 (default: the work directory's)") + pc.add_argument("--summary", type=Path) + pc.add_argument("--parts", help="comma-separated part stems (default: every part)") + pc.add_argument("--per-part", type=int, default=200) + pc.add_argument("--tolerance", type=float, default=1e-5) + pc.add_argument("--batch", type=int, default=5_000) + pc.add_argument("--min-available-gb", type=float, default=20.0) d = sub.add_parser("diffcheck") d.add_argument("--work", type=Path, required=True) d.add_argument("--feed", type=Path, required=True) @@ -1789,11 +1917,14 @@ def main(argv=None) -> None: r.add_argument("--out", type=Path, required=True) r.add_argument("--newest-year", type=int, default=NEWEST_INCOME_YEAR) r.add_argument("--allow-missing", action="store_true", help="write a report even if receipts are missing") + r.add_argument("--truth", type=Path, required=True) + r.add_argument("--epochs", type=int, default=1_500) + r.add_argument("--allow-stale", action="store_true", help="leave stale receipts out instead of refusing") args = parser.parse_args(argv) { "compile": do_compile, "shard": do_shard, "materialize": do_materialize, "diffcheck": do_diffcheck, "truth": do_truth, "arm": do_arm, "report": do_report, - "run-grid": do_run_grid, "spm-flags": do_spm_flags, + "run-grid": do_run_grid, "spm-flags": do_spm_flags, "partcheck": do_partcheck, "grid": lambda a: print("\n".join(arm.label for arm in arm_grid(not a.no_largest, a.newest_year))), }[args.command](args) From 8472fba4abbe1243113ced66f768356e122092d1 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 30 Sep 2026 11:05:29 -0400 Subject: [PATCH 13/15] Receipts for the stored concept parts: partcheck matches the final specs partcheck re-materialized 200 households from each of the 8 CPS parts and 8 of the 62 ACS parts with the final concept specs and this branch's code: maximum scaled difference 5.8e-8 (float32 rounding). Three CPS parts predate the last compile, which added loss weights only; this confirms their columns. Re-running report on the 60 receipts reproduces every committed table byte for byte. The memo discloses the provenance fields added to the part receipts afterwards. Co-Authored-By: Claude Opus 5.5 --- docs/us-support-mix-bakeoff.md | 40 ++++++++---- .../us-support-mix-bakeoff-20260930/README.md | 1 + .../partcheck_acs.json | 62 +++++++++++++++++++ .../partcheck_cps.json | 62 +++++++++++++++++++ 4 files changed, 153 insertions(+), 12 deletions(-) create mode 100644 experiments/us-support-mix-bakeoff-20260930/partcheck_acs.json create mode 100644 experiments/us-support-mix-bakeoff-20260930/partcheck_cps.json diff --git a/docs/us-support-mix-bakeoff.md b/docs/us-support-mix-bakeoff.md index 5873146683..ce6d1641dc 100644 --- a/docs/us-support-mix-bakeoff.md +++ b/docs/us-support-mix-bakeoff.md @@ -201,7 +201,10 @@ value between epochs 1,000 and 1,500 (`arms.csv` has `loss_1000` and scored before scoring covered every level, the receipts carry the solve peak restored from the grid log and no solve wall time. Every receipt's `inputs` digests were added after its solve, once the tool recorded them, from the -files then in place (`inputs_note` says so in each receipt). +files then in place (`inputs_note` says so in each receipt). Each concept +part's receipt likewise had its source-h5, concept-spec and null-fill-summary +digests added afterwards, from `shard.json`, `concept_specs.pkl` and the +`partcheck` below (`*_note` fields). ## Design @@ -411,7 +414,8 @@ Income years 2020 and 2021 **pass**: their response rates are above the pinned years'; their whole-record imputation shares sit between the pre-pandemic years' and the pinned years'; their item-allocation shares are the highest of the seven years (22.6% and 21.8%) but within 1.6 points of -every other year; and homeownership and weight dispersion show no break. Three caveats: +every other year; and homeownership and weight dispersion show no break. +Three caveats: - Census asks users to take care comparing data years 2019, 2020 and 2021 with other years, and documents that nonrespondents in the 2020–2026 @@ -456,11 +460,13 @@ Rotation overlap: a housing unit appears in at most two adjacent files, so - Rerun on the newest three CPS years (2023–2025) once a Route A export on main at or after `5187fce25` exists: `shard --source cps` on it, `materialize - --source cps --replace-stale`, `diffcheck --sources cps`, then `run-grid - --newest-year 2025` and `report --newest-year 2025 --truth `. `materialize` refuses - concept parts cut from another source h5 unless told to replace them, and - each receipt carries digests of only the inputs its arm reads, so the - ACS-only arms are kept and every arm with CPS rows is solved fresh. + --source cps --replace-stale`, `diffcheck --sources cps`, `partcheck + --source cps`, then `run-grid --newest-year 2025` and `report --newest-year + 2025 --truth `. `materialize` refuses concept parts built from + another source h5, other concept specs or another null-fill summary unless + told to replace them, and each receipt carries digests of only the inputs + its arm reads, so the ACS-only arms are kept and every arm with CPS rows is + solved fresh. - Add five-year arms (2020–2024 or 2021–2025) once those years have Route A enrichment. - When `microcosm.build.us_runtime.target_split` merges, swap it in and @@ -476,16 +482,26 @@ Rotation overlap: a housing unit appears in at most two adjacent files, so (`diffcheck.json`). The ACS half was written by the tool on 2026-09-29; the CPS half is the tool's own log line from 2026-09-28, copied into the file after the CPS shard files were removed to free disk. +- Stored parts against the final concept specs: `partcheck` re-materialized + 200 households from each of the 8 CPS parts and 8 of the 62 ACS parts + (both rank ranges) with the final specs and the branch's code, and compared + every column with the stored values: maximum scaled difference 5.8e-8, + float32 rounding (`partcheck_cps.json`, `partcheck_acs.json`). Three CPS + parts were built before the last `compile`, which added loss weights only; + this confirms their columns. The CPS shards were rebuilt from the same h5 + for the check, and their row index equals the one the arms used. +- Re-running `report` on the 60 receipts reproduces every committed table + byte for byte. - Tests: `test_us_support_mix.py`, 22 tests (properties, the dense differential and the port-branch hash fixtures), and - `test_bakeoff_us_support_mix_tool.py`, 13 tests of the driver's SPM flag, + `test_bakeoff_us_support_mix_tool.py`, 15 tests of the driver's SPM flag, staleness guards, grid and report. -- Independent review (Opus 5.5, Subfleet), three rounds; every finding is +- Independent review (Opus 5.5, Subfleet), four rounds; every finding is fixed or stated here. - Receipts in `experiments/us-support-mix-bakeoff-20260930/`: the report - tables, `compile.json`, `diffcheck.json`, `spm_flags.json`, - `asec_quality.json` (with its script), `acs_truth.json`, and the - per-part materialization receipts under `materialize/`. + tables, `compile.json`, `diffcheck.json`, `partcheck_*.json`, + `spm_flags.json`, `asec_quality.json` (with its script), `acs_truth.json`, + and the per-part materialization receipts under `materialize/`. Reproduce: `compile`, `shard` (both sources), `truth`, `materialize` (both sources; ACS by rank range), `diffcheck`, `partcheck` (both sources), diff --git a/experiments/us-support-mix-bakeoff-20260930/README.md b/experiments/us-support-mix-bakeoff-20260930/README.md index dc9b26050e..0493e080c0 100644 --- a/experiments/us-support-mix-bakeoff-20260930/README.md +++ b/experiments/us-support-mix-bakeoff-20260930/README.md @@ -19,6 +19,7 @@ receipts. The design, verdict and caveats are in | `compile.json` | Registry compile: 32,842 specs, 419 concepts, split roles by level | | `diffcheck.json` | Production per-target columns vs concept × mask on 4,000 households per source: max scaled difference 0.0 | | `acs_truth.json` | ACS 2024 1-year summary-file cells and their SHA-256 | +| `partcheck_cps.json`, `partcheck_acs.json` | Stored concept parts re-materialized on 200 sampled households each with the final concept specs: max scaled difference 5.8e-8 | | `spm_flags.json` | ACS group-quarters share and the SPM zero-adult records excluded from the support (`spm-flags`) | | `materialize/` | Per-part engine-pass receipts (households, wall time, peak RSS) and the measure list | | `asec_quality.py`, `asec_quality.json` | CPS year response-quality check (script and its output) | diff --git a/experiments/us-support-mix-bakeoff-20260930/partcheck_acs.json b/experiments/us-support-mix-bakeoff-20260930/partcheck_acs.json new file mode 100644 index 0000000000..d7583dd0df --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/partcheck_acs.json @@ -0,0 +1,62 @@ +{ + "concept_specs_sha256": "ffedf394b91dafd353102a358ef7cf374eb518eb9f9164b8907e206b1bd60ab0", + "max_scaled_abs_diff": 5.82326495675032e-08, + "parts": { + "shard_000.r0-750000.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 0.0, + "n_columns_over_tolerance": 0 + }, + "shard_003.r750000-1210000.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 5.447629837039056e-08, + "n_columns_over_tolerance": 0 + }, + "shard_007.r0-750000.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 5.243655635500912e-08, + "n_columns_over_tolerance": 0 + }, + "shard_012.r750000-1210000.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 5.4455022574601887e-08, + "n_columns_over_tolerance": 0 + }, + "shard_015.r0-750000.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 5.82326495675032e-08, + "n_columns_over_tolerance": 0 + }, + "shard_021.r750000-1210000.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 4.908228158593294e-08, + "n_columns_over_tolerance": 0 + }, + "shard_028.r750000-1210000.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 4.239946725917378e-08, + "n_columns_over_tolerance": 0 + }, + "shard_030.r0-750000.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 5.025972904464072e-08, + "n_columns_over_tolerance": 0 + } + }, + "peak_rss_gb": 6.82, + "per_part": 200, + "shards": "/Users/maxghenis/PolicyEngine/_bakeoff-support-mix/work/shards/acs", + "source": "acs", + "source_h5_sha256": "ed2e63080aa39ab3681637590dc3dbac4bc9d01d163be9ee3c2ed28adc98d6ca", + "summary_sha256": "3aab5e5e0a6e226b90adf3c48f5f4d45fe51d716430be82b3455e88eafb6728d", + "tolerance": 1e-05, + "wall_s": 2042.4 +} \ No newline at end of file diff --git a/experiments/us-support-mix-bakeoff-20260930/partcheck_cps.json b/experiments/us-support-mix-bakeoff-20260930/partcheck_cps.json new file mode 100644 index 0000000000..daea5faf1b --- /dev/null +++ b/experiments/us-support-mix-bakeoff-20260930/partcheck_cps.json @@ -0,0 +1,62 @@ +{ + "concept_specs_sha256": "ffedf394b91dafd353102a358ef7cf374eb518eb9f9164b8907e206b1bd60ab0", + "max_scaled_abs_diff": 5.745301478087966e-08, + "parts": { + "shard_000.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 4.852139807865107e-08, + "n_columns_over_tolerance": 0 + }, + "shard_001.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 4.4159883064629645e-08, + "n_columns_over_tolerance": 0 + }, + "shard_002.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 4.814175938007279e-08, + "n_columns_over_tolerance": 0 + }, + "shard_003.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 5.3810296320387365e-08, + "n_columns_over_tolerance": 0 + }, + "shard_004.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 5.623471786395348e-08, + "n_columns_over_tolerance": 0 + }, + "shard_005.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 5.745301478087966e-08, + "n_columns_over_tolerance": 0 + }, + "shard_006.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 5.002892922832628e-08, + "n_columns_over_tolerance": 0 + }, + "shard_007.npz": { + "columns_over_tolerance": [], + "households": 200, + "max_scaled_abs_diff": 2.9203917845757813e-08, + "n_columns_over_tolerance": 0 + } + }, + "peak_rss_gb": 6.7, + "per_part": 200, + "shards": "/Users/maxghenis/PolicyEngine/_bakeoff-support-mix/partcheck/cps-shards/shards/cps", + "source": "cps", + "source_h5_sha256": "f7b46f4b83cb83f48ebe2a262a42495fcc18af85e96d4e5b52a63d2fe89d947b", + "summary_sha256": null, + "tolerance": 1e-05, + "wall_s": 2020.5 +} \ No newline at end of file From 4d45da896b244cd1f46a8a48637a6e25117b8093 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Mon, 9 Nov 2026 13:03:35 -0500 Subject: [PATCH 14/15] Fix the bake-off tool's rerun guards and correct the memo's receipt claims Review r5b (Subfleet job 20260930-114531-bakeoff-review-r5b) found four gaps that affect reruns and leave the recorded results alone: - Receipt digests now cover the concept specs and each source's measures.json, so a recompile that leaves the parts in place (new report specs, say) makes every receipt that reads them stale. - partcheck fails a column with a nonfinite value on either side, where a NaN difference used to pass every tolerance. - partcheck refuses an unknown or empty --parts selection, a --per-part under 1 and a negative or nonfinite --tolerance. - report --allow-stale alone leaves stale receipts out instead of also counting them as missing. Nine new tests cover them (test_bakeoff_us_support_mix_tool.py goes from 15 to 24). The memo and README stop pointing at the run's work directory, which no longer exists; the 60 arm receipts and the saved weights went with it. The memo now dates the byte-for-byte report check to 2026-09-30, says the committed materialize/ receipts predate the provenance digests, and restates the rerun follow-up for a fresh work directory. It also gets an active-voice pass and drops the review-round line, which the PR body keeps. Co-Authored-By: Claude Opus 5.5 --- docs/us-support-mix-bakeoff.md | 368 +++++++++--------- .../us-support-mix-bakeoff-20260930/README.md | 15 +- .../us/test_bakeoff_us_support_mix_tool.py | 106 ++++- tools/bakeoff_us_support_mix.py | 78 +++- 4 files changed, 367 insertions(+), 200 deletions(-) diff --git a/docs/us-support-mix-bakeoff.md b/docs/us-support-mix-bakeoff.md index ce6d1641dc..896c1effce 100644 --- a/docs/us-support-mix-bakeoff.md +++ b/docs/us-support-mix-bakeoff.md @@ -1,8 +1,8 @@ # US support mix: CPS years vs ACS rows at a fixed household budget -Status: bake-off run 2026-09-28 to 2026-09-30 on main `bda72cb02`, -policyengine-us 2.2.1, pinned Chronicle feed `b8543739` (32,842 targets); 30 -arms × 2 products, all scored. Receipts: +Status: the bake-off ran from 2026-09-28 to 2026-09-30 on main `bda72cb02`, +policyengine-us 2.2.1 and the pinned Chronicle feed `b8543739` (32,842 +targets), and scored all 60 calibrations (30 arms × 2 products). Receipts: [`experiments/us-support-mix-bakeoff-20260930/`](../experiments/us-support-mix-bakeoff-20260930/). Tool: [`tools/bakeoff_us_support_mix.py`](../tools/bakeoff_us_support_mix.py); primitives and invariants: @@ -29,7 +29,7 @@ trade-offs. - **National compact file: the newest three CPS years plus ACS to 300,000 source households.** With 2022–2024 that is 168,852 CPS households plus 131,148 ACS households, 484,080 physical rows (+37% over the three-year CPS - file's 352,932). Against the CPS-only file, averaged over three ACS draws: + file's 352,932). Against the CPS-only file, as means over three ACS draws: - held-out state CPS-native error falls from 0.119 to 0.113 (draw SD 0.0003) and district error from 0.353 to 0.291; - state income components improve (0.250 to 0.224), state tax items get @@ -54,8 +54,8 @@ trade-offs. alternative. If state tax items and serving cost outweigh everything else, the three-year CPS-only file remains the choice. -- **CD and county local file: the newest three CPS years plus ACS households, - not CPS location clones, to 1.2M source households.** That is 1,384,080 +- **CD and county local file: the newest three CPS years plus ACS households + to 1.2M source households, with no CPS location clones.** That is 1,384,080 physical rows, 13% fewer than today's 1,588,854-row ACS local file. At 1.2M: - held-out district CPS-native error ties the clones (0.169 against 0.170) @@ -88,8 +88,8 @@ trade-offs. Within a budget, each CPS year displaces ACS households. In the national file at 300k, one year against three (three draws each): state income 0.249 against 0.224 and tax items 0.130 against 0.113, both well beyond draw - noise; program receipt 0.241 against 0.198 is within the one-year arms' - draw noise (SD 0.041), and so is the loss-weighted state error (0.117 + noise; program receipt 0.241 against 0.198 falls within the one-year arms' + draw noise (SD 0.041), and so does the loss-weighted state error (0.117 against 0.113, SD 0.002). ACS-native error rises (state 0.086 to 0.110, district 0.166 to 0.188; county level at 0.255 and 0.259). The local file at 300k shows the same trade more strongly: tax items (0.137 to 0.103) and @@ -97,7 +97,7 @@ trade-offs. ACS-native error rises by a third or more (state 0.080 to 0.110, district 0.153 to 0.204). At 1.2M the displacement is small (see above). Income years 2020 and 2021 pass the response-quality check, so a five-year pool is - the next arm to run; it was not run here (see Follow-ups). + the next arm to run; this bake-off did not run it (see Follow-ups). - **Clones add geography and little else.** In the national file they leave every state measure where the CPS-only file had it. In both files they @@ -110,25 +110,26 @@ trade-offs. This matches the design note's reasoning. ACS rows carry real variation in what the ACS observes, so income components (the ACS records wages, self-employment, Social Security, retirement and interest, dividend and rental -income), housing and local geography improve as ACS rows enter. Program -receipt on ACS rows is imputed from CPS donors: beside three CPS years it -holds level at 131k ACS households, is clearly worse by 1.2M (0.239), and ACS -alone at 300k scores 0.303. +income), housing and local geography improve as ACS rows enter. ACS rows +draw program receipt from CPS donors: beside three CPS years, state program +receipt error holds level at 131k ACS households, turns clearly worse by 1.2M +(0.239), and reaches 0.303 for ACS alone at 300k. ## Results -All errors are capped relative error on held-out targets, `min(|est − target| -/ max(|target|, 1), 1)`; lower is better. "CPS-native" columns are -loss-weighted over all held-out CPS-native targets at the level; the -per-dimension columns are plain means. "ACS-native" averages households, -owner and renter households, contract rent, real-estate taxes and household -population against the ACS 2024 1-year tables (age bands, which count -group-quarters people only the ACS rows have, are in -`acs_native_by_level_measure.csv`). Rows are physical household rows (a CPS -household carries its PUF tax-detail clone rows); ESS is Kish over distinct -households (an ASEC housing unit counted once across rotation years, PUF rows -and clones). Rows marked "3 draws" average three disjoint ACS draws; the rest -are one draw. Tables are generated from the receipts by `memo_tables.py`. +Every column reports capped relative error on held-out targets, `min(|est − +target| / max(|target|, 1), 1)`; lower is better. The "CPS-native" columns +take the loss-weighted mean over every held-out CPS-native target at the +level; the per-dimension columns take plain means. "ACS-native" averages +households, owner and renter households, contract rent, real-estate taxes and +household population against the ACS 2024 1-year tables; +`acs_native_by_level_measure.csv` adds age bands, which count group-quarters +people only the ACS rows have. The Rows column counts physical household rows +(a CPS household carries its PUF tax-detail clone rows); ESS is Kish over +distinct households (each ASEC housing unit counts once across rotation +years, PUF rows and clones). The "3 draws" rows average three disjoint ACS +draws; each other row comes from one draw. `memo_tables.py` builds the tables +from `dimensions_by_arm.csv`. ### National product (4,828 train-role national and state targets) @@ -159,27 +160,27 @@ are one draw. Tables are generated from the receipts by `memo_tables.py`. | ACS only, 1.2M | 1,200,000 | 272,607 | 0.120 | 0.170 | 0.206 | 0.127 | 0.318 | 0.193 | 0.084 / 0.146 / 0.180 | | SD across 3 draws (300k, 2022–24) | | | 0.001 | 0.002 | 0.007 | 0.002 | 0.006 | 0.002 | 0.000 / 0.002 / 0.000 | -Differences under about twice the draw SD are noise. The one-year arms are -noisier than the three-year arms (program receipt SD 0.041 national and -0.024 local at 300k; `replicate_spread.csv`). National-level held-out -targets (36) are too few to rank arms and are left out of the tables; they -are in the receipts. +Differences under about twice the draw SD are noise. The one-year arms vary +more across draws than the three-year arms (program receipt SD 0.041 +national and 0.024 local at 300k; `replicate_spread.csv`). The 36 +national-level held-out targets are too few to rank arms, so the tables leave +them out; `holdout_by_dimension_level.csv` has them. **Calibration worsens held-out state age cells, in every arm.** The mean capped error on held-out Census PEP state age bands is 0.066 at the starting weights and 0.168 after calibration, across all 60 calibrations (0.131 to 0.193). The design weights already carry Census age controls, and the solve -trades them away for its training targets. The age column is reported, not -ranked on: it does separate arms (national 0.159 to 0.176, draw SD 0.005), but -every arm pays the trade, and its size is a finding about the calibration -objective, filed as a follow-up. - -**Report only: SPM poverty** (never calibrated or gated). In the national -product the SPM rate is 12.8% for the three-year CPS file, 12.2% for the -recommended 300k mix (seed 0) and 12.3% for ACS only; child SPM poverty is -14.7%, 13.6% and 12.3%. These rates include the ACS group-quarters persons +trades them away for its training targets. The tables report the age column +but rank no arm on it: it does separate arms (national 0.159 to 0.176, draw +SD 0.005), but every arm pays the trade, and its size says more about the +calibration objective than about the support (see Follow-ups). + +**Report only: SPM poverty** (no arm calibrates to it or gates on it). In the +national product the SPM rate is 12.8% for the three-year CPS file, 12.2% for +the recommended 300k mix (seed 0) and 12.3% for ACS only; child SPM poverty +is 14.7%, 13.6% and 12.3%. These rates include the ACS group-quarters persons still in the support, whom Census places outside the SPM universe; the tool -now excludes them, and these receipts predate that fix. ACS rows' SPM +now leaves them out, but these rates predate that fix. ACS rows' SPM resources rest on imputed CPS-only inputs, so the differences reflect the imputation as much as the support. @@ -194,17 +195,20 @@ imputation as much as the support. | Calibration, local clones to 1.2M (2.51M rows) | 55 to 210 min, 18 to 28 GB peak | | Serving | proportional to physical rows: 484k national (+37% over CPS only), 1.38M local (−13% against today's local file) | -Wall times were measured with the host at load 10 to 400 and compare only +We measured wall times with the host at load 10 to 400, so they compare only within this run. Training loss still fell a median 5.2% of its epoch-1,000 value between epochs 1,000 and 1,500 (`arms.csv` has `loss_1000` and -`loss_final`); every arm had the same 1,500-epoch budget. For 22 arms first -scored before scoring covered every level, the receipts carry the solve peak -restored from the grid log and no solve wall time. Every receipt's `inputs` -digests were added after its solve, once the tool recorded them, from the -files then in place (`inputs_note` says so in each receipt). Each concept -part's receipt likewise had its source-h5, concept-spec and null-fill-summary -digests added afterwards, from `shard.json`, `concept_specs.pkl` and the -`partcheck` below (`*_note` fields). +`loss_final`); every arm had the same 1,500-epoch budget. The tool first +scored 22 arms before scoring covered every level; for those, `arms.csv` +carries the solve peak from the grid log and no wall time (`runtime_restored` +names the log line). We added each arm receipt's `inputs` digests after its +solve, once the tool recorded them, from the files then in place, and each +receipt's `inputs_note` said so. We likewise added source-h5, concept-spec +and null-fill-summary digests afterwards to the work copies of the +concept-part receipts, from `shard.json`, `concept_specs.pkl` and the +`partcheck` below (`*_note` fields). The copies under `materialize/` predate +those digests; on 2026-09-30 their numerical fields matched the work +copies'. ## Design @@ -214,7 +218,7 @@ A **source household** is one survey household record: one ASEC household-year or one ACS household. Budgets count source households, as in the design note, so the 2022–2024 ASEC pool is 168,852. A CPS source household keeps its PUF tax-detail clone rows from the Route A pipeline, so -it spans two or three physical rows. The receipts report physical rows +it spans two or three physical rows. The tables report physical rows separately, and physical rows drive engine and serving cost. Each arm keeps every household of its CPS income years and fills the rest of @@ -225,10 +229,10 @@ the budget with: larger arm's; - **CPS location clones** (`acs000`): copies of the arm's own CPS households, each physical row drawing a new (district, county) within its state in - proportion to ACS household weight (group-quarters rows excluded), the way - Route A draws rows independently. A clone keeps its source row's engine + proportion to ACS household weight (leaving out group-quarters rows), the + way Route A draws rows independently. A clone keeps its source row's engine values, so anything that varies by county within a state (ACA benchmark - premiums by rating area) is carried from the origin county; + premiums by rating area) comes from the origin county; - a 50/50 mix (`acs050`, at 600k only). | Budget | CPS years | Fills | @@ -239,38 +243,40 @@ the budget with: | 600k | 2024; 2022–24 | 50/50 | | 300k | 2024; 2022–24 | ACS, replicates 1 and 2 | -That is 30 arms. Each is calibrated twice, once per product: +That is 30 arms. Each arm gets two calibrations, one per product: - **national compact**: the release's `national_state` surface (5,683 usable national and state targets, 4,828 of them train-role after the - split), with loss weights computed on that surface as the release does; + split), with loss weights the tool computes on that surface as the release + does; - **local**: the full surface, which adds 27,148 targets the release classifies as district targets (24,340 district-level, plus 2,808 state and national totals from the SOI district file), plus district household population (ACS B25008). The ACS local release trains district population - from its PUMA ladder instead; household population is used here so that - group-quarters rows, which only the ACS has, neither count toward nor are - pushed by the district total. + from its PUMA ladder instead; this bake-off uses household population so + that the district total neither counts nor moves group-quarters rows, which + only the ACS has. Replicate arms take the next disjoint blocks of the one fixed ACS order, so -they are independent draws; seed-0 arms are nested across budgets. -Group-quarters households (11.96% of ACS records) stay in the ACS side, as in -the ACS local release; the CPS has none. The 5,246 ACS records (0.34%, all -group quarters) whose SPM unit has no member the pinned engine counts as an -adult are excluded: policyengine-us 2.2.1 refuses them, and Census puts ACS -group quarters outside the SPM universe (`us_runtime/spm_universe_source.py`). +they are independent draws; seed-0 arms nest across budgets. Group-quarters +households (11.96% of ACS records) stay in the ACS side, as in the ACS local +release; the CPS has none. The bake-off drops the 5,246 ACS records (0.34%, +all group quarters) whose SPM unit has no member the pinned engine counts as +an adult: policyengine-us 2.2.1 refuses them, and Census puts ACS group +quarters outside the SPM universe (`us_runtime/spm_universe_source.py`). `shard` and `spm-flags` compute the flag with the engine's rule (`spm_flags.json`). -**Five CPS years were not run.** Income years 2020 and 2021 pass the +**This bake-off ran no five-year arm.** Income years 2020 and 2021 pass the response-quality check below, but main pinned ASEC role and person sources only for 2022–2024 when this ran, and the base and release stages that would -enrich two more years peaked at 72–80 GB in recorded runs, above this task's -60 GB ceiling, while a Route A release held the machine. The tool takes more -years as more rows, so a five-year arm is a rerun once a Route A export with -those years exists (see Follow-ups). The same holds for the newest three -years (2023–2025): the 2025 ASEC was pinned on 2026-09-29 -(PolicyEngine/microcosm#1044), after these CPS rows were built. +enrich two more years peaked at 72–80 GB in recorded runs, beyond this +task's 60 GB ceiling, while a Route A release held the machine. The tool +takes more years as more rows, so a five-year arm is a rerun once a Route A +export with those years exists (see Follow-ups). The same holds for the +newest three years (2023–2025): main pinned the 2025 ASEC on 2026-09-29 +(PolicyEngine/microcosm#1044), after the Route A export these CPS rows come +from. ### Superpool: one engine pass, many arms @@ -282,82 +288,85 @@ reweights subsets: income years 2022–2024, PUF clones, all enrichment stages), with design weights from its base. The run failed only its post-export smoke gate. - **ACS rows**: the 2026-09-23 ACS local staging (1,531,614 ACS 2024 1-year - households with CPS-only inputs transferred from the 57,240-household - receipt-qualified donor spine). The staging's own 57,240 donor rows are not - used. The staging carries `is_spm_independent_minor_role` as all-null on - ACS rows; the column is dropped so the engine derives the role from its - formula (`is_household_head | is_household_spouse`), as the production ACS - local build did. + households, whose CPS-only inputs the staging transferred from the + 57,240-household receipt-qualified donor spine). The bake-off leaves out + the staging's own 57,240 donor rows. The staging carries + `is_spm_independent_minor_role` as all-null on ACS rows; the tool drops the + column so the engine derives the role from its formula + (`is_household_head | is_household_spouse`), as the production ACS local + build did. Both carry the same PolicyEngine input schema (141 and 140 person inputs). -Imputations are fixed across arms: an ACS row's CPS-only variables come from -the same donor spine whatever CPS years the arm pools. The bake-off -therefore measures the support effect with donor quality held constant; in a -real rebuild, a one-year arm would also have a thinner donor pool. +Imputations stay the same across arms: an ACS row's CPS-only variables come +from the same donor spine whatever CPS years the arm pools. The bake-off +therefore measures the support effect while holding donor quality constant; +in a real rebuild, a one-year arm would also have a thinner donor pool. **Concepts.** The release materializer builds each state or district target's household column as a geography-free value times an indicator of the household's own state or district (`_base_simulation_household_columns`). `compile` groups the 32,842 targets into 419 such concepts, and `materialize` runs the release tool's own -`_materialize_target_frame` on them in household shards. Every arm's target -matrix is then concept value × geography mask, assembled sparse. `diffcheck` -verifies the identity on real rows (see Evidence). The 11 JCT -tax-expenditure targets need reform simulations and are excluded from every -arm. +`_materialize_target_frame` on them in household shards. The tool then +assembles every arm's target matrix, sparse, as concept value × geography +mask. `diffcheck` verifies the identity on real rows (see Evidence). The 11 +JCT tax-expenditure targets need reform simulations, so every arm leaves them +out. ### Holdout -The US holdout ("Port the UK holdout to US release targets") has not merged. -The bake-off mirrors its pending spec: SHA-256 of `salt + "\x1f" + key`, -sealed if below 0.05 on the sealed salt, otherwise held out if below 0.10 on -the holdout salt. The hash is tested against draws from the port branch's own -implementation (`PORT_BRANCH_FIXTURES`); the group-key and role rules follow -the port session's written spec, since its module had not been written. -District children take their state parent's key, so a held-out state total is -held out with all its districts; national and state targets are drawn -independently, so a held-out national total can still be pinned by trained -state targets. Vintage tokens are dropped from keys. The spec's pins, which -force some groups to train, are not mirrored, so this split differs from the -eventual release split for pinned groups. Sealed targets are neither trained -nor scored. +The US holdout ("Port the UK holdout to US release targets") had not merged +when this ran. The bake-off mirrors its pending spec: it hashes +`salt + "\x1f" + key` with SHA-256, seals a group whose hash on the sealed +salt falls below 0.05, and otherwise holds the group out if its hash on the +holdout salt falls below 0.10. Tests check the hash against draws from the +port branch's own implementation (`PORT_BRANCH_FIXTURES`); the group-key and +role rules follow the port session's written spec, since that session had +not yet written its module. District children take their state parent's +key, so holding out a state total holds out all its districts; the split +draws national and state targets independently, so trained state targets +can still pin a held-out national total. Keys drop vintage tokens. The +bake-off does not mirror the spec's pins, which force some groups to train, +so this split differs from the eventual release split for pinned groups. No +arm trains on or scores a sealed target. On the pinned feed: 27,711 train, 3,470 holdout (36 national, 787 state, 2,647 district), 1,661 sealed. **ACS-native truth.** The registry has no housing targets and no county -targets. ACS-native dimensions are scored against the ACS 2024 1-year -table-based summary file (B25003 tenure, B25060 and B25065 aggregate rent, -B25090 aggregate real-estate taxes, B25008 and B01003 population, B01001 age -and sex) at national, state, district (119th Congress) and county (the 850 -counties the 1-year file covers). None are calibrated, except district -household population (B25008) in the local product. These tables come from -the same ACS year as the ACS rows; the PUMS is a subsample of the published -sample and district and county are drawn from PUMA, so ACS rows do not -reproduce them by construction, but they share its sampling error. Treat -ACS-native scores as consistency with the published ACS. +targets. The bake-off scores ACS-native dimensions against the ACS 2024 +1-year table-based summary file (B25003 tenure, B25060 and B25065 aggregate +rent, B25090 aggregate real-estate taxes, B25008 and B01003 population, +B01001 age and sex) at national, state, district (119th Congress) and county +(the 850 counties the 1-year file covers). No arm calibrates to them, except +to district household population (B25008) in the local product. These +tables come from the same ACS year as the ACS rows; the PUMS subsamples the +published sample, and ACS rows take district and county as draws within +their PUMA, so ACS rows do not reproduce the tables by construction, but +they share the published sample's sampling error. ACS-native scores +therefore measure consistency with the published ACS. ### Calibration Every arm uses the production optimizer, `microcosm.calibrate.solve._optimize`, with the fiscal release's optimizer settings: Adam on log-weights, learning -rate 0.02, capped relative error (cap 1.0), mass conserved, max weight ratio 5, -the release's concept-budget loss weights computed once per surface (the -national_state surface for the national product, the full registry for the -local one) before the split, so train and holdout keep fixed weights; district -household-population rows weigh 1 each; no L0 pruning, so the row budget -stays fixed. A sparse operator with a precomputed transpose replaces the torch -sparse-CSR backward pass, which was the bottleneck; the objective and -projections are unchanged. +rate 0.02, capped relative error (cap 1.0), conserved mass, max weight ratio +5, and the release's concept-budget loss weights, which the tool computes +once per surface (the national_state surface for the national product, the +full registry for the local one) before the split, so train and holdout keep +fixed weights; district household-population rows weigh 1 each; no L0 +pruning, so the row budget stays fixed. A sparse operator with a precomputed +transpose replaces the torch sparse-CSR backward pass, which was the +bottleneck; the objective and projections stay the same. Starting weights: each CPS income year gets an equal share of the CPS mass; a household with *k* location copies splits its weight over 1 + *k* rows; CPS and ACS sides share mass in proportion to source households; then the release's population mass repair rescales to its 334.2M-person benchmark. -**Invariants** (property-tested in `test_us_support_mix.py`): an arm's CPS, -ACS and clone households sum to its budget; ACS selections are nested and -independent of input order; clone copies differ by at most one; starting +**Invariants** (`test_us_support_mix.py` tests each as a property): an arm's +CPS, ACS and clone households sum to its budget; ACS selections nest and do +not depend on input order; clone copies differ by at most one; starting weights are positive, sum to the requested mass, give each CPS year an equal share and split CPS and ACS in proportion to households; distinct-household ESS never exceeds row ESS or the distinct-unit count; the holdout role is a @@ -370,17 +379,18 @@ per-target materialization with concept × mask on real rows. - **Registry holdout**: capped relative error by dimension (CPS-native: income components, tax items, program receipt; ACS-native: PEP - demographics) and level, as a mean and loss-weighted. A target no row in the - arm can move scores as a miss (error 1), so every arm is averaged over the - same held-out set; a common-support table is reported too. Two held-out - targets are unsupported in every arm, and 22 in the one-year CPS-only arm. + demographics) and level, as a plain and a loss-weighted mean. A target no + row in the arm can move scores as a miss (error 1), so every arm's average + covers the same held-out set; a common-support table covers only targets + every arm supports. Two held-out targets lack support in every arm, and 22 + in the one-year CPS-only arm. - **ACS-native**: households, tenure, aggregate rent (the model's - `pre_subsidy_rent`, scored against both contract rent B25060 and gross rent + `pre_subsidy_rent`, against both contract rent B25060 and gross rent B25065) and real-estate taxes, household population (B25008), and total population, age and sex (B01003, B01001), by level including county. Household measures exclude group-quarters rows. -- **ESS** over distinct households: weights summed within each household unit, - then Kish; also the median across districts. +- **ESS** over distinct households: Kish on each household unit's total + weight; also the median across districts. - **Cost**: calibration wall time and peak RSS per arm; engine seconds per household from the materialization receipts; physical rows as the serving cost driver. @@ -388,9 +398,10 @@ per-target materialization with concept × mask on real rows. ## CPS year response quality -`census_cps_YYYY.h5` is keyed by income year (ASEC collected in YYYY+1). -`asec_quality.py` computes the table from the processed files and the Census -public-use archives; the response rates are Census's own. +In `census_cps_YYYY.h5`, YYYY is the income year; Census collects that +year's ASEC in YYYY+1. `asec_quality.py` computes the table from the +processed files and the Census public-use archives; the response rates are +Census's own. | Income year (ASEC) | Households | Combined response rate | Earners, whole record imputed | Earners, items allocated | Homeownership | UC recipients | |---|---|---|---|---|---|---| @@ -403,18 +414,18 @@ public-use archives; the response rates are Census's own. | 2024 (2025) | 55,762 | 60.1% | 19.3% | 21.5% | 65.1% | 1,400 | Combined response is basic-CPS times ASEC household response, from each -year's CPS ASEC Source and Accuracy statement. Imputation shares are -`A_FNLWGT`-weighted among wage earners (`I_ERNVAL` 9 is a whole imputed -record; 1–8 an allocated item). Household weights have a coefficient of +year's CPS ASEC Source and Accuracy statement. Imputation shares weight wage +earners by `A_FNLWGT` (`I_ERNVAL` 9 marks a whole imputed record; 1–8 an +allocated item). Household weights have a coefficient of variation of 0.598 to 0.610 and a Kish share of 0.729 to 0.737 in every year. The public-use archives give whole-supplement imputation (`FL_665`) of 20.5%, 19.9%, 19.2%, 17.8% and 16.7% for income years 2021 to 2025. -Income years 2020 and 2021 **pass**: their response rates are above the -pinned years'; their whole-record imputation shares sit between the -pre-pandemic years' and the pinned years'; their item-allocation shares are -the highest of the seven years (22.6% and 21.8%) but within 1.6 points of -every other year; and homeownership and weight dispersion show no break. +Income years 2020 and 2021 **pass**: their response rates exceed the pinned +years'; their whole-record imputation shares sit between the pre-pandemic +years' and the pinned years'; their item-allocation shares, the highest of +the seven years (22.6% and 21.8%), stay within 1.6 points of every other +year; and homeownership and weight dispersion show no break. Three caveats: - Census asks users to take care comparing data years 2019, 2020 and 2021 @@ -427,7 +438,7 @@ Three caveats: - About a third of each file's households repeat in the neighbouring year (32.5% to 37.8%). -Income year 2019 (ASEC 2020, collected as COVID hit) is the file that fails: +Income year 2019 (ASEC 2020, which Census collected as COVID hit) fails: homeownership jumps 1.9 points (64.5% to 66.4%) and falls back the next year, and the sample has 11.5% fewer households than the year before (60,460 against 68,345). @@ -438,40 +449,42 @@ Rotation overlap: a housing unit appears in at most two adjacent files, so ## Caveats -- **CPS rows are income years 2022–2024**, the Route A export available when - this ran. The recommendation is stated for "the newest three years"; the - 2023–2025 export is the rerun. -- **Imputations are held fixed.** ACS rows' CPS-only inputs come from one - 57,240-household donor spine in every arm. A production one-year build +- **The CPS rows cover income years 2022–2024**, from the Route A export + available when this ran. The recommendation names "the newest three + years"; a rerun would use the 2023–2025 export. +- **Imputations stay the same across arms.** ACS rows' CPS-only inputs come + from one 57,240-household donor spine in every arm. A production one-year build would also impute from a thinner donor pool. - **Clones keep their origin row's engine values**, including anything that varies by county within a state. -- **The holdout mirrors the unmerged US split without its pins.** Scores are - comparable across arms, not with the eventual release split. +- **The holdout mirrors the unmerged US split without its pins.** Scores + compare across arms, but the eventual release split would give different + ones. - **ACS-native truth is the published ACS 2024 1-year**, the same survey year - as the ACS rows. Read it as consistency with the published ACS. -- **Older CPS years are not uprated**, as in Route A; calibration absorbs the + as the ACS rows, so it measures consistency with the published ACS. +- **Nothing uprates older CPS years**, as in Route A; calibration absorbs the 2022–2024 nominal income gap. -- **5,246 group-quarters records with no SPM adult are out of the ACS - support**, pending the engine's SPM-universe input (policyengine-us#9462). -- **JCT tax-expenditure targets are excluded**; they need reform simulations. +- **The ACS support leaves out 5,246 group-quarters records with no SPM + adult**, pending the engine's SPM-universe input (policyengine-us#9462). +- **Every arm leaves out the JCT tax-expenditure targets**, which need reform + simulations. ## Follow-ups -- Rerun on the newest three CPS years (2023–2025) once a Route A export on main - at or after `5187fce25` exists: `shard --source cps` on it, `materialize - --source cps --replace-stale`, `diffcheck --sources cps`, `partcheck - --source cps`, then `run-grid --newest-year 2025` and `report --newest-year - 2025 --truth `. `materialize` refuses concept parts built from - another source h5, other concept specs or another null-fill summary unless - told to replace them, and each receipt carries digests of only the inputs - its arm reads, so the ACS-only arms are kept and every arm with CPS rows is - solved fresh. +- Rerun on the newest three CPS years (2023–2025) from a Route A export of + main at or after `5187fce25`. The run's work directory no longer exists, so + a rerun takes every step under Reproduce below, with `--newest-year 2025` on + `run-grid` and `report`. Within a rerun, `materialize` refuses a concept + part whose receipt is missing or names another source h5, other concept + specs or another null-fill summary, unless run with `--replace-stale`, and + an arm's receipt counts as current only while every input the arm reads + stays the same: the targets, truth and epoch count, and, for each source it + draws on, the row index, the concept parts, the concept specs and the + measure list. - Add five-year arms (2020–2024 or 2021–2025) once those years have Route A enrichment. - When `microcosm.build.us_runtime.target_split` merges, swap it in and - **re-solve**: a new split changes the training set, so saved weights cannot - simply be re-scored. + **re-solve** every arm: a new split changes the training set. - Find out why calibration worsens held-out state age cells 2.5-fold. ## Evidence @@ -479,25 +492,32 @@ Rotation overlap: a housing unit appears in at most two adjacent files, so - Differential: production per-target materialization against concept × mask, 4,000 households from each source, 349 state and district targets across nine family-level groups: maximum scaled difference 0.0 for both - (`diffcheck.json`). The ACS half was written by the tool on 2026-09-29; the - CPS half is the tool's own log line from 2026-09-28, copied into the file - after the CPS shard files were removed to free disk. + (`diffcheck.json`). The tool wrote the ACS half on 2026-09-29; the CPS half + is the tool's own log line from 2026-09-28, which we copied into the file + after removing the CPS shard files to free disk. - Stored parts against the final concept specs: `partcheck` re-materialized 200 households from each of the 8 CPS parts and 8 of the 62 ACS parts (both rank ranges) with the final specs and the branch's code, and compared every column with the stored values: maximum scaled difference 5.8e-8, float32 rounding (`partcheck_cps.json`, `partcheck_acs.json`). Three CPS - parts were built before the last `compile`, which added loss weights only; - this confirms their columns. The CPS shards were rebuilt from the same h5 - for the check, and their row index equals the one the arms used. -- Re-running `report` on the 60 receipts reproduces every committed table - byte for byte. + parts predate the last `compile`, which added loss weights only; this check + confirms their columns. For the check we rebuilt the CPS shards from the + same h5, and their row index equals the one the arms used. +- On 2026-09-30, rerunning `report` on the 60 arm receipts reproduced every + committed table byte for byte. Those receipts (10–15 MB each, with every + held-out target's estimate) and the saved weights stayed in the run's work + directory, which no longer exists, so the committed tables now carry the + record. - Tests: `test_us_support_mix.py`, 22 tests (properties, the dense differential and the port-branch hash fixtures), and - `test_bakeoff_us_support_mix_tool.py`, 15 tests of the driver's SPM flag, - staleness guards, grid and report. -- Independent review (Opus 5.5, Subfleet), four rounds; every finding is - fixed or stated here. + `test_bakeoff_us_support_mix_tool.py`, 24 tests of the driver's SPM flag, + staleness guards, `partcheck` rules, grid and report. +- After the run, the tool gained four guards a final review asked for: + receipt digests also cover the concept specs and the measure list, + `partcheck` fails a column with any nonfinite value and refuses an unknown + or empty part selection, and `--allow-stale` alone now writes a report. + The recorded checks had finite differences and matched every part they + named, so no committed number moves. - Receipts in `experiments/us-support-mix-bakeoff-20260930/`: the report tables, `compile.json`, `diffcheck.json`, `partcheck_*.json`, `spm_flags.json`, `asec_quality.json` (with its script), `acs_truth.json`, diff --git a/experiments/us-support-mix-bakeoff-20260930/README.md b/experiments/us-support-mix-bakeoff-20260930/README.md index 0493e080c0..291991c8d2 100644 --- a/experiments/us-support-mix-bakeoff-20260930/README.md +++ b/experiments/us-support-mix-bakeoff-20260930/README.md @@ -2,8 +2,8 @@ Outputs of `tools/bakeoff_us_support_mix.py report` over the 60 arm receipts (30 arms × national and local products), plus the compile and differential -receipts. The design, verdict and caveats are in -[`docs/us-support-mix-bakeoff.md`](../../docs/us-support-mix-bakeoff.md). +receipts. [`docs/us-support-mix-bakeoff.md`](../../docs/us-support-mix-bakeoff.md) +gives the design, verdict and caveats. | File | What | |---|---| @@ -19,11 +19,14 @@ receipts. The design, verdict and caveats are in | `compile.json` | Registry compile: 32,842 specs, 419 concepts, split roles by level | | `diffcheck.json` | Production per-target columns vs concept × mask on 4,000 households per source: max scaled difference 0.0 | | `acs_truth.json` | ACS 2024 1-year summary-file cells and their SHA-256 | -| `partcheck_cps.json`, `partcheck_acs.json` | Stored concept parts re-materialized on 200 sampled households each with the final concept specs: max scaled difference 5.8e-8 | -| `spm_flags.json` | ACS group-quarters share and the SPM zero-adult records excluded from the support (`spm-flags`) | +| `partcheck_cps.json`, `partcheck_acs.json` | Stored concept parts against a fresh materialization, under the final concept specs, of 200 sampled households per part: max scaled difference 5.8e-8 | +| `spm_flags.json` | ACS group-quarters share and the SPM zero-adult records the support leaves out (`spm-flags`) | | `materialize/` | Per-part engine-pass receipts (households, wall time, peak RSS) and the measure list | | `asec_quality.py`, `asec_quality.json` | CPS year response-quality check (script and its output) | | `memo_tables.py` | Builds the memo's results tables from these files | -Per-arm receipts (with every held-out target's estimate) and saved weights -stay in the run's work directory; they are 10–15 MB each. +The folder holds no per-arm receipts (10–15 MB each, with every held-out +target's estimate) and no saved weights. Both stayed in the run's work +directory, which no longer exists. The `materialize/` receipts predate the +source-h5, concept-spec and null-fill-summary digests the memo describes; on +2026-09-30 their numerical fields matched the work copies'. diff --git a/packages/microcosm-build/tests/engine_free/us/test_bakeoff_us_support_mix_tool.py b/packages/microcosm-build/tests/engine_free/us/test_bakeoff_us_support_mix_tool.py index 9246ee84db..5b534fa0c5 100644 --- a/packages/microcosm-build/tests/engine_free/us/test_bakeoff_us_support_mix_tool.py +++ b/packages/microcosm-build/tests/engine_free/us/test_bakeoff_us_support_mix_tool.py @@ -6,14 +6,20 @@ member the pinned engine counts as an adult, and the rule refuses a person table without household-role columns rather than falling back to age; - staleness: an arm's receipt depends only on the inputs and options its arm - reads, the concept digest moves with part contents (not just sizes), a - concept part is reusable only if built from the current shards' source h5, - concept specs and null-fill summary, and saved weights are re-scored only - for the same rows and inputs; + reads, the concept digest moves with part contents (not just sizes) and + with the concept specs and measure list, a concept part is reusable only if + built from the current shards' source h5, concept specs and null-fill + summary, and saved weights are re-scored only for the same rows and inputs; +- partcheck: a column fails when either side holds a nonfinite value or its + scaled difference exceeds the tolerance, and a check refuses an unknown or + empty part selection, a sample under one household and a negative or + nonfinite tolerance; - grid: ACS-only arms carry no years, so a grid on newer CPS years keeps them; - reporting: a report reads only current receipts of its own grid, - replicate tables cover only groups with more than one draw, and a report - with missing or stale receipts is refused unless asked for. + replicate tables cover only groups with more than one draw, a report + with missing or stale receipts is refused unless asked for, and + ``--allow-stale`` alone leaves stale receipts out without counting them as + missing. """ from __future__ import annotations @@ -158,6 +164,29 @@ def test_concept_digest_moves_with_contents_of_the_same_size(tool, tmp_path) -> assert tool._concept_digest(tmp_path, "acs") != second +def test_concept_digest_moves_with_what_the_columns_mean(tool, tmp_path) -> None: + """A recompile that leaves the parts in place (new report specs, say) + still makes a receipt from before it stale (review r5b, finding 1).""" + args = _report_work(tmp_path) + directory = tmp_path / "concepts" / "acs" + _write_part(directory, "shard_000", [[1.0, 0.0]], rows=[0]) + specs, measures = tmp_path / "concept_specs.pkl", directory / "measures.json" + specs.write_bytes(pickle.dumps([SimpleNamespace(measure="bakeoff_concept_00000")])) + measures.write_text(json.dumps(["bakeoff_concept_00000", "state_income_tax"])) + arm = tool.parse_arm("b300k.cps0.acs100.s0") + + def inputs(): + return tool.arm_inputs(tool.input_digests(tmp_path, args.truth, args.epochs), arm) + + solved = inputs() + assert tool.inputs_current(solved, inputs()) + specs.write_bytes(pickle.dumps([SimpleNamespace(measure="bakeoff_concept_00000", age_limit=17)])) + after_specs = inputs() + assert not tool.inputs_current(solved, after_specs) + measures.write_text(json.dumps(["state_income_tax", "bakeoff_concept_00000"])) + assert not tool.inputs_current(after_specs, inputs()) + + def test_stale_parts_are_those_not_built_from_the_current_provenance(tool, tmp_path) -> None: directory = tmp_path / "parts" current = {"source_h5_sha256": "new", "concept_specs_sha256": "specs", "summary_sha256": None} @@ -210,6 +239,55 @@ def test_a_recompile_makes_every_part_stale(tool, tmp_path) -> None: tool.do_materialize(_materialize_args(tmp_path, replace_stale=False)) +def test_partcheck_fails_nonfinite_and_out_of_tolerance_columns(tool) -> None: + fresh = np.array([[1.0, 2.0, np.nan, np.inf, 1.0, 3.0], + [1.0, 2.0, 1.0, np.inf, 1.0, 3.0]]) + stored = np.array([[1.0, 2.0, np.nan, np.inf, 1.5, 3.0], + [1.0, 2.0 + 1e-9, 1.0, np.inf, 1.0, np.nan]]) + scaled, bad = tool.partcheck_columns(fresh, stored, 1e-5) + assert bad.tolist() == [2, 3, 4, 5] + assert scaled[0] == 0.0 + assert scaled[1] == pytest.approx(5e-10) + assert scaled[4] == pytest.approx(0.5) + + +def test_a_nonfinite_value_fails_its_column_at_any_tolerance(tool) -> None: + """Exhaustive over a 2 x 3 sample: one nonfinite value on either side + fails exactly its own column, whatever the tolerance.""" + base = np.arange(6.0).reshape(2, 3) + assert tool.partcheck_columns(base, base.copy(), 0.0)[1].size == 0 + for side in ("fresh", "stored"): + for row in range(2): + for col in range(3): + for value in (np.nan, np.inf, -np.inf): + for tolerance in (0.0, 1e-5, 1e300): + fresh, stored = base.copy(), base.copy() + (fresh if side == "fresh" else stored)[row, col] = value + assert tool.partcheck_columns(fresh, stored, tolerance)[1].tolist() == [col] + + +def test_partcheck_refuses_unknown_and_empty_part_selections(tool, tmp_path) -> None: + parts = [tmp_path / "shard_000.npz", tmp_path / "shard_001.npz"] + assert tool.select_parts(parts, None) == parts + assert tool.select_parts(parts, " shard_001 ,") == parts[1:] + with pytest.raises(SystemExit, match="shard_007"): + tool.select_parts(parts, "shard_000,shard_007") + with pytest.raises(SystemExit, match="no stored parts"): + tool.select_parts(parts, ",") + with pytest.raises(SystemExit, match="no stored parts"): + tool.select_parts([], None) + + +@pytest.mark.parametrize(("per_part", "tolerance"), [ + (0, 1e-5), (200, -1e-5), (200, float("nan")), (200, float("inf")), +]) +def test_partcheck_refuses_a_bad_sample_size_or_tolerance(tool, tmp_path, per_part, tolerance) -> None: + args = argparse.Namespace(work=tmp_path, source="cps", shards=None, parts=None, per_part=per_part, + tolerance=tolerance, summary=None, batch=5_000, min_available_gb=0.0) + with pytest.raises(SystemExit, match="per-part|tolerance"): + tool.do_partcheck(args) + + def test_replicate_tables_cover_only_groups_with_several_draws(tool) -> None: table = pd.DataFrame({ "product": ["national"] * 5, @@ -249,3 +327,19 @@ def test_report_skips_other_grids_and_refuses_stale_receipts(tool, tmp_path) -> {"arm": "b300k.cps0.acs100.s0", "product": "national", "inputs": {"targets": "old"}})) with pytest.raises(SystemExit, match="1 receipts are stale"): tool.do_report(args) + + +def test_report_with_allow_stale_alone_leaves_stale_receipts_out(tool, tmp_path) -> None: + """Review r5b, finding 4: ``--allow-stale`` must not also need + ``--allow-missing`` for receipts that exist but are stale.""" + args = _report_work(tmp_path) + (tmp_path / "arms" / "local").mkdir() + for product in ("national", "local"): + for arm in tool.arm_grid(True, 2024): + (tmp_path / "arms" / product / f"{arm.label}.json").write_text(json.dumps( + {"arm": arm.label, "product": product, "inputs": {"targets": "old"}})) + with pytest.raises(SystemExit, match="60 receipts are stale"): + tool.do_report(args) + args.allow_stale = True + tool.do_report(args) + assert (args.out / "arms.csv").exists() diff --git a/tools/bakeoff_us_support_mix.py b/tools/bakeoff_us_support_mix.py index 2947d55c54..118d83c475 100644 --- a/tools/bakeoff_us_support_mix.py +++ b/tools/bakeoff_us_support_mix.py @@ -805,8 +805,16 @@ def rescore_refusal(previous: dict, inputs: dict, rows_digest: str) -> str | Non def _concept_digest(work: Path, source: str) -> str: - """Content digest of a source's materialized parts (values and row maps).""" + """Content digest of a source's materialized parts (values and row maps) + and of what their columns mean: the compiled concept specs and the + source's ``measures.json``. A recompile that leaves the parts in place, + such as one that changes only the report specs, still moves the digest, + so no receipt reads as current against columns that changed meaning. + """ digest = hashlib.sha256() + for meaning in (work / "concept_specs.pkl", work / "concepts" / source / "measures.json"): + digest.update(meaning.name.encode()) + digest.update((sha256_file(meaning) if meaning.exists() else "absent").encode()) for path in sorted((work / "concepts" / source).glob("shard_*.npz")): if path.name.endswith(".tmp.npz"): continue @@ -960,6 +968,37 @@ def do_materialize(args) -> None: write_json(out_dir / "measures.json", measures) +def select_parts(parts: list[Path], wanted: str | None) -> list[Path]: + """The stored parts ``--parts`` names, or every part when it names none. + + Refuses a stem that matches no stored part and an empty selection: either + would otherwise write a passing receipt that checked nothing. + """ + if wanted: + stems = {x.strip() for x in wanted.split(",") if x.strip()} + unknown = sorted(stems - {p.stem for p in parts}) + if unknown: + raise SystemExit(f"--parts names no stored part: {', '.join(unknown)}") + parts = [p for p in parts if p.stem in stems] + if not parts: + raise SystemExit("partcheck has no stored parts to check") + return parts + + +def partcheck_columns(fresh: np.ndarray, stored: np.ndarray, tolerance: float) -> tuple[np.ndarray, np.ndarray]: + """Each column's largest difference between fresh and stored values, + scaled by the column's largest fresh magnitude (at least 1), and the + columns that fail: those over ``tolerance``, and those with a nonfinite + value on either side, which a tolerance test alone would pass (a NaN + difference compares false with every tolerance). + """ + with np.errstate(invalid="ignore", over="ignore"): + scaled = np.abs(fresh - stored).max(axis=0) / np.maximum(1.0, np.abs(fresh).max(axis=0)) + over = scaled > tolerance + finite = np.isfinite(fresh).all(axis=0) & np.isfinite(stored).all(axis=0) & np.isfinite(scaled) + return scaled, np.flatnonzero(~finite | over) + + def do_partcheck(args) -> None: """Differential: re-materialize a sample of each stored part's households with the current concept specs and compare with the stored values. @@ -970,6 +1009,10 @@ def do_partcheck(args) -> None: the work directory's own were removed. """ started = time.time() + if not (math.isfinite(args.tolerance) and args.tolerance >= 0): + raise SystemExit(f"--tolerance must be a finite, nonnegative number, got {args.tolerance}") + if args.per_part < 1: + raise SystemExit(f"--per-part must be at least 1, got {args.per_part}") with open(args.work / "concept_specs.pkl", "rb") as handle: concept_specs = pickle.load(handle) measures = compiled_measures(args.work) @@ -978,11 +1021,9 @@ def do_partcheck(args) -> None: if shard_sha != shard_source_sha(args.work, args.source): raise SystemExit(f"{shards_dir} was cut from another h5 than the work directory's {args.source} shards") rows = pd.read_parquet(args.work / f"rows_{args.source}.parquet", columns=["household_id", "shard"]) - parts = sorted(p for p in (args.work / "concepts" / args.source).glob("shard_*.npz") - if not p.name.endswith(".tmp.npz")) - if args.parts: - wanted = {x.strip() for x in args.parts.split(",") if x.strip()} - parts = [p for p in parts if p.stem in wanted] + stored_parts = sorted(p for p in (args.work / "concepts" / args.source).glob("shard_*.npz") + if not p.name.endswith(".tmp.npz")) + parts = select_parts(stored_parts, args.parts) rng = np.random.default_rng(20260930) results = {} for path in parts: @@ -1007,14 +1048,17 @@ def do_partcheck(args) -> None: for m in measures ])[order.to_numpy().astype(np.int64)] old = stored[pick].toarray().astype(np.float64) - scaled = np.abs(fresh - old).max(axis=0) / np.maximum(1.0, np.abs(fresh).max(axis=0)) - bad = np.flatnonzero(scaled > args.tolerance) + scaled, bad = partcheck_columns(fresh, old, args.tolerance) + finite = np.isfinite(scaled) + largest = float(scaled[finite].max()) if finite.any() else None results[path.name] = { - "households": int(len(pick)), "max_scaled_abs_diff": float(scaled.max()), + "households": int(len(pick)), "max_scaled_abs_diff": largest, + "n_nonfinite_columns": int((~finite).sum()), "columns_over_tolerance": [measures[j] for j in bad[:20]], "n_columns_over_tolerance": int(len(bad)), } - log(f"partcheck {args.source} {path.name}: {len(pick)} hh, max scaled diff {scaled.max():.2e}, " - f"{len(bad)} columns over {args.tolerance:g}") + shown = "none finite" if largest is None else f"{largest:.2e}" + log(f"partcheck {args.source} {path.name}: {len(pick)} hh, max scaled diff {shown}, " + f"{len(bad)} columns failing ({int((~finite).sum())} nonfinite, tolerance {args.tolerance:g})") del frame, household gc.collect() receipt = { @@ -1022,7 +1066,8 @@ def do_partcheck(args) -> None: "concept_specs_sha256": sha256_file(args.work / "concept_specs.pkl"), "summary_sha256": sha256_file(args.summary) if args.summary else None, "tolerance": args.tolerance, "per_part": args.per_part, "parts": results, - "max_scaled_abs_diff": max((r["max_scaled_abs_diff"] for r in results.values()), default=0.0), + "max_scaled_abs_diff": max((r["max_scaled_abs_diff"] for r in results.values() + if r["max_scaled_abs_diff"] is not None), default=None), "wall_s": round(time.time() - started, 1), "peak_rss_gb": round(peak_rss_gb(), 2), } write_json(args.work / f"partcheck_{args.source}.json", receipt) @@ -1673,7 +1718,7 @@ def do_report(args) -> None: records, acs_records, summary = [], [], [] expected = {(product, arm.label) for product in ("national", "local") for arm in arm_grid(True, args.newest_year)} digests = input_digests(args.work, args.truth, args.epochs) - stale = [] + stale, stale_keys = [], set() for path in sorted((args.work / "arms").glob("*/*.json")): receipt = json.loads(path.read_text()) if (receipt["product"], receipt["arm"]) not in expected: @@ -1682,6 +1727,7 @@ def do_report(args) -> None: arm = parse_arm(receipt["arm"]) if not inputs_current(receipt.get("inputs"), arm_inputs(digests, arm)): stale.append(f"{receipt['product']} {receipt['arm']}") + stale_keys.add((receipt["product"], receipt["arm"])) continue base = {"arm": receipt["arm"], "product": receipt["product"]} base.update({"budget": arm.budget or 0, "cps_years": len(arm.cps_income_years), @@ -1704,7 +1750,11 @@ def do_report(args) -> None: if stale and not args.allow_stale: raise SystemExit(f"{len(stale)} receipts are stale against the current inputs (e.g. {stale[:3]}); " "re-solve them or pass --allow-stale to leave them out") - missing = sorted(expected - {(r["product"], r["arm"]) for r in summary}) + if stale: + log(f"report: leaving out {len(stale)} stale receipts (e.g. {stale[:3]})") + # A stale receipt that --allow-stale leaves out still exists, so it does + # not count as missing. + missing = sorted(expected - {(r["product"], r["arm"]) for r in summary} - stale_keys) if missing and not args.allow_missing: raise SystemExit(f"{len(missing)} expected receipts missing (e.g. {missing[:3]}); " "pass --allow-missing for a partial report") From fb91442b977d2b732d61b3ff0f7ccbb7ce50a184 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Mon, 9 Nov 2026 13:07:11 -0500 Subject: [PATCH 15/15] Give the bake-off memo's be-verb sentences real verbs A second voice pass over docs/us-support-mix-bakeoff.md: be-verb identities and comparisons become verbs with an actor ("ACS-native error runs 44% below the clones'", "the mean capped error ... rises from 0.066 to 0.168", "Budgets count source households"), and one long sentence on larger ACS fills splits in two. No number or claim changes. Co-Authored-By: Claude Opus 5.5 --- docs/us-support-mix-bakeoff.md | 301 ++++++++++++++++----------------- 1 file changed, 147 insertions(+), 154 deletions(-) diff --git a/docs/us-support-mix-bakeoff.md b/docs/us-support-mix-bakeoff.md index 896c1effce..f7efc78d91 100644 --- a/docs/us-support-mix-bakeoff.md +++ b/docs/us-support-mix-bakeoff.md @@ -12,22 +12,20 @@ primitives and invariants: Max, 2026-09-27: the ACS matters mainly as variation in the support, meaning more distinct households for calibration to choose among. Pooling more CPS -years is the other route to support, at full CPS richness. Cloning CPS -households to new locations adds rows that differ only in geography. At a -household budget we can afford to build and serve, which mix gives the best -held-out accuracy, for the national compact file and for the CD and county -local file? +years adds support another way, at full CPS richness. Cloning CPS households to +new locations adds rows that differ only in geography. At a household budget we +can afford to build and serve, which mix gives the best held-out accuracy, for +the national compact file and for the CD and county local file? ## Verdict -The headline metric is the release's own objective on held-out targets: the +The memo ranks arms by the release's own objective on held-out targets: the loss-weighted capped relative error over every held-out CPS-native target -(income components, tax items, program receipt) at a level, with the -release's fixed concept-budget weights. Per-dimension columns show the -trade-offs. +(income components, tax items, program receipt) at a level, with the release's +fixed concept-budget weights. Per-dimension columns show the trade-offs. - **National compact file: the newest three CPS years plus ACS to 300,000 - source households.** With 2022–2024 that is 168,852 CPS households plus + source households.** With 2022–2024 that comes to 168,852 CPS households plus 131,148 ACS households, 484,080 physical rows (+37% over the three-year CPS file's 352,932). Against the CPS-only file, as means over three ACS draws: - held-out state CPS-native error falls from 0.119 to 0.113 (draw SD @@ -38,66 +36,65 @@ trade-offs. - every ACS-native level improves (district 0.236 to 0.188, county 0.307 to 0.259). - Stopping at 300k is a cost call. Larger ACS fills keep lowering district - error (0.291, 0.266, 0.244 at 300k, 600k, 1.2M) but leave state error flat - at 300k and 1.2M (0.113) and slightly worse at 600k (0.115), edge state tax - items up (0.113, 0.116, 0.118) and do + The recommendation stops at 300k to hold down build and serving cost. Larger + ACS fills keep lowering district error (0.291, 0.266, 0.244 at 300k, 600k, + 1.2M). They leave state error flat at 300k and 1.2M (0.113) and slightly + worse at 600k (0.115), edge state tax items up (0.113, 0.116, 0.118) and do not help state program receipt (0.198, 0.225, 0.239; the 600k and 1.2M arms - are single draws, and only the 1.2M gap exceeds draw noise). The best - state-level arm is the 600k 50/50 fill (0.111; income 0.213, tax items - 0.112, program receipt 0.187) at 1,019,084 rows, 2.1 times the - recommendation. Against one CPS year plus ACS to 300k, three years buy state - income (0.249 to 0.224) and tax items (0.130 to 0.113) with ACS-native - accuracy (state 0.086 to 0.110, district 0.166 to 0.188). The - recommendation puts the CPS-native gains first; if ACS-native accuracy - matters as much for the national file, one year plus ACS is the - alternative. If state tax items and serving cost outweigh everything else, - the three-year CPS-only file remains the choice. - -- **CD and county local file: the newest three CPS years plus ACS households - to 1.2M source households, with no CPS location clones.** That is 1,384,080 - physical rows, 13% fewer than today's 1,588,854-row ACS local file. At - 1.2M: - - held-out district CPS-native error ties the clones (0.169 against 0.170) - at 55% of their rows, and state error is lower (0.112 against 0.114); - - ACS-native error is 44% lower in districts (0.141 against 0.253) and 31% - lower in counties (0.174 against 0.253); + each have one draw, and only the 1.2M gap exceeds draw noise). The 600k 50/50 + fill scores best at state level (0.111; income 0.213, tax items 0.112, + program receipt 0.187) with 1,019,084 rows, 2.1 times the recommendation's. + Against one CPS year plus ACS to 300k, three years buy state income (0.249 to + 0.224) and tax items (0.130 to 0.113) with ACS-native accuracy (state 0.086 + to 0.110, district 0.166 to 0.188). The recommendation puts the CPS-native + gains first; if ACS-native accuracy matters as much for the national file, + one year plus ACS offers the alternative. If state tax items and serving cost + outweigh everything else, the three-year CPS-only file wins. + +- **CD and county local file: the newest three CPS years plus ACS households to + 1.2M source households, with no CPS location clones.** That comes to + 1,384,080 physical rows, 13% fewer than today's 1,588,854-row ACS local file. + At 1.2M: + - held-out district CPS-native error ties the clones (0.169 against 0.170) at + 55% of their rows, and state error falls below theirs (0.112 against + 0.114); + - ACS-native error runs 44% below the clones' in districts (0.141 against + 0.253) and 31% below in counties (0.174 against 0.253); - the clones, and the CPS-only file, do better on state program receipt (0.218 and 0.220 against 0.256) and state tax items (0.096 and 0.101 against 0.117). The 50/50 fill at 600k splits the difference (program receipt 0.243, tax items 0.096, district ACS-native 0.209). - Against an ACS-only file of the same size (today's local file is 57,240 CPS - rows plus every ACS household), the three CPS years lower state CPS-native - error from 0.120 to 0.112, state program receipt from 0.318 to 0.256 and - state tax items from 0.127 to 0.117, and ACS-native error is no worse. - One CPS year instead of three saves 123k rows (9%) at 1.2M. There the data - do not separate them on CPS-native measures: district error is level - (0.169 each), and the state gaps (0.116 against 0.112; tax items 0.123 - against 0.117; program receipt 0.278 against 0.256, single draws) sit - within the one-year arms' draw noise, or for state error at its edge. One - year is better on ACS-native state and district measures (0.072 and 0.136 - against 0.078 and 0.141). Three years win at 300k, where there are three - draws of each: clearly on state error (0.119 against 0.112) and tax items - (0.137 against 0.103), and just beyond draw noise on program receipt (0.288 - against 0.237). The three-year choice rests on that, on the national - evidence below, and on the local file sharing the national file's CPS - support. + Against an ACS-only file of the same size (today's local file holds 57,240 + CPS rows plus every ACS household), the three CPS years lower state + CPS-native error from 0.120 to 0.112, state program receipt from 0.318 to + 0.256 and state tax items from 0.127 to 0.117, and do not raise ACS-native + error. One CPS year instead of three saves 123k rows (9%) at 1.2M. There the + data do not separate them on CPS-native measures: district error ties (0.169 + each), and the state gaps (0.116 against 0.112; tax items 0.123 against + 0.117; program receipt 0.278 against 0.256, single draws) sit within the + one-year arms' draw noise, or for state error at its edge. One year does + better on ACS-native state and district measures (0.072 and 0.136 against + 0.078 and 0.141). Three years win at 300k, where each has three draws: + clearly on state error (0.119 against 0.112) and tax items (0.137 against + 0.103), and just beyond draw noise on program receipt (0.288 against 0.237). + The three-year choice rests on that, on the national evidence below, and on + the local file sharing the national file's CPS support. - **More CPS years improve CPS-native measures and cost ACS-native ones.** - Within a budget, each CPS year displaces ACS households. In the national - file at 300k, one year against three (three draws each): state income 0.249 - against 0.224 and tax items 0.130 against 0.113, both well beyond draw - noise; program receipt 0.241 against 0.198 falls within the one-year arms' - draw noise (SD 0.041), and so does the loss-weighted state error (0.117 - against 0.113, SD 0.002). ACS-native error rises (state 0.086 to 0.110, - district 0.166 to 0.188; county level at 0.255 and 0.259). The local file at - 300k shows the same trade more strongly: tax items (0.137 to 0.103) and - program receipt (0.288 to 0.237) improve, state income is level, and - ACS-native error rises by a third or more (state 0.080 to 0.110, district - 0.153 to 0.204). At 1.2M the displacement is small (see above). Income - years 2020 and 2021 pass the response-quality check, so a five-year pool is - the next arm to run; this bake-off did not run it (see Follow-ups). + Within a budget, each CPS year displaces ACS households. In the national file + at 300k, one year against three (three draws each): state income 0.249 + against 0.224 and tax items 0.130 against 0.113, both well beyond draw noise; + program receipt 0.241 against 0.198 falls within the one-year arms' draw + noise (SD 0.041), and so does the loss-weighted state error (0.117 against + 0.113, SD 0.002). ACS-native error rises (state 0.086 to 0.110, district + 0.166 to 0.188; county level at 0.255 and 0.259). The local file at 300k + shows the same trade more strongly: tax items (0.137 to 0.103) and program + receipt (0.288 to 0.237) improve, state income holds level, and ACS-native + error rises by a third or more (state 0.080 to 0.110, district 0.153 to + 0.204). At 1.2M the trade shrinks (see above). Income years 2020 and 2021 + pass the response-quality check, so the next arm to run pools five years; + this bake-off did not run it (see Follow-ups). - **Clones add geography and little else.** In the national file they leave every state measure where the CPS-only file had it. In both files they @@ -118,18 +115,18 @@ receipt error holds level at 131k ACS households, turns clearly worse by 1.2M ## Results Every column reports capped relative error on held-out targets, `min(|est − -target| / max(|target|, 1), 1)`; lower is better. The "CPS-native" columns -take the loss-weighted mean over every held-out CPS-native target at the -level; the per-dimension columns take plain means. "ACS-native" averages -households, owner and renter households, contract rent, real-estate taxes and -household population against the ACS 2024 1-year tables; +target| / max(|target|, 1), 1)`; lower is better. The "CPS-native" columns take +the loss-weighted mean over every held-out CPS-native target at the level; the +per-dimension columns take plain means. "ACS-native" averages households, owner +and renter households, contract rent, real-estate taxes and household +population against the ACS 2024 1-year tables; `acs_native_by_level_measure.csv` adds age bands, which count group-quarters people only the ACS rows have. The Rows column counts physical household rows -(a CPS household carries its PUF tax-detail clone rows); ESS is Kish over -distinct households (each ASEC housing unit counts once across rotation -years, PUF rows and clones). The "3 draws" rows average three disjoint ACS -draws; each other row comes from one draw. `memo_tables.py` builds the tables -from `dimensions_by_arm.csv`. +(a CPS household carries its PUF tax-detail clone rows); ESS takes Kish's +formula over distinct households (each ASEC housing unit counts once across +rotation years, PUF rows and clones). The "3 draws" rows average three disjoint +ACS draws; each other row comes from one draw. `memo_tables.py` builds the +tables from `dimensions_by_arm.csv`. ### National product (4,828 train-role national and state targets) @@ -160,27 +157,27 @@ from `dimensions_by_arm.csv`. | ACS only, 1.2M | 1,200,000 | 272,607 | 0.120 | 0.170 | 0.206 | 0.127 | 0.318 | 0.193 | 0.084 / 0.146 / 0.180 | | SD across 3 draws (300k, 2022–24) | | | 0.001 | 0.002 | 0.007 | 0.002 | 0.006 | 0.002 | 0.000 / 0.002 / 0.000 | -Differences under about twice the draw SD are noise. The one-year arms vary -more across draws than the three-year arms (program receipt SD 0.041 -national and 0.024 local at 300k; `replicate_spread.csv`). The 36 -national-level held-out targets are too few to rank arms, so the tables leave -them out; `holdout_by_dimension_level.csv` has them. +We read differences under about twice the draw SD as noise. The one-year arms +vary more across draws than the three-year arms (program receipt SD 0.041 +national and 0.024 local at 300k; `replicate_spread.csv`). Too few to rank +arms, the 36 national-level held-out targets stay out of the tables; +`holdout_by_dimension_level.csv` has them. -**Calibration worsens held-out state age cells, in every arm.** The mean -capped error on held-out Census PEP state age bands is 0.066 at the starting -weights and 0.168 after calibration, across all 60 calibrations (0.131 to +**Calibration worsens held-out state age cells, in every arm.** Across all 60 +calibrations, the mean capped error on held-out Census PEP state age bands +rises from 0.066 at the starting weights to 0.168 after calibration (0.131 to 0.193). The design weights already carry Census age controls, and the solve -trades them away for its training targets. The tables report the age column -but rank no arm on it: it does separate arms (national 0.159 to 0.176, draw -SD 0.005), but every arm pays the trade, and its size says more about the +trades them away for its training targets. The tables report the age column but +rank no arm on it: it does separate arms (national 0.159 to 0.176, draw SD +0.005), but every arm pays the trade, and its size says more about the calibration objective than about the support (see Follow-ups). **Report only: SPM poverty** (no arm calibrates to it or gates on it). In the -national product the SPM rate is 12.8% for the three-year CPS file, 12.2% for -the recommended 300k mix (seed 0) and 12.3% for ACS only; child SPM poverty -is 14.7%, 13.6% and 12.3%. These rates include the ACS group-quarters persons -still in the support, whom Census places outside the SPM universe; the tool -now leaves them out, but these rates predate that fix. ACS rows' SPM +national product the SPM rate comes to 12.8% for the three-year CPS file, 12.2% +for the recommended 300k mix (seed 0) and 12.3% for ACS only, and child SPM +poverty to 14.7%, 13.6% and 12.3%. These rates include the ACS group-quarters +persons still in the support, whom Census places outside the SPM universe; the +tool now leaves them out, but these rates predate that fix. ACS rows' SPM resources rest on imputed CPS-only inputs, so the differences reflect the imputation as much as the support. @@ -214,19 +211,17 @@ copies'. ### Arms -A **source household** is one survey household record: one ASEC -household-year or one ACS household. Budgets count source households, as in -the design note, so the 2022–2024 ASEC pool is 168,852. A CPS source -household keeps its PUF tax-detail clone rows from the Route A pipeline, so -it spans two or three physical rows. The tables report physical rows -separately, and physical rows drive engine and serving cost. +Budgets count **source households**, as in the design note: each ASEC +household-year or ACS household counts once, so the 2022–2024 ASEC pool holds +168,852. A CPS source household keeps its PUF tax-detail clone rows from the +Route A pipeline, so it spans two or three physical rows. The tables report +physical rows separately, and physical rows drive engine and serving cost. Each arm keeps every household of its CPS income years and fills the rest of the budget with: - **ACS** households (`acs100`): the first *n* in a salted hash order of - `SERIALNO`, so a smaller arm's ACS households are always a subset of a - larger arm's; + `SERIALNO`, so a larger arm's ACS households always include a smaller arm's; - **CPS location clones** (`acs000`): copies of the arm's own CPS households, each physical row drawing a new (district, county) within its state in proportion to ACS household weight (leaving out group-quarters rows), the @@ -243,7 +238,7 @@ the budget with: | 600k | 2024; 2022–24 | 50/50 | | 300k | 2024; 2022–24 | ACS, replicates 1 and 2 | -That is 30 arms. Each arm gets two calibrations, one per product: +That makes 30 arms. Each arm gets two calibrations, one per product: - **national compact**: the release's `national_state` surface (5,683 usable national and state targets, 4,828 of them train-role after the @@ -258,23 +253,22 @@ That is 30 arms. Each arm gets two calibrations, one per product: only the ACS has. Replicate arms take the next disjoint blocks of the one fixed ACS order, so -they are independent draws; seed-0 arms nest across budgets. Group-quarters +they draw independently; seed-0 arms nest across budgets. Group-quarters households (11.96% of ACS records) stay in the ACS side, as in the ACS local -release; the CPS has none. The bake-off drops the 5,246 ACS records (0.34%, -all group quarters) whose SPM unit has no member the pinned engine counts as -an adult: policyengine-us 2.2.1 refuses them, and Census puts ACS group -quarters outside the SPM universe (`us_runtime/spm_universe_source.py`). -`shard` and `spm-flags` compute the flag with the engine's rule -(`spm_flags.json`). +release; the CPS has none. The bake-off drops the 5,246 ACS records (0.34%, all +group quarters) whose SPM unit has no member the pinned engine counts as an +adult: policyengine-us 2.2.1 refuses them, and Census puts ACS group quarters +outside the SPM universe (`us_runtime/spm_universe_source.py`). `shard` and +`spm-flags` compute the flag with the engine's rule (`spm_flags.json`). **This bake-off ran no five-year arm.** Income years 2020 and 2021 pass the -response-quality check below, but main pinned ASEC role and person sources -only for 2022–2024 when this ran, and the base and release stages that would -enrich two more years peaked at 72–80 GB in recorded runs, beyond this -task's 60 GB ceiling, while a Route A release held the machine. The tool -takes more years as more rows, so a five-year arm is a rerun once a Route A -export with those years exists (see Follow-ups). The same holds for the -newest three years (2023–2025): main pinned the 2025 ASEC on 2026-09-29 +response-quality check below, but main pinned ASEC role and person sources only +for 2022–2024 when this ran, and the base and release stages that would enrich +two more years peaked at 72–80 GB in recorded runs, beyond this task's 60 GB +ceiling, while a Route A release held the machine. The tool takes more years as +more rows, so a rerun can add a five-year arm once a Route A export with those +years exists (see Follow-ups). The same holds for the newest three years +(2023–2025): main pinned the 2025 ASEC on 2026-09-29 (PolicyEngine/microcosm#1044), after the Route A export these CPS rows come from. @@ -350,14 +344,14 @@ therefore measure consistency with the published ACS. Every arm uses the production optimizer, `microcosm.calibrate.solve._optimize`, with the fiscal release's optimizer settings: Adam on log-weights, learning -rate 0.02, capped relative error (cap 1.0), conserved mass, max weight ratio -5, and the release's concept-budget loss weights, which the tool computes -once per surface (the national_state surface for the national product, the -full registry for the local one) before the split, so train and holdout keep -fixed weights; district household-population rows weigh 1 each; no L0 -pruning, so the row budget stays fixed. A sparse operator with a precomputed -transpose replaces the torch sparse-CSR backward pass, which was the -bottleneck; the objective and projections stay the same. +rate 0.02, capped relative error (cap 1.0), conserved mass, max weight ratio 5, +and the release's concept-budget loss weights, which the tool computes once per +surface (the national_state surface for the national product, the full registry +for the local one) before the split, so train and holdout keep fixed weights; +district household-population rows weigh 1 each; no L0 pruning, so the row +budget stays fixed. A sparse operator with a precomputed transpose replaces the +torch sparse-CSR backward pass, which had bottlenecked the solve; the objective +and projections stay the same. Starting weights: each CPS income year gets an equal share of the CPS mass; a household with *k* location copies splits its weight over 1 + *k* rows; @@ -365,15 +359,15 @@ CPS and ACS sides share mass in proportion to source households; then the release's population mass repair rescales to its 334.2M-person benchmark. **Invariants** (`test_us_support_mix.py` tests each as a property): an arm's -CPS, ACS and clone households sum to its budget; ACS selections nest and do -not depend on input order; clone copies differ by at most one; starting -weights are positive, sum to the requested mass, give each CPS year an equal -share and split CPS and ACS in proportion to households; distinct-household -ESS never exceeds row ESS or the distinct-unit count; the holdout role is a -pure function of the group key and never moves with a vintage token. -**Differential**: the sparse target matrix equals a naive dense construction, -including cells that carry several targets; `diffcheck` compares production -per-target materialization with concept × mask on real rows. +CPS, ACS and clone households sum to its budget; ACS selections nest and do not +depend on input order; clone copies differ by at most one; starting weights +stay positive, sum to the requested mass, give each CPS year an equal share and +split CPS and ACS in proportion to households; distinct-household ESS never +exceeds row ESS or the distinct-unit count; the holdout role depends only on +the group key and never moves with a vintage token. **Differential**: the +sparse target matrix equals a naive dense construction, including cells that +carry several targets; `diffcheck` compares production per-target +materialization with concept × mask on real rows. ### Scoring @@ -398,10 +392,9 @@ per-target materialization with concept × mask on real rows. ## CPS year response quality -In `census_cps_YYYY.h5`, YYYY is the income year; Census collects that -year's ASEC in YYYY+1. `asec_quality.py` computes the table from the -processed files and the Census public-use archives; the response rates are -Census's own. +In `census_cps_YYYY.h5`, YYYY gives the income year; Census collects that +year's ASEC in YYYY+1. `asec_quality.py` computes the table from the processed +files and the Census public-use archives; the response rates come from Census. | Income year (ASEC) | Households | Combined response rate | Earners, whole record imputed | Earners, items allocated | Homeownership | UC recipients | |---|---|---|---|---|---|---| @@ -413,13 +406,13 @@ Census's own. | 2023 (2024) | 56,251 | 59.3% | 20.7% | 21.0% | 65.6% | 1,360 | | 2024 (2025) | 55,762 | 60.1% | 19.3% | 21.5% | 65.1% | 1,400 | -Combined response is basic-CPS times ASEC household response, from each +Combined response multiplies basic-CPS and ASEC household response, from each year's CPS ASEC Source and Accuracy statement. Imputation shares weight wage earners by `A_FNLWGT` (`I_ERNVAL` 9 marks a whole imputed record; 1–8 an -allocated item). Household weights have a coefficient of -variation of 0.598 to 0.610 and a Kish share of 0.729 to 0.737 in every year. -The public-use archives give whole-supplement imputation (`FL_665`) of 20.5%, -19.9%, 19.2%, 17.8% and 16.7% for income years 2021 to 2025. +allocated item). Household weights have a coefficient of variation of 0.598 to +0.610 and a Kish share of 0.729 to 0.737 in every year. The public-use archives +give whole-supplement imputation (`FL_665`) of 20.5%, 19.9%, 19.2%, 17.8% and +16.7% for income years 2021 to 2025. Income years 2020 and 2021 **pass**: their response rates exceed the pinned years'; their whole-record imputation shares sit between the pre-pandemic @@ -460,8 +453,9 @@ Rotation overlap: a housing unit appears in at most two adjacent files, so - **The holdout mirrors the unmerged US split without its pins.** Scores compare across arms, but the eventual release split would give different ones. -- **ACS-native truth is the published ACS 2024 1-year**, the same survey year - as the ACS rows, so it measures consistency with the published ACS. +- **ACS-native scores use the published ACS 2024 1-year tables**, from the same + survey year as the ACS rows, so they measure consistency with the published + ACS. - **Nothing uprates older CPS years**, as in Route A; calibration absorbs the 2022–2024 nominal income gap. - **The ACS support leaves out 5,246 group-quarters records with no SPM @@ -471,16 +465,15 @@ Rotation overlap: a housing unit appears in at most two adjacent files, so ## Follow-ups -- Rerun on the newest three CPS years (2023–2025) from a Route A export of - main at or after `5187fce25`. The run's work directory no longer exists, so - a rerun takes every step under Reproduce below, with `--newest-year 2025` on - `run-grid` and `report`. Within a rerun, `materialize` refuses a concept - part whose receipt is missing or names another source h5, other concept - specs or another null-fill summary, unless run with `--replace-stale`, and - an arm's receipt counts as current only while every input the arm reads - stays the same: the targets, truth and epoch count, and, for each source it - draws on, the row index, the concept parts, the concept specs and the - measure list. +- Rerun on the newest three CPS years (2023–2025) from a Route A export of main + at or after `5187fce25`. The run's work directory no longer exists, so a + rerun takes every step under Reproduce below, with `--newest-year 2025` on + `run-grid` and `report`. Within a rerun, `materialize` refuses a concept part + that lacks a receipt or whose receipt names another source h5, other concept + specs or another null-fill summary, unless run with `--replace-stale`, and an + arm's receipt counts as current only while every input the arm reads stays + the same: the targets, truth and epoch count, and, for each source it draws + on, the row index, the concept parts, the concept specs and the measure list. - Add five-year arms (2020–2024 or 2021–2025) once those years have Route A enrichment. - When `microcosm.build.us_runtime.target_split` merges, swap it in and @@ -489,12 +482,12 @@ Rotation overlap: a housing unit appears in at most two adjacent files, so ## Evidence -- Differential: production per-target materialization against concept × - mask, 4,000 households from each source, 349 state and district targets - across nine family-level groups: maximum scaled difference 0.0 for both +- Differential: production per-target materialization against concept × mask, + 4,000 households from each source, 349 state and district targets across nine + family-level groups: maximum scaled difference 0.0 for both (`diffcheck.json`). The tool wrote the ACS half on 2026-09-29; the CPS half - is the tool's own log line from 2026-09-28, which we copied into the file - after removing the CPS shard files to free disk. + reproduces the tool's own log line from 2026-09-28, which we copied into the + file after removing the CPS shard files to free disk. - Stored parts against the final concept specs: `partcheck` re-materialized 200 households from each of the 8 CPS parts and 8 of the 62 ACS parts (both rank ranges) with the final specs and the branch's code, and compared