← gpu-pilot · json · source: energy/api/MODEL.md

Utilities Estimator — Model & Validation

RECS-2020-calibrated per-home usage model: the 5 dominant variables, NJ attribute backbone, and the validation table. · updated 2026-06-12 12:02

TL;DR

  • 5 dominant variables (HES-confirmed, RECS-fitted): heating fuel+equipment, sqft (ln elasticity 0.51 on heat), climate HDD/CDD (0.88/0.84), vintage (pre-1950 +33% heat vs 1980-99), occupants (drives DHW + plug loads). Per-end-use weighted regressions on RECS 2020 microdata (18,496 households), mean-recalibrated; coefficients auto-generated into coefficients.py.
  • nj_home_attributes in the commute DB: 2,540,595 NJ homes — MOD-IV class-2 parcels (2.49M) + county-assessor sqft via decoded parcel keys (1.18M) + CJMLS merge (34,984 matched, 68.5% of unique listing addresses). Coverage: sqft 47.1%, year_built 98.9%, lat/lon ~100%.
  • Heating-fuel regex on MLS remarks hits only 2.4% (1,506/61,609) — remarks are marketing copy; everyone else gets the NJ modal prior (gas, p=0.75). ETL ask: map the CJMLS RESO Heating/Cooling fields → near-100% fuel coverage.
  • Validation: NJ default home 9,732 kWh vs RECS NJ SF-detached 10,138 (−4%); EIA ~680-700 kWh/mo reproduced; PSE&G typical dual-fuel $286.83/mo inside the published band; 4 worked examples $274.54–$490.07/mo (the $490 is a 1907 oil-heated Montclair — oil ≈ 3.1× gas per MMBtu).
  • Pricing reuses the energy layer end-to-end: county→utility (EIA-861 bundled) × current-level factor (NJ ×1.207 ⇒ PSE&G 24.64 ¢/kWh), state $/therm + oil + propane latest, NJ BGS 2026 PTC, utility_savings_county alternatives scaled to the home's kWh.

MODEL.md — Home Utilities Cost Estimator

Built: 2026-06-12 on geocoder · Code: /home/krish/gpu-pilot/energy/api/ DB: commute @ 172.26.1.152:5433 (rates/prices from the energy layer, see ../ENERGY.md; home attributes in nj_home_attributes, built by etl_nj_attributes.py)

Product thesis (Krishna): consumer energy calculators ask ~20 questions; almost all of the answer is determined by 4–5 variables that we can pull from public records + MLS. So: derive inputs from data, let users override, always disclose which inputs were assumed vs observed.


1. What the reference tools ask

Efficiency Smart "Electricity Usage Calculator" (efficiencysmart.org/electricity-usage-calculator; page is bot-walled, content reconstructed from its public search snippets + the DOE companion page energy.gov/energysaver/estimating-appliance-and-home-electronic-energy-use): a bottom-up appliance calculator — your electric rate, home details, then per-device wattage × hours/day for HVAC, water heater, fridge, laundry, lighting, electronics; compares standard vs efficient models. Useful as a UX checklist of end uses; useless as a data model (nobody knows their wattages — exactly the 20-question problem we're avoiding).

LBL Home Energy Saver (HES) (homes.lbl.gov/home-energy-saver; engineering docs at sites.google.com/a/lbl.gov/hes-public/; full methodology report LBNL-51938, Mills, "Home Energy Saver: Documentation of Calculation Methodology, Input Data, and Infrastructure") is the reference residential model: DOE-2 hourly simulation for heating/cooling driven by building envelope (floor area, vintage-based insulation defaults, windows, infiltration), HVAC equipment + efficiency, TMY3 weather by zip; water heating driven by occupant count + equipment; appliances/MELs from engineering defaults. Two design facts we copy:

  1. Minimum-input mode: HES runs from just zip code + a few home basics, filling everything else from climate-zone/vintage defaults (largely RECS-derived) — validated "accurate, on average, to within 1% of actual energy use, majority of individual estimates within ±25%".
  2. End-use decomposition: heating, cooling, water heating, base load are modeled separately, each with its own drivers — not one regression on total bill.

We do not embed DOE-2; we fit the same end-use structure statistically on RECS 2020 microdata, which is itself the dataset HES uses for many defaults.

2. The five dominant variables (and why)

# Variable Role Evidence (our RECS 2020 weighted fits)
1 Primary heating fuel + equipment Decides which meter the largest single end use lands on, and its size: space heating is ~45% of US home site energy (RECS/EIA). Electric resistance vs heat pump differ ~2× Fuel-specific intercepts differ by fuel; heat-pump homes use 9% less space-heat kWh than resistance at same sqft/HDD (3,149 vs 3,463 kWh mean) despite being in colder placements
2 Conditioned floor area Scales heating, cooling and base load ln(sqft) elasticity: heat 0.51 (gas), cooling 0.64, base electric +1,299 kWh per 1,000 sqft. Sub-linear, exactly as HES's envelope physics predicts (perimeter/volume)
3 Location / climate (HDD65, CDD65) Weather is the multiplier on both thermal end uses ln(HDD) elasticity 0.88 on gas heat (≈proportional), ln(CDD) 0.84 on cooling kWh — the two largest t-stats in every fit
4 Vintage / year built Cheap, universally-available envelope proxy (insulation codes, air-tightness) pre-1950 homes use e^0.286 ≈ +33% gas heat vs 1980-99 stock; 2010+ −21%. Monotone across all five fuel fits
5 Occupant count Drives water heating (the #2 gas end use) + plug loads DHW = 10,347 + 3,129·occ kBTU (gas); base electric +624 kWh per person. Defaulted from bedrooms (RECS beds→occupants lookup) when unknown

Secondary (kept, but defaulted): home type (apartment −49% gas heat vs detached — shared walls), AC type (room AC −17% cooling kWh), water-heater fuel (NJ conditional prior: P(gas DHW | gas heat) = 0.89).

These five are also precisely the attributes available per-home from MOD-IV + MLS — which is the point.

3. Calibration — EIA RECS 2020 microdata

Source: data/recs2020_public_v7.csv (18,496 households, NWEIGHT national weights, includes per-household end-use disaggregation + HDD65/CDD65 + state). Fit by calibrate_recs.py → auto-generated coefficients.py. All regressions NWEIGHT-weighted; log-models mean-recalibrated so weighted predicted mean == weighted actual mean.

End use Form n R² (log) wmean actual
Space heat, gas ln(kBTU) ~ ln(sqft)+ln(HDD)+type+vintage 9,584 0.60 45,844 kBTU
Space heat, oil same 1,097 0.66 62,534 kBTU
Space heat, propane same 927 0.53 49,231 kBTU
Space heat, elec resistance same (kWh) 3,243 0.43 3,463 kWh
Space heat, heat pump same (kWh) 2,329 0.56 3,149 kWh
Cooling ln(kWh) ~ ln(sqft)+ln(CDD)+room-AC 16,084 0.44 2,326 kWh
Water heating (per fuel) linear in occupants (cap 6) 604–8,728 e.g. gas 18,190 kBTU
Base electric linear: occ + sqft + SF-detached 18,495 5,943 kWh

Units: RECS BTU columns are thousand BTU (kBTU). therms = kBTU/100; oil gal = kBTU/138.5; propane gal = kBTU/91.45. Gas-heated homes get +3,630 kBTU/yr "gas other" (cooking/dryer).

Climate: per-state NWEIGHT-weighted mean HDD65/CDD65 from the same microdata (51-state table embedded in coefficients.py; NJ = 4,516 HDD / 1,205 CDD) — self-consistent with the fits. County-level NOAA 1991–2020 normals are a noted refinement (NJ north–south spread is roughly ±10% HDD; sub-state climate is the smallest of the five effects here).

NJ priors (RECS NJ subsample, n=456): heating fuel 75.1% gas / 16.1% electric / 6.8% oil / 1.1% propane (AHS 2023 CBSA 35620 corroborates: 55% piped gas / 21% electric / 19% oil for the NY-NJ metro incl. NYC's oil/steam stock); 96.5% have AC; heat-pump share among electric-heated 18%; water-heater fuel conditional on heating fuel as above.

4. Pricing

Component Source (commute DB)
Electric ¢/kWh utility_service_territory (county→utility, largest bundled) + utility_rates_annual (EIA-861 2024 bundled avg) × current-level factor = latest EIA state monthly price ÷ state volume-weighted 2024 avg, clamped [0.9, 1.4]. NJ now: ×1.207 (23.12 Feb-2026 / 19.16) ⇒ PSE&G 20.42 → 24.64 ¢/kWh
Gas $/therm energy_prices natural_gas_therm state latest (NJ $1.341, Feb 2026) + $10/mo customer charge
Heating oil $/gal energy_prices heating_oil_no2 state latest (NJ $5.838, 2026-03-30)
Propane $/gal energy_prices propane state latest (NJ $3.821)
PTC NJ BGS-RSCP 2026 clearing prices (supply-only, eff. 2026-06-01): PSE&G 10.938 / ACE 11.275 / JCP&L 11.327 / RECO 12.057 ¢/kWh
Alternatives utility_savings_county Δ¢/kWh × this home's estimated kWh (county-adjacency caveat carried through)

5. Fallback ladder (per input, disclosed in sources)

  1. User override (request attributes block) — always wins.
  2. Resolved home from nj_home_attributes (address exact → zip+street → fuzzy prefix → nearest parcel ≤150 m).
  3. Derived default: occupants from beds (RECS lookup); water-heater fuel from NJ conditional prior; heating fuel from the ACS B25040 modal prior (tract → county ladder via acs_fuel_priors, source label acs_b25040_{level}_prior; loaded by load_fuel_priors.py — ACS 2024 5-yr, 3,222 counties national + 11,908 tracts NJ/NY/CT/PA). RECS state modal prior (NJ: natural gas, p=0.75) remains the final fallback for geographies without a loaded prior (label state_modal_prior).
  4. State average: sqft = state SF-detached mean (NJ 2,515), occupants = state mean (2.46), vintage = 1980-99 base group, climate = state HDD/CDD.

Confidence: high = sqft + year_built + heating fuel all observed/overridden; medium = sqft + year_built observed, fuel from prior; low = mostly defaults.

6. NJ attribute backbone — nj_home_attributes (2,540,595 homes)

source rows sqft year_built heating fuel (regex) zip lat/lon
modiv (parcel only) 2,489,506 1,155,710 (46.4%) 2,464,827 (99.0%) 0 0 ~100%
merged (parcel+MLS) 34,984 30,841 (88.2%) 34,923 (99.8%) 849 100% ~100%
cjmls (MLS only) 16,105 10,436 (64.8%) 14,358 (89.2%) 441 100% 100%
total 2,540,595 47.1% 98.9% 1,290 2.0% ~100%

Build notes: MOD-IV = tax_assessments (source nj_modiv, class 2 residential; has year_built + lat/lon but no sqft). Sqft comes from county_assessor_owners joined by reconstructed parcel key (district_block_lot; Bergen-style block/lot and Monmouth-style block.lot decoded) — 1,177,741 parcels — plus CJMLS living_area. CJMLS match rate vs parcels: 68.5% (34,984 of 51,089 unique listing addresses; exact normalized muni+street join, 1 ambiguous collision resolved by haversine).

Heating-fuel regex hit rate: 2.4% (1,506 of 61,609 CJMLS listings mention a recognizable fuel in public_remarks; 1,290 land in the final table). This is the weakest attribute by far — remarks are marketing copy. Stored as observations only (heating_fuel_source = 'remarks_regex', confidence 0.75–0.85); everyone else gets the state modal prior at estimate time. ⇒ ETL ask (flagged for Krishna): the CJMLS RESO feed carries standard Heating/Cooling lookup fields — adding them to the reso_etl mapping would take heating-fuel coverage from 2.4% to near-100% of listings and upgrade those homes from medium to high confidence.

7. Validation (required checks)

vs EIA NJ averages. EIA monthly form 861M: NJ residential ≈ 680–700 kWh/mo (8,160–8,400 kWh/yr) across all homes. RECS 2020 NJ weighted mean = 8,305 kWh ✓. Model default NJ single-family detached home (2,515 sqft) = 9,732 kWh vs RECS NJ SF-detached actual 10,138 kWh (−4.0%) — correctly above the all-homes average. NJ winter gas heating: model gas-heated default home = 777–825 therms/yr vs RECS NJ gas-heated weighted mean 908 therms (includes a prewar-skewed stock; a 1931 build estimates 825 ✓).

PSE&G typical-bill sanity. 2,000 sqft 1976 gas-heated colonial, 3BR, PSE&G dual fuel: 8,806 kWh ≈ 734 kWh/mo (PSE&G's "typical residential electric customer" benchmark is ~650–750 kWh/mo) and 814 therms/yr ⇒ $185.87 electric + $100.96 gas = $286.83/mo — inside PSE&G's published combined typical-bill band (~$270–310 at 2026 rates).

Worked examples (live API responses, 2026-06-12; full JSON in README):

Home Resolution Usage Est. monthly
121 Summit Ave, Lyndhurst (Bergen) — 1,664 sqft (MLS), 1931 (MOD-IV), gas (remarks regex) merged, high 8,150 kWh + 825 therms elec $172.35 + gas $102.19 = $274.54
23 Grenada Pl, Montclair (Essex) — 1,840 sqft, 1907, oil (remarks regex) merged, high 9,313 kWh + 604 gal oil elec $196.23 + oil $293.85 = $490.07 (oil @ $5.84/gal ≈ 3.1× gas per MMBtu — see ENERGY.md)
72 Old Queens Blvd, Manalapan (Monmouth) — MOD-IV-only: 1,888 sqft (county assessor), 1965, fuel = ACS Monmouth county prior (gas-modal, 81.1%) modiv, medium 8,533 kWh + 794 therms $278.94
zip 07071 + overrides: 2,400 sqft, 2005, 4BR, propane attributes-only, high 9,877 kWh + 582 gal propane elec $207.81 + propane $185.32 = $393.13

All four inside the NJ single-family $150–450/mo believability band (oil-heated prewar at $490 is the expected exception — that is the oil-heat story, and the savings pitch).

8. Known limitations / next

  1. State-mean HDD/CDD (county NOAA normals would sharpen NW-NJ vs shore by ~±10% on heat).
  2. ~~Heating-fuel prior is state-level modal~~ Done 2026-06-12: acs_fuel_priors (commute DB) holds ACS B25040 2024 5-yr shares — county for all 3,222 US counties, tract for NJ/NY/CT/PA (11,908). Unknown-fuel homes now take the county modal fuel (tract honored when a tract geoid is supplied; the API has no tract geocoding yet). NJ effect: Sussex is the only county that flips (oil-modal, 48.4% oil vs 20.1% gas — an unknown-fuel 2,200 sqft Sparta home moves $253.81 → $442.96/mo); 156 NJ tracts are not gas-modal, the future tract-geocoding payoff. Nationally 1,661 of 3,222 counties are electric-modal (the South), so this prior is load-bearing for expansion beyond NJ. Pick is still deterministic modal — fuel-mixture expected-cost blending is a v2 option.
  3. No equipment efficiency input (a 95 AFUE furnace vs 80 looks identical); RECS fits absorb the stock average. HES-style equipment detail is a v2 user-override field.
  4. utility_rates_annual is bundled average revenue ¢/kWh, not marginal tariff blocks; URDB tariff detail exists in utility_tariffs for a finer bill engine later.
  5. Coverage outside NJ: model + state climate + state prices work nationwide; per-home resolution is NJ-only until more parcel/MLS states are loaded (GSMLS/NJMLS would complete north Jersey listings).

Comments