Utilities Estimator — Model & Validation
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:
- 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%".
- 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)
- User override (request
attributesblock) — always wins. - Resolved home from
nj_home_attributes(address exact → zip+street → fuzzy prefix → nearest parcel ≤150 m). - 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 labelacs_b25040_{level}_prior; loaded byload_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 (labelstate_modal_prior). - 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
- State-mean HDD/CDD (county NOAA normals would sharpen NW-NJ vs shore by ~±10% on heat).
- ~~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. - 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.
utility_rates_annualis bundled average revenue ¢/kWh, not marginal tariff blocks; URDB tariff detail exists inutility_tariffsfor a finer bill engine later.- 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).