# Model card — `ewma094` (EWMA / RiskMetrics 1994, λ = 0.94) ## 1. Identity - **model_id:** `ewma094` · **family:** baseline · **tier:** A · **status:** implemented · **impl:** arch 8.0.0 (`EWMAVariance(lam=0.94)`, λ fixed) - **Label:** EWMA (RiskMetrics 1994, lambda = 0.94) · **distributions:** normal - **Seminal citation:** `jpmorgan1996riskmetrics` (RiskMetrics Technical Document, 4th ed.) - **Other references:** `engle1986modelling` (IGARCH, of which EWMA is the zero-intercept case; registry `nested_in: igarch11`); `zumbach2009riskmetrics` (RM2006 successor). ## 2. Definition $$r_t = \mu + \varepsilon_t,\qquad \sigma_t^2 = \lambda\,\sigma_{t-1}^2 + (1-\lambda)\,\varepsilon_{t-1}^2,\qquad \lambda = 0.94 .$$ arch's `ewma_recursion` starts from $\sigma_0^2$ = backcast. Innovation law: N(0,1) (only μ is estimated; the Gaussian likelihood is used to estimate μ). ## 3. Parameter space and admissibility - Estimated: `mu` only. λ is fixed at 0.94 (`parameter_names()` is empty for the volatility process). - $0 < \lambda < 1$ enforced at construction. No stationarity: the process is integrated ($\lambda + (1-\lambda) = 1$) and has no unconditional variance. Admissibility flag always `True` (no check in `ArchModel.fit`). ## 4. Nesting and relations EWMA = IGARCH(1,1) with $\omega = 0$, $\alpha = 1-\lambda = 0.06$, $\beta = \lambda$ (`igarch11` card); = GARCH(1,1) on the unit-persistence boundary with zero intercept. `rm2006` is a weighted mixture of 14 EWMAs with different decays. ## 5. Estimation arch `ConstantMean` + `EWMAVariance(0.94)` + `Normal`, `fit(disp="off", options={"maxiter": 1000})`: SLSQP over the single parameter μ (Gaussian log-likelihood with the EWMA variance path); starting value = sample mean; backcast = exponentially weighted average of the first min(75, T) squared residuals (weights ∝ 0.94ⁱ). Restarts (≤ 2) as for all arch-backed models (`src/wp46/models/arch_models.py::ArchModel.fit`). Only point estimates are used in the rolling benchmark; filtering with `am.fix(params)`. ## 6. Forecasting arch `_analytic_forecast` for EWMA: $\hat\sigma^2_{t+1|t} = \lambda\sigma_t^2 + (1-\lambda)\varepsilon_t^2$ and $\hat\sigma^2_{t+k|t} = \hat\sigma^2_{t+1|t}$ for $k = 2..22$ (flat; a martingale variance). Cumulative $h$-day variance $= h\,\hat\sigma^2_{t+1|t}$. Method: `analytic`. ## 7. Implementation - `src/wp46/models/arch_models.py` (`SPECS["ewma094"]`, `fixed=True`), arch 8.0.0 (`sheppard2025arch`). - Cross-check: none in `results/metrics/rugarch_crosscheck.json` (parameter-free recursion; rugarch has no fixed-λ EWMA entry in the fixture script). - Tests: no dedicated test; not in the pilot. ## 8. Known limitations / failure modes Fixed decay calibrated on 1990s daily data; integrated dynamics give a flat term structure (no mean reversion), which the literature identifies as its main weakness at h = 5, 22. Cannot fail to converge in the variance recursion (only μ is optimised). ## 9. Computational footprint One-parameter SLSQP, analytic forecasts: among the cheapest estimated models. No pilot timing. ## 10. Literature expectations `hansen2005forecast` include RiskMetrics-type EWMA among the dominated benchmarks on the DM/$ and IBM series; `jpmorgan1996riskmetrics` is a risk-management standard rather than a forecasting contender. The literature matrix (§a.1) lists it as an "industry baseline; flat term structure" — expectation: close to GARCH(1,1) at h = 1 in calm periods, inferior at h = 22 and in regimes where mean reversion matters.