Quantitative Finance 13 min read Updated August 2026

Fixed Income Attribution Analysis: Return Attribution, Campisi Framework, and Yield Curve Decomposition with AI

Campisi attribution framework decomposing bond portfolio return into coupon income, duration effect, spread effect, and selection — the industry standard. Brinson-adapted yield curve attribution, currency attribution for global portfolios, active return decomposition vs benchmark, and a worked $300M portfolio example with sector and security selection breakdown.

Educational content, not professional advice — AI output and figures here can be wrong. Verify before you rely on it. Full disclaimer →

Why Bond Attribution Is More Complex Than Equity Attribution

Equity portfolio attribution is well-established: the Brinson-Hood-Beebower (BHB) framework decomposes active return into allocation, selection, and interaction effects across sectors. Implemented correctly, BHB produces a clean, exhaustive decomposition of how much value the portfolio manager added through sector weighting vs individual stock selection.

Fixed income attribution requires a fundamentally different framework. Bond returns have multiple separable sources that BHB ignores entirely:

  1. Income (carry) — coupon income, which is the dominant source of bond return over long periods
  2. Treasury rate effect — price change from movements in the risk-free yield curve (the "rate bet")
  3. Spread effect — price change from movements in credit spreads (the "credit bet")
  4. Selection effect — idiosyncratic return from individual bonds outperforming or underperforming sector averages

Applying BHB directly to bonds produces misleading results because it conflates income return with price return and fails to separate rate risk from credit risk. The Campisi framework, introduced in Stephen Campisi's 2000 Journal of Performance Measurement paper, solves this by explicitly modeling all four components.

Related reading: Fixed Income Analysis AI | Portfolio Optimization | Key Rate Duration

The Campisi Framework: Four-Component Decomposition

The Campisi attribution decomposes the total return of each bond (and by extension, each portfolio segment and the portfolio as a whole) into exactly four components:

1. Income Effect:
Income = Coupon / Price × (Holding period / Year)
For a bond with 5.50% coupon, price 97.50, over one quarter: Income = 5.50/97.50 × (1/4) = 1.41%

2. Treasury Effect:
Treasury Effect = −Modified Duration × ΔTreasury Yield
If the 7Y Treasury yield rose 30bps: Treasury Effect = −6.2Y × 0.30% = −1.86%

3. Spread Effect:
Spread Effect = −Spread Duration × ΔSpread
If OAS tightened 20bps: Spread Effect = −6.0Y × (−0.20%) = +1.20%

4. Selection Effect:
Selection = Actual Total Return − (Income + Treasury Effect + Spread Effect)
This captures all residual return: credit events, idiosyncratic spread moves, pricing anomalies

  • "Decompose the quarterly return of this corporate bond using the Campisi framework. Bond: Verizon 5.50% 2031 (7Y), price at start = $98.25, price at end = $97.40. Coupon payment received this quarter: $13.75 per $1,000 face. Treasury rate change: 7Y Treasury yield rose 28bps. OAS change: Verizon's OAS widened 12bps. Modified duration at start = 6.15Y, spread duration = 6.10Y. Calculate: (a) income effect = coupon / start price = $13.75 / $982.50 = ?, (b) Treasury effect = -6.15 × 0.0028 = ?, (c) spread effect = -6.10 × 0.0012 = ?, (d) actual price return = (97.40 - 98.25) / 98.25 = ?, (e) total actual return = income + price return, (f) selection = actual total - (income + treasury effect + spread effect). Show the full attribution table."
  • "Run Campisi attribution for my entire $300M portfolio vs Bloomberg US Agg for Q3. Portfolio returned 4.2% total (1.05% income, -0.65% Treasury effect, 0.55% spread effect, 0.30% selection, -0.05% residual/rounding). Bloomberg US Agg returned 3.8% total (1.00% income, -0.70% Treasury effect, 0.35% spread effect, 0.15% selection). Build the full Campisi attribution table: for each component, show portfolio return, benchmark return, and active return. Which effect contributed most to the 40bps active return? What does each active effect tell us about the portfolio manager's decisions?"

Worked Example: $300M Portfolio vs Bloomberg US Agg

Let's trace a complete quarterly attribution for a $300M IG portfolio that generated 40bps of active return over the Bloomberg US Agg benchmark.

Attribution ComponentPortfolioBenchmarkActive Return
Income return1.35%1.22%+0.13%
Treasury effect−0.42%−0.62%+0.20%
Spread effect+0.48%+0.18%+0.30%
Selection effect−0.23%−0.13%−0.10%
Total return4.2% (Q annualized ~16.8%)3.8%+0.40%

Reading the attribution: The portfolio's active 40bps came from: (a) +13bps from higher income — the portfolio had higher yield than the benchmark (more credit risk taken); (b) +20bps from the Treasury rate bet — the portfolio was short duration when rates rose; (c) +30bps from the spread bet — the portfolio was overweight credit when spreads tightened; (d) −10bps from selection — individual bond picks underperformed their sector averages.

  • "Interpret this Campisi attribution for my $300M portfolio vs Bloomberg US Agg: Income active return = +13bps, Treasury active return = +20bps, Spread active return = +30bps, Selection active return = -10bps. Questions: (a) what does the +20bps Treasury active return tell me about my duration positioning? If rates rose 30bps during the quarter and the active Treasury effect was +20bps, what was my approximate active duration (hint: active duration = active Treasury return / rate change)? (b) what does the +30bps spread active return tell me about my sector allocation? If IG corporate spreads tightened 18bps and my spread active return was +30bps, what was my approximate active spread duration (hint: active spread D = active spread return / spread change)? (c) is -10bps selection a meaningful signal about my security selection skill, or is it within normal noise range?"

Yield Curve Attribution: Decomposing the Treasury Rate Effect

The Campisi Treasury effect lumps all rate change into a single number: −ModD × ΔRate. But rate changes rarely happen as parallel shifts — curves twist, flatten, steepen, and butterfly. Yield curve attribution decomposes the Treasury effect into contributions from different types of curve moves:

  • Parallel shift — the average rate move across all maturities
  • Slope change — the steepening or flattening of 2s10s
  • Butterfly (curvature) — the cheapening or richening of the belly vs wings

The key-rate duration (KRD) approach takes this further by assigning P&L to specific maturity buckets (2Y, 5Y, 7Y, 10Y, 20Y, 30Y), making it possible to attribute return to the manager's active overweight or underweight of each maturity.

  • "Decompose the Treasury return effect for my portfolio using key-rate durations. Portfolio KRDs (active vs benchmark): 2Y: +0.25Y (overweight front end), 5Y: -0.15Y (underweight 5Y), 7Y: -0.10Y, 10Y: +0.20Y (overweight 10Y), 30Y: +0.05Y. During the quarter, Treasury yield changes: 2Y: +18bps, 5Y: +25bps, 7Y: +22bps, 10Y: +20bps, 30Y: +8bps. Calculate the attribution for each maturity bucket: Active KRD × (-ΔYield) = contribution. Show the total yield curve attribution (sum of bucket contributions). Which maturity bet contributed most? Did the 2s10s flattener bet (long 10Y, long 2Y vs benchmark) pay off?"
  • "My portfolio had a 0.35Y active duration (long duration vs benchmark) during a quarter when 10Y rates fell 22bps. (a) What was the approximate Treasury active return from this duration bet: -0.35Y × (-22bps) = ? (b) Break down the 22bp rate decline: was it parallel shift (all maturities moved together) or curve twist? If the 2Y rate was unchanged but the 10Y fell 22bps, this is a pure flattening move. (c) How does the attribution change if I modeled this as 'parallel shift of 11bps (average) + flattening of 11bps'? Show both decompositions."

Sector Attribution: Brinson-Style Decomposition for Fixed Income

Within the Campisi framework, the spread effect can be further decomposed into sector allocation and security selection using a Brinson-style approach:

Sector Allocation Effect = (Portfolio weight − Benchmark weight) × (Benchmark sector spread return − Total benchmark spread return)
This measures whether the manager added value by over/underweighting sectors that outperformed the overall spread return.

Security Selection Effect = Portfolio weight × (Portfolio bond spread return − Benchmark sector spread return)
This measures whether the manager's individual bond picks outperformed the sector average.

  • "Decompose my spread active return (+30bps) into sector allocation and security selection for two sectors. Financials: portfolio weight 32% (benchmark 22%), portfolio financials spread return +60bps, benchmark financials spread return +45bps, total benchmark spread return +25bps. Industrials: portfolio weight 35% (benchmark 40%), portfolio industrials spread return +15bps, benchmark industrials spread return +12bps. Calculate: (a) Financials allocation effect = (32% - 22%) × (45% - 25%) = ? (b) Financials selection effect = 32% × (60% - 45%) = ? (c) Industrials allocation effect and selection effect. (d) Total sector attribution effects. Reconcile to the total spread active return of +30bps."

Currency Attribution for Global Fixed Income

For global bond portfolios, currency attribution adds a third dimension. The total return of a foreign bond investment (for a USD-based investor) is:

Total USD Return = (1 + Local Bond Return) × (1 + Currency Return) − 1
≈ Local Bond Return + Currency Return (for small returns)

Attribution breaks this into:

  • Local return: the bond's return in its home currency (decomposed further by Campisi: income, rate, spread)
  • Currency return: the appreciation or depreciation of the home currency vs USD
  • Hedging cost: the cost of the FX forward used to hedge — reflected in the cross-currency basis
  • "Attribute the return of my EUR government bond holdings (10% of my $300M global portfolio = $30M). EUR government bond local return: +2.8% (income 1.8% + price return 1.0%). EUR/USD FX appreciation: +1.5% (EUR strengthened). Cross-currency hedging cost: -0.4% (paid to hedge EUR back to USD). Total unhedged USD return = (1+2.8%) × (1+1.5%) - 1 = ? Total hedged USD return = 2.8% - 0.4% = ? Benchmark is Bloomberg Global Agg USD-hedged; benchmark EUR allocation returned 2.5% hedged. Active return from EUR allocation = portfolio hedged return − benchmark EUR return. Did the EUR rate bet add value? Did the currency overlay add value?"

Multi-Period Attribution: Linking Monthly to Quarterly

Attribution results must be geometrically linked when aggregating across periods. Simple arithmetic addition of monthly attribution components creates an error that compounds over time. The correct methodology uses geometric linking (the Carino or Modified Dietz approach for linking):

Arithmetic linking (incorrect for long periods):
Annual active return ≈ Jan active + Feb active + ... + Dec active

Geometric linking (correct):
Geometric annual return = [(1+R_Jan) × (1+R_Feb) × ... × (1+R_Dec)] − 1

  • "Link three monthly Campisi attribution results for my $300M portfolio. January: Income active +4bps, Treasury active +8bps, Spread active +6bps, Selection active -3bps. February: Income active +3bps, Treasury active -12bps, Spread active +4bps, Selection active +2bps. March: Income active +4bps, Treasury active +15bps, Spread active +8bps, Selection active -4bps. (a) Simple arithmetic sum of each effect over 3 months. (b) Are there portfolio weights or compounding effects that require geometric linking? (c) If January total portfolio return = 1.35% and January benchmark return = 1.20%, February portfolio = -0.25% and benchmark = -0.40%, March portfolio = 1.80% and benchmark = 1.55%, what is the geometric quarterly active return? Is it equal to the sum of monthly active returns?"

Attribution Reporting for CIO and Investment Committee

Performance attribution is ultimately a communication tool. The CIO and investment committee need to understand three things: what worked, what didn't work, and whether the manager's skill is systematic or lucky. The standard attribution report format for institutional fixed income:

  • "Produce a Q3 2026 investment committee performance attribution report for my $300M portfolio vs Bloomberg US Agg. Portfolio return: 4.2% (annualized: 16.8%). Benchmark return: 3.8% (annualized: 15.2%). Active return: +40bps. Attribution: Duration bet +20bps (portfolio ran 0.3Y short duration, rates rose 30bps on average). Credit bet +30bps (12% overweight IG corporates, spreads tightened 15bps). Security selection -10bps (two healthcare names underperformed their sector by 85bps on an idiosyncratic basis). Income advantage +13bps (portfolio yield 5.12% vs benchmark 4.88%). Draft a 3-paragraph executive summary suitable for a CIO board presentation. Include: (1) what drove the outperformance, (2) which active bets are still in place, (3) key risks for Q4."
  • "Build a 3-year rolling attribution analysis. Annual data: Year 1: duration active +0.15%, credit active +0.22%, selection active +0.05%. Year 2: duration active -0.18%, credit active +0.35%, selection active -0.12%. Year 3 (current): duration active +0.20%, credit active +0.30%, selection active -0.10%. Calculate: (a) 3-year cumulative active return, (b) information ratio (active return / tracking error) for each effect separately — assume tracking error from duration bets = 55bps annual, from credit bets = 42bps annual, from selection = 28bps annual. (c) Which source of active return shows the strongest evidence of skill (highest IR)? Is the security selection result (-0.10% in years 1 and 3, -0.12% in year 2) statistically significant negative skill or within normal noise?"

CFA Level 3 Insight: The CFA curriculum frames fixed income attribution around the concept of "decomposing active return into effects attributable to manager decisions." Examiners require candidates to know: (1) why income return must be separated from price return (bonds mean-revert to par; price return is temporary while income is realized); (2) how the Treasury effect captures duration bets while the spread effect captures credit bets; (3) why selection is the residual that captures individual bond skill. The Campisi framework is explicitly tested in the 2026 curriculum's Fixed Income Attribution reading. See Relative Value Analysis for the forward-looking analysis that generates the trades this attribution measures.

Three-Factor Attribution: Rate, Spread, Income

A simplified but widely used alternative to the full Campisi decomposition uses three factors for the active return:

  • Rate factor = Active duration × ΔBenchmark Treasury yield = the P&L from the duration bet
  • Spread factor = Active spread duration × ΔSpread = the P&L from the credit/spread bet
  • Income factor = Portfolio yield − Benchmark yield = the return from carrying more or less yield than the benchmark
  • "Use the three-factor model to attribute my portfolio's 40bps active return vs Bloomberg US Agg. Active duration: +0.30Y (I'm long duration). 10Y Treasury yield moved: -18bps (rates fell, duration bet paid off). Active spread duration: +0.65Y (I'm overweight credit). IG spread change: -15bps (spreads tightened, credit bet paid off). Portfolio yield: 5.12%, Benchmark yield: 4.88%. Calculate: (a) Rate factor contribution = -0.30Y × (-18bps) = ? (b) Spread factor contribution = -0.65Y × (-15bps) = ? (c) Income factor contribution = (5.12% - 4.88%) / 4 (quarterly) = ? (d) Total three-factor attribution. (e) Residual = actual active 40bps minus three-factor total. What does the residual represent?"

For the risk framework that sets limits on these active bets, see Portfolio VaR with Claude. For the strategy decisions that generate these attribution effects, see Fixed Income Portfolio Optimization and Yield Curve Strategies. For the relative value analysis that drives security selection, see Fixed Income Relative Value Analysis.

Setting Up Claude for Attribution Work

{
  "mcpServers": {
    "claudefinlab-portfolio": {
      "url": "https://claudefinancelab.com/portfolio/sse",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    },
    "claudefinlab-market": {
      "url": "https://claudefinancelab.com/market/sse",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

The portfolio MCP server automatically tracks beginning and ending positions, computes realized income, and applies Campisi decomposition across all holdings. Monthly attribution reports are generated in a single prompt with no manual spreadsheet work. For the full analytical toolkit, see Quantitative Finance tools.

Frequently Asked Questions

What is the Campisi framework and why is it the industry standard?

The Campisi framework (Campisi 2000) decomposes a bond portfolio's total return into four components: income (coupon earned), Treasury effect (price return from risk-free rate changes, −ModD × ΔTreasury yield), spread effect (price return from credit spread changes, −SpreadD × ΔSpread), and selection (idiosyncratic residual). It is the industry standard because: (1) it correctly separates interest rate risk from credit risk, which are independent decisions; (2) it explicitly captures income return, which Brinson-style equity attribution ignores — yet income is the dominant source of long-run bond return; (3) it produces attribution effects that map cleanly to portfolio management decisions (duration bet → Treasury effect; credit bet → spread effect; individual bond picking → selection).

How do you calculate the Treasury attribution effect?

Treasury effect = −Modified Duration × ΔTreasury Yield (for the relevant maturity). For a bond with 7.0Y modified duration where the 7Y Treasury yield rose 25bps: Treasury effect = −7.0 × 0.0025 = −1.75%. For the active (relative to benchmark) Treasury effect: Active Treasury effect = −Active Duration × ΔTreasury Yield. If the portfolio is 0.3Y long duration and the 10Y Treasury yield rises 25bps: Active Treasury effect = −0.30 × 0.0025 = −0.075% (7.5bps detraction from the duration bet). If the 10Y yield falls 25bps instead, the active Treasury effect is +7.5bps.

What does a negative selection effect indicate?

A negative selection effect means individual bond picks underperformed their sector averages — the portfolio held bonds that generated less return than the average bond in the same sector (same duration, same rating, same credit quality). A small negative selection (−5 to −15bps) is within normal noise and does not indicate poor skill. Persistent negative selection over 2+ years (or large negative selection in a single period, e.g., −50bps) warrants investigation: typically it indicates specific credit events (a holding that widened significantly on idiosyncratic news), structural overweighting of illiquid bonds with wider bid-ask spreads, or bond picking in sectors where the manager lacks an edge.

How do you link attribution across multiple periods?

Attribution effects should be geometrically linked across periods, not arithmetically summed. The correct approach: compute the total portfolio return and total benchmark return geometrically for the full period, then compute the geometric active return. Then attribute the geometric active return to its sources using the Campisi framework at the full-period level. For reporting purposes, the Carino linking method provides mathematically precise weights for linking monthly effects to annual totals. Most attribution systems (MSCI BarraOne, Bloomberg PORT, BlackRock Aladdin) handle geometric linking automatically.

What is the information ratio in fixed income attribution?

The information ratio (IR) = Annual active return / Annual tracking error. It measures the consistency of value-added per unit of active risk. An IR above 0.5 is generally considered strong for fixed income; above 0.75 is excellent. In attribution, computing the IR separately for each effect (duration, credit, selection) identifies the manager's most consistent source of alpha. A manager might show IR = 0.8 for credit bets (consistent sector timing) but IR = −0.2 for security selection (persistent security-picking drag). This granularity allows the investment committee to evaluate whether alpha is from skill or from beta tilts that happen to have worked in the measurement period.

Using Claude at your firm?

Connect Claude to live financial data via MCP — EDGAR, FDIC, BIS, CME and 18 more.

New guides & tools — free

Get notified when we add new MCP servers, finance AI guides, and eval results.

Try These Skills

Browse all Quant Finance tools →
FEEDBACK