A Bayesian implementation of a Markov Switching Model for analyzing stock returns and identifying distinct market regimes. The model captures regime-switching behavior, volatility clustering, and non-normal return distributions commonly observed in financial markets.
This project implements a Hidden Markov Model (HMM) to identify and characterize different market regimes in stock returns. The approach combines:
- Latent regime states following a Markov process
- Regime-specific return and volatility dynamics
- Full Bayesian inference using PyMC
1. Exploratory Data Analysis (EDA_analysis.ipynb)
Comprehensive statistical analysis providing context for model design:
- Distribution analysis and statistical tests
- Volatility clustering and persistence patterns
- Autocorrelation structure in returns
For detailed discussion of the EDA methodology and findings, check out this article Understanding Financial Time Series.
2. Markov Switching Model (MSModel_2Regimes.ipynb)
Core implementation featuring:
- Two-regime model with hidden Markov chain
- Regime-specific parameters: mean returns, volatility dynamics, and autoregressive components
- Volatility modeling: Base level + ARCH component + regime-specific memory
- Bayesian inference: Full posterior distributions via MCMC (NUTS sampler)
- Identifies bull and bear market regimes
- Models regime persistence via transition probabilities
- Captures volatility clustering within regimes
- Provides uncertainty quantification for all parameters
- Includes diagnostic tools for convergence assessment
- Clone this repository:
git clone https://github.com/yourusername/markov_switching.git
cd markov_switching
pip install -r requirements.txtSee requirements.txt for full dependencies. Key packages:
- PyMC (Bayesian modeling)
- ArviZ (diagnostics)
- pandas, numpy (data handling)
- matplotlib, seaborn (visualization)
- yfinance up to date (data retrieval)