gendesign/backend/tests/services/forecasting
Light1YT 9a845646fd
All checks were successful
Deploy / deploy (push) Successful in 1m9s
Deploy / changes (push) Successful in 5s
Deploy / build-frontend (push) Has been skipped
Deploy / build-backend (push) Successful in 1m29s
Deploy / build-worker (push) Successful in 2m20s
fix(#978): train-only detrend in rate backtest + Almon distributed-lag regression
REOPENED 951-B §9.6.
PART A: fix look-ahead leakage in backtest_rate_sensitivity --detrend. The
ln(units) trend was fit over train+test then split, so test data shaped the
detrend and inflated the OOS hit-rate. _detrend_log now takes fit_n; backtest_tier
fits the trend on TRAIN months only (same split evaluate_oos uses) and projects
(a,b) point-in-time onto test. Default fit_n=None preserves prior behaviour.

PART B (DoD): new app/services/forecasting/regression.py — Almon polynomial
distributed-lag (deg 2) of Δln(district demand) on Δkey_rate lags 0..6 via
OLS-on-Almon-regressors (numpy lstsq) + per-lag reconstruction + manual
Newey-West HAC SEs (NO statsmodels). Output {best_lag_months, coef=long-run
multiplier, x_pct, r2, n, per_lag_coef, hac_se,...}; gate mirrors _elasticity_coef
(n<30 OR R²<0.1 OR Σβ≥0 → fallback); §9.6 phrase from the lag shape. ADVISORY,
shipped standalone (integration point documented), NOT wired — protects the live
compute_rate_sensitivity consumers.

125+31 tests (synthetic known-lag recovery, HAC computed/differs-from-OLS,
fallback gating, no-leakage detrend). ruff clean. Refs #978
2026-06-04 11:39:32 +05:00
..
__init__.py feat(forecasting): monthly macro series + regime classifier (#951b) (#1007) 2026-06-03 05:37:43 +00:00
test_affordability.py fix(forecasting): #980 strongest deficit→deficit_index +1.0; #981 MAI uses CBR key rate 2026-06-04 11:10:26 +05:00
test_confidence_engine.py feat(forecasting): §15 confidence engine v2 (#990, 955-A4) (#1020) 2026-06-03 08:41:07 +00:00
test_demand_normalization.py feat(forecasting): §9.4 demand-normalization coefficient (#951f, advisory) (#1011) 2026-06-03 06:28:14 +00:00
test_demand_supply_forecast.py fix(forecasting): #980 strongest deficit→deficit_index +1.0; #981 MAI uses CBR key rate 2026-06-04 11:10:26 +05:00
test_macro_coefficient.py feat(forecasting): §9.5 macro coefficient (#951e, advisory) (#1010) 2026-06-03 06:20:04 +00:00
test_macro_series.py feat(forecasting): monthly macro series + regime classifier (#951b) (#1007) 2026-06-03 05:37:43 +00:00
test_normalize.py feat(forecasting): seasonal (month-of-year) demand normalization (#979) 2026-06-04 11:19:50 +05:00
test_product_scoring.py feat(forecasting): §14.2 product scoring card (#985, 954-B) (#1017) 2026-06-03 08:11:54 +00:00
test_rate_sensitivity.py feat(forecasting): §9.6 key-rate sensitivity module (#951d, advisory) (#1009) 2026-06-03 06:06:16 +00:00
test_recommendation.py feat(forecasting): class/commercial/USP §10.2/10.4/10.5 + §16 (#983, 953-B) (#1015) 2026-06-03 07:52:24 +00:00
test_regression.py fix(#978): train-only detrend in rate backtest + Almon distributed-lag regression 2026-06-04 11:39:32 +05:00
test_report.py feat(forecasting): §13 SiteFinderReport object (#987, 955-A1) (#1019) 2026-06-03 08:33:01 +00:00
test_report_assembler.py feat(forecasting): §13 report assembler (#988, 955-A2) (#1021) 2026-06-03 08:51:23 +00:00
test_sales_series.py feat(forecasting): monthly sales series builder for §9.6 (#951c) (#1008) 2026-06-03 05:52:33 +00:00
test_scenarios.py feat(forecasting): §11 macro-scenarios (#984, 954-A) (#1016) 2026-06-03 07:59:22 +00:00
test_special_indices.py feat(forecasting): §25 six special indices (#986, 954-C) (#1018) 2026-06-03 08:24:08 +00:00
test_what_to_build.py feat(forecasting): what-to-build ranker + MAI proxy (#981, 952-B) (#1013) 2026-06-03 07:07:17 +00:00