gendesign/backend/tests/services/site_finder
Light1YT 2450159fe9 feat(site-finder): per-competitor relevance_weight (#949 PR B)
Adds deterministic horizon-aware relevance_weight ∈[0,1] to get_competitors
(ТЗ §9.1): weighted mean of geo_proximity (0.30), class_similarity (0.25),
price_similarity (0.20), stage_at_horizon (0.25). stage_at_horizon projects
each competitor's sell-out to horizon_months (request param, default 12) so a
competitor sold-out by our launch ranks lower. class_similarity uses a domrf
class-ladder vs the local dominant class (no target class yet). Orders by
relevance_weight DESC (distance still present + tie-break). relevance_breakdown
(4 sub-scores) exposed for explainability (§16).

Additive: all legacy Competitor fields intact, new fields Optional; zero
frontend consumers of /competitors (UI uses /analyze). sold-count folded into
existing price query (no extra db.execute, #227 regression green). Graceful:
thin data → neutral 0.5. 57 new pure-helper tests. Completes #949.
2026-06-03 00:45:28 +05:00
..
test_best_layouts.py fix(sf-09): capacity-aware redistribute (round 2) — bounded + correct invariant 2026-05-17 15:30:50 +03:00
test_competitor_relevance.py feat(site-finder): per-competitor relevance_weight (#949 PR B) 2026-06-03 00:45:28 +05:00
test_macro.py feat(site-finder): macro_indicator table + backfill + reader (#945 PR A) (#963) 2026-06-02 18:41:28 +00:00
test_market_metrics.py feat(site_finder): market-metrics service (#949 PR A, §9.2) (#997) 2026-06-02 19:26:26 +00:00