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
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions