[tradein][estimator] Подключить house_type/kitchen/ceiling как фичи comp-scoring (+ обязательный backtest) #2012

Open
opened 2026-06-27 17:21:40 +00:00 by lekss361 · 1 comment
Owner

Follow-up к #2007 / #2008 / #2009. Эти PR промоутят поля в queryable-колонки (kitchen_area_m2, ceiling_height_m, нормализованный house_type, mortgage_available, is_apartments). Но estimator сейчас читает house_type только как soft-penalty, а kitchen_area_m2 / ceiling_height_m / living_area_m2 — НЕ читает вовсе для отбора/скоринга аналогов.

Потребляемые estimator колонки (см. _ANALOG_SELECT_COLS estimator.py:3649 + _COMMON_WHERE): rooms, area_m2, floor, total_floors, price, lat/lon, scraped_at, year_built (cohort), house_type (soft-penalty 3905-3925/4026-4047), listing_segment (vtorichka-guard), building_cadastral_number (Tier S), days_on_market. Всё остальное промоутится «для дашборда/матчинга», но в саму оценку не входит.

Задача

Добавить как фичи отбора/скоринга comp-ов (по аналогии с house_type soft-penalty):

  • kitchen_area_m2 — сигнал по сегменту/планировке.
  • ceiling_height_m — премиум-сегмент (высокие потолки → выше цена).
  • is_apartments (#2008) — апартаменты vs квартира, заметная разница в цене (hard-filter или штраф).

ОБЯЗАТЕЛЬНО: backtest до/после

Харность есть — feat(tradein/backtest): full-spine prediction + range-coverage/calibration/segment metrics (PR #1966). Любая новая фича в скоринг — только с замером MAPE / range-coverage / calibration ДО и ПОСЛЕ на full-spine. Без улучшения метрик НЕ мержить (риск переобучения на sparse-колонках: kitchen покрыт неравномерно 4-99% по источникам, ceiling ~10%).

Предусловие

Сначала влить #2007/#2008/#2009 (поднимают fill-rate колонок) + желательно дождаться нескольких циклов скрейпа (иначе фичи sparse → шум).

scope/backend, tradein, analytics, priority/p2.

Follow-up к #2007 / #2008 / #2009. Эти PR промоутят поля в queryable-колонки (kitchen_area_m2, ceiling_height_m, нормализованный house_type, mortgage_available, is_apartments). Но **estimator сейчас читает house_type только как soft-penalty, а kitchen_area_m2 / ceiling_height_m / living_area_m2 — НЕ читает вовсе** для отбора/скоринга аналогов. Потребляемые estimator колонки (см. `_ANALOG_SELECT_COLS` estimator.py:3649 + `_COMMON_WHERE`): rooms, area_m2, floor, total_floors, price, lat/lon, scraped_at, year_built (cohort), house_type (soft-penalty 3905-3925/4026-4047), listing_segment (vtorichka-guard), building_cadastral_number (Tier S), days_on_market. Всё остальное промоутится «для дашборда/матчинга», но в саму оценку не входит. ## Задача Добавить как фичи отбора/скоринга comp-ов (по аналогии с house_type soft-penalty): - **kitchen_area_m2** — сигнал по сегменту/планировке. - **ceiling_height_m** — премиум-сегмент (высокие потолки → выше цена). - **is_apartments** (#2008) — апартаменты vs квартира, заметная разница в цене (hard-filter или штраф). ## ОБЯЗАТЕЛЬНО: backtest до/после Харность есть — `feat(tradein/backtest): full-spine prediction + range-coverage/calibration/segment metrics` (PR #1966). Любая новая фича в скоринг — только с замером MAPE / range-coverage / calibration ДО и ПОСЛЕ на full-spine. Без улучшения метрик НЕ мержить (риск переобучения на sparse-колонках: kitchen покрыт неравномерно 4-99% по источникам, ceiling ~10%). ## Предусловие Сначала влить #2007/#2008/#2009 (поднимают fill-rate колонок) + желательно дождаться нескольких циклов скрейпа (иначе фичи sparse → шум). scope/backend, tradein, analytics, priority/p2.
lekss361 added the
analytics
priority/p2
scope/backend
tradein
labels 2026-06-27 17:22:30 +00:00
lekss361 added the
needs-human
label 2026-07-04 09:31:16 +00:00
Author
Owner

PR #2396 смержен и задеплоен (2026-07-04) — добавлены kitchen_area_m2/ceiling_height_m/is_apartments сигналы в comp-scoring (estimator.py), каждый за отдельным флагом в config.py:

  • estimate_kitchen_area_signal_enabled=False
  • estimate_ceiling_height_signal_enabled=False
  • estimate_is_apartments_filter_enabled=False

Все флаги default=False (dormant merge) — обязательный backtest до/после (требование самого issue) НЕ был проведён: DB-tunnel (localhost:15432 / postgres-tradein MCP) был недоступен всю сессию, live A/B прогон невозможен без него.

QA regression-smoke после деплоя подтвердил: флаги реально OFF в runtime, golden path эстиматора без изменений/регрессий, GlitchTip чист.

Нужно от человека: восстановить DB-tunnel → прогнать scripts/backtest_estimator.py до/после (переключая каждый флаг по отдельности) на full-spine метриках (MAPE/range-coverage/calibration) → только при улучшении флип на True. Issue оставляю open до этого шага.

PR #2396 смержен и задеплоен (2026-07-04) — добавлены `kitchen_area_m2`/`ceiling_height_m`/`is_apartments` сигналы в comp-scoring (`estimator.py`), каждый за отдельным флагом в `config.py`: - `estimate_kitchen_area_signal_enabled=False` - `estimate_ceiling_height_signal_enabled=False` - `estimate_is_apartments_filter_enabled=False` **Все флаги default=False (dormant merge)** — обязательный backtest до/после (требование самого issue) НЕ был проведён: DB-tunnel (`localhost:15432` / `postgres-tradein` MCP) был недоступен всю сессию, live A/B прогон невозможен без него. QA regression-smoke после деплоя подтвердил: флаги реально OFF в runtime, golden path эстиматора без изменений/регрессий, GlitchTip чист. **Нужно от человека:** восстановить DB-tunnel → прогнать `scripts/backtest_estimator.py` до/после (переключая каждый флаг по отдельности) на full-spine метриках (MAPE/range-coverage/calibration) → только при улучшении флип на `True`. Issue оставляю open до этого шага.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2012
No description provided.