fix(analytics): rolling 6mo/6mo окна в _district_velocity_trend (#1203)
_district_velocity_trend сравнивал recent vs prior, но окна были
ЗАХАРДКОЖЕНЫ датами 2025:
recent = report_month >= 2025-07-01 (без верхней границы!)
prior = report_month BETWEEN 2025-01-01 AND 2025-06-30
objective_corpus_room_month обновляется еженедельно (objective_etl,
period_month без капа). На 2026-06 recent-окно ≈ 11-12 месяцев vs
prior=6 → при плоском рынке ratio ≈ 1.83, дальше навсегда упирается
в clamp(_, 2.0) → trend_factor=2.0 → macro_velocity_mult ×2 →
bucket_velocity ×2 → months_to_sellout занижен в ~1.8-2x.
Искажение растёт с каждым месяцем; trend-сигнал мёртв.
Patch: rolling 6mo/6mo окна относительно NOW():
recent = report_month >= NOW() - INTERVAL '6 months'
prior = report_month >= NOW() - INTERVAL '12 months'
AND report_month < NOW() - INTERVAL '6 months'
Равные окна, plain rolling, без хардкода. 29/29 velocity_trend +
recommend_mix тестов зелёные. ruff clean.
Closes #1203
This commit is contained in:
parent
ddbd924b02
commit
0fffc535cd
1 changed files with 9 additions and 3 deletions
|
|
@ -1454,13 +1454,19 @@ def _district_velocity_trend(db: Session, *, district_name: str) -> tuple[float
|
|||
db.execute(
|
||||
text(
|
||||
"""
|
||||
-- #1203: rolling 6mo/6mo окна относительно NOW(), а не
|
||||
-- захардкоженных дат 2025. С хардкодом recent-окно росло
|
||||
-- безгранично (ETL еженедельно доливает report_month) → на
|
||||
-- июнь 2026 recent ≈ 11-12мес vs prior=6мес → ratio ≈ 2.0
|
||||
-- → trend_factor навсегда упирался в кап 2.0 → bucket_velocity
|
||||
-- ×2 → months_to_sellout занижен ×2 в живом recommend_mix.
|
||||
SELECT
|
||||
SUM(crm.deals_total_count)
|
||||
FILTER (WHERE crm.report_month >= DATE '2025-07-01')
|
||||
FILTER (WHERE crm.report_month >= NOW() - INTERVAL '6 months')
|
||||
AS recent,
|
||||
SUM(crm.deals_total_count)
|
||||
FILTER (WHERE crm.report_month BETWEEN DATE '2025-01-01'
|
||||
AND DATE '2025-06-30')
|
||||
FILTER (WHERE crm.report_month >= NOW() - INTERVAL '12 months'
|
||||
AND crm.report_month < NOW() - INTERVAL '6 months')
|
||||
AS prior
|
||||
FROM objective_corpus_room_month crm
|
||||
WHERE crm.district = :dn
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue