gendesign/tradein-mvp/backend
bot-backend 1ec37a793b
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 3m55s
fix(tradein/estimate): домовой IMV-якорь приводится к базису ремонта квартиры
median_price к моменту blend'а уже домножен на _repair_coefficient («требует
ремонта» −6%, «евро» +10%), а домовой якорь из house_imv_evaluations запрошен
у Avito с ОДНИМ ремонтом (renovation_type). Порог anchor > median×1.15 и сам
blend клали два разных базиса на одну шкалу: у клиента с «требует ремонта»
порог фактически падал до ×1.081, а сработавший blend возвращал половину его
−6% обратно вверх — то есть однонаправленный якорь наполовину отменял
поправку на ремонт.

Правка не трогает калибровку: якорь домножается ровно на тот коэффициент,
который код УЖЕ применил к медиане (coef(ремонт клиента) / coef(ремонт строки
якоря)). Карточка Avito остаётся сырой — чужое число мы не правим; в blend
уходит пересчитанное, и пояснение это называет.

Замер на проде (1061 персистированная оценка, 2026-08-10, тем же кодом:
match_house_readonly → _fetch_house_imv_anchor → _apply_imv_blend):
- реализованный эффект СЕГОДНЯ 0 ₽ — blend не сработал ни разу (0 маркеров
  в confidence_explanation при 174 repair-заметках и 725 anchor-заметках
  в той же колонке, то есть канал показать срабатывание способен);
- 674/1061 оценок резолвятся в дом, 240 получают домовой якорь, порог
  пересекают 19 — все они гасятся гейтом anchor_tier is None выше по потоку;
- на этих 19 старый код против базис-согласованного: 9 оценок «требует
  ремонта» −3.3…−9.8 % (−4.13 млн ₽ суммарно), 1 оценка «хороший ремонт»
  +9.6 % (+0.47 млн ₽).

Однонаправленность blend'а НЕ трогаю — это отдельное продуктовое решение
(config: «ОДНОНАПРАВЛЕННО: только повышаем»), не дефект в смысле #2677.

Refs #2677
2026-08-10 14:36:51 +05:00
..
app fix(tradein/estimate): домовой IMV-якорь приводится к базису ремонта квартиры 2026-08-10 14:36:51 +05:00
data/sql fix(tradein/proxy): узел, зарезервированный за Домкликом, до Домклика не доходит (#2800 A) (#2802) 2026-08-09 18:15:55 +00:00
scripts fix(tradein/scraper): дневной снимок узнаёт свой прогон (#2701) (#2707) 2026-08-06 07:00:17 +00:00
tests fix(tradein/estimate): домовой IMV-якорь приводится к базису ремонта квартиры 2026-08-10 14:36:51 +05:00
.dockerignore feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
Dockerfile chore(scraper-kit): docker-context wiring + restore backend workspace dep (#2137) 2026-07-02 14:21:38 +00:00
pyproject.toml feat(tradein/auth): password hashing + session config foundation (#2550) 2026-07-30 09:40:51 +03:00