-
Notifications
You must be signed in to change notification settings - Fork 1
Description
What
Replace the linear heat_pump_adoption_factor in gen_aec_data.qmd with a logit-based discrete choice model that uses per-building cost savings to compute HP adoption under the proposed HP rate, calibrated to the BAU adoption forecast.
Why
The current approach multiplies BAU HP adoption by a linear factor derived from the share of homes that save money: (96.3 - 22.6) / 22.6 ≈ 3.26x. This produces HP adoption counts that exceed the annual HVAC replacement pool — physically impossible (142% of replacements in 2029). A second problem: the BAU utility forecast already implies adoption beyond the "savers" share (33.4% HP market share of replacements by 2029, vs. only 22.6% of homes that actually save money under current rates). The linear factor conflates "would save money" with "would adopt."
How
- Export per-building savings from analysis.qmd (R) to a parquet file at
cache/building_savings_for_adoption.parquet. The R bill pipeline already computes per-building annual cost savings under baseline and HP rate versions (annual_changes_totaltable, filtered tohvac == "hp_high"). - Implement a logit adoption model in gen_aec_data.qmd (Python):
- For each building:
P(switch) = sigmoid(beta * savings + alpha) beta= 1/1000 (fixed; sensitivity per $1000 of annual savings)alpha= calibrated intercept capturing all non-cost factors (upfront costs, hassle, incentives, environmental preference)- Calibrate
alphaonce using the 2028 replacement cohort so that the weighted average P(switch) matches the BAU HP share of replacements (~22.6%) - Under HP-rate savings, recompute P(switch) with the same alpha — the sigmoid naturally bounds adoption at ≤100% of replacements
- For each building:
- Derive year-by-year HP-rate adoption counts from the logit model and feed into
uniform_adoptionfor buildstock_fetch, replacing the current linear scaling. - Sanity check: Verify HP market share ≤ 100% of replacements in all projection years. Note: the year-to-year variation in replacement counts (16k–21k) from the Weibull failure simulation is a modeling artifact, not a robust real-world assumption — this is a plausibility check, not a calibration target.
Key design decisions:
- Single alpha calibrated to 2028 (simpler than per-year; avoids overfitting to BAU forecast fluctuations)
- BAU counts are exogenous from the utility forecast; the logit only translates BAU-calibrated parameters into HP-rate adoption
- If per-building HP-rate savings aren't yet available from the R pipeline, approximate as
savings_current + delta_delivery_per_kwh * hp_electricity_kwh
Discrete choice framework reference: Chhabra, "Policy Interventions for HP Adoption in California" (in references.bib as chhabramohit_PolicyInterventionsHP_).
Deliverables
- Updated
analysis.qmdcell exporting per-building savings to parquet - Updated
gen_aec_data.qmdreplacing linear factor with logit model - Market share sanity check passing (hp_pct ≤ 1.0 for all projection years)
- Updated Google Sheet output with revised HP-rate load projections