Model/tests/domain/epc_prediction
Khalim Conn-Kowlessar e3a2720e5c feat(epc-prediction): Tier-1 ratcheting Component Accuracy gate (ADR-0030)
The committed CI gate: run the calculator-free leave-one-out scorer over the
frozen anonymised fixture (36 SAP-10.2 targets) and assert each per-component
classification rate / geometry residual is no worse than a committed baseline.
Prediction is deterministic + the fixture frozen, so the numbers reproduce
exactly — a failure is a real regression, never sample noise.

- 19 rate floors + 5 residual ceilings, seeded at the currently-measured
  values; they only ever tighten (no-widening ethos on an aggregate).
- Calculator-FREE — component floors are the real gate; the end-to-end
  SAP/carbon/PE guards stay out (their floor is the separate API-path
  calculator workstream).
- Skips with a message when the fixture is absent.

25 parametrized assertions, all green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 09:19:39 +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): Tier-1 ratcheting Component Accuracy gate (ADR-0030) 2026-06-14 09:19:39 +00:00
test_epc_prediction.py feat(epc-prediction): cohort-mode the roof/floor/insulation/age categoricals (ADR-0029) 2026-06-14 00:31:16 +00:00
test_prediction_comparison.py feat(epc-prediction): complete component coverage — fabric/glazing/renewables/doors (ADR-0030) 2026-06-14 09:00:30 +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