feat(site-finder): per-competitor relevance_weight (#949 PR B) #1000

Merged
Light1YT merged 1 commit from feat/949b-competitor-relevance-weight into main 2026-06-02 19:45:39 +00:00

1 commit

Author SHA1 Message Date
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