docs(mera/estimate): сегментные множители откалиброваны на артефакте измерения — предупреждение в конфиге #3249

Merged
lekss361 merged 1 commit from docs/3249-segment-multiplier-artifact-guard into main 2026-08-29 19:55:42 +00:00

View file

@ -718,6 +718,32 @@ class Settings(BaseSettings):
estimate_quarter_from_coords_enabled: bool = False
# ── Сегментная поправка эстиматора по ценовому бэнду (#2255) ──────────────
#
# ⚠ НЕ ВКЛЮЧАТЬ БЕЗ ПЕРЕЗАМЕРА. Посылка, на которой откалиброваны множители
# ниже («движок занижает верхние сегменты»), 2026-08-29 признана АРТЕФАКТОМ
# измерения, а не свойством движка.
#
# Причина: `scripts/backtest_estimator.py::_segment_metrics` группирует ошибки
# ПО SOLD ₽/м² — по той самой величине, которую движок предсказывает. Группировка
# по исходу даёт регрессию к среднему: в дешёвых корзинах любой предиктор выглядит
# завышающим, в дорогих — занижающим, даже при нулевом перекосе.
#
# Контрольный опыт (13 074 сделки ЕКБ с 2025-06): предиктор БЕЗ сегментного
# перекоса по построению — медиана окружения 1 км ÷ общий уровень — даёт в тех же
# корзинах эконом +22.28%, бизнес 17.04%, элит 30.06%. Это БОЛЬШЕ наблюдавшегося
# перекоса движка (бизнес 9.74%, элит 18.45% на n=1191), т.е. движок «занижает»
# ровно настолько, насколько этого требует способ замера, и даже меньше.
#
# Перекрёстная проверка: те же сделки, но бэнд задан НЕЗАВИСИМЫМ прокси (медиана
# активных объявлений собственного дома, own_n>=3) — градиент исчезает, остаётся
# ровный уровень +20…+27% (это разрыв asking↔sold, его чинит asking_to_sold_ratio).
#
# Следствие: включение флага подняло бы бизнес/элит на 6-8% БЕЗ ОСНОВАНИЯ.
# Прежде чем трогать — перевести `_segment_metrics` на независимый бэнд и
# перемерить. Абзац «band-mismatch» ниже описывает симптом того же артефакта.
# Разбор: vault `segment-bias-is-regression-to-the-mean-artifact`.
#
# ИСТОРИЧЕСКАЯ ПОСЫЛКА (сохранена как есть, НЕ опирайся на неё):
# Эстиматор систематически занижает верхние сегменты (live-бэктест n=561,
# 2026-07-03): эконом +3.2%, комфорт 4.5%, бизнес 16.3% (n=76),
# элит 25.7% (n=16). Множитель применяется к median_price/median_ppm2 и
@ -740,6 +766,9 @@ class Settings(BaseSettings):
# бизнес bias 10.4→3.2, элит 30→24.6, эконом почти intact (MAPE 18.0).
# Дальнейшее сжатие bias без роста MAPE — только с confidence-гейтом
# (не применять множитель на low-confidence предсказаниях) → follow-up issue.
# NB (2026-08-29): «bias 10.4→3.2» выше меряет схлопывание АРТЕФАКТА, а не
# исправление ошибки — см. предупреждение в начале блока. Рост общего MAPE
# +1.87pp при этом настоящий: множитель двигает реальные цены.
# Пересчёт биасов — см. scripts/backtest_estimator.py --calibrate-segments.
estimate_segment_multipliers: dict[str, float] = {
"эконом": 1.00,