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_total table, filtered to hvac == "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
alpha once 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
- Derive year-by-year HP-rate adoption counts from the logit model and feed into
uniform_adoption for 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.qmd cell exporting per-building savings to parquet
- Updated
gen_aec_data.qmd replacing 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
What
Replace the linear
heat_pump_adoption_factoringen_aec_data.qmdwith 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
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").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)alphaonce using the 2028 replacement cohort so that the weighted average P(switch) matches the BAU HP share of replacements (~22.6%)uniform_adoptionfor buildstock_fetch, replacing the current linear scaling.Key design decisions:
savings_current + delta_delivery_per_kwh * hp_electricity_kwhDiscrete choice framework reference: Chhabra, "Policy Interventions for HP Adoption in California" (in references.bib as
chhabramohit_PolicyInterventionsHP_).Deliverables
analysis.qmdcell exporting per-building savings to parquetgen_aec_data.qmdreplacing linear factor with logit model