feat(forecasting): §9.6 key-rate sensitivity module (#951d, advisory) #1009

Merged
bot-backend merged 1 commit from feat/951d-forecasting-rate-sensitivity into main 2026-06-03 06:06:17 +00:00
Collaborator

Site Finder v2 / EPIC 7 — #951 sub-PR 3 (ЯДРО §9.6). Детерминированный, numpy, без LLM. ADVISORY (не врезан, до PR6-валидации). Часть #944.

rate_sensitivity.py: лаговая регрессия Δln(продажи) ~ Δключ.ставка по {0,1,2,3,6} мес, gate (n≥8, r²≥0.1, slope<0), shrinkage к EKB-prior (w=n/(n+10); EKB-prior bootstrap из all-None spec, gate-fail→0.0 нейтрально), фраза §9.6 (X=100·(exp(β)−1), Y=лаг, Z=area-floor самого чувствительного Source-B бакета).

Чистые numpy-helpers (ols_slope_r2/best_lag/shrink) DB-free, тесты на синтетике (recovery известного slope/lag). Wrong-sign защищён 3 слоя. Degrade → insufficient-data / EKB-wide форма.

28 тестов (forecasting/ всего 141), ruff clean. code-reviewer opus OK (lag-направление верно рантаймом, OLS/R² textbook, shrinkage+EKB-bootstrap, phrase exp(β)-1). Follow-up в PR6: OOS-валидация выбора лага + порогов. Refs #951

**Site Finder v2 / EPIC 7 — #951 sub-PR 3 (ЯДРО §9.6).** Детерминированный, numpy, без LLM. **ADVISORY** (не врезан, до PR6-валидации). Часть #944. `rate_sensitivity.py`: лаговая регрессия Δln(продажи) ~ Δключ.ставка по {0,1,2,3,6} мес, gate (n≥8, r²≥0.1, slope<0), shrinkage к EKB-prior (w=n/(n+10); EKB-prior bootstrap из all-None spec, gate-fail→0.0 нейтрально), фраза §9.6 (X=100·(exp(β)−1), Y=лаг, Z=area-floor самого чувствительного Source-B бакета). Чистые numpy-helpers (`ols_slope_r2`/`best_lag`/`shrink`) DB-free, тесты на синтетике (recovery известного slope/lag). Wrong-sign защищён 3 слоя. Degrade → insufficient-data / EKB-wide форма. **28 тестов** (forecasting/ всего 141), ruff clean. code-reviewer opus OK (lag-направление верно рантаймом, OLS/R² textbook, shrinkage+EKB-bootstrap, phrase exp(β)-1). Follow-up в PR6: OOS-валидация выбора лага + порогов. Refs #951
bot-backend added 1 commit 2026-06-03 06:05:59 +00:00
Add rate_sensitivity.py: regress Δln(sales) on lagged Δ(key_rate) per segment,
gate (n≥8, r2≥0.1, slope<0), shrink toward EKB-wide prior (w=n/(n+10); EKB prior
bootstrapped from all-None spec, gate-fail→0.0 neutral), emit §9.6 explainability
phrase (X=100·(exp(β)−1), Y=lag, Z=most-sensitive Source-B bucket area floor).
Pure numpy helpers (ols_slope_r2, best_lag, shrink) DB-free + unit-tested on
synthetic series (real slope/lag recovery); compute_rate_sensitivity tested with
mocked PR1/PR2. Wrong-sign guarded 3 layers; degrades to insufficient-data /
EKB-wide form on thin/wrong-sign. ADVISORY until PR6 backtest — not wired into
any endpoint. 28 tests (forecasting/ total 141), ruff clean.

Follow-ups for PR6 backtest: validate lag selection out-of-sample (spurious-lag
on short windows), confirm _SHRINK_K + confidence thresholds before prod wiring.
bot-backend merged commit f41e2536d8 into main 2026-06-03 06:06:17 +00:00
bot-backend deleted branch feat/951d-forecasting-rate-sensitivity 2026-06-03 06:06:17 +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#1009
No description provided.