Model/modelling_audit.md
Jun-te Kim 009394bb19 neighbour_divergence: key cohorts on main-heating fuel
The neighbour SAP-divergence cohort was (postcode, property_type, built_form),
which mixed electric- and gas-heated dwellings. Electricity scores materially
lower in SAP than mains gas for identical fabric, so a mixed-fuel postcode
produced cross-fuel false outliers — an electric dwelling flagged only for being
electric among gas neighbours.

Add the main-heating fuel class to the cohort key (electricity variants — 29/30
+ off-peak 31-40 — collapse to one class; every other code is its own bucket).
Now every flagged divergence is a same-fuel comparison worth investigating. On
portfolio 814 this refined 20 raw divergences to 17 same-fuel ones while keeping
the genuine within-fuel outliers (e.g. the all-electric WC2B 4AW flats at SAP
26/38 vs a cohort median of 67).

Reaches the fuel via epc_main_heating_detail through the indexed property_id —
still never touches the recommendation table. Surfaced by the portfolio-814
recommendation audit (Work item B, #1388).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 14:24:31 +00:00

11 KiB

Modelling anomaly audit

Scanned 338 properties · flagged 360 anomalies across 6 checks.

plan-score-below-baseline (HIGH) — 3

  • property 742302 (uprn 100022921559): post SAP 70.5 below effective baseline 72.0 (Δ-1.5)
  • property 742367 (uprn 5300072135): post SAP 68.9 below effective baseline 70.0 (Δ-1.1)
  • property 742368 (uprn 5300072136): post SAP 70.4 below effective baseline 71.0 (Δ-0.6)

plan-stops-short-of-goal (HIGH) — 311

  • property 742063 (uprn 10010200962): post D (60.29299) short of goal B on an unlimited-budget scenario (cost_of_works £10378)
  • property 742064 (uprn 10010206037): post C (69.27856) short of goal B on an unlimited-budget scenario (cost_of_works £9339)
  • property 742065 (uprn 10010206038): post C (78.81704) short of goal B on an unlimited-budget scenario (cost_of_works £1043)
  • property 742066 (uprn 10010206039): post C (76.22735) short of goal B on an unlimited-budget scenario (cost_of_works £7876)
  • property 742067 (uprn 10010206040): post C (72.775085) short of goal B on an unlimited-budget scenario (cost_of_works £7682)
  • property 742068 (uprn 10010206041): post C (74.29278) short of goal B on an unlimited-budget scenario (cost_of_works £8510)
  • property 742069 (uprn 10010206042): post C (70.24012) short of goal B on an unlimited-budget scenario (cost_of_works £7638)
  • property 742070 (uprn 10010206043): post C (72.3706) short of goal B on an unlimited-budget scenario (cost_of_works £3702)
  • property 742072 (uprn 34003067): post D (61.096947) short of goal B on an unlimited-budget scenario (cost_of_works £13391)
  • property 742073 (uprn 34003068): post D (61.096947) short of goal B on an unlimited-budget scenario (cost_of_works £13391)
  • property 742075 (uprn 34003070): post D (61.096947) short of goal B on an unlimited-budget scenario (cost_of_works £13391)
  • property 742076 (uprn 34003071): post D (61.096947) short of goal B on an unlimited-budget scenario (cost_of_works £13391)
  • property 742079 (uprn 12013027): post C (78.44673) short of goal B on an unlimited-budget scenario (cost_of_works £2892)
  • property 742080 (uprn 12013028): post D (62.603214) short of goal B on an unlimited-budget scenario (cost_of_works £3372)
  • property 742081 (uprn 12013029): post C (74.525345) short of goal B on an unlimited-budget scenario (cost_of_works £1029)
  • property 742082 (uprn 12013030): post C (78.44673) short of goal B on an unlimited-budget scenario (cost_of_works £2892)
  • property 742083 (uprn 12013031): post C (78.44673) short of goal B on an unlimited-budget scenario (cost_of_works £2892)
  • property 742084 (uprn 12013032): post C (73.37248) short of goal B on an unlimited-budget scenario (cost_of_works £1057)
  • property 742085 (uprn 12013033): post D (68.01724) short of goal B on an unlimited-budget scenario (cost_of_works £1057)
  • property 742086 (uprn 12013034): post D (61.581734) short of goal B on an unlimited-budget scenario (cost_of_works £3610)
  • property 742087 (uprn 12013038): post C (78.44673) short of goal B on an unlimited-budget scenario (cost_of_works £2892)
  • property 742088 (uprn 12013042): post C (74.92009) short of goal B on an unlimited-budget scenario (cost_of_works £3404)
  • property 742090 (uprn 12013044): post C (73.35894) short of goal B on an unlimited-budget scenario (cost_of_works £1057)
  • property 742091 (uprn 12013045): post C (73.37248) short of goal B on an unlimited-budget scenario (cost_of_works £1057)
  • property 742092 (uprn 12013046): post D (60.531925) short of goal B on an unlimited-budget scenario (cost_of_works £1029)
  • property 742093 (uprn 12013047): post C (74.26961) short of goal B on an unlimited-budget scenario (cost_of_works £2899)
  • property 742094 (uprn 12013048): post C (78.44673) short of goal B on an unlimited-budget scenario (cost_of_works £2892)
  • property 742095 (uprn 100020233237): post C (68.751595) short of goal B on an unlimited-budget scenario (cost_of_works £0)
  • property 742096 (uprn 100020233238): post C (68.751595) short of goal B on an unlimited-budget scenario (cost_of_works £0)
  • property 742097 (uprn 100020233239): post C (72.782684) short of goal B on an unlimited-budget scenario (cost_of_works £7684)
  • property 742098 (uprn 100020233240): post D (67.203026) short of goal B on an unlimited-budget scenario (cost_of_works £633)
  • property 742099 (uprn 100020233241): post D (67.30785) short of goal B on an unlimited-budget scenario (cost_of_works £3400)
  • property 742100 (uprn 100020233242): post C (68.658844) short of goal B on an unlimited-budget scenario (cost_of_works £35)
  • property 742101 (uprn 100020233243): post D (66.59807) short of goal B on an unlimited-budget scenario (cost_of_works £3285)
  • property 742102 (uprn 100020233244): post C (68.751595) short of goal B on an unlimited-budget scenario (cost_of_works £0)
  • property 742103 (uprn 100020233204): post C (68.751595) short of goal B on an unlimited-budget scenario (cost_of_works £0)
  • property 742104 (uprn 100020233205): post D (66.40878) short of goal B on an unlimited-budget scenario (cost_of_works £32)
  • property 742105 (uprn 100020233206): post C (68.751595) short of goal B on an unlimited-budget scenario (cost_of_works £0)
  • property 742106 (uprn 100020233207): post C (68.751595) short of goal B on an unlimited-budget scenario (cost_of_works £0)
  • property 742107 (uprn 100020233208): post C (68.751595) short of goal B on an unlimited-budget scenario (cost_of_works £0)
  • property 742108 (uprn 100020233209): post C (68.751595) short of goal B on an unlimited-budget scenario (cost_of_works £0)
  • property 742109 (uprn 100020233210): post C (74.14777) short of goal B on an unlimited-budget scenario (cost_of_works £3070)
  • property 742110 (uprn 100020233211): post C (68.751595) short of goal B on an unlimited-budget scenario (cost_of_works £0)
  • property 742111 (uprn 100020233212): post C (68.751595) short of goal B on an unlimited-budget scenario (cost_of_works £0)
  • property 742112 (uprn 100020233213): post C (68.751595) short of goal B on an unlimited-budget scenario (cost_of_works £0)
  • property 742113 (uprn 100020233235): post C (69.19524) short of goal B on an unlimited-budget scenario (cost_of_works £4861)
  • property 742114 (uprn 100020233236): post C (73.46247) short of goal B on an unlimited-budget scenario (cost_of_works £7126)
  • property 742116 (uprn 100020942574): post D (67.459236) short of goal B on an unlimited-budget scenario (cost_of_works £28)
  • property 742117 (uprn 100020942575): post D (67.459236) short of goal B on an unlimited-budget scenario (cost_of_works £28)
  • property 742118 (uprn 100020942576): post D (67.459236) short of goal B on an unlimited-budget scenario (cost_of_works £28)
  • … and 261 more (see CSV)

already-meets-goal-with-works (MEDIUM) — 4

  • property 742077 (uprn 34156817): already B >= goal B but cost_of_works £4515
  • property 742078 (uprn 34156818): already B >= goal B but cost_of_works £4515
  • property 742207 (uprn 100081143001): already B >= goal B but cost_of_works £1029
  • property 742269 (uprn 100022769436): already B >= goal B but cost_of_works £1029

zero-works-post-differs (MEDIUM) — 2

  • property 742302 (uprn 100022921559): £0 works but post SAP 70.5 != effective 72.0
  • property 742367 (uprn 5300072135): £0 works but post SAP 68.9 != effective 70.0

effective-lodged-divergence (LOW) — 9

  • property 742131 (uprn 148013838): effective 62 vs lodged 47 (Δ+15, reason=pre_sap10)
  • property 742132 (uprn 148013839): effective 62 vs lodged 47 (Δ+15, reason=pre_sap10)
  • property 742204 (uprn 100081142998): effective 69 vs lodged 54 (Δ+15, reason=pre_sap10)
  • property 742206 (uprn 100081143000): effective 69 vs lodged 54 (Δ+15, reason=pre_sap10)
  • property 742208 (uprn 100081143002): effective 59 vs lodged 44 (Δ+15, reason=pre_sap10)
  • property 742216 (uprn 100081143009): effective 69 vs lodged 54 (Δ+15, reason=pre_sap10)
  • property 742355 (uprn 100022982934): effective 63 vs lodged 47 (Δ+16, reason=pre_sap10)
  • property 742394 (uprn 100022909582): effective 71 vs lodged 86 (Δ-15, reason=pre_sap10)
  • property 742395 (uprn 100022909583): effective 72 vs lodged 87 (Δ-15, reason=pre_sap10)

negative-bill-savings (LOW) — 31

  • property 742065 (uprn 10010206038): energy_bill_savings £-454/yr on £1043 of works
  • property 742066 (uprn 10010206039): energy_bill_savings £-417/yr on £7876 of works
  • property 742068 (uprn 10010206041): energy_bill_savings £-442/yr on £8510 of works
  • property 742145 (uprn 5300022461): energy_bill_savings £-799/yr on £3196 of works
  • property 742146 (uprn 5300022470): energy_bill_savings £-799/yr on £3196 of works
  • property 742147 (uprn 5300022471): energy_bill_savings £-799/yr on £3196 of works
  • property 742148 (uprn 5300022472): energy_bill_savings £-685/yr on £3270 of works
  • property 742149 (uprn 5300022473): energy_bill_savings £-799/yr on £3196 of works
  • property 742150 (uprn 5300022474): energy_bill_savings £-799/yr on £3196 of works
  • property 742151 (uprn 5300022475): energy_bill_savings £-799/yr on £3196 of works
  • property 742153 (uprn 5300022477): energy_bill_savings £-746/yr on £3196 of works
  • property 742155 (uprn 5300022479): energy_bill_savings £-799/yr on £3196 of works
  • property 742156 (uprn 5300022462): energy_bill_savings £-799/yr on £3196 of works
  • property 742157 (uprn 5300022480): energy_bill_savings £-517/yr on £11607 of works
  • property 742158 (uprn 5300022481): energy_bill_savings £-799/yr on £3196 of works
  • property 742159 (uprn 5300022482): energy_bill_savings £-799/yr on £3196 of works
  • property 742160 (uprn 5300022483): energy_bill_savings £-799/yr on £3196 of works
  • property 742161 (uprn 5300022484): energy_bill_savings £-799/yr on £3196 of works
  • property 742162 (uprn 5300022485): energy_bill_savings £-799/yr on £3196 of works
  • property 742163 (uprn 5300022486): energy_bill_savings £-799/yr on £3196 of works
  • property 742164 (uprn 5300022487): energy_bill_savings £-799/yr on £3196 of works
  • property 742166 (uprn 5300022489): energy_bill_savings £-799/yr on £3196 of works
  • property 742167 (uprn 5300022463): energy_bill_savings £-799/yr on £3196 of works
  • property 742168 (uprn 5300022490): energy_bill_savings £-799/yr on £3196 of works
  • property 742169 (uprn 5300022491): energy_bill_savings £-799/yr on £3196 of works
  • property 742170 (uprn 5300022492): energy_bill_savings £-799/yr on £3196 of works
  • property 742171 (uprn 5300022464): energy_bill_savings £-799/yr on £3196 of works
  • property 742172 (uprn 5300022465): energy_bill_savings £-799/yr on £3196 of works
  • property 742174 (uprn 5300022467): energy_bill_savings £-922/yr on £1057 of works
  • property 742176 (uprn 5300022469): energy_bill_savings £-799/yr on £3196 of works
  • property 742265 (uprn 10033526327): energy_bill_savings £-896/yr on £10682 of works