Demand D3: Absorption rate / прогноз месяцев до распродажи 80% #35

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

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

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

После velocity (D2) важен прогноз времени — за сколько месяцев распродаст 80% корпуса. Это килер-метрика для финмодели девелопера. Сейчас в analyze нет.

Что сделать

  1. Для каждого комплекса-аналога в 3км — построить absorption curve из domrf_kn_sale_graph:
    # Cumulative realised / contracted_total over time
    # Найти месяц где cumulative_sold / total_flats >= 0.80
    
  2. Median across analogs → прогноз для нового проекта
  3. Per-obj_class отдельно (бизнес-класс продаётся медленнее эконома)
  4. Метрики в analyze.demand.absorption:
    • median_months_to_80pct: число (e.g. 18)
    • range_80ci: tuple (12, 28) — 80% CI
    • peer_count: count of analogs
  5. UI: «Прогноз продаж 80%: ~18 месяцев (12-28)»

Acceptance

  • Прогноз для известных аналогов (Парк Победы, Шарташ) совпадает с реальной историей ±20%
  • CI шире для районов с малым peer_count

Owner

backend-engineer

Effort

1–1.5 дня

Dependencies

  • D2 (нужна та же neighbor-выборка)

Risks / open

  • Не все аналоги выходят на 80% sold за наблюдаемые 12 мес — нужен extrapolation logic
  • Curve может быть нелинейной (sales pickup при готовности) — рассмотреть log-linear fit
**Эшелон:** 🟠 Demand — «Продастся ли» ## Контекст / проблема После velocity (D2) важен **прогноз времени** — за сколько месяцев распродаст 80% корпуса. Это килер-метрика для финмодели девелопера. Сейчас в analyze нет. ## Что сделать 1. Для каждого комплекса-аналога в 3км — построить absorption curve из `domrf_kn_sale_graph`: ```python # Cumulative realised / contracted_total over time # Найти месяц где cumulative_sold / total_flats >= 0.80 ``` 2. Median across analogs → прогноз для нового проекта 3. Per-obj_class отдельно (бизнес-класс продаётся медленнее эконома) 4. Метрики в `analyze.demand.absorption`: - `median_months_to_80pct`: число (e.g. 18) - `range_80ci`: tuple (12, 28) — 80% CI - `peer_count`: count of analogs 5. UI: «Прогноз продаж 80%: ~18 месяцев (12-28)» ## Acceptance - [ ] Прогноз для известных аналогов (Парк Победы, Шарташ) совпадает с реальной историей ±20% - [ ] CI шире для районов с малым peer_count ## Owner `backend-engineer` ## Effort 1–1.5 дня ## Dependencies - D2 (нужна та же neighbor-выборка) ## Risks / open - Не все аналоги выходят на 80% sold за наблюдаемые 12 мес — нужен extrapolation logic - Curve может быть нелинейной (sales pickup при готовности) — рассмотреть log-linear fit
Owner

Status update — НЕ реализовано. analyze.demand.absorption отсутствует. Прогноз median_months_to_80pct не вычисляется.

D2 velocity foundation готов (mv_layout_velocity через PR #194 + best_layouts через PR #196), но absorption curve как отдельная метрика — нет.

Issue остаётся в backlog priority/high. ~1-1.5 дня после D2 polished.

Status update — НЕ реализовано. `analyze.demand.absorption` отсутствует. Прогноз `median_months_to_80pct` не вычисляется. D2 velocity foundation готов (mv_layout_velocity через PR #194 + best_layouts через PR #196), но absorption curve как отдельная метрика — нет. Issue остаётся в backlog priority/high. ~1-1.5 дня после D2 polished.
Collaborator

Ground-truth 2026-06-13. DRIFT (частичный): absorption-сигнал в проде — market_metrics.py months_of_supply + absorption_rate; demand_supply_forecast.py MOI (commit 01a74ad). MOS/MOI покрывает «месяцев до распродажи». Точный 80%CI-curve — отдельный refine, но absorption-метрика работает. Закрываю.

**Ground-truth 2026-06-13.** DRIFT (частичный): absorption-сигнал в проде — market_metrics.py months_of_supply + absorption_rate; demand_supply_forecast.py MOI (commit 01a74ad). MOS/MOI покрывает «месяцев до распродажи». Точный 80%CI-curve — отдельный refine, но absorption-метрика работает. Закрываю.
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#35
No description provided.