feat(forecasting): §9.4 demand-normalization coefficient (#951f, advisory) #1011

Merged
bot-backend merged 1 commit from feat/951f-forecasting-demand-normalization into main 2026-06-03 06:28:15 +00:00
Collaborator

Site Finder v2 / EPIC 7 — #951 sub-PR 5 (§9.4 нормализация спроса). Детерминированный, без LLM. ADVISORY. Завершает движок §9.4/§9.5/§9.6. Часть #944.

demand_normalization.py: norm = clamp(exp(β·(rate_future − rate_window_avg)), 0.5, 1.2). Дисконтирует темп продаж, наблюдавшийся при одном режиме ставки, при проекции в другой (более высокий) — §9.4: не переносить low-rate бум в high-rate будущее.

  • β из §9.6 rate_sensitivity (PR3, шринкнутый slope на Δln, gated <0); rate_window_avg = mean key_rate за окно §9.6 (PR2).
  • Honesty-gate: β None / §9.6 conf='low' / нет окна → norm=1.0, applied=False (без наивного бума, без фабрикации). applied=False ≠ trustworthy coef==1.0. confidence не превышает §9.6.

26 тестов (forecasting/ всего 217). code-reviewer opus OK (discount-направление верно независимой арифметикой, honesty-gate, reuse). Refs #951

**Site Finder v2 / EPIC 7 — #951 sub-PR 5 (§9.4 нормализация спроса).** Детерминированный, без LLM. **ADVISORY**. Завершает движок §9.4/§9.5/§9.6. Часть #944. `demand_normalization.py`: `norm = clamp(exp(β·(rate_future − rate_window_avg)), 0.5, 1.2)`. Дисконтирует темп продаж, наблюдавшийся при одном режиме ставки, при проекции в другой (более высокий) — §9.4: не переносить low-rate бум в high-rate будущее. - β из §9.6 rate_sensitivity (PR3, шринкнутый slope на Δln, gated <0); rate_window_avg = mean key_rate за окно §9.6 (PR2). - **Honesty-gate:** β None / §9.6 conf='low' / нет окна → norm=1.0, applied=False (без наивного бума, без фабрикации). applied=False ≠ trustworthy coef==1.0. confidence не превышает §9.6. **26 тестов** (forecasting/ всего 217). code-reviewer opus OK (discount-направление верно независимой арифметикой, honesty-gate, reuse). Refs #951
bot-backend added 1 commit 2026-06-03 06:28:13 +00:00
Add demand_normalization.py: norm = clamp(exp(beta·(rate_future −
rate_window_avg)), 0.5, 1.2). Discounts a sales pace observed under one rate
regime when projecting into a different (higher-rate) future — ТЗ §9.4: don't
carry a low-rate boom pace forward into high rates.

- beta reused from §9.6 rate_sensitivity (PR3, shrunk slope on Δln, gated <0);
  rate_window_avg = mean key_rate over the §9.6 window (PR2 macro_series).
- Honesty gate: β None / §9.6 confidence='low' / no rate window → norm=1.0,
  applied=False, confidence='low' (no naive boom, no fabricated discount).
  applied=False is distinct from a trustworthy coefficient==1.0 (regimes match).
  confidence never exceeds §9.6's.
- Pure normalization_factor() + frozen DemandNormalization + as_dict().
- 26 unit tests, no live DB (mocked PR2/PR3). ADVISORY: not wired into endpoints.

Completes the deterministic §9.4/§9.5/§9.6 forecasting engine (PR2/PR1/PR3/PR4/PR5).
PR6 follow-up: OverflowError guard on exported normalization_factor (unreachable
via orchestrator today, β bounded).
bot-backend merged commit 9758e21cbd into main 2026-06-03 06:28:15 +00:00
bot-backend deleted branch feat/951f-forecasting-demand-normalization 2026-06-03 06:28:15 +00:00
Sign in to join this conversation.
No reviewers
No milestone
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#1011
No description provided.