feat(etl): housing-class normalization fallback via yandex_realty trigram match (#38) #1911

Merged
bot-backend merged 1 commit from feat/obj-class-normalization-38 into main 2026-06-26 07:44:26 +00:00
Collaborator

Класс жилья normalization: для domrf_kn_objects без obj_class — fallback через trigram-match названия ЖК с yandex_realty + price-inference.

  • data/sql/169: obj_class_fallback + obj_class_source ('domrf'|'yandex_match'|'price_inference') колонки, pg_trgm + GIN trgm индексы. Idempotent.
  • etl/obj_class_backfill.py (по образцу objective_backfill.py): similarity() CROSS JOIN LATERAL, AUTO_ACCEPT 0.6 → yandex_match; price-inference fallback. SAVEPOINT per row, idempotent.
  • Консьюмеры (velocity/competitors/analytics_queries) читают COALESCE(obj_class, obj_class_fallback) — реальный класс всегда побеждает (byte-identical когда есть).
  • +8 тестов. 39 passed, ruff clean.

Без schema-change (внутренний backfill, obj_class-ключ ответа не меняется) → codegen не нужен.

⚠️ Покрытие зависит от расширения скрейпа yandex_realty_zk (сейчас ~12 строк; matcher+порог готовы, цифры покрытия — после скрейпа). Refs #38

Класс жилья normalization: для `domrf_kn_objects` без `obj_class` — fallback через trigram-match названия ЖК с yandex_realty + price-inference. - `data/sql/169`: `obj_class_fallback` + `obj_class_source` ('domrf'|'yandex_match'|'price_inference') колонки, pg_trgm + GIN trgm индексы. Idempotent. - `etl/obj_class_backfill.py` (по образцу objective_backfill.py): `similarity()` CROSS JOIN LATERAL, AUTO_ACCEPT 0.6 → yandex_match; price-inference fallback. SAVEPOINT per row, idempotent. - Консьюмеры (velocity/competitors/analytics_queries) читают `COALESCE(obj_class, obj_class_fallback)` — реальный класс всегда побеждает (byte-identical когда есть). - +8 тестов. 39 passed, ruff clean. **Без schema-change** (внутренний backfill, obj_class-ключ ответа не меняется) → codegen не нужен. ⚠️ Покрытие зависит от расширения скрейпа `yandex_realty_zk` (сейчас ~12 строк; matcher+порог готовы, цифры покрытия — после скрейпа). Refs #38
bot-backend added 1 commit 2026-06-26 07:31:11 +00:00
feat(etl): housing-class normalization fallback via yandex_realty trigram match (#38)
All checks were successful
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m14s
CI / backend-tests (pull_request) Successful in 11m20s
95b2fb34e2
kn-API не отдаёт obj_class для ~3032 ЖК Свердл, что ломает per-class
velocity/absorption/weight. Добавлен fallback:

- 169_obj_class_fallback.sql: obj_class_fallback + obj_class_source колонки,
  pg_trgm + GIN trgm индексы на LOWER(comm_name) и LOWER(yandex_realty_zk.name).
- app/services/etl/obj_class_backfill.py: trigram-match comm_name ↔
  yandex_realty_zk.name (similarity >= 0.6, CROSS JOIN LATERAL) →
  obj_class_source='yandex_match'; price-inference по
  yandex_realty_class_prices → 'price_inference'. Idempotent, SAVEPOINT per row.
- Консьюмеры (analytics_queries / velocity / competitors): класс-фильтр и
  dominant_class читают COALESCE(obj_class, obj_class_fallback) — реальный
  класс в приоритете, поведение для размеченных ЖК не меняется.

Внутренний backfill — response-схема (parcel.py / OpenAPI) не меняется.

Refs #38
bot-backend merged commit 9c52e0b29f into main 2026-06-26 07:44:26 +00:00
bot-backend deleted branch feat/obj-class-normalization-38 2026-06-26 07:44: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#1911
No description provided.