CA Residential Structure Panel
Annual residential housing stock estimates for California Census tracts (2010–2024), built from Overture Maps buildings, Census BPS permits, and CAL FIRE demolition data with bootstrap uncertainty quantification.
| Source Code | Data (v1.0 Release) | Methodology (PDF) |
A general-purpose annual panel of residential housing stock for California Census tracts, 2010–2024. Useful as a denominator for any tract-level housing analysis — turnover rates, wildfire exposure, supply growth — where HUD-USPS data access is unavailable and ACS rolling 5-year averages are too coarse.
The problem: No public dataset provides annual, tract-level residential structure counts for California. HUD-USPS vacancy data requires institutional registration. ACS B25001 is a 5-year rolling average. Owner-occupied stock (B25003) is endogenous to many research questions.
The approach: We combine three open data sources:
- Overture Maps (2024) — 15.6M California building footprints, spatially joined to 2010 Census tracts to establish a 2024 anchor count per tract
- Census BPS (2010–2024) — Annual county permits converted from units to structure footprints using PI-confirmed ratios (1-unit: 1.0, 5+ unit: 15.0), used to hind-cast the anchor backward in time
- CAL FIRE DINS (2013–2022) — 50,483 destroyed residential structures across 194 county-year events, correcting the hind-cast for wildfire demolitions
The hind-cast runs a backward cumulative sum from the 2024 anchor; each county’s annual total is downscaled to tracts using stable within-county Overture shares.
The bootstrap: Overture classifies only 31% of California buildings by subtype; the remaining 69% are unclassified. A 500-iteration bootstrap over the null-subtype absorption fraction — calibrated against ACS B25001 external validation — produces tract-level P5/P50/P95 uncertainty intervals. The bootstrap P50 tracks ACS housing units at ~82% (consistent with the unit/structure distinction) and dramatically outperforms the labeled-only point estimate in wildfire-affected counties (Butte: bootstrap 87,850 vs. ACS 98,743 pre-Camp Fire vs. point estimate 2,016).
Validation: An ACS B25001 challenger panel (2010–2024, with 2020→2010 tract crosswalk for 2021+ vintages) shows negative BPS–ACS Spearman rank correlation at the tract level (Overture classifies more buildings in sparse rural areas than in dense urban areas — the opposite of actual housing density). The recommended denominator strategy is ACS direct for 2010–2020, bootstrap P50 for 2021–2024.
Outputs (v1.0 release):
| File | Rows | Description |
|---|---|---|
tract_structure_panel.parquet | 120,855 | Point-estimate hind-cast (geoid × year) |
tract_structure_panel_bootstrap.parquet | 120,855 | Bootstrap P5/P50/P95/IQR |
tract_structure_panel_acs.parquet | 154,590 | ACS B25001 challenger panel |
county_permits_ca_2010_2024.parquet | 870 | County-level BPS permits |
tract_residential_counts_2024.parquet | 8,057 | Overture 2024 anchor per tract |
Tech: Python, geopandas, pandas, numpy, scipy, pyarrow, Overture Maps CLI, Census API