Housing Forecast Methodologies
Household Types Methodology
Household Types Methodology
This methodology produces a side-by-side comparison of household composition at two points in time, for five household types, using American Community Survey data. The output supports a "what changed" view of a community's demographics rather than a continuous time series.
Time Points
The chart compares two ACS 5-year vintages:
- Baseline year:
COMPARISON_YEAR(the project-wide comparison year constant) - Current year:
MAX_DATA_YEAR(the most recent vintage in the warehouse)
Only geographies with valid data in both vintages are emitted. The ACS longitudinal API is used to load both years, so Connecticut county reaggregation and any municipal boundary changes are reconciled automatically via the geoid_crosswalk table.
Household Type Definitions
Five non-overlapping household types are tracked. Each type is defined as a numerator (the count of households or persons in that type) drawn from the ACS:
| Type | Numerator variables | Source table |
|---|---|---|
| Adults w/ roommates | b11015002 (households with 2+ persons, no relatives) | B11015 |
| Married w/ kids | b19131003 (married-couple families with children) | B19131 |
| Single parent w/ kids | b19131039 + b19131074 (male householder, no spouse, with kids; female householder, no spouse, with kids) | B19131 |
| Single person | b09021002 (population 18+ living alone) | B09021 |
| Senior alone | b09021023 (population 65+ living alone) | B09021 |
The numerators come from different tables (B11015 counts households, B19131 counts families, B09021 counts persons), so categories should not be summed across types. Each row in the output table is one type for one geoid; the values are absolute counts in the units used by the underlying table.
Output Table
| Column | Description |
|---|---|
geoid | Geography identifier |
name | Household-type label (one of the five rows above) |
year_baseline | Count at the baseline ACS vintage |
year_current | Count at the most recent ACS vintage |
The "year" terms refer to the value at that time point, not a year identifier. The actual ACS vintages are fixed for the whole run and surfaced in the chart UI; they are not stored per row.
Processing
Computation is fully vectorized across geographies: each household type's numerator columns are summed (with NaN treated as zero) over the indexed baseline and current dataframes in a single pass, then concatenated and upserted to app.household_types keyed on (geoid, name).
Data Sources
| Component | Source | Table |
|---|---|---|
| Living-alone counts (incl. seniors) | U.S. Census ACS | B09021 |
| Household composition | U.S. Census ACS | B11015 |
| Families by type | U.S. Census ACS | B19131 |