/performance-attribution
Decompose portfolio returns into explainable components to identify where value was added or lost. Use when the user asks about Brinson attribution, allocation vs selection effects, factor-based attribution, fixed-income attribution, or currency attribution. Also trigger when
$ npx -y skills add JoelLewis/finance_skills --skill performance-attribution --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/performance-attribution
Context preview
The summary Claude sees to decide when to auto-load this skill.
Decompose portfolio returns into explainable components to identify where value was added or lost. Use when the user asks about Brinson attribution, allocation vs selection effects, factor-based attribution, fixed-income attribution, or currency attribution. Also trigger when
SKILL.md
performance-attribution.SKILL.mdname: performance-attribution
description: "Decompose portfolio returns into explainable components to identify where value was added or lost. Use when the user asks about Brinson attribution, allocation vs selection effects, factor-based attribution, fixed-income attribution, or currency attribution. Also trigger when users mention 'what drove my returns', 'was it stock picking or sector bets', 'alpha decomposition', 'multi-period linking', 'interaction effect', 'active return breakdown', or ask why their portfolio outperformed or underperformed the benchmark."
Performance Attribution
Core Concepts
Brinson-Fachler Attribution (Single Period)
The classic equity attribution model decomposes active return (portfolio return minus benchmark return) into three effects:
- **Allocation effect:** Value added by over/underweighting sectors relative to the benchmark
- A_i = (w_p,i - w_b,i) × (R_b,i - R_b)
- Rewards overweighting sectors that outperform the total benchmark
- **Selection effect:** Value added by picking better securities within each sector
- S_i = w_b,i × (R_p,i - R_b,i)
- Rewards outperforming the sector benchmark regardless of weight
- **Interaction effect:** Combined effect of both overweighting and outperforming (or vice versa)
- I_i = (w_p,i - w_b,i) × (R_p,i - R_b,i)
- Captures the joint benefit of overweighting a sector AND selecting better securities in it
- **Total active return:** R_p - R_b = Σ A_i + Σ S_i + Σ I_i
Where: w_p,i = portfolio weight in sector i, w_b,i = benchmark weight in sector i, R_p,i = portfolio return in sector i, R_b,i = benchmark return in sector i, R_b = total benchmark return.
Multi-Period Attribution
Single-period attribution does not compound across periods. Geometric linking methods are required:
- **Carino method:** Applies a smoothing factor to make arithmetic effects compound to the correct geometric total
- **Menchero method:** Uses a logarithmic approach for smoother decomposition
- **GRAP (Geometric Return Attribution Program):** Converts arithmetic effects to geometric equivalents
- Key principle: the sum of linked attribution effects must equal the total geometric active return over the full period
Factor-Based Attribution
Decomposes returns into exposures to systematic risk factors:
- **Model:** R_p = Σ β_k × F_k + α
- β_k = portfolio's exposure (loading) to factor k
- F_k = return of factor k during the period
- α = residual return unexplained by factors (true alpha)
- **Common factors:** Market (MKT), Size (SMB), Value (HML), Momentum (UMD), Quality (QMJ), Low Volatility (BAB)
- **Factor contribution:** β_k × F_k for each factor
- **Active factor contribution:** (β_p,k - β_b,k) × F_k
- The model chosen (Fama-French 3, Carhart 4, Fama-French 5, Barra, Axioma) affects results
Fixed-Income Attribution
Decomposes bond portfolio returns into component sources:
- **Yield return (income):** Coupon income accrued during the period (yield × time)
- **Roll return:** Price appreciation as bonds "roll down" the yield curve toward maturity
- **Curve change return:** Impact of parallel and non-parallel yield curve shifts
- Duration effect: -D × Δy (parallel shift)
- Curve reshaping: key rate duration contributions
- **Spread change return:** Impact of credit spread changes: -spread_duration × Δspread
- **Credit/default return:** Losses from defaults or credit events
- **Residual:** Unexplained return (convexity effects, model error)
Currency Attribution
For international portfolios, returns decompose into:
- **Local return:** Return of the asset in its local currency
- **Currency return:** Gain/loss from exchange rate movements
- **Cross-product:** Interaction between local return and currency return
- **Total return (base currency):** R_base ≈ R_local + R_currency + R_local × R_currency
- **Hedged return:** Local return + hedge cost (forward premium/discount)
- Attribution of active currency decisions: actual currency exposure vs benchmark currency exposure
Holdings-Based vs Returns-Based Attribution
- **Holdings-based:** Uses actual portfolio positions; more accurate but requires detailed holdings data at each evaluation point
- **Returns-based (style analysis):** Regresses portfolio returns against a set of style indices (e.g., Sharpe style analysis); less precise but requires only return series
- **Transaction-based:** Most accurate; accounts for intra-period trading by using actual transaction records
Key Formulas
| Formula | Expression | Use Case | |---------|-----------|----------| | Allocation effect (sector i) | A_i = (w_p,i - w_b,i) × (R_b,i - R_b) | Sector weighting decisions | | Selection effect (sector i) | S_i = w_b,i × (R_p,i - R_b,i) | Security selection within sector | | Interaction effect (sector i) | I_i = (w_p,i - w_b,i) × (R_p,i - R_b,i) | Joint allocation-selection effect | | Total active return | R_p - R_b = Σ(A_i + S_i + I_i) | Sum of all effects equals active return | | Factor return contribution | C_k = β_k × F_k | Return from factor k exposure | | Duration effect | ΔP/P ≈ -D × Δy | Bond price change from yield shift | | Currency return | R_fx = (S_end - S_start) / S_start | Exchange rate impact |
Worked Examples
Example 1: Brinson-Fachler equity attribution
**Given:** Two-sector portfolio (Tech and Healthcare). Portfolio: 35% Tech (returned 15%), 65% Healthcare (returned 8%). Benchmark: 25% Tech (returned 12%), 75% Healthcare (returned 6%). Total benchmark return: 0.25×12% + 0.75×6% = 7.5%. **Calculate:** Allocation, selection, and interaction effects for each sector, and total active return. **Solution:** 1. **Total portfolio return:** 0.35×15% + 0.65×8% = 5.25% + 5.20% = 10.45%. 2. **Total active return:** 10.45% - 7.50% = **2.95%**. 3. **Tech allocation effect:** (0.35 - 0.25) × (12% - 7.5%) = 0.10 × 4.5% = **+0.45%** (overweight a sector that beat the benchmark). 4. **Tech selection effect:** 0.25 × (15% - 12%) = 0.25 × 3% = **+0.75%*
Read more
name: performance-attribution description: "Decompose portfolio returns into explainable components to identify where value was added or lost. Use when the user asks about Brinson attribution, allocation vs selection effects, factor-based attribution, fixed-income attribution, or currency attribution. Also trigger when users mention 'what drove my returns', 'was it stock picking or sector bets', 'alpha decomposition', 'multi-period linking', 'interaction effect', 'active return breakdown', or ask why their portfolio outperformed or underperformed the benchmark."
Performance Attribution
Core Concepts
Brinson-Fachler Attribution (Single Period)
The classic equity attribution model decomposes active return (portfolio return minus benchmark return) into three effects:
- **Allocation effect:** Value added by over/underweighting sectors relative to the benchmark
- A_i = (w_p,i - w_b,i) × (R_b,i - R_b)
- Rewards overweighting sectors that outperform the total benchmark
- **Selection effect:** Value added by picking better securities within each sector
- S_i = w_b,i × (R_p,i - R_b,i)
- Rewards outperforming the sector benchmark regardless of weight
- **Interaction effect:** Combined effect of both overweighting and outperforming (or vice versa)
- I_i = (w_p,i - w_b,i) × (R_p,i - R_b,i)
- Captures the joint benefit of overweighting a sector AND selecting better securities in it
- **Total active return:** R_p - R_b = Σ A_i + Σ S_i + Σ I_i
Where: w_p,i = portfolio weight in sector i, w_b,i = benchmark weight in sector i, R_p,i = portfolio return in sector i, R_b,i = benchmark return in sector i, R_b = total benchmark return.
Multi-Period Attribution
Single-period attribution does not compound across periods. Geometric linking methods are required:
- **Carino method:** Applies a smoothing factor to make arithmetic effects compound to the correct geometric total
- **Menchero method:** Uses a logarithmic approach for smoother decomposition
- **GRAP (Geometric Return Attribution Program):** Converts arithmetic effects to geometric equivalents
- Key principle: the sum of linked attribution effects must equal the total geometric active return over the full period
Factor-Based Attribution
Decomposes returns into exposures to systematic risk factors:
- **Model:** R_p = Σ β_k × F_k + α
- β_k = portfolio's exposure (loading) to factor k
- F_k = return of factor k during the period
- α = residual return unexplained by factors (true alpha)
- **Common factors:** Market (MKT), Size (SMB), Value (HML), Momentum (UMD), Quality (QMJ), Low Volatility (BAB)
- **Factor contribution:** β_k × F_k for each factor
- **Active factor contribution:** (β_p,k - β_b,k) × F_k
- The model chosen (Fama-French 3, Carhart 4, Fama-French 5, Barra, Axioma) affects results
Fixed-Income Attribution
Decomposes bond portfolio returns into component sources:
- **Yield return (income):** Coupon income accrued during the period (yield × time)
- **Roll return:** Price appreciation as bonds "roll down" the yield curve toward maturity
- **Curve change return:** Impact of parallel and non-parallel yield curve shifts
- Duration effect: -D × Δy (parallel shift)
- Curve reshaping: key rate duration contributions
- **Spread change return:** Impact of credit spread changes: -spread_duration × Δspread
- **Credit/default return:** Losses from defaults or credit events
- **Residual:** Unexplained return (convexity effects, model error)
Currency Attribution
For international portfolios, returns decompose into:
- **Local return:** Return of the asset in its local currency
- **Currency return:** Gain/loss from exchange rate movements
- **Cross-product:** Interaction between local return and currency return
- **Total return (base currency):** R_base ≈ R_local + R_currency + R_local × R_currency
- **Hedged return:** Local return + hedge cost (forward premium/discount)
- Attribution of active currency decisions: actual currency exposure vs benchmark currency exposure
Holdings-Based vs Returns-Based Attribution
- **Holdings-based:** Uses actual portfolio positions; more accurate but requires detailed holdings data at each evaluation point
- **Returns-based (style analysis):** Regresses portfolio returns against a set of style indices (e.g., Sharpe style analysis); less precise but requires only return series
- **Transaction-based:** Most accurate; accounts for intra-period trading by using actual transaction records
Key Formulas
| Formula | Expression | Use Case | |---------|-----------|----------| | Allocation effect (sector i) | A_i = (w_p,i - w_b,i) × (R_b,i - R_b) | Sector weighting decisions | | Selection effect (sector i) | S_i = w_b,i × (R_p,i - R_b,i) | Security selection within sector | | Interaction effect (sector i) | I_i = (w_p,i - w_b,i) × (R_p,i - R_b,i) | Joint allocation-selection effect | | Total active return | R_p - R_b = Σ(A_i + S_i + I_i) | Sum of all effects equals active return | | Factor return contribution | C_k = β_k × F_k | Return from factor k exposure | | Duration effect | ΔP/P ≈ -D × Δy | Bond price change from yield shift | | Currency return | R_fx = (S_end - S_start) / S_start | Exchange rate impact |
Worked Examples
Example 1: Brinson-Fachler equity attribution
**Given:** Two-sector portfolio (Tech and Healthcare). Portfolio: 35% Tech (returned 15%), 65% Healthcare (returned 8%). Benchmark: 25% Tech (returned 12%), 75% Healthcare (returned 6%). Total benchmark return: 0.25×12% + 0.75×6% = 7.5%. **Calculate:** Allocation, selection, and interaction effects for each sector, and total active return. **Solution:** 1. **Total portfolio return:** 0.35×15% + 0.65×8% = 5.25% + 5.20% = 10.45%. 2. **Total active return:** 10.45% - 7.50% = **2.95%**. 3. **Tech allocation effect:** (0.35 - 0.25) × (12% - 7.5%) = 0.10 × 4.5% = **+0.45%** (overweight a sector that beat the benchmark). 4. **Tech selection effect:** 0.25 × (15% - 12%) = 0.25 × 3% = **+0.75%*
A collection of Claude Code skill plugins for financial services. 91 skills across 7 domain plugins teach Claude investment management, regulatory compliance, advisory workflows, trading operations, and more — so it can assist with finance questions, build
Other skills on finance-skills.
- /advisor-dashboards
Design, build, and optimize dashboards for RIA practice management with AUM tracking, revenue analytics, and KPI frameworks. Use when the user asks about tracking firm-level metrics, monitoring advisor productivity, measuring organic growth rate, analyzing client retention and
Open skill - /client-onboarding
Design and implement end-to-end client onboarding workflows from prospect intake through funded account, covering KYC verification, document collection, e-signature, and custodian submission. Use when the user asks about building a digital onboarding flow, integrating identity
Open skill - /client-reporting-delivery
Design, generate, and deliver client performance reports across all channels, covering quarterly reports, tax reporting, portal integration, and compliance review. Use when the user asks about building or redesigning report templates, choosing what to include in quarterly or
Open skill - /client-review-prep
Prepare advisors for client review meetings by assembling context packages, performance summaries, drift analysis, talking points, and meeting agendas. Use when the user asks about preparing for a client review, building a pre-meeting checklist, generating talking points for an
Open skill - /crm-client-lifecycle
Design and optimize CRM systems and client lifecycle workflows for advisory firms, covering segmentation, household management, service tiers, and retention analytics. Use when the user asks about client segmentation models, building household structures, defining service tier
Open skill - /fee-billing
Build and manage advisory fee billing operations from fee schedule design through calculation, collection, revenue recognition, and compliance disclosure. Use when the user asks about tiered or breakpoint fee schedules, billing cycle configuration, AUM valuation for billing,
Open skill

