fix(tradein/estimator): парсер адресов — имя-перед-типом, glued-суффикс, микрорайоны (#2269) #2290

Merged
bot-backend merged 1 commit from fix/tradein-dedup-street-formats into main 2026-07-03 13:03:26 +00:00
Collaborator

Что

Суженный scope #2269 после перезамера (после union-find #2273 выживало 38.8% кросс-source дублей; 22% активных листингов — ноль дедуп-сигнала, драйвер domklik).

_parse_street_house получил три fallback-ветки СТРОГО после существующей (тип-перед-именем, байт-в-байт не тронута):

  1. Имя перед типом («Рассветная улица, 6 к1» — формат domklik) + glued-суффикс («Рассветная ул.,6к1» — avito) — один регэксп с lookahead-границей типа; тип не входит в захват → токен идентичен ветке 1 («рассветная»).
  2. Микрорайон-fallback (мкр/мкр-н/м-н) — токен с префиксом mkr , изолирован от уличных ключей.

Приоритет веток покрыт тестом (регрессия #2265 «мкр. ЖБИ, улица Сыромолотова» → «сыромолотова»); санити union-find (guard_house/кадастр-конфликты) не тронуты; over-merge mkr-ключа ограничен теми же guard'ами, что и уличный путь (floor+area+price_bucket+house equal-or-missing).

Замеры

  • Прод-recovery: токен восстановлен у 11 867/15 314 (77.5%) прежде пустых активных листингов (cian 3 469 / yandex 3 210 / domklik 3 006 / avito 2 182).
  • Живой бэктест (sample 300, resolve-house-id, детерминированная выборка): MAPE 13.55→13.55 (нейтрально), coverage 82.73→83.09, 4+комн MAPE 26.23→24.33. Hermetic regression-gate PASSED, frozen baseline не тронут.
  • Живой пример из issue (domklik+cian Рассветная 6к1) — end-to-end тест: две записи → одна.

Тесты

609 passed (широкий свип dedup|street|estimator), 45 в целевых файлах. ruff+UP clean (старый pre-commit ruff учтён).

Ревью

code-reviewer: APPROVE (regex false-positives проверены эмпирически — «заульская»/«прорубная» не матчатся; единственный minor — fail-safe miss на мусорном вводе, не over-merge).

Post-deploy

Прод-перезамер доли выживших дублей (цель <20%, было 38.8%) + свежая оценка по Рассветной без ×2-дублей.

Refs #2269

## Что Суженный scope #2269 после перезамера (после union-find #2273 выживало 38.8% кросс-source дублей; 22% активных листингов — ноль дедуп-сигнала, драйвер domklik). `_parse_street_house` получил три fallback-ветки СТРОГО после существующей (тип-перед-именем, байт-в-байт не тронута): 1. **Имя перед типом** («Рассветная улица, 6 к1» — формат domklik) + **glued-суффикс** («Рассветная ул.,6к1» — avito) — один регэксп с lookahead-границей типа; тип не входит в захват → токен идентичен ветке 1 («рассветная»). 2. **Микрорайон-fallback** (мкр/мкр-н/м-н) — токен с префиксом `mkr `, изолирован от уличных ключей. Приоритет веток покрыт тестом (регрессия #2265 «мкр. ЖБИ, улица Сыромолотова» → «сыромолотова»); санити union-find (guard_house/кадастр-конфликты) не тронуты; over-merge mkr-ключа ограничен теми же guard'ами, что и уличный путь (floor+area+price_bucket+house equal-or-missing). ## Замеры - **Прод-recovery**: токен восстановлен у **11 867/15 314 (77.5%)** прежде пустых активных листингов (cian 3 469 / yandex 3 210 / domklik 3 006 / avito 2 182). - **Живой бэктест** (sample 300, resolve-house-id, детерминированная выборка): MAPE 13.55→13.55 (нейтрально), coverage 82.73→**83.09**, 4+комн MAPE 26.23→**24.33**. Hermetic regression-gate PASSED, frozen baseline не тронут. - Живой пример из issue (domklik+cian Рассветная 6к1) — end-to-end тест: две записи → одна. ## Тесты 609 passed (широкий свип dedup|street|estimator), 45 в целевых файлах. ruff+UP clean (старый pre-commit ruff учтён). ## Ревью code-reviewer: ✅ APPROVE (regex false-positives проверены эмпирически — «заульская»/«прорубная» не матчатся; единственный minor — fail-safe miss на мусорном вводе, не over-merge). ## Post-deploy Прод-перезамер доли выживших дублей (цель <20%, было 38.8%) + свежая оценка по Рассветной без ×2-дублей. Refs #2269
bot-backend added 1 commit 2026-07-03 13:00:53 +00:00
fix(tradein/estimator): парсинг имя-перед-типом, glued-суффикса и микрорайонов для кросс-source дедупа (#2269)
All checks were successful
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 7s
CI / changes (pull_request) Successful in 7s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 1m36s
f9a4612040
_parse_street_house давал ('','') на трёх реальных форматах источников
(domklik «Рассветная улица, 6 к1», avito «ул.,6к1», микрорайон без
уличного типа) — после union-find #2265 выживало 38.8% кросс-source
дублей, 22% активных листингов имели ноль дедуп-сигнала (драйвер
domklik: 48% листингов без токена, кадастр всегда пуст).

Три fallback-ветки СТРОГО после существующей (тип-перед-именем, не
тронута): суффикс-регэксп с lookahead-границей типа; микрорайон с
токеном-префиксом «mkr » (изолирован от уличных ключей). Нормализация
токена байт-в-байт с веткой 1 (тест равенства по 4 форматам).
Санити union-find (guard_house/кадастр-конфликты) не тронуты.

Прод-замер: новые ветки восстанавливают токен у 11 867/15 314 (77.5%)
прежде пустых активных листингов. Живой бэктест (sample 300,
resolve-house-id, детерминированная выборка): MAPE 13.55→13.55,
coverage 82.73→83.09, 4+комн MAPE 26.23→24.33; hermetic gate PASSED,
frozen baseline не тронут.

Refs #2269
bot-backend merged commit 666962185c into main 2026-07-03 13:03:26 +00:00
bot-backend deleted branch fix/tradein-dedup-street-formats 2026-07-03 13:03:26 +00:00
Sign in to join this conversation.
No reviewers
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#2290
No description provided.