Skip to content

[ri_hp_rates] Replace linear HP adoption scaling with logit-based model in AEC projections #104

@alxsmith

Description

@alxsmith

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

  1. 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").
  2. 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
  3. 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.
  4. 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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions