Model/scripts
Khalim Conn-Kowlessar 58d5b17145 chore(epc-prediction): dense-corpus fetcher + cross-postcode geo no-go
Build a geographically DENSE postcode-clustered corpus to test cross-postcode
geo expansion (the handover's anticipated "real geo payoff"). The gov EPC API
has no area/prefix search (a partial postcode 400s; the old opendatacommunities
partial-search API is decommissioned), so neighbourhood enumeration is external:
seed K postcodes nationally, expand each via postcodes.io's nearest-postcode
endpoint into every unit within RADIUS_M, pull each one's full EPC cohort.
postcodes.io is a corpus-BUILD dependency only — the predictor stays pure. Same
on-disk layout as the scattered corpus, so load_corpus + the coords resolver
consume it unchanged.

MEASURE-FIRST RESULT — cross-postcode expansion is a NO-GO. On a 2-seed pilot
(York YO19 + Islington N51, 81 postcodes / 1558 certs, 140 SAP-10.2 targets),
pooling nearby postcodes regresses accuracy across the board:
  same-postcode  FA_MAE 9.53  wall 92%  age 72%  floor_con 85%  cylinder 91%
  cross <=0.3km  FA_MAE 13.1  wall 80%  age 61%  floor_con 82%  cylinder 79%
Even as a thin-cohort top-up it hurts (thin n=18: FA 5.24 -> 7.15). Root cause:
the postcode boundary is itself a strong homogeneity prior (a postcode is one
coherent street/development), so same-postcode neighbours beat geographically
near cross-boundary ones even when the home postcode is sparse (and they rarely
are — median same-postcode cohort here is 34). Geo-proximity helps WITHIN a
postcode (#1227) but does not survive crossing the boundary. Cross-postcode geo
closed; geo weighting stays intra-postcode. Tooling kept (reusable).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 03:03:15 +00:00
..
eon added floats helper 2026-06-12 14:28:41 +00:00
analyse_api_sap_clusters.py scripts: promote the API SAP-accuracy toolkit from /tmp 2026-06-04 16:52:09 +00:00
build_epc_prediction_fixture.py feat(epc-prediction): geo-proximity weighting, per-component (#1227) 2026-06-15 14:58:42 +00:00
decompose_api_cost_error.py feat(diag): per-component cost decomposition for API SAP errors 2026-06-06 17:37:05 +00:00
decompose_co2_pe_error.py fix(heat-network): apply Table 4c(3) flat-rate charging factor to demand 2026-06-14 01:54:51 +00:00
download_cotality_evidence.py new methods for downloading all core files for pashub URL. Download currently not being authorised 2026-03-24 08:47:59 +00:00
elmhurst_input_sheet.py fix(debug-tool): read the domain field names, not the schema ones 2026-06-05 19:48:02 +00:00
eval_api_sap_accuracy.py scripts: promote the API SAP-accuracy toolkit from /tmp 2026-06-04 16:52:09 +00:00
fetch_2026_epc_sample.py scripts: promote the API SAP-accuracy toolkit from /tmp 2026-06-04 16:52:09 +00:00
fetch_cohort2_api_jsons.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
fetch_corpus_coordinates.py feat(epc-prediction): thread coordinates onto Comparable + target (#1227) 2026-06-15 14:46:01 +00:00
fetch_epc_bulk_sample.py feat(modelling): sample a year from the EPC bulk export, offline-ready 2026-06-04 12:20:57 +00:00
fetch_epc_dump.py feat(modelling): CLI to fetch an EPC dump + build the inspection report 2026-06-04 11:26:17 +00:00
fetch_epc_prediction_corpus.py chore(epc-prediction): grow validation corpus to 150 postcodes 2026-06-15 06:42:19 +00:00
fetch_epc_prediction_dense_corpus.py chore(epc-prediction): dense-corpus fetcher + cross-postcode geo no-go 2026-06-16 03:03:15 +00:00
historic_epc_demo.py added type hinting to uprn 2026-05-12 09:40:12 +00:00
init_db.py init db 2026-03-31 11:45:59 +00:00
profile_api_error.py feat(diag): profile API SAP error against raw-API characteristics 2026-06-07 20:38:19 +00:00
profile_case34.py docs(profile-case34): mark the space-demand residual closed (450e33e1) 2026-06-11 09:01:41 +00:00
run_audit_generator_local.py empty commit to trigger workflows 2026-06-11 09:32:14 +00:00
run_modelling_cohort.py feat(modelling): turnkey offline cohort script (tables + CSV) 2026-06-04 09:30:53 +00:00
run_modelling_e2e.py 17.1 and 18 done by claude 2026-06-12 12:52:36 +00:00
run_property_report.py feat(modelling): CLI to fetch an EPC dump + build the inspection report 2026-06-04 11:26:17 +00:00
validate_epc_prediction.py feat(epc-prediction): report floor-area MAE + MAPE vs typical size 2026-06-15 15:07:22 +00:00