gendesign/tradein-mvp/backend/app
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
..
api fix(tradein/newbuilding): счётчики записи различают вставку и обновление (#2807) (#2809) 2026-08-10 08:50:56 +00:00
core fix(tradein/payments): миграция 234 → 240 — номер снова занят на main 2026-08-07 15:31:01 +03:00
observability chore(tradein): удалить мёртвые mobileproxy env-переменные и rotate-ip (#2616 шаги 2-3) (#2650) 2026-08-05 09:35:54 +00:00
schemas fix(tradein/payments): миграция 234 → 240 — номер снова занят на main 2026-08-07 15:31:01 +03:00
services fix(tradein/estimate): домовой IMV-якорь приводится к базису ремонта квартиры 2026-08-10 14:36:51 +05:00
tasks fix(tradein/newbuilding): счётчики записи различают вставку и обновление (#2807) (#2809) 2026-08-10 08:50:56 +00:00
__init__.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
main.py Merge pull request 'feat(mera/b2c): правовая рамка — согласие до сохранения, удаление по сроку и по запросу — этап 4 из 8' (#2547) from feat/mera-b2c-privacy into main 2026-08-06 17:04:27 +00:00
scheduler_main.py refactor(tradein/scheduler): удалить legacy scheduler_loop + scraper-scheduling, kit единственный путь (#2397 Part C) 2026-07-04 13:00:30 +03:00
tgbot_main.py feat(tradein/tgbot): Telegram support-мост @MERAsupport_bot 2026-07-16 16:58:53 +03:00