Risk Models: Parametric, Historical, and Monte Carlo
Module: Fintech AI | Difficulty: Advanced
Parametric VaR
Historical VaR
Monte Carlo VaR
Comparison
| Method | Assumptions | Speed | Accuracy | |--------|------------|-------|----------| | Parametric | Normal | Fast | Low | | Historical | Stationary | Medium | Medium | | Monte Carlo | Model | Slow | High |
import numpy as np
class VaRCalculator:
def __init__(self, confidence=0.99):
self.alpha = confidence
def parametric_var(self, returns):
mu, sigma = returns.mean(), returns.std()
z = -2.326 # 99% confidence
return -(mu + sigma * z)
def historical_var(self, returns):
return -np.percentile(returns, (1-self.alpha)*100)
def monte_carlo_var(self, returns, n_sims=10000):
mu, sigma = returns.mean(), returns.std()
simulated = np.random.normal(mu, sigma, n_sims)
return -np.percentile(simulated, (1-self.alpha)*100)
def expected_shortfall(self, returns):
var = self.historical_var(returns)
return -returns[returns <= -var].mean()
Research Insight: Each VaR method has strengths and weaknesses. Parametric is fast but assumes normality. Historical is model-free but assumes stationarity. Monte Carlo is flexible but requires a model. The best practice is to use multiple methods and compare results.