Key Rate Duration Explained

Key rate duration (KRD) measures a bond or portfolio’s price sensitivity to a localized shift at a specified curve maturity while holding other key points fixed under a defined interpolation rule. It replaces the false precision of one parallel-duration number with a vector of curve exposures, but it remains a modelled finite-difference risk measure rather than an immutable property of a security.

Definition and curve shocks

For a bump Δy_k to key rate k, calculate central-difference KRD from fully repriced values:

KRD_k = -[P(y + bump_k) - P(y - bump_k)] / [2 P(y) Δy_k]

The phrase “bump key rate” is incomplete unless the shock shape is specified. A triangular tent bump, peaking at the chosen tenor and falling to zero at adjacent keys, is common. A node-only bump combined with cubic interpolation can unintentionally move a wide set of forwards. Always apply the shock in the same curve representation used for valuation.

Risk measureAssumed shiftPrimary use
modified durationparallel yield shiftfast scalar approximation
effective durationrepriced cash flowsoptioned bonds
key rate durationlocalized curve deformationcurve hedging
bucketed PV01quote-node bumpmarket risk and P&L attribution

KRD on a government bond is normally concentrated near its maturity, but coupons distribute exposure across earlier nodes. An amortizer, floater, or callable security has a more dispersed and state-dependent profile. For the duration foundations, see duration and convexity.

A reproducible implementation

The following code builds a linear tent shock in zero-rate space. Production code must use dated curves, payment calendars, and the desk’s actual interpolation convention.

import numpy as np

def tent_bump(tenors, key, bump):
    x = np.asarray(tenors, dtype=float)
    i = np.where(x == key)[0][0]
    left = x[i - 1] if i else x[i]
    right = x[i + 1] if i + 1 < len(x) else x[i]
    w = np.where(x <= key, (x - left) / max(key-left, 1e-12),
                 (right - x) / max(right-key, 1e-12))
    return bump * np.clip(w, 0, 1)

def key_rate_duration(price_curve, base_zeros, tenors, key, bump=1e-4):
    p0 = price_curve(base_zeros)
    up = price_curve(base_zeros + tent_bump(tenors, key, bump))
    dn = price_curve(base_zeros - tent_bump(tenors, key, bump))
    return -(up - dn) / (2 * p0 * bump)

Choose the bump large enough to overcome numerical noise but small enough for local linearity; one basis point is conventional, not universally correct. Compare central differences at 0.5 bp, 1 bp, and 5 bp. Large discrepancies indicate optionality, discontinuous rules, or a curve-shock implementation defect.

Hedge as a constrained system

Let b be the portfolio KRD vector and columns of H be KRD vectors for hedge instruments. A minimum-norm hedge solves:

min_h ||W(b + Hh)||² subject to financing, liquidity, and position constraints

W should emphasize economically material buckets, not merely equalize tenor count. Exact neutralization is often undesirable: a sparse hedge of liquid futures and swaps can be more robust than a mathematically perfect combination of illiquid cash bonds.

Portfolio exposureCandidate hedgeResidual risk
long 5Y KRD5Y future or OIS swapCTD and basis
2s10s steepenertwo matched swapsroll and curve-model risk
MBS extensionlonger swaps / swaptionsprepayment and volatility

For callable and mortgage assets, recompute KRD across rate and volatility scenarios. Their cash-flow profile changes under the bump, so a single base-case vector hides contraction and extension. Rate-tree valuation techniques are covered in Bermudan swaptions and callable bonds.

Controls and attribution

KRD should reconcile to independent bucketed PV01 reports within a documented tolerance. Check that sum of KRD times a parallel shock approximates effective duration, but do not demand equality: different shock bases and interpolation can legitimately differ. Backtest daily P&L against key-rate explain, then classify the residual into convexity, spread, volatility, fixing, and model components.

Key takeaways

  • KRD is a vector of localized, full-revaluation curve sensitivities.
  • The bump shape, curve representation, and interpolation convention are part of its definition.
  • Use central differences and bump-size tests to detect nonlinear or numerical instability.
  • Hedge under liquidity and financing constraints, then report residual exposure explicitly.
  • Recompute scenario KRDs for options and mortgages; base-case duration is insufficient.
#key rate duration #duration #fixed income #risk management