Executive Summary: Martingale Hacks Winter 2025 — Volatility Prediction Model
Author: Submission Pipeline
Date: February 2026
Competition: Martingale Hacks Winter 2025
Overview
This submission targets financial volatility prediction using a hand-crafted feature engineering pipeline combined with a gradient-boosted ensemble. The core thesis is that market volatility has both a structural component (captured by fractal geometry and GARCH-like clustering) and a regime component (captured through NLP uncertainty signals from news headlines). Rather than chasing leaderboard score, the architecture was designed to survive regime shifts — particularly the crash period implied by the 27/73 train/test split structure.
Architecture
No neural networks were used. The pipeline is deliberately classical, prioritizing robustness and interpretability over model capacity.
Feature Engineering
Three distinct signal families were engineered:
1. Volatility Clustering (GARCH-inspired)
Rolling absolute return sums and variance-of-variance (Vol-of-Vol) features over 5-day and 20-day windows capture the well-documented tendency for large moves to cluster together. This is a non-parametric proxy for GARCH(1,1) dynamics without requiring distributional assumptions.
2. Fractal Dimension via Hurst Exponent (R/S Analysis)
A 50-day rolling Hurst exponent is estimated using Rescaled Range (R/S) analysis. The Hurst exponent measures market "memory" — values above 0.5 indicate trending/persistent behavior, below 0.5 indicate mean-reverting choppiness. The Fractal Dimension (D = 2 − H) is derived directly. This is the most novel feature in the pipeline and acts as a regime detector.
3. NLP Uncertainty Index (Keyword-based)
Rather than running a full sentiment model (e.g., FinBERT or VADER), a targeted keyword search flags headlines containing uncertainty-laden language: unclear, uncertain, volatility, risk, war, fed, inflation, rate. This is intentionally simple — a sparse BERT model would overfit given the headline volume. An interaction feature (Explosion_Risk = Uncertainty_Index × Hurst_50d) encodes the hypothesis that high news uncertainty combined with a trending/persistent market regime is a leading indicator of volatility spikes.
Models
The ensemble uses two gradient-boosted tree frameworks:
- LightGBM with
fairloss (a robust Huber-like objective), shallow trees (max_depth=4,num_leaves=24), and strong L1/L2 regularization. Fair loss reduces sensitivity to extreme return outliers versus standard RMSE. - CatBoost with symmetric tree structure and
MAEloss. CatBoost's symmetric splits make it intrinsically more stable under distribution shift — relevant when the test period contains a regime not well-represented in training.
Final predictions blend the two: 40% LightGBM / 60% CatBoost, weighting the more regime-robust model higher.
A RobustScaler (IQR-based, not mean/std) is used for preprocessing, consistent with the outlier-resistant philosophy throughout.
Risk Management
Risk management was addressed at every layer of the pipeline:
Model level: Both loss functions (Fair and MAE) are outlier-resistant, intentionally deprioritizing perfect fit on extreme crash days in favor of stable generalization.
Validation strategy: The train/validation split uses the most recent 15% of data as the held-out set. This "walk-forward" style split means the model is validated on the period closest to the test window, reducing look-ahead bias and better capturing the bull-market lead-in dynamic.
Prediction clipping: Final predictions are floored at 0.8 × min(train Target). Volatility cannot realistically reach zero, and this prevents the model from predicting implausibly calm markets in stressed regimes.
Ensemble weighting: The 60/40 weighting toward CatBoost reflects a deliberate bet that structural robustness matters more than validation score when the test set contains a distribution shift (the implied crash). Over-indexing on the LightGBM model, which scored slightly better on validation, was judged as the higher-risk path.
Biggest Failure
The NLP component is brittle. The uncertainty keyword list was constructed by intuition rather than data-driven selection, and the binary Uncertainty_Index feature discards all magnitude information — a headline mentioning "war" five times receives the same score as one that mentions it once. A tf-idf weighted or embedding-based approach (even something as lightweight as pre-trained GloVe vectors) would have been more expressive.
More critically, the Explosion_Risk interaction feature is conceptually appealing but empirically untested on out-of-sample crash periods. There is a real risk that this feature adds noise rather than signal during the test window, especially if the crash was preceded by low uncertainty (e.g., a sudden shock rather than a slow-building crisis). In hindsight, this feature should have been validated against historical VIX spike events before inclusion.
Summary Table
| Component | Choice | Rationale |
|---|---|---|
| Feature engineering | Fractal (Hurst), GARCH-proxy, NLP keywords | Capture structural + regime signals |
| NLP model | Keyword regex | Avoids overfitting; BERT overkill for sparse data |
| Gradient booster | LightGBM + CatBoost ensemble | Complementary strengths; CatBoost more robust to shift |
| Loss function | Fair (LGB) + MAE (CatBoost) | Outlier resistance across both models |
| Validation split | Last 15% chronologically | Mimics walk-forward; reduces look-ahead bias |
| Biggest failure | Binary NLP feature, no magnitude | Coarse signal; could mislead on sudden shocks |
Log in or sign up for Devpost to join the conversation.