Compare commits

..

No commits in common. "e4b80938a01aeac09ea2356f552d8b4cfb0e72db" and "184e429526fd7a0eef9ccd25d976c20c67a5f8b0" have entirely different histories.

View file

@ -814,20 +814,11 @@ def _compute_confidence(
market_trend: dict[str, Any] | None,
zoning: dict[str, Any],
) -> dict[str, Any]:
"""X2 (#48) — composite confidence score 0..1 + caveats для site-finder analyze.
"""X2 (#48) — composite confidence score 0..1 + caveats.
Это НАДЁЖНОСТЬ САМОГО SITE-FINDER СКОРИНГА (coverage/свежесть входных
сигналов: POI, район, рынок, конкуренты, источник геометрии) отдельная
by-design метрика, НЕ форсайтный §15 `forecasting.confidence_engine`
(`compute_report_confidence`). §15 оценивает надёжность ПРОГНОЗА
спроса/цены и работает над форсайт-входами (coverage/confounded/
special_indices/sales_series), которых в analyze hot-path нет поэтому
analyze намеренно держит свою лёгкую coverage-метрику, а не зовёт §15.
Композитный балл = avg of subscore'ов; caveats — list конкретных проблем
для UI ("Нет данных N, score K ненадёжен"). См. #1668 (решение: оставить
раздельно by-design; «stub до G1/G2/D1/D2» устаревшая формулировка,
те эшелоны уже отгружены, их confidence сюда не вплетается намеренно).
Stub-версия (до реализации G1/G2/D1/D2): использует сигналы которые уже
доступны на main. Композитный балл = avg of subscore'ов; caveats — list
конкретных проблем для UI ("Нет данных N, score K ненадёжен").
"""
caveats: list[str] = []
subscores: dict[str, float] = {}