gendesign/tradein-mvp/backend
bot-backend a749151679 feat(tradein): per-cadastral-quarter price index in estimator (#764)
Apply quarter_price_index (FDW) via gap-correction to avoid double-counting
location already encoded in the analog median:
  adjusted_ppm2 = base_median_ppm2 × (target_index / avg_analog_index)
median_price/range_low/range_high scale by the same factor.

Guards (no double-count + no regression):
- feature flag estimate_quarter_index_enabled (default on)
- pure-radius path only: skip if same-building anchor fired (anchor_tier)
  or any Avito IMV anchor influenced median/range (imv_anchor_present)
- Guard-2: skip when >0.6 of analogs share the target quarter
- sparse fallback: no row / n_deals<10 / FDW error → no-op
- bimodal guard: price_index>2.0 & n_deals<50 → no-op (heterogeneous quarters)

Analog quarter from listings.building_cadastral_number (added to analog
SELECT); target quarter from dadata.house_cadnum. Batched single FDW lookup
for analog indexes. Disclosure appended to confidence_explanation.

Refs #764
2026-05-31 09:49:59 +03:00
..
app feat(tradein): per-cadastral-quarter price index in estimator (#764) 2026-05-31 09:49:59 +03:00
data/sql feat(estimator): exclude city-centroid listings from radius analogs (Refs #769 Part E) 2026-05-30 21:22:21 +03:00
scripts feat(backtest): per-rooms asking→sold correction block (#648 S1) (#650) 2026-05-29 13:11:55 +00:00
tests feat(tradein): per-cadastral-quarter price index in estimator (#764) 2026-05-31 09:49:59 +03:00
.dockerignore feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
Dockerfile feat(tradein): persistent infra для backfill scripts (PR F) (#592) 2026-05-27 06:59:54 +00:00
pyproject.toml feat(rbac): role-based access control via X-Authenticated-User middleware (#585) 2026-05-26 06:18:40 +00:00