[tradein][backend] СберИндекс pull + time-adjust в estimator (impl #794) #887

Closed
opened 2026-05-31 10:38:54 +00:00 by bot-backend · 1 comment
Collaborator

Имплементация по результатам research #794 (API полностью реверснут там, anti-bot НЕТ, обычный httpx, данные помесячно до 2026-04).

Готовый рецепт API (из #794)

POST https://sberindex.ru/api/sowa, тело {SOWA:{method:GET, route:<base64>, data:{type:object,value:[]}}}. route = base64 от /dataset/v1/<dashboard>?filter=<urlenc-json>&limit=1000&offset=0. filter = {REF_AREA, FREQ:M, SOURCE:SI, REALTY:2(вторичка)}. Ответ: base64-поля [period, value(руб/м²), ref_area, realty, freq...] + строки помесячно.

Шаги

  1. REF_AREA коды ЕКБ/МСК — 1 capture: переключить регион на дашборде → новый filter покажет код (643=РФ; Свердловская обл / Москва — другие).
  2. Тянуть 3 серии помесячно: real_estate_deals (sold-index), residential_real_estate_prices (гедонистич. — коэффициент), dinamika-tsen-obyavlenii (asking-бенчмарк). REALTY=2.
  3. Таблица sber_price_index(city, period_month, segment, dashboard, index_value rub_m2, source) + periodic pull (httpx, прокси НЕ нужен). Idempotent upsert по (city,period_month,dashboard).
  4. Wire time-adjust в deal-based путь estimator (#652): adjusted_deal = deal_price * idx[city,now] / idx[city,deal_month] — оживляет замороженные Q1'26 ДКП (см. #724/#727 — upstream-лаг, ДКП отстают на квартал; это лекарство от внутриквартального дрейфа).
  5. Бенчмарк-сверка: наша asking-медиана (avito/cian) vs dinamika-tsen-obyavlenii → лог расхождений (data-quality сигнал).

Приоритет

p3, post-demo accuracy lever (НЕ демо-критично). Гранулярность город/регион, не район (ограничение СберИндекса).

Refs: #794 (полный реверс + обзор категории), #652, #724, #727, #647.

Имплементация по результатам research #794 (API полностью реверснут там, anti-bot НЕТ, обычный httpx, данные помесячно до 2026-04). ## Готовый рецепт API (из #794) `POST https://sberindex.ru/api/sowa`, тело `{SOWA:{method:GET, route:<base64>, data:{type:object,value:[]}}}`. route = base64 от `/dataset/v1/<dashboard>?filter=<urlenc-json>&limit=1000&offset=0`. filter = {REF_AREA, FREQ:M, SOURCE:SI, REALTY:2(вторичка)}. Ответ: base64-поля [period, value(руб/м²), ref_area, realty, freq...] + строки помесячно. ## Шаги 1. **REF_AREA коды ЕКБ/МСК** — 1 capture: переключить регион на дашборде → новый filter покажет код (643=РФ; Свердловская обл / Москва — другие). 2. Тянуть 3 серии помесячно: `real_estate_deals` (sold-index), `residential_real_estate_prices` (гедонистич. — коэффициент), `dinamika-tsen-obyavlenii` (asking-бенчмарк). REALTY=2. 3. Таблица `sber_price_index(city, period_month, segment, dashboard, index_value rub_m2, source)` + periodic pull (httpx, прокси НЕ нужен). Idempotent upsert по (city,period_month,dashboard). 4. Wire time-adjust в deal-based путь estimator (#652): `adjusted_deal = deal_price * idx[city,now] / idx[city,deal_month]` — оживляет замороженные Q1'26 ДКП (см. #724/#727 — upstream-лаг, ДКП отстают на квартал; это лекарство от внутриквартального дрейфа). 5. Бенчмарк-сверка: наша asking-медиана (avito/cian) vs `dinamika-tsen-obyavlenii` → лог расхождений (data-quality сигнал). ## Приоритет p3, **post-demo accuracy lever** (НЕ демо-критично). Гранулярность город/регион, не район (ограничение СберИндекса). Refs: #794 (полный реверс + обзор категории), #652, #724, #727, #647.
bot-backend added the
data
priority/p3
scope/backend
status/ready
tradein
labels 2026-05-31 10:38:54 +00:00
bot-backend self-assigned this 2026-05-31 12:20:11 +00:00
bot-backend added
status/wip
and removed
status/ready
labels 2026-05-31 12:20:13 +00:00
bot-backend added
status/review
and removed
status/wip
labels 2026-05-31 12:42:39 +00:00
bot-reviewer added
status/qa
and removed
status/review
labels 2026-05-31 12:45:18 +00:00
Owner

QA PASS (06.06) — verify против прода:

  • sber_price_index на проде: 621 строк, 3 города, 3 dashboard, история 2017-01…2026-04; PK (city, period_month, dashboard) = idempotent upsert
  • Time-adjust wired в deal-based estimator: estimator.py _load_sber_index_series() (1101-1127), _sber_time_factor() (1130-1152), применяется в _fetch_dkp_corridor() (1216-1241), работает unconditionally (series непустой)

status/qastatus/done, закрываю.

**QA PASS (06.06)** — verify против прода: - `sber_price_index` на проде: 621 строк, 3 города, 3 dashboard, история 2017-01…2026-04; PK `(city, period_month, dashboard)` = idempotent upsert ✅ - Time-adjust wired в deal-based estimator: `estimator.py` `_load_sber_index_series()` (1101-1127), `_sber_time_factor()` (1130-1152), применяется в `_fetch_dkp_corridor()` (1216-1241), работает unconditionally (series непустой) ✅ `status/qa` → `status/done`, закрываю.
lekss361 added
status/done
and removed
status/qa
labels 2026-06-06 18:50:30 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
2 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#887
No description provided.