Model/services
Khalim Conn-Kowlessar ece1279475 revert slice 16g: drop mape objective per 16h ablation
250k retrain showed objective='mape' loses ~0.6 percentage points of
global sap_score MAPE (3.92% with regression vs 4.50% with mape) and
~0.7 pts on peui_ucl. The mape objective over-weights the low-SAP tail
(weight ~1/y) and drags the body MAPE up by more than it gains in the
tail.

Body MAPE on v16 features is already strong (2.38% on deciles 1-8); the
remaining tail bias at decile 0 (SAP<58, +3.1 bias) needs a different
fix -- sample weights or stratified loss -- queued as slice 16i.
2026-05-17 14:34:04 +00:00
..
ara added potential file scaffolding: 2026-05-15 10:56:53 +00:00
ml_training_data revert slice 16g: drop mape objective per 16h ablation 2026-05-17 14:34:04 +00:00
README.md added potential file scaffolding: 2026-05-15 10:56:53 +00:00

Services

Each subdirectory is a deployable unit — typically a Lambda image. Own pyproject.toml, own Dockerfile, own deps. Lambda bundle contains only that service's deps + its workspace deps.

Service Purpose
ara/ The Domna retrofit modelling backend — ingestion + modelling pipelines, all 9 services in PRD §9.2.

Other Domna services (address2uprn, hubspot, pashub, ecmk, magicplan) live in the legacy backend/ and etl/ trees for now; they are slated to migrate here as their owners pick them up — see PRD §11. When that work starts, scaffold the service under services/<name>/ and add it to the workspace members in the root pyproject.toml.

Service boundary

A service can import domain.*, import repos.*, import fetchers.*, import utils.* (workspace deps). It cannot import another service's modules — they are separate distributions with no cross-import path. This is the structural enforcement of the modelling/ingestion separation (ADR-0003).