# Chapter 9: Risk Attribution: Where Does My Risk Come From?

_Previous: [Chapter 8: Risk Model Assembly](08-risk-model-assembly.md)_

---

A risk number by itself is almost useless. The questions that drive decisions are: _how much_ risk, from _which sources_, and from _which positions_? Risk attribution is the machinery that answers them, and it is pure algebra on the assembled model of [Chapter 8](08-risk-model-assembly.md).

## 9.1 The two-level decomposition

From [Chapter 2](02-the-factor-model-equation.md), for any weight vector $w$ (total or active):

$$\sigma^2 = \underbrace{x^\top F x}_{\text{factor}} + \underbrace{w^\top \Delta w}_{\text{specific}}, \qquad x = X^\top w.$$

This first split is exact and unambiguous because the model makes the two parts uncorrelated. The second level, splitting factor variance across factors, runs into a structural problem:

**The cross-term problem:** Factor variance is $x^\top F x = \sum_k \sum_l x_k F_{kl} x_l$, which contains every pairwise covariance term. So the variance "belonging to" factor $k$ alone is not well-defined: the covariance with factor $l$ belongs to both, or neither. Any per-factor attribution is a convention for allocating the cross-terms.

**The standard convention:** Allocate to factor $k$ the Contribution to Variance (CTV) quantity

$$\mathrm{CTV}_k = x_k\,(F x)_k = x_k \sum_l F_{kl}\, x_l,$$

i.e. exposure times that factor's covariance with the whole portfolio. These sum exactly to the factor variance ($\sum_k x_k (Fx)_k = x^\top F x$), split each cross-term 50/50 between its two factors, and can legitimately be negative: a factor exposure that hedges the rest of the portfolio shows up as a negative contribution.

```mermaid
flowchart TD
    V["Total variance σ²"]
    F["Factor variance xᵀFx"]
    S["Specific variance wᵀΔw"]
    K["Per-factor split CTVₖ = xₖ(Fx)ₖ"]
    V -->|exact, uncorrelated| F
    V -->|exact, uncorrelated| S
    F -->|cross-term convention| K
```

Level one splits cleanly. Level two needs a convention.

## 9.2 Position contributions: MCR and CTR

For position-level analysis, differentiate volatility (not variance) with respect to weights. Since $\sigma = (w^\top \Sigma w)^{1/2}$:

$$\mathrm{MCR}_i \;=\; \frac{\partial \sigma}{\partial w_i} \;=\; \frac{(\Sigma w)_i}{\sigma}.$$

$\mathrm{MCR}_i$ is a _rate_: risk per unit of weight, the slope of volatility along position $i$. It answers the trading question directly: with all other weights held fixed, adding 1% to stock $i$ changes portfolio volatility by approximately $0.01 \times \mathrm{MCR}_i$ (a realizable trade in a fully-invested book funds the buy of $i$ with a sale of $j$, so its true impact is the difference of two marginals, $0.01 \times (\mathrm{MCR}_i - \mathrm{MCR}_j)$). It depends on the whole portfolio, not the stock alone: a high-vol stock that diversifies the book can have low or negative MCR.

A rate is not a share of the total, so MCRs do not add up to anything. To get pieces that sum, weight each rate by the size of the position it describes.

**Euler decomposition (CTR):** Volatility scales linearly with position size: double every weight and risk doubles, $\sigma(\lambda w) = \lambda\, \sigma(w)$ (it is "homogeneous of degree 1 in $w$"). For any function with that property, Euler's theorem recovers the whole from its weighted marginals:

$$\sigma = \sum_i w_i\, \frac{\partial \sigma}{\partial w_i} = \sum_i \underbrace{w_i\, \mathrm{MCR}_i}_{\mathrm{CTR}_i}.$$

Each _contribution to risk_ $\mathrm{CTR}_i = w_i\,\mathrm{MCR}_i = w_i\,(\Sigma w)_i/\sigma$ is the rate times the position, and the terms sum exactly to total volatility. This is the only marginal-based position-level decomposition in volatility units with no cross-terms to allocate, which is why CTR is the standard position-level report.

**Three quantities, one machine.** CTV (§9.1) and CTR are the same operation: a marginal times the amount you hold, summed to recover the whole. They differ on two axes, what you decompose _across_ (factors or positions) and the _units_ (variance or volatility). MCR is not a third decomposition. It is the building block, the per-position marginal before you multiply by weight.

| Quantity | Across | What it is | Units | Adds up to |
| --- | --- | --- | --- | --- |
| $\mathrm{MCR}_i = (\Sigma w)_i/\sigma$ | positions | rate (a marginal) | risk per unit weight | nothing; a sensitivity |
| $\mathrm{CTR}_i = w_i\,\mathrm{MCR}_i$ | positions | share (weight × MCR) | volatility | total risk $\sigma$ (TE when active) |
| $\mathrm{CTV}_k = x_k\,(Fx)_k$ | factors | share (exposure × covariance) | variance | factor variance $x^\top Fx$ |

Two asymmetries are worth holding onto. CTR is in volatility and CTV in variance because that is the unit that adds up cleanly in each space, so the two are not the same kind of percentage (§9.4 returns to this). And CTR is complete on its own, factor and specific risk folded into one number per stock, whereas the CTVs cover only the factor block, so the specific term $w^\top\Delta w$ is what closes the gap to total variance. Either share can be re-expressed in the other units (divide CTV by $\sigma$ for a factor's share of volatility, or take $w_i(\Sigma w)_i$ for a position's share of variance), but the reports in §9.4 use the pairing above. (Proofs in [appendix §17.3](17-appendix.md).)

## 9.3 Active risk

Everything above applies verbatim to active weights: replace $w \to w_a = w_p - w_b$, $x \to x_a = X^\top w_a$, $\sigma \to$ tracking error. The active view is where factor models become important, because benchmark-relative exposures are where intentional bets and accidents live: a long-only manager's total risk is always dominated by the market factor (~80% of variance in the mini example, a stylized fact for long-only books), which says nothing about their decisions. Tracking error decomposition reveals the decisions.

## 9.4 Reading a risk report: the mini example

Let's compare the mini example's portfolio against the cap-weighted benchmark. All numbers from the [source code](18-mini-example-source-code.md), annualized.

**Headline numbers:**

|                    | Portfolio | Benchmark |    Active |
| ------------------ | --------: | --------: | --------: |
| Total vol / TE     |    17.55% |    18.14% | **5.42%** |
| factor component   |    15.99% |    16.57% |     4.21% |
| specific component |     7.22% |     7.38% |     3.42% |

Read each column top-down, and remember the two components combine in quadrature, not by addition: $\sqrt{4.21^2 + 3.42^2} = 5.42$, because variances add and §9.1 makes factor and specific uncorrelated. The trap is the Active column. It is not Portfolio minus Benchmark. That difference is 17.55% − 18.14% = −0.59%, nowhere near the 5.42% TE. Tracking error is computed from the active weight vector $w_a = w_p - w_b$ run through the same model, so a portfolio and benchmark can carry near-identical total vol while the active risk between them is large.

So what is worth reading here? Not the total-vol row: the manager runs marginally less total risk than the benchmark (17.55% vs 18.14%), which says almost nothing, since ~80% of total variance is market beta they did not choose. The 5.42% TE is the number they own. Notice the mix flips between columns. In total risk the factor component dominates specific (15.99% vs 7.22%) because market beta loads the factor side. In the active column the two are close (4.21% vs 3.42%), because netting out the benchmark removes the market and leaves the actual bets, where stock-specific risk is a much larger share.

**Active factor exposures**:

|  MKT |   TECH |    FIN |   CONS |      VALUE |        MOM |   SIZE |
| ---: | -----: | -----: | -----: | ---------: | ---------: | -----: |
| 0.00 | −0.145 | +0.095 | +0.051 | **+0.385** | **−0.332** | −0.275 |

Read as positions: market-neutral relative to benchmark (long-only, fully invested, beta ≈ 1). Underweight tech, overweight financials, a deliberate +0.38σ value tilt, an unintended −0.33σ momentum exposure, a small-cap lean. The momentum bet was never chosen. It is the shadow of the value tilt (cheap stocks are disproportionately past losers, the VALUE–MOM exposure correlation does the rest).

**Decomposition of active variance** (TE² = 0.00294):

| Source                     | share of active variance |
| -------------------------- | -----------------------: |
| Industries (TECH+FIN+CONS) |                    18.0% |
| Styles (VALUE+MOM+SIZE)    |                **42.2%** |
| of which MOM               |                    22.0% |
| of which VALUE             |                    16.0% |
| of which SIZE              |                     4.2% |
| Specific                   |                **39.8%** |

The largest single factor contribution comes from the unintended momentum exposure (22.0%), exceeding the intended value bet (16.0%): the manager is running more accidental risk than deliberate risk in style space. (MOM contributes more than VALUE despite the smaller exposure because the momentum factor is more volatile, 6% vs 4%, and the −0.45 VALUE–MOM correlation transfers part of the value bet's variance to the momentum line under the cross-term convention.) Specific risk accounts for ~40% of active variance, unavoidable with 10 stocks. In a real 80-stock active book a 40% specific share would instead be a deliberate statement about stock-picking confidence.

This is the variance/volatility split from §9.2, now with numbers on it. The factor shares above are _variance_ (they sum to TE² once specific is folded in); the position contributions below are _volatility_ (CTR, summing to TE). So MOM's 22.0% and AXIOM's 61.7% are not the same kind of percentage, and you cannot read one against the other.

**Position-level contributions to TE** (Euler):

| Stock                |  $w_a$ |    MCR |        CTR |   % of TE |
| -------------------- | -----: | -----: | ---------: | --------: |
| AXIOM                | −0.144 | −0.232 |     0.0334 | **61.7%** |
| BINARY               | −0.050 | −0.146 |     0.0073 |     13.5% |
| FIDELIS              | +0.042 | +0.105 |     0.0044 |      8.2% |
| GUARDIAN             | +0.028 | +0.157 |     0.0043 |      8.0% |
| INDIGO               | +0.031 | +0.060 |     0.0019 |      3.4% |
| (… remaining five …) |        |        |            |      5.2% |
| **Total**            |        |        | **0.0542** |  **100%** |

The single underweight in AXIOM, the largest, highest-momentum tech name, drives 62% of tracking error. Note the sign logic: $w_a < 0$ and $\mathrm{MCR} < 0$ multiply to a _positive_ contribution. Being short a stock that co-moves with your other bets is a risk position like any other. A PM seeing this line has a precise lever: halving the AXIOM underweight removes roughly a third of tracking error (recompute, don't extrapolate: MCRs move as weights move). The five names not shown each contribute under 2%, the value longs among them partly offsetting, so nothing material hides in the tail.

**What this report pattern surfaces in practice.** Three findings recur, and two are already visible in the mini example. Unintended style bets ride on intended ones, the way the momentum accident rides on the value tilt. Tracking error concentrates in a few names a holdings list makes look innocuous, the way AXIOM carries 62% of TE. The third needs a larger book to show: positions that look diversified across dozens of holdings but in fact share one factor profile, so the position count overstates how many distinct bets are on. Attribution is what brings each into view.

## 9.5 Stress testing and scenario analysis

Attribution decomposes the _standing_ risk. Stress tests ask "what if a specific thing happens?" Factor models make this concrete: a scenario is a vector of factor moves $f^{\text{shock}}$, and the portfolio impact is the factor term $x^\top f^{\text{shock}}$ alone. Specific returns are unforecastable by construction, so they contribute nothing to a scenario, which means stress tests understate the risk of a book whose variance is mostly idiosyncratic (the ~40% specific share above).

**Direct (naive) shock:** "VALUE falls 8%" (a 2σ annual move): impact = $x_{a,\text{VALUE}} \times (−8\%) = 0.385 \times -8\% = −3.1\%$ active. Simple, and wrong as a scenario, because factors do not move alone.

**Correlated (conditional) shock:** Propagate through the covariance: shock factor $k$ by $s$, set the others to their conditional expectations,

$$\mathbb{E}[f \mid f_k = s] = \frac{F_{\cdot k}}{F_{kk}}\, s$$

(the regression-beta of every factor on the shocked one, with factor means taken as zero over the horizon). This propagation reads the comovements straight off the risk model's $F$, so it inherits $F$'s full-sample correlations, the ones the historical replay below is meant to stress. In the mini example, conditioning on VALUE −8% implies MKT +6.4%, TECH +6.3%, FIN −5.6%, MOM +5.4% (value crashes have historically been momentum-rally, growth-led markets: the negative VALUE–MOM and VALUE–MKT correlations encode that). Impact:

- **Active: −6.1%**, twice the naive number. The portfolio's anti-momentum and pro-financials exposures all lose in the same state of the world as the value bet. The naive shock missed half the pain.
- **Total portfolio: +1.2%**, the long-only fund is up (the market rallied) while losing 6% to its benchmark. A precise illustration of why benchmark-relative stress matters to a relative-mandate manager.

**Historical scenario replay** is the same arithmetic with $f^{\text{shock}}$ taken from realized factor returns over a named episode (Great Financial Crisis, March 2020, the 2021 value rotation) pushed through current exposures. Worth doing alongside covariance-based propagation, because crisis correlations differ from the full-sample $F$ ([Chapter 8](08-risk-model-assembly.md)'s failure modes).

## 9.6 Summary

- Risk attribution = Euler decomposition of model risk: position level via $\mathrm{CTR}_i = w_i (\Sigma w)_i / \sigma$, factor level via $x_k (Fx)_k$. Both sum exactly. Negative contributions mean those positions/factors are hedging.
- The active view is the one relevant for decisions. Its standard discoveries are unintended exposures and TE concentration, both present in the mini example (the −0.33 MOM accident, AXIOM at 62% of TE).
- Stress through the covariance, not one factor at a time: conditional shocks roughly doubled the measured vulnerability here.

Everything in this chapter is _ex ante_: model-implied, forward-looking. The _ex post_ mirror, where returns actually came from, is next.

---

_Next: [Chapter 10: Performance Attribution](10-performance-attribution.md)_
