Demand D6: Класс жилья normalization через yandex_realty (fallback obj_class) #38

Closed
opened 2026-05-11 20:15:28 +00:00 by lekss361 · 2 comments
lekss361 commented 2026-05-11 20:15:28 +00:00 (Migrated from github.com)

Эшелон: 🟠 Demand — «Продастся ли»

Контекст / проблема

Bug_Kn_API_Obj_Class_Always_Null_OPEN — kn-API не отдаёт obj_class для 3032 ЖК Свердл. Это ломает per-class velocity (D2), per-class absorption (D3), per-class weight profile (I2). Известный workaround — fuzzy name-match через yandex_realty_zk (12 строк).

Что сделать

  1. Расширить yandex_realty_zk — массовый сбор класса жилья (econom/comfort/business/premium) из Яндекс.Недвижимость по Свердл. Сейчас 12 строк — нужно >500.
  2. Fuzzy match domrf_kn_objects.comm_nameyandex_realty_zk.name через pg_trgm:
    UPDATE domrf_kn_objects o
       SET obj_class_fallback = y.obj_class
      FROM yandex_realty_zk y
     WHERE o.obj_class IS NULL
       AND similarity(LOWER(o.comm_name), LOWER(y.name)) > 0.6;
    
  3. Альтернатива/дополнение — yandex_realty_class_prices для inference класса по цене м²
  4. Field в analyze: class_source: ("domrf"|"yandex_match"|"price_inference")

Acceptance

  • obj_class_fallback >70% покрытие на ЖК Свердл
  • Тестовая выборка 50 ЖК: точность match >85%

Owner

database-expert (fuzzy join + scraper extension) + backend-engineer (integration)

Effort

1–1.5 дня

Dependencies

— (но разблокирует D2/D3 per-class)

Risks / open

  • yandex_realty_zk сейчас 12 строк — нужен massive scrape Свердл, может занять отдельный day
  • Fuzzy match может давать false-positive для ЖК с похожими названиями («Парк» × N)
**Эшелон:** 🟠 Demand — «Продастся ли» ## Контекст / проблема [Bug_Kn_API_Obj_Class_Always_Null_OPEN](https://obsidian.gendsgn.ru/) — kn-API не отдаёт `obj_class` для 3032 ЖК Свердл. Это ломает per-class velocity (D2), per-class absorption (D3), per-class weight profile (I2). Известный workaround — fuzzy name-match через `yandex_realty_zk` (12 строк). ## Что сделать 1. Расширить `yandex_realty_zk` — массовый сбор класса жилья (econom/comfort/business/premium) из Яндекс.Недвижимость по Свердл. Сейчас 12 строк — нужно >500. 2. Fuzzy match `domrf_kn_objects.comm_name` ↔ `yandex_realty_zk.name` через `pg_trgm`: ```sql UPDATE domrf_kn_objects o SET obj_class_fallback = y.obj_class FROM yandex_realty_zk y WHERE o.obj_class IS NULL AND similarity(LOWER(o.comm_name), LOWER(y.name)) > 0.6; ``` 3. Альтернатива/дополнение — `yandex_realty_class_prices` для inference класса по цене м² 4. Field в analyze: `class_source: ("domrf"|"yandex_match"|"price_inference")` ## Acceptance - [ ] obj_class_fallback >70% покрытие на ЖК Свердл - [ ] Тестовая выборка 50 ЖК: точность match >85% ## Owner `database-expert` (fuzzy join + scraper extension) + `backend-engineer` (integration) ## Effort 1–1.5 дня ## Dependencies — (но разблокирует D2/D3 per-class) ## Risks / open - `yandex_realty_zk` сейчас 12 строк — нужен massive scrape Свердл, может занять отдельный day - Fuzzy match может давать false-positive для ЖК с похожими названиями («Парк» × N)
Owner

Status update — НЕ реализовано как описано. yandex_realty_zk остаётся ~12 строк (если состояние не изменилось). Fuzzy match через pg_trgm для obj_class fallback не добавлен.

Однако, частичный workaround есть через PR #214 (objective_complex_mapping backfill via pg_trgm, #203) — fuzzy match objective ↔ domrf_kn для других контекстов. Pattern переиспользуем.

Bug Kn_API_Obj_Class_Always_Null остаётся open. Issue валиден, в backlog priority/normal.

Status update — НЕ реализовано как описано. `yandex_realty_zk` остаётся ~12 строк (если состояние не изменилось). Fuzzy match через pg_trgm для obj_class fallback не добавлен. Однако, частичный workaround есть через **PR #214** (`objective_complex_mapping backfill via pg_trgm`, #203) — fuzzy match objective ↔ domrf_kn для других контекстов. Pattern переиспользуем. Bug `Kn_API_Obj_Class_Always_Null` остаётся open. Issue валиден, в backlog priority/normal.
lekss361 added the
priority/p2
scope/backend
labels 2026-06-17 20:18:10 +00:00
Collaborator

Закрыто — PR #1911: obj_class_fallback/obj_class_source (миграция 169, pg_trgm GIN-индексы), ETL obj_class_backfill (trigram-match названия ЖК с yandex_realty AUTO_ACCEPT 0.6 → yandex_match; price-inference fallback), консьюмеры читают COALESCE(obj_class, obj_class_fallback). 8 тестов. Реальный obj_class всегда побеждает (byte-identical).
⚠️ Покрытие растёт по мере расширения скрейпа yandex_realty_zk (сейчас ~12 строк); matcher+порог готовы.

✅ Закрыто — PR #1911: `obj_class_fallback`/`obj_class_source` (миграция 169, pg_trgm GIN-индексы), ETL `obj_class_backfill` (trigram-match названия ЖК с yandex_realty AUTO_ACCEPT 0.6 → yandex_match; price-inference fallback), консьюмеры читают `COALESCE(obj_class, obj_class_fallback)`. 8 тестов. Реальный obj_class всегда побеждает (byte-identical). ⚠️ Покрытие растёт по мере расширения скрейпа `yandex_realty_zk` (сейчас ~12 строк); matcher+порог готовы.
Sign in to join this conversation.
No project
No assignees
3 participants
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#38
No description provided.