[tradein][avito] year_built = 0% — источник не отдаёт год постройки (потолок ~1.7% через houses-catalog) #2013

Open
opened 2026-06-27 17:21:54 +00:00 by lekss361 · 1 comment
Owner

Из аудита #2011 + прод-замер 2026-06-27. avito — крупнейший источник (30 327 active), но listings.year_built заполнен у 0%.

Почему это важно (по импакту — p1-кандидат)

year_built ПОТРЕБЛЯЕТСЯ estimator: cohort-фильтр year_built BETWEEN :year_min AND :year_max. При year_built IS NULL строка проходит фильтр без проверки когорты → avito-аналоги тянутся домами любого года → загрязняют comp-пул целевой квартиры.

НО прод-замер: источник год НЕ отдаёт (потолок ~1.7%)

  • avito SERP raw_payload активного листинга = только {title, address, house_ext_id} — года нет.
  • avito_detail.py (detail-карточка) не парсит год — в param-map «Год постройки» отсутствует (есть kitchen/ceiling/lifts).
  • Год есть только в Houses Catalog (Stage 2c): avito_houses.py:88 "Год постройки" → houses.year_built. Но пишется в таблицу houses (house-level), не в listings, И покрытие низкое:
    • houses.year_built: 3475 / 13774 (25%).
    • avito active с house_id_fk: 29 101 / 30 327 (96% линкуется), но из них houses.year_built IS NOT NULL только у 515 → потолок backfill listings.year_built из houses = 1.7%.

Для сравнения: cian year_built 91.7%, yandex 94.5% — у них источник год отдаёт, у avito в ЕКБ нет. Это ограничение источника, не дешёвый фикс.

Варианты (все низкого ROI)

  1. Defer (рекомендуется) — отложить до улучшения покрытия Houses Catalog (смежно #1950 detail-очередь). Сейчас sub-noise (1.7%).
  2. Дешёвый propagate houses.year_built → listings.year_built (backfill UPDATE по house_id_fk + в save-флоу avito_houses): +1.7% сейчас, растёт с обогащением каталога. Маленький эффект.
  3. Внешний источник года (ЕГРН / cad_buildings_local / 2ГИС) → отдельная большая задача, вне scope скрапперов.

Замер (ssh gendesign → docker exec tradein-postgres, 2026-06-27)

  • listings.year_built avito: 0.0% (0/30327); cian 91.7%; yandex 94.5%.
  • houses.year_built: 25% (3475/13774); avito-linked: 515/29101 = 1.7%.

priority/p2 (понижено с p1-кандидата по факту замера — источник год не даёт; реклассифицировать в p1 только если найдётся источник года). scope/backend, scrapers, tradein.

Из аудита #2011 + прод-замер 2026-06-27. avito — крупнейший источник (30 327 active), но `listings.year_built` заполнен у **0%**. ## Почему это важно (по импакту — p1-кандидат) year_built ПОТРЕБЛЯЕТСЯ estimator: cohort-фильтр `year_built BETWEEN :year_min AND :year_max`. При `year_built IS NULL` строка проходит фильтр **без проверки когорты** → avito-аналоги тянутся домами любого года → загрязняют comp-пул целевой квартиры. ## НО прод-замер: источник год НЕ отдаёт (потолок ~1.7%) - avito SERP raw_payload активного листинга = только `{title, address, house_ext_id}` — года нет. - `avito_detail.py` (detail-карточка) **не парсит** год — в param-map «Год постройки» отсутствует (есть kitchen/ceiling/lifts). - Год есть только в Houses Catalog (Stage 2c): `avito_houses.py:88` `"Год постройки" → houses.year_built`. Но пишется в таблицу `houses` (house-level), не в `listings`, И покрытие низкое: - `houses.year_built`: 3475 / 13774 (25%). - avito active с `house_id_fk`: 29 101 / 30 327 (96% линкуется), но из них `houses.year_built IS NOT NULL` только у **515** → потолок backfill `listings.year_built` из `houses` = **1.7%**. Для сравнения: cian year_built 91.7%, yandex 94.5% — у них источник год отдаёт, у avito в ЕКБ нет. Это **ограничение источника**, не дешёвый фикс. ## Варианты (все низкого ROI) 1. **Defer (рекомендуется)** — отложить до улучшения покрытия Houses Catalog (смежно #1950 detail-очередь). Сейчас sub-noise (1.7%). 2. Дешёвый propagate `houses.year_built → listings.year_built` (backfill UPDATE по house_id_fk + в save-флоу avito_houses): +1.7% сейчас, растёт с обогащением каталога. Маленький эффект. 3. Внешний источник года (ЕГРН / cad_buildings_local / 2ГИС) → отдельная большая задача, вне scope скрапперов. ## Замер (ssh gendesign → docker exec tradein-postgres, 2026-06-27) - `listings.year_built` avito: 0.0% (0/30327); cian 91.7%; yandex 94.5%. - `houses.year_built`: 25% (3475/13774); avito-linked: 515/29101 = 1.7%. priority/**p2** (понижено с p1-кандидата по факту замера — источник год не даёт; реклассифицировать в p1 только если найдётся источник года). scope/backend, scrapers, tradein.
lekss361 added the
data
priority/p2
scope/backend
scrapers
tradein
labels 2026-06-27 17:22:30 +00:00
Author
Owner

Ре-скан 2026-07-04: пересмотрел замер и вывод issue — defer остаётся в силе. Новых источников года (ЕГРН/2ГИС/др.) в scope этой сессии не искал (отдельная большая задача, явно вынесена в п.3 issue). Houses Catalog покрытие (#1950-смежное) не улучшилось настолько, чтобы поднять потолок пропагейта выше ~1.7%. Кода не пишу — маленький эффект не оправдывает риск (см. вариант 2 в issue). Оставляю open/p2, ре-триаж имеет смысл при следующем крупном улучшении detail-очереди avito.

Ре-скан 2026-07-04: пересмотрел замер и вывод issue — defer остаётся в силе. Новых источников года (ЕГРН/2ГИС/др.) в scope этой сессии не искал (отдельная большая задача, явно вынесена в п.3 issue). Houses Catalog покрытие (#1950-смежное) не улучшилось настолько, чтобы поднять потолок пропагейта выше ~1.7%. Кода не пишу — маленький эффект не оправдывает риск (см. вариант 2 в issue). Оставляю open/p2, ре-триаж имеет смысл при следующем крупном улучшении detail-очереди avito.
Sign in to join this conversation.
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#2013
No description provided.