Portfolio Risk: Factor Decomposition and Attribution
Module: Fintech AI | Difficulty: Advanced
Risk Decomposition
Factor Risk
where = factor loadings, = factor covariance, = specific risk.
Marginal Risk Contribution
import numpy as np
class PortfolioRiskAnalyzer:
def __init__(self, weights, cov_matrix):
self.w = weights; self.cov = cov_matrix
def total_risk(self):
return np.sqrt(self.w @ self.cov @ self.w)
def risk_contribution(self):
portfolio_vol = self.total_risk()
marginal = self.cov @ self.w / portfolio_vol
return self.w * marginal
def factor_risk(self, factor_loadings, factor_cov):
systematic = self.w @ factor_loadings @ factor_cov @ factor_loadings.T @ self.w
specific = self.total_risk()**2 - systematic
return {'systematic': systematic, 'specific': specific}
Research Insight: Risk attribution reveals where portfolio risk comes from. Most portfolios have 80%+ systematic risk, meaning diversification provides limited benefit during market stress. Understanding factor exposures is crucial for risk management.