Analytics: velocity-anomaly detection — алерт на ЖК с сильным провалом продаж #17

Closed
opened 2026-04-30 19:46:48 +00:00 by lekss361 · 1 comment
lekss361 commented 2026-04-30 19:46:48 +00:00 (Migrated from github.com)

Проблема

В domrf_kn_sale_graph накопилось 14+ месяцев истории по 1500+ ЖК Свердл. Сейчас никто не замечает когда конкретный ЖК резко проседает (закрытие отдела продаж, пересмотр цен у застройщика, проблема с инфраструктурой). Аналитика в /analytics/recommend это дает агрегированно.

Что сделать

Backend:

  • app/services/analytics/velocity_alerts.py — функция detect_velocity_anomalies(db, region_code, lookback_months=6) возвращает список ЖК со statistical-significance провалом:
    • Для каждого ЖК: rolling 3-mo mean vs trailing 3-mo mean
    • Z-score > 2.0 (90% percentile отклонений) — попадает в alert
    • Игнорировать ЖК с <6 месяцами истории
  • GET /api/v1/analytics/velocity-alerts?region_code=66&min_zscore=2 — JSON-список с obj_id, comm_name, dev_name, recent_velocity_pm, prior_velocity_pm, drop_pct, severity ('high'/'medium')
  • (опционально) Celery weekly task → запись в velocity_alerts_history для трекинга когда возник/закрылся

Frontend:

  • На /analytics страница — новый блок «Алерты по ЖК» (топ-10 за последний месяц)
  • Sortable table: ЖК / девелопер / темп now / темп прежний / падение % / severity badge

Acceptance:

  • При провале ЖК Космос-2 (или другого реального примера из sale_graph) — алерт всплывает
  • False-positive rate <10% (проверено на семпле 30 алертов)
  • UI показывает алерты с одного запроса <300мс

Зависит от

  • domrf_kn_sale_graph (уже есть, beat-обновляется еженедельно)

Effort

~1 день backend + 0.5 день UI.

## Проблема В `domrf_kn_sale_graph` накопилось 14+ месяцев истории по 1500+ ЖК Свердл. Сейчас никто не замечает когда конкретный ЖК резко проседает (закрытие отдела продаж, пересмотр цен у застройщика, проблема с инфраструктурой). Аналитика в `/analytics/recommend` это дает агрегированно. ## Что сделать **Backend:** - `app/services/analytics/velocity_alerts.py` — функция `detect_velocity_anomalies(db, region_code, lookback_months=6)` возвращает список ЖК со statistical-significance провалом: - Для каждого ЖК: rolling 3-mo mean vs trailing 3-mo mean - Z-score > 2.0 (90% percentile отклонений) — попадает в alert - Игнорировать ЖК с <6 месяцами истории - `GET /api/v1/analytics/velocity-alerts?region_code=66&min_zscore=2` — JSON-список с obj_id, comm_name, dev_name, recent_velocity_pm, prior_velocity_pm, drop_pct, severity ('high'/'medium') - (опционально) Celery weekly task → запись в `velocity_alerts_history` для трекинга когда возник/закрылся **Frontend:** - На `/analytics` страница — новый блок «Алерты по ЖК» (топ-10 за последний месяц) - Sortable table: ЖК / девелопер / темп now / темп прежний / падение % / severity badge **Acceptance:** - [ ] При провале ЖК `Космос-2` (или другого реального примера из sale_graph) — алерт всплывает - [ ] False-positive rate <10% (проверено на семпле 30 алертов) - [ ] UI показывает алерты с одного запроса <300мс ## Зависит от - `domrf_kn_sale_graph` (уже есть, beat-обновляется еженедельно) ## Effort ~1 день backend + 0.5 день UI.
Owner

Status update — НЕ реализовано. app/services/analytics/velocity_alerts.py не создан. Endpoint /api/v1/analytics/velocity-alerts отсутствует. UI блок «Алерты по ЖК» не добавлен.

D2 velocity foundation готов (mv_layout_velocity через PR #194, per-room VelocityBlock через PR #166). Альтернативная velocity source migration через PR #158 (objective_corpus_room_month).

Issue остаётся в backlog priority/normal. ~1.5 дня effort, foundation в порядке.

Status update — НЕ реализовано. `app/services/analytics/velocity_alerts.py` не создан. Endpoint `/api/v1/analytics/velocity-alerts` отсутствует. UI блок «Алерты по ЖК» не добавлен. D2 velocity foundation готов (mv_layout_velocity через PR #194, per-room VelocityBlock через PR #166). Альтернативная velocity source migration через PR #158 (`objective_corpus_room_month`). Issue остаётся в backlog priority/normal. ~1.5 дня effort, foundation в порядке.
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#17
No description provided.