Structured Credit Products (CDOs and Securitizations) › Valuation Approaches
Quantitative FinanceAll chapters Structured Credit Products (CDOs and Securitizations) › Valuation ApproachesOne section · Sections in this chapter6 / 12 ↓
Reading tools Definitions & inline links
Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.
Article links
Make inline references clickable
Valuing CDO tranches requires estimating the expected losses and timing of cash flows. The standard approaches fall into two categories: actuarial methods based on expected loss, and risk-neutral valuation using credit derivatives. The challenge lies in calibrating models to observable market prices while maintaining consistency across the capital structure.
Base Correlation
Given the difficulty of directly calibrating individual asset correlations, we use base correlation, which is the implied correlation that, when plugged into the Gaussian copula model, matches the market price of a tranche. Base correlation emerged as a practical solution to a fundamental problem: if you calibrate separate correlations to each tranche independently, you get different values, which makes it impossible to consistently price non-standard tranches or interpolate between market quotes.
The implied correlation for an equity tranche (0% attachment to X% detachment) that matches its market price. Unlike "compound correlation" which can give different values for different tranches on the same structure, base correlation provides a consistent framework for interpolating between standard tranches.
Base correlation is analogous to implied volatility in options pricing. Just as options traders quote prices in terms of implied volatility rather than dollar amounts, credit traders quote CDO tranches in terms of base correlation. It is a quoting convention that captures market views about the distribution of losses, converting complex distributional assumptions into a single, comparable number. When base correlation for a 10% equity tranche increases, it signals that the market expects a fatter-tailed loss distribution with more probability mass in extreme scenarios.
import numpy as np
from scipy.optimize import brentq
def price_tranche_monte_carlo(
n_assets: int,
default_prob: float,
correlation: float,
attachment: float,
detachment: float,
recovery_rate: float,
n_simulations: int = 50000,
) -> float:
"""
Price a CDO tranche using Monte Carlo simulation.
Returns the expected loss rate for the tranche.
"""
np.random.seed(42) # Ensure deterministic output for optimization
defaults = simulate_correlated_defaults(
n_assets, default_prob, correlation, n_simulations
)
# Loss given default = 1 - recovery
lgd = 1 - recovery_rate
pool_loss_rates = (defaults / n_assets) * lgd
# Tranche losses
tranche_losses = np.clip(
pool_loss_rates - attachment, 0, detachment - attachment
)
tranche_loss_rates = tranche_losses / (detachment - attachment)
return tranche_loss_rates.mean()
def find_implied_correlation(
target_price: float,
n_assets: int,
default_prob: float,
attachment: float,
detachment: float,
recovery_rate: float,
) -> float:
"""Find the correlation that produces the target tranche price."""
def objective(corr):
model_price = price_tranche_monte_carlo(
n_assets, default_prob, corr, attachment, detachment, recovery_rate
)
return model_price - target_price
try:
implied_corr = brentq(objective, 0.001, 0.999)
except ValueError:
implied_corr = np.nan
return implied_corr# Calculate base correlation curve (hypothetical market prices)
market_detachment_points = [0.03, 0.06, 0.09, 0.12, 0.22]
# Hypothetical, model-consistent expected losses for each equity tranche
market_expected_losses = [0.35712, 0.1874432, 0.1245949, 0.092204, 0.0518958]
base_correlations = []
n_assets = 125 # Standard CDX index has 125 names
default_prob = 0.02 # 2% 5-year default probability
recovery = 0.40
for detach, target_loss in zip(
market_detachment_points, market_expected_losses
):
corr = find_implied_correlation(
target_loss, n_assets, default_prob, 0, detach, recovery
)
base_correlations.append(
{
"Detachment (%)": detach * 100,
"Market Expected Loss (%)": target_loss * 100,
"Base Correlation": corr,
}
)
base_corr_df = pd.DataFrame(base_correlations)Base Correlation Curve:
--------------------------------------------------
Detachment (%) Market Expected Loss (%) Base Correlation
3.0 35.712 0.12
6.0 18.744 0.22
9.0 12.459 0.32
12.0 9.220 0.42
22.0 5.190 0.55
The upward-sloping base correlation curve, analogous to the volatility smile we'll explore in Part III, indicates that the market expects loss distributions with fatter tails than a single-correlation Gaussian copula would produce. Senior tranches require higher implied correlations to match their market prices, suggesting investors demand compensation for extreme scenarios that the base model underestimates. This "correlation smile" became a key indicator of market stress, widening dramatically during periods of credit turmoil.