[tradein][avito] IMV: персист comparables + searchSimilarUrl (сейчас полностью выбрасываются) #2010

Closed
opened 2026-06-27 16:57:24 +00:00 by lekss361 · 3 comments
Owner

Из аудита покрытия полей скрапперов 2026-06-27 (чтение кода). Avito IMV (realty-imv/get-data) отдаёт собственные рыночные аналоги с флагами «хорошая цена» — всё скачивается и парсится, но ни один save_* их не пишет. Сохраняются только агрегаты recommended/lower/higher price + count.

Что выбрасывается (file:line)

avito_imv.py:268-289,357-366,667,708-709IMVEvaluation.suggestions + search_similar_url:

  • по каждой comparable: price, address, exposure_days, publish_date, item_url, metro (name/distance/color), hasGoodPriceBadge
  • searchSimilarUrl — ссылка на похожие

Impact: прямой valuation-сигнал от самого Avito (рыночные аналоги конкретного объекта + флаг «цена ниже рынка») теряется. Это потенциально сильная фича для оценки/объяснимости.

DoD

  • Спроектировать хранение: либо JSONB-колонка imv_suggestions в avito_imv_evaluations, либо отдельная таблица avito_imv_comparables(evaluation_id FK, price, address, exposure_days, publish_date, item_url, metro_*, has_good_price).
  • Расширить save_imv_evaluation (avito_imv.py:719-861), чтобы писать suggestions + search_similar_url.
  • Миграция tradein-mvp/backend/data/sql/NNN_*.sql (идемпотентно, проверить коллизию NN basename).
  • Verify: после прогона IMV на тест-объекте suggestions материализуются в БД.

NB: ценность зависит от того, насколько IMV-стадия активна в проде — перед большой работой подтвердить объём avito_imv_evaluations за последние дни. Если IMV почти не гоняется — понизить приоритет.

scope/backend, scope/db, scrapers, tradein, priority/p2.

Из аудита покрытия полей скрапперов 2026-06-27 (чтение кода). Avito IMV (`realty-imv/get-data`) отдаёт собственные рыночные аналоги с флагами «хорошая цена» — всё скачивается и **парсится**, но ни один `save_*` их не пишет. Сохраняются только агрегаты recommended/lower/higher price + count. ## Что выбрасывается (file:line) `avito_imv.py:268-289,357-366,667,708-709` → `IMVEvaluation.suggestions` + `search_similar_url`: - по каждой comparable: `price`, `address`, `exposure_days`, `publish_date`, `item_url`, `metro` (name/distance/color), `hasGoodPriceBadge` - `searchSimilarUrl` — ссылка на похожие **Impact:** прямой valuation-сигнал от самого Avito (рыночные аналоги конкретного объекта + флаг «цена ниже рынка») теряется. Это потенциально сильная фича для оценки/объяснимости. ## DoD - Спроектировать хранение: либо JSONB-колонка `imv_suggestions` в `avito_imv_evaluations`, либо отдельная таблица `avito_imv_comparables(evaluation_id FK, price, address, exposure_days, publish_date, item_url, metro_*, has_good_price)`. - Расширить `save_imv_evaluation` (`avito_imv.py:719-861`), чтобы писать suggestions + `search_similar_url`. - Миграция `tradein-mvp/backend/data/sql/NNN_*.sql` (идемпотентно, проверить коллизию NN basename). - Verify: после прогона IMV на тест-объекте suggestions материализуются в БД. NB: ценность зависит от того, насколько IMV-стадия активна в проде — перед большой работой подтвердить объём `avito_imv_evaluations` за последние дни. Если IMV почти не гоняется — понизить приоритет. scope/backend, scope/db, scrapers, tradein, priority/p2.
lekss361 added the
priority/p2
scope/backend
scope/db
scrapers
status/ready
tradein
labels 2026-06-27 16:58:07 +00:00
Author
Owner

Прод-замер перед работой (2026-06-27, ssh gendesign → tradein-postgres):

  • avito_imv_evaluations: всего 16 записей, за последние 7 дней — 8, последний fetched_at = 2026-06-24 12:55.

IMV-стадия в проде практически не гоняется (16 оценок за всё время существования таблицы). Персист comparables / searchSimilarUrl сейчас не окупается — нет потока данных для накопления, и нечего верифицировать после прогона.

Решение: defer (понизить приоритет). Вернуться, когда IMV-стадия станет реально активной (объём avito_imv_evaluations пойдёт в рост). DoD по схеме/коду остаётся валидным — выполнять не сейчас.

NB для будущей реализации: timestamp-колонка таблицы — fetched_at (не created_at).

Прод-замер перед работой (2026-06-27, ssh gendesign → tradein-postgres): - `avito_imv_evaluations`: всего **16** записей, за последние 7 дней — **8**, последний `fetched_at` = `2026-06-24 12:55`. IMV-стадия в проде практически **не гоняется** (16 оценок за всё время существования таблицы). Персист comparables / `searchSimilarUrl` сейчас не окупается — нет потока данных для накопления, и нечего верифицировать после прогона. **Решение: defer (понизить приоритет).** Вернуться, когда IMV-стадия станет реально активной (объём `avito_imv_evaluations` пойдёт в рост). DoD по схеме/коду остаётся валидным — выполнять не сейчас. NB для будущей реализации: timestamp-колонка таблицы — `fetched_at` (не `created_at`).
Author
Owner

Working on this (автономный проход по backlog) — ветка fix/tradein-avito-imv-comparables. Перед реализацией проверю прод-объём avito_imv_evaluations за 14д (issue сам предупреждает — если почти нулевой, реализация будет отложена/понижена в приоритете вместо слепого имплемента).

Working on this (автономный проход по backlog) — ветка `fix/tradein-avito-imv-comparables`. Перед реализацией проверю прод-объём `avito_imv_evaluations` за 14д (issue сам предупреждает — если почти нулевой, реализация будет отложена/понижена в приоритете вместо слепого имплемента).
Author
Owner

Прод-объём проверен (обязательный pre-flight gate из самой задачи, read-only SQL): avito_imv_evaluations — 13 строк за последние 14д (max fetched_at 2026-07-02), 19 строк за всё время таблицы (с 2026-05-29). Порог 20/14д не пройден → полная реализация не оправдана сейчас.

Причина низкого объёма: Estimator_IMV_Integration гейтит вызов IMV условием floor И total_floors оба not None — большинство estimate-запросов эту проверку не проходят.

Дополнительная находка, меняющая экономику будущей реализации: _imv_evaluate() уже сохраняет ПОЛНЫЙ JSON-ответ в колонку raw_response (jsonb) — suggestions/placementHistory физически присутствуют в БД (18/19 строк), просто ничего их оттуда не читает. При желании реализовать это позже — можно обойтись без миграции: SQL-запрос к raw_response->'suggestions' вместо новой JSONB-колонки/таблицы из исходного DoD.

Понижаю приоритет / откладываю до роста прод-объёма IMV-стадии (например, после расширения gating-условий вызова IMV). Закрываю с этой пометкой — если объём вырастет или ценность понадобится раньше, переоткрыть с явным override.

Прод-объём проверен (обязательный pre-flight gate из самой задачи, read-only SQL): `avito_imv_evaluations` — 13 строк за последние 14д (max `fetched_at` 2026-07-02), 19 строк за всё время таблицы (с 2026-05-29). Порог 20/14д не пройден → полная реализация не оправдана сейчас. Причина низкого объёма: `Estimator_IMV_Integration` гейтит вызов IMV условием floor И total_floors оба not None — большинство estimate-запросов эту проверку не проходят. Дополнительная находка, меняющая экономику будущей реализации: `_imv_evaluate()` уже сохраняет ПОЛНЫЙ JSON-ответ в колонку `raw_response` (jsonb) — `suggestions`/`placementHistory` физически присутствуют в БД (18/19 строк), просто ничего их оттуда не читает. При желании реализовать это позже — можно обойтись без миграции: SQL-запрос к `raw_response->'suggestions'` вместо новой JSONB-колонки/таблицы из исходного DoD. Понижаю приоритет / откладываю до роста прод-объёма IMV-стадии (например, после расширения gating-условий вызова IMV). Закрываю с этой пометкой — если объём вырастет или ценность понадобится раньше, переоткрыть с явным override.
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#2010
No description provided.