HKUST IEDA4000E — Statistical Modelling for Financial Engineering
Course Project by: Vittorio Prana CHANDREAN, CHONG Tin Tak, CHOI Man Hou
This project compares two complementary frameworks for modeling VIX dynamics:
- GARCH-family models (GARCH, EGARCH) — capturing volatility clustering and persistence
- Compound Poisson Process (CPP) — modeling shock timing AND magnitude for risk quantification
We analyze 15+ years of daily VIX data spanning calm and crisis regimes, demonstrating how these approaches enable VaR/CVaR computation for risk management.
- Volatility Models: GARCH(1,1) and EGARCH(1,1) with automatic distribution selection
- Compound Poisson Process: Models shock arrivals (Poisson) and magnitudes (Pareto) for VaR/CVaR
- Regime Analysis: Pre-crisis, COVID, post-COVID, and recent period comparison
- Out-of-Sample Evaluation: Train/test split with CPP forecast validation
- Comprehensive Visualization: Jump distributions, simulated paths, regime comparisons
Shock-Persistence-and-Shock-Frequency-in-VIX/
├── runall.py # Main pipeline driver
├── src/ # Core modules
│ ├── config.py # Shared parameters
│ ├── data_pipeline.py # Data loading and cleaning
│ ├── volatility_models.py # GARCH/EGARCH implementation
│ ├── shock_modeling.py # CPP and shock definitions
│ ├── forecast_evaluation.py # OOS evaluation utilities
│ └── visualization.py # Plotting functions
├── notebooks/ # Analysis notebooks
│ ├── 01_data_and_volatility.ipynb
│ ├── 02_shock_arrivals.ipynb
│ └── 03_forecast_evaluation.ipynb
├── figures/ # Generated plots (organized by category)
│ ├── vix_data/ # VIX time series and ACF plots
│ ├── volatility_models/ # GARCH/EGARCH volatility outputs
│ ├── shock_analysis/ # Shock detection and analysis
│ ├── cpp_model/ # Compound Poisson Process figures
│ └── model_evaluation/ # Model diagnostics and comparisons
├── zz slides/ # LaTeX documents
│ ├── report.tex # Main CPP report (renamed from CPP_VIX_Shock_Modeling_Report.tex)
│ ├── slides.tex # Beamer presentation (renamed from main.tex)
│ └── references.bib # Bibliography file
├── tests/ # Unit tests
└── requirements.txt
# Setup environment
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# Run full pipeline
python runall.py
# Run tests
pytest tests/test_models.py -vGARCH(1,1):
- Captures volatility clustering: large shocks increase future variance
- Persistence governed by α + β (values near 1 imply long memory)
EGARCH(1,1):
- Captures leverage effect: negative shocks impact volatility more than positive
- Ensures positive variance without parameter constraints
- N(t): Shock count (arrival rate λ)
- Jᵢ: Shock magnitude (fitted to Pareto distribution)
- S(T): Cumulative shock impact for VaR/CVaR computation
| Regime | Period | Key Characteristic |
|---|---|---|
| Pre-Crisis | 2010–2019 | Baseline volatility |
| COVID | 2020 | 76% higher expected annual impact |
| Post-COVID | 2021–2023 | Recovery period |
| Recent | 2024–2025 | Current conditions |
| Model | Distribution | AIC | Persistence | Half-life |
|---|---|---|---|---|
| GARCH(1,1) | GED | 27,531 | 0.852 | 4.3 days |
| EGARCH(1,1) | GED | 27,395 | 0.934 | 10.2 days |
- EGARCH provides best fit (lowest AIC)
- Longer memory: shocks decay over ~10 days
| Parameter | Value | Interpretation |
|---|---|---|
| λ | 12.64/year | Shock arrival rate |
| E[J] | 0.211 | Mean jump size (21% log-move) |
| VaR (95%) | 4.24 | 95th percentile annual impact |
| CVaR (95%) | 5.01 | Expected Shortfall |
| Metric | Value |
|---|---|
| Predicted Shocks | 51.8 |
| Actual Shocks | 63 |
| Forecast Error | -17.8% |
| VaR Exceeded? | No ✓ |
Figures are organized into subfolders by category:
vix_data/: VIX time series, visualization, and autocorrelation plotsvolatility_models/: GARCH/EGARCH conditional volatility overlaysshock_analysis/: Shock detection, counts, magnitudes, and interarrival analysiscpp_model/: Compound Poisson Process figures (paths, VaR, regime analysis, forecasts)model_evaluation/: Model diagnostics (Q-Q plots, PIT, ACF, comparisons)
Key figures:
vix_data/vix_series.png- VIX time series with shock markersmodel_evaluation/news_impact.png- EGARCH asymmetric responsemodel_evaluation/qq.png- Q-Q plot (GED fit validation)cpp_model/jump_distribution.png- Pareto fit to shock magnitudescpp_model/cpp_paths.png- Monte Carlo simulated pathscpp_model/cpp_var.png- VaR/CVaR distributioncpp_model/cpp_regime.png- Regime-specific CPP parameterscpp_model/cpp_forecast.png- Out-of-sample evaluation
- Bollerslev, T. (1986). Generalized Autoregressive Conditional Heteroskedasticity. J. Econometrics.
- Nelson, D. B. (1991). Conditional Heteroskedasticity in Asset Returns. Econometrica.
- Cont, R., & Tankov, P. (2004). Financial Modelling with Jump Processes. Chapman & Hall/CRC.
- McNeil, A. J., Frey, R., & Embrechts, P. (2015). Quantitative Risk Management. Princeton University Press.