Model/tests/domain/epc_prediction
Khalim Conn-Kowlessar ffaedd8d14 feat(epc-prediction): ±1-band age scoring + window_count cosmetic (#1222)
Measurement honesty so we optimise SAP-relevant accuracy, not SAP-neutral
misses (ADR-0030 Component Accuracy):
- Add construction_age_band_pm1: an exact-or-adjacent-band hit. Adjacent
  RdSAP age bands carry near-identical U-values, so an off-by-one is
  ~SAP-neutral. Full corpus: exact 78.5% but ±1-band 91.7% (fixture
  63.9% -> 83.3%) — most age misses are adjacent.
- Drop window_count from the gate's residual ceilings (cosmetic): the
  predicted picture clusters at a mapper-default 4 windows vs actuals 1-21,
  but total_window_area (the SAP-relevant signal) stays tight at ~3.4 m2.

Gate: + construction_age_band_pm1 floor 0.8333; window_count no longer gated.

Closes #1222

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 10:01:20 +00:00
..
__init__.py feat(epc-prediction): Comparable Properties selection ladder (ADR-0029) 2026-06-13 23:44:57 +00:00
test_comparable_properties.py fix(epc-prediction): dedupe re-lodgements + leak-free leave-one-out (ADR-0029) 2026-06-14 00:40:23 +00:00
test_component_accuracy_gate.py feat(epc-prediction): ±1-band age scoring + window_count cosmetic (#1222) 2026-06-14 10:01:20 +00:00
test_epc_prediction.py feat(epc-prediction): recency-weighted mode for roof insulation (ADR-0029/0030) 2026-06-14 09:45:22 +00:00
test_prediction_comparison.py feat(epc-prediction): ±1-band age scoring + window_count cosmetic (#1222) 2026-06-14 10:01:20 +00:00
test_validation.py refactor(epc-prediction): extract shared leave-one-out scorer + corpus loader (ADR-0030) 2026-06-14 09:12:08 +00:00