Demand D2: Velocity-score из domrf_kn_sale_graph по аналогам в радиусе #34

Closed
opened 2026-05-11 20:14:47 +00:00 by lekss361 · 0 comments
lekss361 commented 2026-05-11 20:14:47 +00:00 (Migrated from github.com)

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

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

domrf_kn_sale_graph имеет 15 876 строк (obj_id × report_month × type) — есть realised, contracted, area_sq, price_avg per ЖК per месяц. Это главный демандологический сигнал — фактическая скорость продаж аналогов в районе. Сейчас используется только в market_trend (6м avg price) — но realised не трогаем.

Что сделать

  1. Query: для каждого участка считаем velocity аналогов в 3км радиусе за last 6 мес:
    WITH neighbors AS (
      SELECT obj_id FROM domrf_kn_objects
      WHERE ST_DWithin(geom, parcel_geom, 3000) AND obj_class IS NOT NULL
    )
    SELECT
      AVG(realised) AS avg_flats_sold_per_month,
      STDDEV(realised) AS stability,
      -- trend slope linear regression
      regr_slope(realised, EXTRACT(EPOCH FROM report_month)) AS trend_slope
    FROM domrf_kn_sale_graph
    WHERE obj_id IN (SELECT obj_id FROM neighbors)
      AND report_month > NOW() - INTERVAL '6 months';
    
  2. Метрики в analyze.demand.velocity:
    • avg_flats_sold_per_month_per_obj: число
    • stability: std/mean
    • trend_label: rising/stable/declining
    • velocity_score_0_100: normalized в district baseline
  3. Per-class breakdown (по obj_class) — отдельный сигнал для эконом vs бизнес
  4. UI: новый блок «Скорость продаж аналогов» в ScoreCard

Acceptance

  • Velocity для тестовых участков совпадает с интуицией (Академический выше, окраина ниже)
  • Уверенный signal — std разрыв >2x между топ/боттом quintile
  • Confidence снижается если <3 аналогов

Owner

backend-engineer (query + integration) + database-expert (covering index по obj_id, report_month, geom)

Effort

1–2 дня

Risks / open

  • sale_graph частичное покрытие — не все ЖК Свердл отчитываются. Confidence ниже в районах с <3 аналогами — нужно явно показывать
  • obj_class в domrf_kn_objects часто NULL (см. Limit_District_Median_Null) — fallback на D6
  • 6 мес может быть мало для seasonality — рассмотреть 12 мес с weighted decay

Dependencies

— (foundation для D3)

**Эшелон:** 🟠 Demand — «Продастся ли» ## Контекст / проблема `domrf_kn_sale_graph` имеет **15 876 строк** (obj_id × report_month × type) — есть `realised`, `contracted`, `area_sq`, `price_avg` per ЖК per месяц. Это **главный демандологический сигнал** — фактическая скорость продаж аналогов в районе. Сейчас используется только в market_trend (6м avg price) — но `realised` не трогаем. ## Что сделать 1. Query: для каждого участка считаем velocity аналогов в 3км радиусе за last 6 мес: ```sql WITH neighbors AS ( SELECT obj_id FROM domrf_kn_objects WHERE ST_DWithin(geom, parcel_geom, 3000) AND obj_class IS NOT NULL ) SELECT AVG(realised) AS avg_flats_sold_per_month, STDDEV(realised) AS stability, -- trend slope linear regression regr_slope(realised, EXTRACT(EPOCH FROM report_month)) AS trend_slope FROM domrf_kn_sale_graph WHERE obj_id IN (SELECT obj_id FROM neighbors) AND report_month > NOW() - INTERVAL '6 months'; ``` 2. Метрики в `analyze.demand.velocity`: - `avg_flats_sold_per_month_per_obj`: число - `stability`: std/mean - `trend_label`: rising/stable/declining - `velocity_score_0_100`: normalized в district baseline 3. Per-class breakdown (по obj_class) — отдельный сигнал для эконом vs бизнес 4. UI: новый блок «Скорость продаж аналогов» в ScoreCard ## Acceptance - [ ] Velocity для тестовых участков совпадает с интуицией (Академический выше, окраина ниже) - [ ] Уверенный signal — std разрыв >2x между топ/боттом quintile - [ ] Confidence снижается если <3 аналогов ## Owner `backend-engineer` (query + integration) + `database-expert` (covering index по obj_id, report_month, geom) ## Effort 1–2 дня ## Risks / open - sale_graph **частичное покрытие** — не все ЖК Свердл отчитываются. Confidence ниже в районах с <3 аналогами — нужно явно показывать - obj_class в `domrf_kn_objects` часто NULL (см. [Limit_District_Median_Null](https://obsidian.gendsgn.ru/)) — fallback на D6 - 6 мес может быть мало для seasonality — рассмотреть 12 мес с weighted decay ## Dependencies — (foundation для D3) ## Links - [SalesTracking_Strategy_Apr25](https://obsidian.gendsgn.ru/) — стратегический контекст - Related: D3 (absorption rate)
Sign in to join this conversation.
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#34
No description provided.