The Analyst's Path

Phase 12Finance Plus, AI and the quant-code trackFinance trackAA1.0318,799 words1 h 44 min of readingabout 18 hours of study9 concept pagesfree

Performance Measurement, Attribution & GIPS

A manager hands you a single number ("we returned 14.9% last year") and asks you to act on it. Hire, fire, allocate, defend. Almost every instinct you have about that number is wrong, and what follows rebuilds them.

Advertisement

Branch: Asset Allocation & Performance (Finance-Plus ring) · Node AA1.03 · CROWN · ~18 focused hours · Mastery gate ≥ 90%

A manager hands you a single number ("we returned 14.9% last year") and asks you to act on it. Hire, fire, allocate, defend. Almost every instinct you have about that number is wrong, and what follows rebuilds them. The 14.9% might be the manager's return and not the client's. It might be measured against a benchmark that quietly hands the manager a 1.3-point head start every year. It might come from taking half again the index's market risk and calling the difference skill. It might be an average of the strategies that survived. Every one of those distortions is invisible in the number itself, which is why performance measurement is a discipline and not an arithmetic chore.

This Ring is additive institutional/CFA breadth: it presents the toolkit and the plumbing alongside, not in place of, the program's process-over-P&L, concentration-over-diversification philosophy. Nowhere is that "alongside, not in place of" more important than here. The program's spine says results are evidence about a process, never a substitute for one, and Phase 9 spent four modules teaching you why. What follows does not overturn that; it gives you the institutional grammar in which results are stated, decomposed, risk-adjusted and audited, so that when a number is put in front of you, you can take it apart and see whether there is a process underneath. Attribution is not a scoreboard. It is a lie detector.

Advertisement

A performance number is a claim with four hidden joints: whose return (time- versus money-weighted), against what (benchmark validity), from where (allocation versus selection versus interaction), and at what risk (five ratios that routinely disagree). A GIPS composite presentation is the industry's attempt to force all four joints into the open.

Where it sits. AA1.01 built the frontier and the strategic/tactical split; AA1.02 blended views and budgeted risk. Those two modules decide what the portfolio should hold. This one is the feedback loop: it measures what holding it actually produced, splits the result into decisions you can hold someone accountable for, and states the reporting standard that makes the split honest. It is the crown of the branch because everything before it is a plan and this is the audit.

Suggested hour budget. Core content 6h · worked examples 3h · practice set 4h · mini-project 3h · flashcards and mastery check 2h.

Case Lab: Attribution Night: Brinson on a Balanced Fund (CL-AA.2) runs the Brinson decomposition on a full balanced-fund exhibit under time pressure. Open it after Worked Example 3.


Learning objectives

You can:

  1. Compute a time-weighted return (TWR) by chain-linking sub-period returns, state precisely what it measures (the return on one unit of currency left in the manager's hands throughout) and explain why external cash flows must be excluded rather than averaged away.
  2. Compute a money-weighted return (MWR) as an internal rate of return on the same cash-flow series, solve it by interpolation to a stated tolerance, annualise it correctly, and explain why it answers a different question than TWR: the investor's question, not the manager's.
  3. Compute a Modified Dietz return with day-weighted flows, say exactly what approximation it makes, and name the conditions under which it drifts from the true MWR.
  4. Decide which measure is required in a given situation, including the case where the manager controls the timing of the flows, which reverses the default.
  5. Run a full Brinson decomposition of active return into allocation, selection and interaction, sector by sector, and demonstrate that the three effects sum exactly to the active return: an identity, not an approximation.
  6. Distinguish Brinson-Hood-Beebower from Brinson-Fachler allocation, compute both on the same data, and explain why measuring a sector bet against the total benchmark return is the economically meaningful convention.
  7. Explain why single-period attribution effects do not add across periods, quantify the residual, and apply a Cariño-style smoothing coefficient that makes multi-period effects reconcile exactly to the compounded active return.
  8. Compute all five standard risk-adjusted measures (Sharpe, Treynor, Information Ratio, M², and Jensen's alpha) from one return series, and read their disagreement as information about what kind of risk the manager took.
  9. Test a benchmark for validity against the seven properties, decompose total active return into true active and misfit components, and quantify a benchmark defect (the India PRI-versus-TRI case) in basis points.
  10. Read a GIPS-compliant composite presentation line by line (verifying net from gross, recomputing the annualised figures, checking internal dispersion) and state which claims the presentation supports, which it does not, and which it deliberately leaves unverifiable.
  11. (Productivity objective: R10.) Reproduce every computation above in Python/pandas, know the two library defaults that silently change your answer, and use an AI assistant to draft and cross-check attribution code, while retaining the by-hand skill that the gate rewards and the verification step that no tool removes.

The duality, stated once (R10). The gated skill is the arithmetic done by hand: a chain-link, an IRR, a three-term decomposition that reconciles to the last decimal. The productivity payoff is doing it in fifteen lines of pandas over a thousand portfolios. But be warned in the strongest terms this program uses: performance attribution is the highest AI-over-trust risk region in the entire corpus. An assistant will produce a fluent, correctly formatted attribution table that does not reconcile to the active return; unlike a hallucinated citation, nothing about it looks wrong. There is no red squiggle under a wrong interaction term. The only defence is the reconciliation identity you are about to learn to run by hand, every time, on every table, no exceptions.


Prerequisites & connections

Builds on. M3.02 supplies the entire risk-pricing apparatus used here without re-deriving it: expected return and standard deviation, covariance, beta as covariance-with-the-market over market variance, the CAPM security market line, and the equity risk premium. When §7 computes Jensen's alpha as the gap between a realised return and the SML-required return, that SML is M3.02's. Go back there if Re = Rf + β × ERP is not automatic. M3.03 supplies the discount-rate machinery behind every IRR here. M3.01 supplies present value and the internal-rate-of-return solve; the MWR in §2 is an XIRR, nothing more. M9.01 and M9.02 supply the concentrated-investor lens that keeps what follows honest: they argue that tracking error is a feature of a high-conviction book and that risk is permanent capital loss rather than benchmark-relative wobble. Read what follows as the institutional dialect, not a replacement for that view. AA1.01 supplies the benchmark-as-policy-portfolio idea; AA1.02 supplies component risk contribution, which is the risk-side twin of the return attribution taught here. QM1.02 supplies the regression discipline behind style analysis and factor attribution.

Feeds forward. ES1.02 owns the GIPS standard in full: every provision, the input/calculation/composite/disclosure/presentation/advertising sections, verification, error correction, and the SEC/SEBI/FCA regulatory map. What follows carries only the performance-measurement basics of GIPS: why the standard mandates time-weighted returns, how composite construction shapes the number you read, and how to read a compliant presentation's numeric columns. Where you feel the standard itself starting (a question about what must be disclosed, who may claim compliance, what verification certifies), stop and go to ES1.02. That seam is deliberate and what follows will point at it three more times. PW1.02 owns fund economics: commitments, calls, the J-curve, DPI/RVPI/TVPI, fees and carry. §2 borrows exactly one idea from it (that a since-inception IRR is the required measure when the manager controls the timing) and hands the rest straight over. EC1.02 consumes §9's benchmark-validity work when it builds index construction and reconstitution mechanics. And the quant-code region's Data & Machine Learning branch takes the vectorised implementation of everything here.


Core teaching content

1. What a performance number is actually claiming

Start with a deliberately trivial-looking portfolio. It begins the year at ₹2,00,00,000 and ends at ₹5,14,70,501, and along the way the client put in ₹3,00,00,000, took out ₹40,00,000, and put in another ₹20,00,000. What was the return?

End minus beginning over beginning gives 157.4%: nonsense, because most of the ending value was deposited, not earned. Count only the gain, EMV − BMV − net flows = ₹34,70,501, over the beginning value, and you get 17.35%: still wrong, because that gain was earned on an average balance far larger than ₹2 crore. Two defensible answers exist, 14.94% and 8.51%, computed from identical data, and both are correct. They answer different questions.

That is the first fact of performance measurement: a return is not a property of a portfolio. It is the answer to a question you have to specify. Specify it badly and you will fire a good manager, or keep a bad one, on arithmetic that was never in dispute.

Four specifications hide inside any performance claim, and what follows takes them in order:

  1. Whose return? The manager's, immune to flows she did not control, or the investor's, which must not be, because when money arrives largely determines what an investor earns. (§2–§3.)
  2. Against what? A return is always implicitly relative to something. Which something, and is it legitimate? (§9.)
  3. From where? If the portfolio beat the benchmark by 2.35 points, which decisions produced them: the choice of where to be, or of what to hold within it? (§4–§6.)
  4. At what risk? Two managers with identical returns are not equivalent if one took half again the market's volatility. Five ratios answer this and routinely disagree; the disagreement is the signal. (§7–§8.)

Then §10–§11 add the institutional question: who may show you this, under what rules? That is GIPS.

Time-weighted vs money-weighted return

Time-weighted return (TWR) measures what one unit of money in the portfolio earned over the whole period, ignoring the size and timing of cash flows, so it judges the manager. Money-weighted return (MWR) is the internal rate of return on the investor's actual cash flows, so it reflects when money went in and out. They answer different questions, so a TWR should never be compared with an MWR.

5 min read, on its own page

3. Where the number actually comes from: valuation, flows, and conventions

Before any formula, the plumbing. Every return above depends on three inputs an analyst rarely sees and should always interrogate.

The first is valuation frequency. TWR is exact only if the portfolio is valued at every external flow. Value monthly, treat a mid-month ₹3 crore contribution as month-end, and you have silently converted an exact TWR into an approximation whose error grows with flow size and intra-period volatility. GIPS tightened here over time: monthly valuation, then valuation on the date of all large flows, then valuation on the date of all cash flows for periods beginning on or after 1 January 2010, with a firm-defined large-flow policy documented in advance. Ask any manager: on what dates do you strike a valuation, and what is your large-flow threshold?

The second is trade-date versus settlement-date, and with it accrual accounting. Settlement-date records misstate exposure for the settlement lag, and accrued interest omitted from a bond portfolio's market value understates the base and overstates the return. GIPS requires trade-date accounting and accrual of fixed-income interest. This is back-office trivia, until two "identical" mandates differ by 20 basis points for no investment reason.

The third is the fee basis. A gross-of-fees return is before management fees but after trading costs, because trading costs are inseparable from the investment decision while the fee is a negotiated commercial term. Net-of-fees deducts the management fee too. The gap is not a rounding item: in §11's composite it runs 67 to 95 basis points a year, and over ten years a 0.75% fee turns a 115.9% cumulative gross into 100.2% net: 15.7 points of cumulative return existing only in the gross column. The first question about any quoted return is gross or net of what, exactly?

Last, annualisation. Multiplying a quarterly return by four is arithmetic; compounding it, (1 + rq)⁴ − 1, is geometric. On our twelve-quarter series that is 10.80% versus 10.38%: a 42-basis-point gap that is pure convention. Use geometric to report what happened to capital, arithmetic when the number feeds an expected-return model. And the hard rule GIPS makes explicit: returns for periods of less than one year must never be annualised. A fund up 9% in four months does not have a 28% annual return; saying so is marketing, not measurement.

Brinson attribution

Brinson attribution splits a portfolio's active return, its return minus the benchmark's, into the effect of how it weighted each segment and the effect of which securities it picked inside them, plus a cross-term for the two together. The pieces sum to the active return exactly, with no residual, so any attribution table that fails to tie out has an error in it.

3 min read, on its own page

Brinson-Fachler attribution

Brinson-Fachler attribution is a version of Brinson attribution that scores each allocation bet against the benchmark's total return instead of the segment's own return. Over-weighting an out-performing segment, or under-weighting an under-performing one, scores positive; anything else scores negative. The allocation total is identical to the original method's, so the choice changes only the story told about individual segments, which matters when a manager is judged segment by segment.

2 min read, on its own page

Multi-period return attribution

Multi-period return attribution links single-period attribution effects so that they add up to the active return over the whole stretch. Effects add within a period but returns compound across periods, so a simple sum of the effects misstates the true active return, by more as periods and returns grow. The standard fix is logarithmic smoothing, which scales each period's effects so that the total reconciles exactly.

3 min read, on its own page

Fixed income attribution

Fixed income attribution explains a bond portfolio's active return with four effects built from the market variables that drive a bond's return: yield and carry, a parallel shift in the curve, a reshaping of the curve, and spread and selection. The four effects sum to the active return with no residual. A companion calculation shows where the active risk sits, which can differ from where the active return came from.

7 min read, on its own page

Risk-adjusted performance measures

Risk-adjusted performance measures judge a return by the risk taken to earn it. The five standard measures put an excess return over different measures of risk, such as total volatility or beta, so each assumes something different about what counts as risk. The right one depends on whether the portfolio is the investor's whole holding or one sleeve of a larger one, and the five can give opposite verdicts on the same record.

4 min read, on its own page

Sharpe ratio vs information ratio

Sharpe ratio vs information ratio compares two risk-adjusted measures that answer different questions. The Sharpe ratio gives excess return per unit of total risk, while the information ratio gives active return per unit of tracking error against a benchmark. They can disagree about the same manager, and the pattern of disagreement is diagnostic: a low Sharpe with a high information ratio, for example, means the manager adds value against a benchmark that is itself a volatile place to be, so the policy allocation is what to re-examine.

3 min read, on its own page

Characteristics of a valid benchmark

A valid benchmark passes Bailey, Richards and Tierney's seven properties, from being specified in advance to being investable. A benchmark you cannot buy is no alternative to the portfolio, so beating it proves nothing, and every risk-adjusted measure built on an invalid benchmark is decoration. Peer-group medians fail several of the tests, and comparing a fund's total return with a price return index hands the manager the dividend yield as free alpha.

4 min read, on its own page

10. GIPS basics for performance measurement: and the seam

The Global Investment Performance Standards exist because of everything in §1 through §9. If a firm may choose its own return methodology, its own set of portfolios, its own benchmark and its own window, "past performance" is a marketing artefact. GIPS is a voluntary ethical standard (administered by CFA Institute, adopted by regulators and asset owners worldwide) that removes those choices.

What follows carries only the parts that determine the number you read. The standard itself belongs to ES1.02. The performance-measurement core:

  • Compliance is firm-wide; there is no partial compliance. A firm may not claim compliance for one flattering composite. The firm must be defined as a distinct business entity, and that definition drives everything downstream.
  • A composite aggregates portfolios managed to a similar mandate, objective or strategy; all actual, fee-paying, discretionary portfolios must sit in at least one composite. This is the anti-cherry-picking provision and the single most important thing GIPS does: without it a firm shows its five best accounts; with it, the winners drag the losers along.
  • Composite returns are asset-weighted. Two portfolios of ₹300 and ₹700 returning 9% and 5% make a 6.2% composite, not 7.0%. Equal weighting would let a tiny brilliant account carry a large mediocre one.
  • Time-weighted returns are required for composite reporting (§2's reason); money-weighted returns are required in the closed-end/controlled-flow case.
  • Composites are defined in advance, portfolios may not move between them retroactively, and terminated portfolios stay in through their last full measurement period, which is what stops a firm deleting its failures.
  • At least five years of annual performance must be shown (or since inception), building to ten.
  • The 2020 edition reorganised the standards into provisions for firms, asset owners and verifiers and introduced GIPS Composite Reports and Pooled Fund Reports. Verify the current edition and its effective dates at gipsstandards.org before relying on any provision.
  • Verification is firm-wide, independent, voluntary and limited. It tests whether the firm's policies and procedures comply; it does not certify any particular composite's numbers. That narrower assurance is a separate performance examination. A firm must disclose whether it has been verified, and "GIPS certified" is not a thing that exists.

The seam runs here. Questions about what must be disclosed and why, the full provision structure, error correction, portability, advertising guidelines, or how GIPS sits alongside the SEC Marketing Rule, SEBI's regime and the FCA's rules are ES1.02's, and here the discussion deliberately stops. What you own here is narrower and sharper: you can read a compliant presentation and audit its arithmetic.

GIPS composite presentation

A compliant presentation is a table plus disclosures, and analysts skim the table and ignore the disclosures, which is backwards. A GIPS composite presentation reports a strategy's gross and net returns year by year, with the benchmark's return, the number of portfolios and a measure of how widely their returns varied. It cannot show intra-year drawdown or the investors' own money-weighted experience, and compliance is a claim about process, so even the most rigorously compliant presentation can document five years of underperformance.

3 min read, on its own page

12. The verification law: stated here because this is where it is most needed

Every region of this program says verify. This one says it loudest, for a structural reason.

A hallucinated citation collapses the moment someone opens the filing. A wrong attribution table does not collapse. It has the right columns, plausible magnitudes, sensible signs, and a total that looks like an active return. Generative tools produce exactly this artefact fluently. So do spreadsheets built by tired humans at 11pm. Here the failure mode is credible nonsense that survives three levels of review.

Guardrail 1–5 (Trace, Match, Recompute, Date-check, Cite), or "check the sources," applies to every input here as everywhere else. The discipline layered on top of it is a mechanical, non-negotiable set of reconciliations run on any performance output before you read it, whoever or whatever produced it:

  1. Do allocation + selection + interaction equal the active return, exactly? Not approximately. If there is a residual, either the weights do not sum to one on both sides, cash is unhandled, or a segment is missing.
  2. Do the segment weights sum to 1.0000 on both the portfolio and the benchmark side?
  3. Does the chain-linked sub-period return equal the reported period return?
  4. Does the multi-period attribution total equal the compounded active return, and which linking algorithm made it do so?
  5. Do gross and net reconcile through the stated fee schedule?
  6. Is the benchmark the same kind of return as the portfolio: total versus price, gross versus net, same currency, same period-end?

Six checks, five minutes, and they catch essentially every error this region produces. The by-hand skill is gated for exactly this reason: you cannot audit a machine's output with a machine you also cannot audit.

{
  "skill": "Building and cross-checking a Brinson attribution table",
  "use": "Have an assistant write the pandas/NumPy code for a holdings-based Brinson-Fachler decomposition from your weights-and-returns table, and have it produce a second, independent implementation (e.g. an explicit loop and a vectorised version) so the two can be diffed against each other before either is trusted.",
  "tools": ["Chat assistants with code execution - Claude, ChatGPT, Gemini", "Python: pandas + NumPy (groupby, vectorised arithmetic)", "Jupyter or a spreadsheet for the side-by-side reconciliation"],
  "prompt": "Here is a table of segment names, portfolio weights, benchmark weights, portfolio segment returns and benchmark segment returns. Write Python that computes (a) total portfolio and benchmark return, (b) Brinson-Hood-Beebower allocation, selection and interaction per segment, (c) Brinson-Fachler allocation per segment, and (d) an explicit assertion that allocation + selection + interaction equals the active return to within 1e-10. Do not round intermediate values. Then state which convention you used for interaction and why.",
  "verify": "Recompute at least two segments by hand and confirm the reconciliation assertion actually fires on bad input (feed it weights that sum to 0.98 and check it fails). Trace every input weight and return to the primary source - the fund's holdings file or factsheet and the index provider's own sector data - and Match the period-end dates, the currency, and total-versus-price return on BOTH sides before comparing. Recompute the totals independently; Date-check the holdings snapshot against the return window; Cite the file and page for each input (Guardrail 1-5). An attribution table that does not reconcile exactly is not a rounding issue - it is a wrong table.",
  "diy": "You must be able to run the three-term decomposition and the reconciliation on a five-sector table with a calculator - that is the gated skill and Worked Example 2 is the drill. AI writes the loop; it cannot tell you that a -0.24 allocation effect on a market-performing sector is an artefact of the BHB convention rather than a manager error. That judgement is Section 5, and it is yours.",
  "market": "US"
}
{
  "skill": "Auditing a GIPS composite presentation you have been handed",
  "use": "Use an assistant to turn a PDF composite report into a structured table fast, then to generate the arithmetic checks - net-from-gross, cumulative-to-annualised, composite-as-percent-of-firm - that you then run and confirm yourself.",
  "tools": ["Document/PDF AI grounded on the composite report you already hold", "Chat assistants with code execution for the recomputation", "gipsstandards.org and the firm's own disclosures as the primary sources"],
  "prompt": "From this composite presentation, extract into a table: year, gross return, net return, benchmark return, number of portfolios, internal dispersion, composite assets, firm assets, and the 3-year ex-post standard deviations. Then list every arithmetic relationship among those columns that I can independently verify, and every figure in the table that I cannot verify without data the presentation does not contain. Quote the fee schedule disclosure verbatim.",
  "verify": "Do not accept the extracted table - Trace every row back to the PDF yourself, because document AI misreads columns in dense financial tables and a transposed row is invisible downstream. Match the fee basis, currency and period definition to the firm's own disclosure language. Recompute net from gross and the annualised figures by hand. Date-check the presentation's period against the claim being made. Cite the report and page (Guardrail 1-5). For any question about what the standard REQUIRES rather than what this table SAYS, go to ES1.02 and the primary text at gipsstandards.org - never to the model's recollection of a standard.",
  "diy": "You must be able to state why GIPS mandates time-weighted returns, why every fee-paying discretionary portfolio must sit in a composite, and what verification does and does not certify - Sections 10 and 11. Without that, you will extract the table correctly and still misread what it means.",
  "market": "US"
}

Common mistakes & how experts think differently

  1. Comparing a time-weighted return to a money-weighted one. The commonest error in the field, and it is a category error rather than an arithmetic one. A manager's TWR of 14.94% and her client's MWR of 8.51% are both correct descriptions of the same year. The expert's reflex on seeing any return is to ask which one is this before asking whether it is good, and to present both, side by side, when reporting to a client who made large flows, because the gap between them is the single most useful conversation an adviser can have.
  1. Treating attribution effects as a manager's scorecard rather than a hypothesis generator. A +1.40 allocation effect is not proof of macro skill; it is one year of one decision, statistically indistinguishable from luck. The expert uses attribution to ask is this manager doing what she says she does? A top-down manager whose value is all selection, or a stock-picker whose value is all allocation, has a process-consistency problem, and that is a far more actionable finding than the sign of any single effect. The program's spine (process over P&L) and the institutional toolkit meet at exactly that point: attribution is at its best as evidence about a process.
  1. Reporting an attribution table that does not reconcile. A residual line labelled "other" or "trading" is a confession. Every genuine decomposition is an algebraic identity; a residual means cash is unhandled, weights do not sum to one, a segment is missing, or periods were added rather than linked. Experts refuse to present a table until it ties, and they check the tie first, before reading a single effect.
  1. Believing interaction is a decision someone made. It is the arithmetic cross-term of two other decisions. Experts fold it into selection using portfolio weights and say so, or report it separately as concentration-of-conviction, never as a third line of "skill" in a client report.
  1. Using BHB allocation and then telling a story about it. Under BHB, under-weighting a sector that returned +6% in a +5.88% market scores −0.24: a penalty for a decision worth essentially nothing. Under Brinson-Fachler it scores −0.0048. Experts default to Brinson-Fachler precisely because the narrative they will be asked to give must survive the question "so was that a good call or not?"
  1. Adding attribution effects across periods. Returns compound; effects do not. Our two half-years sum naively to +1.40 against a true compounded active return of +1.314: an 8.6-basis-point residual from just two periods. The expert knows which linking algorithm her system uses and can say so out loud.
  1. Ranking managers on a single risk-adjusted measure. Sharpe, Treynor, IR, M² and Jensen answer different questions and, as §8 shows, routinely disagree about the same manager. Experts read the pattern, and they know which measure the mandate implies: Sharpe for a whole portfolio, Treynor or Jensen for a sleeve inside a diversified whole, IR for a benchmark-relative mandate.
  1. Forgetting that ratios are blind to leverage. Double every position at the risk-free rate and Sharpe and Treynor do not move at all, while Jensen's alpha exactly doubles. Anyone ranking on alpha without normalising for leverage is ranking on borrowing capacity.
  1. Accepting the benchmark. The most consequential and least examined choice in the whole exercise. Experts run the seven properties before the arithmetic, look hardest at specified in advance and investable, and check that both sides of the subtraction are the same kind of return: the PRI-versus-TRI defect handed Indian funds up to 87% of their apparent alpha for free until SEBI closed it in 2018.
  1. Reading "GIPS compliant" as "good." Compliance is a statement about process integrity: that the firm did not cherry-pick portfolios, did not choose a flattering methodology, and did not delete its failures. It says nothing whatsoever about investment merit, and a rigorously compliant presentation can document a decade of underperformance. Relatedly: verification tests policies firm-wide, not the accuracy of any single composite, and "GIPS certified" is not a thing that exists.
  1. Comparing gross-of-fees returns to a benchmark and calling the difference value added. The client receives net. In §11's composite, five-year annualised gross beats the benchmark by 60 basis points and net trails it by 35: the entire investment case lives inside the fee. Experts insist on net for any decision that involves a client's money.
  1. Annualising a short period. A 9% return over four months is not 28% a year, and GIPS forbids saying so. The expert states the period and refuses the extrapolation.
  1. Trusting a plausible attribution table because it looks right. The failure mode of this entire region is credible error, not obvious error, from a spreadsheet, a vendor system, or an AI assistant equally. Experts run the six reconciliations of §12 mechanically, on every table, before forming any opinion at all. It costs five minutes and it is the difference between an analyst and a transcriber.

Worked examples

Worked example 1: TWR, MWR and Modified Dietz on one cash-flow series (India, ₹)

The Deccan Multi-Cap Portfolio (synthetic) is managed for a client over the year 1 April 2025 to 31 March 2026. Valuations are struck on each cash-flow date, before the flow.

DateMarket value before flow (₹)External flow (₹)Value after flow (₹)
1 Apr 2025N/AN/A2,00,00,000
30 Jun 20252,24,00,000+3,00,00,0005,24,00,000
30 Sep 20254,92,56,000−40,00,0004,52,56,000
31 Dec 20254,79,71,360+20,00,0004,99,71,360
31 Mar 20265,14,70,501N/AN/A

Solution. Step 1: sub-period returns. Each is the value before the flow over the value after the previous flow: 2,24,00,000 / 2,00,00,000 − 1 = +12.0000%; 4,92,56,000 / 5,24,00,000 − 1 = −6.0000%; 4,79,71,360 / 4,52,56,000 − 1 = +6.0000%; 5,14,70,501 / 4,99,71,360 − 1 = +3.0000%.

Step 2: TWR. Chain-link: 1.12 × 0.94 × 1.06 × 1.03 = 1.1494470, so TWR = +14.9447%. Nothing about the ₹3 crore contribution appears anywhere in that calculation, which is the entire design.

Step 3: MWR. Build the investor's cash-flow vector at quarterly spacing, signed from the investor's side (money in is negative): t=0: −2,00,00,000, t=1: −3,00,00,000, t=2: +40,00,000, t=3: −20,00,000, t=4: +5,14,70,501 (the terminal value, treated as a liquidating inflow). Solve Σ CFₜ /(1+r)ᵗ = 0. Bracket it: at r = 0% the sum is +34,70,501 (positive), at r = 5% it is negative, so the root lies between. Converging gives a quarterly IRR of 2.0622%, and annualising geometrically, (1.020622)⁴ − 1 = MWR = +8.5073%.

Step 4: Modified Dietz. The period runs 364 days. Weights are w = (364 − d)/364: the +₹3,00,00,000 on day 90 gets 0.752747, the −₹40,00,000 on day 182 gets 0.500000, the +₹20,00,000 on day 274 gets 0.247253. Weighted flows sum to +225.8242 − 20.0000 + 4.9451 = +210.7692 lakh, so average invested capital is 200.0000 + 210.7692 = ₹410.7692 lakh. The gain is 514.70501 − 200.00000 − 280.00000 = ₹34.70501 lakh. So Modified Dietz = 34.70501 / 410.7692 = +8.4488%.

Read it. Three defensible numbers (14.94%, 8.51%, 8.45%) from one indisputable data set. The 6.44-point TWR-minus-MWR gap is pure timing: ₹3 crore landed on 30 June and the next quarter fell 6%, so the largest balance of the year sat through the worst quarter of the year. The manager did not choose that. Modified Dietz lands 6 basis points from the true IRR even though the flow was 150% of opening value: a good showing for a linear approximation, and a reminder of why it survived for decades. What you report depends on who you are talking to: the manager's committee gets 14.94%, the client gets 8.51%, and an adviser who shows only one of them has chosen a side.

Worked example 2: A full Brinson decomposition that sums exactly to active return (US, $)

The Cascadia Core Equity Fund (synthetic) is a US large-cap mandate benchmarked to a five-sector index. One year of data:

SectorBench weightPort weightBench returnPort return
Information Technology30%38%+14.0%+16.5%
Financials22%18%+6.0%+5.0%
Health Care18%20%+2.0%+3.5%
Energy10%4%−8.0%−6.0%
Consumer Staples20%20%+4.0%+3.0%

Solution. Step 0: the check before the work. Both weight columns sum to 100%. If they did not, stop; nothing below is valid.

Step 1: totals. RB = 0.30(14) + 0.22(6) + 0.18(2) + 0.10(−8) + 0.20(4) = 4.20 + 1.32 + 0.36 − 0.80 + 0.80 = **5.88%**. RP = 0.38(16.5) + 0.18(5) + 0.20(3.5) + 0.04(−6) + 0.20(3) = 6.27 + 0.90 + 0.70 − 0.24 + 0.60 = **8.23%**. Active return = +2.35%.

Step 2: the three effects, sector by sector. Allocation (wP − wB) × rB, selection wB × (rP − rB), interaction (wP − wB) × (rP − rB):

SectorAllocationSelectionInteractionTotal
Information Technology+1.1200+0.7500+0.2000+2.0700
Financials−0.2400−0.2200+0.0400−0.4200
Health Care+0.0400+0.2700+0.0300+0.3400
Energy+0.4800+0.2000−0.1200+0.5600
Consumer Staples0.0000−0.20000.0000−0.2000
Total+1.4000+0.8000+0.1500+2.3500

Step 3: reconcile. 1.4000 + 0.8000 + 0.1500 = 2.3500 = RP − RB exactly. This is not a coincidence or a rounding success; it is the identity, and if it fails the table is wrong.

Step 4: read it. Sixty percent of the value added was allocation: 8 points over-weight in the best sector (+1.12) and 6 points under-weight in the worst (+0.48). Selection added +0.80, concentrated in IT (+0.75) and Health Care (+0.27) and offset by weak picks in Financials and Staples. Interaction is +0.15, almost all of it IT: she was over-weight the sector where she also picked well, which is what conviction looks like when it works. The two-factor presentation folds interaction into selection using portfolio weights: selection becomes Σ wP(rP − rB) = +0.95, which is exactly 0.80 + 0.15, and the total is unchanged.

The sting. Notice what the headline "+2.35% vs benchmark" concealed. This is a sector-rotation product wearing a stock-picking label. If the mandate was sold as bottom-up fundamental research, the attribution has just raised a process-consistency question that no return number could have raised, and that question, not the +2.35, is the finding.

Worked example 3: Brinson-Fachler on the same data: the allocation story changes, the total does not

Same portfolio, same year. Compute allocation as (wP − wB) × (rB − RB) with RB = 5.88%.

Solution. Step 1: the relative sector returns. IT 14.00 − 5.88 = +8.12; Financials +0.12; Health Care −3.88; Energy −13.88; Staples −1.88.

Step 2: allocation effects.

Sector(wP − wB)(rB − RB)BF allocationBHB allocation
Information Technology+0.08+8.12+0.6496+1.1200
Financials−0.04+0.12−0.0048−0.2400
Health Care+0.02−3.88−0.0776+0.0400
Energy−0.06−13.88+0.8328+0.4800
Consumer Staples0.00−1.880.00000.0000
Total0.00+1.4000+1.4000

Step 3: why the totals match. The two definitions differ by Σ (wP − wB) × RB = RB × Σ (wP − wB), and both weight vectors sum to 1, so Σ (wP − wB) = 0 and the difference is identically zero. Confirmed above: +1.4000 both ways. Add selection +0.80 and interaction +0.15 and Brinson-Fachler reconciles to +2.35 exactly, as BHB did.

Step 4: read the difference. Four of the five sector stories changed materially. Under BHB, being under-weight Financials cost 24 basis points; under BF it cost half a basis point: the honest answer, because Financials returned 6.0% against a 5.88% index and that decision was worth almost nothing. Under BHB, the Energy under-weight earned 48 basis points; under BF it earned 83, because the true size of the bet was a 13.88-point relative call, not an 8-point absolute one. Under BHB, over-weighting Health Care looks mildly positive (+0.04); under BF it is correctly negative (−0.0776), because Health Care lagged the index by 3.88 points and she owned more of it.

Read it. The lesson is uncomfortable and worth internalising: the total is convention-free and the story is not. Two analysts can run correct decompositions on identical data and hand a committee opposite narratives about which decisions worked. Always say which convention you used, and prefer the one whose sign has an economic meaning you can defend out loud.

Worked example 4: All five risk-adjusted measures from one twelve-quarter table

The Cascadia fund's quarterly gross returns and its benchmark's, over three years. The risk-free rate is 1.00% per quarter throughout.

Quarter123456789101112
Portfolio7.4−4.38.10.6−8.911.52.8−1.96.59.8−5.66.4
Benchmark5.0−2.47.11.6−6.28.03.9−0.54.47.6−4.02.9
Active2.4−1.91.0−1.0−2.73.5−1.1−1.42.12.2−1.63.5

Solution. Step 1: quarterly statistics. Portfolio returns sum to 32.4, so the mean is 2.700% per quarter; the benchmark sums to 27.4, mean 2.28333%; actives sum to 5.0, mean 0.41667%. Sample standard deviations (n − 1 in the denominator): portfolio 6.6419%, benchmark 4.6768%, active (this is tracking error) 2.2574%. Covariance Σ(rP − r̄P)(rB − r̄B)/(n−1) = 30.4455; benchmark variance = 21.8724; so β = 30.4455 / 21.8724 = 1.3920 and the correlation is 0.980.

Step 2: annualise, and say how. Arithmetic means × 4; standard deviations × √4 = 2. Portfolio 10.80%, benchmark 9.1333%, risk-free 4.00%, σP 13.2838%, σB 9.3536%, tracking error 4.5149%, active return 1.6667%. (For reference, the geometric annualised returns from compounding all twelve quarters are 10.379% and 9.026%: a 42-basis-point convention gap on the portfolio.)

Step 3: the five.

  1. Sharpe = (10.80 − 4.00) / 13.2838 = 0.5119. Benchmark: (9.1333 − 4.00) / 9.3536 = 0.5488.
  2. Treynor = (10.80 − 4.00) / 1.3920 = 4.885%. Benchmark, with β ≡ 1: 5.133%.
  3. Jensen's alpha = 10.80 − [4.00 + 1.3920 × (9.1333 − 4.00)] = 10.80 − 11.1454 = −0.345%.
  4. Information ratio = 1.6667 / 4.5149 = 0.3691. (Equivalently, the quarterly mean active over the quarterly active standard deviation, 0.41667 / 2.2574 = 0.1846, times √4.)
  5. M² = 4.00 + 0.5119 × 9.3536 = 8.788%, so M²-alpha = 8.788 − 9.1333 = −0.345 points.

Step 4: read the disagreement. The fund out-returned its benchmark by 1.67 points a year and lost on four of the five measures. The reason is one number: β = 1.392. At that systematic exposure the security market line demanded 11.15% and the fund produced 10.80%. Sharpe and M² say the same thing from the total-risk side, Treynor and Jensen from the beta side. M²-alpha equals Jensen's alpha here to three decimals, which is a coincidence of this data set rather than an identity: M² is a monotone transform of Sharpe, so it can never rank differently from Sharpe, but it is not Jensen. The IR of 0.369 is the one honest positive: she generated active return with reasonable consistency. A professional writes a careful verdict: this is a high-beta expression of the benchmark that has added modest, consistent active return and has not yet been paid for its systematic risk (appropriate as a satellite sleeve, inappropriate as a core holding), and the beta must be disclosed to whoever is sizing it.

Worked example 5: Reading a GIPS composite presentation, line by line (US, $)

Northfield Asset Management (synthetic) presents its US Large-Cap Value Composite, claiming compliance with the GIPS standards. Fee schedule as disclosed: a model management fee of 0.75% per annum, deducted quarterly. All figures in USD.

YearGross returnNet returnBenchmark3-yr σ composite3-yr σ benchmark# portfoliosInternal dispersionComposite assets ($M)Firm assets ($M)
202126.40%25.45%25.16%n/an/a4n/a ≤53122,140
2022−9.85%−10.52%−7.54%n/an/a5n/a ≤53882,265
202311.77%10.94%11.51%14.9%10.6%60.61%4552,610
20242.44%1.67%4.73%14.1%10.1%60.38%6043,015
202517.45%16.58%10.97%13.28%9.35%80.46%8243,480

Solution. Step 1: reconcile net to gross, which is the check almost nobody runs. A 0.75% annual fee charged quarterly is 0.1875% per quarter, so the annual multiplier is (1 − 0.001875)⁴ = 0.9925211. Test 2021: 1.2640 × 0.9925211 − 1 = 25.4547%: matches the disclosed 25.45%. Test 2022: 0.9015 × 0.9925211 − 1 = −10.5242%: matches. Test 2025: 1.174534 × 0.9925211 − 1 on the unrounded gross of 17.4534% gives 16.5750%: matches. The fee drag runs 0.67 points in the down year and 0.95 points in the best year, because a percentage fee on a bigger base costs more.

Step 2: recompute the multi-year figures the table does not show. Compound all five gross returns: 1.2640 × 0.9015 × 1.117738 × 1.024366 × 1.174534 = 1.532405, a five-year cumulative gross of 53.24%, or 1.532405^(1/5) − 1 = 8.912% annualised. Net: cumulative 47.60%, annualised 8.097%. Benchmark: cumulative 49.97%, annualised 8.443%.

Step 3: read the verdict that the annual columns hide. Annualised gross beats the benchmark by +0.47 points. Annualised net trails it by −0.35 points. Every number in the table is accurate and compliant, and the investment case reverses entirely depending on which column you read. A client received the net column. Anyone quoting the gross outperformance in a sales conversation is not lying and is not telling the truth either.

Step 4: verify the internal dispersion you can verify. Eight portfolios were in the composite at the end of 2025, but only six were present for the full year (holding $716M of the composite's $824M; two funded mid-year hold the other $108M). Their full-year returns and beginning assets:

PortfolioReturnAssets ($M)Weightw × rw × (r − r̄)²
117.60%840.1173182.0648040.003042
216.80%1260.1759782.9564250.071848
318.40%580.0810061.4905030.074816
417.20%2120.2960895.0927370.016908
518.00%950.1326822.3882680.041763
617.50%1410.1969273.4462290.000734

Asset-weighted mean = 17.4390%. Asset-weighted standard deviation = √Σ w(r − r̄)² = √0.209111 = 0.4573%, which rounds to the disclosed 0.46%, verified. (Note the equal-weighted alternatives: mean 17.583%, sample standard deviation 0.567%, high-low range 1.60 points. GIPS permits several dispersion measures and requires the firm to disclose which; a firm quoting a range instead of a standard deviation is quoting the widest-looking number, so read the disclosure.)

Step 5: reconcile the composite return against the dispersion sample, and explain the gap. The composite's 2025 gross is 17.4534% while the six full-year portfolios' asset-weighted mean is 17.4390%: a 1.4-basis-point difference. That is not an error: the composite return includes two portfolios funded during the year, which are excluded from the dispersion calculation by design. A gap of a basis point or two is normal; a gap of a point would mean the mid-year money had a very different experience and would be worth a question.

Step 6: list what you cannot verify. The 2023 and 2024 dispersion figures of 0.61% and 0.38% are unverifiable: you have no portfolio-level returns for those years, and a real presentation would not give you the 2025 detail either. The three-year standard deviations are computed by the firm from thirty-six monthly returns; you can sanity-check them but not reproduce them. (For scale: the twelve quarterly returns of Worked Example 4 are this composite's 2023–2025 series, and their annualised standard deviation, quarterly σ × 2, is 13.28% for the composite and 9.35% for the benchmark, which is why those are the 2025 figures in the table. Quarterly and monthly σ are not the same statistic; GIPS specifies monthly.)

Read it. A compliant presentation is an audit trail, not a verdict. It let you catch three things no return quote would have. The fee reverses the five-year verdict. The composite grew from 15% to 24% of firm assets, which makes this a flagship product with all the capacity questions that implies. And the 2025 dispersion of 46 basis points across six accounts means clients genuinely got the same product. What it does not tell you is whether the benchmark is valid (§9), what any client's money-weighted experience was (§2), or whether the firm is any good. Compliance is about process integrity. The full anatomy of the standard, its disclosures and its regulatory neighbours is ES1.02's; what you own now is the arithmetic audit.

Worked example 6: A benchmark defect priced in basis points (India, ₹)

The Sahyadri Bluechip Fund (synthetic) reports a NAV return of 14.6% for the year. Its factsheet from an earlier era showed a Nifty-50-style price return index (PRI) at 13.1%; the corresponding total return index (TRI) returned 14.4%. (Illustrative values: pull the live PRI and TRI series from niftyindices.com.)

Solution. Step 1: identify the mismatch. The fund's NAV return is a total return: dividends received are credited to NAV. The PRI is a price return and ignores dividends entirely. Subtracting one from the other compares unlike quantities.

Step 2: price the defect. Against PRI: 14.6 − 13.1 = +1.50 points of apparent alpha. Against TRI: 14.6 − 14.4 = +0.20. The dividend wedge is 14.4 − 13.1 = 1.30 points, so 86.7% of the reported outperformance was the index's own dividends, handed over for free.

Step 3: compound it. A systematic 1.30-point annual wedge produces (1.013)ⁿ − 1 of phantom cumulative alpha: 3.95% over three years, 6.67% over five, 13.79% over ten. An index-hugging fund could report double-digit cumulative "outperformance" over a decade while adding nothing.

Step 4: the fix and the general rule. SEBI's January 2018 circular required Indian mutual-fund schemes to benchmark against Total Return Indices from 1 February 2018. Read it on sebi.gov.in, not in summary. The rule is bigger than the circular. Before computing a single basis point of alpha, confirm both sides of the subtraction are the same kind of return: total versus price, gross versus net of fees, gross versus net of dividend withholding tax (a real 20–40 basis point issue on cross-border mandates), and the same currency and hedging treatment.

Read it. This is benchmark property #2, appropriate, failing in the least visible way possible. Nothing about "Nifty 50" on a factsheet tells you which variant it is; you have to look. An analyst who checks the index variant before every attribution will catch more false alpha over a career than one who becomes very good at Brinson.

Worked example 7: When money-weighted is the required measure (US, $)

Keystone Buyout Fund IV (synthetic): a closed-end vehicle where the general partner decides when capital is called and when it is returned. Annual cash flows from the limited partner's side, in $ millions: t=0: −20.0 (call), t=1: −15.0, t=2: −10.0, t=3: +8.0, t=4: +22.0, t=5: +34.0, where the final figure is a $12.0M distribution plus a $22.0M residual net asset value.

Solution. Step 1: why not TWR. The GP controls the timing. Stripping the timing out (which is precisely what a time-weighted return does) would remove the decision being evaluated. The GIPS standards require a money-weighted (since-inception internal rate of return) when the firm controls the external cash flows and the strategy has closed-end characteristics: a fixed life, a fixed commitment, or illiquid investments as a significant part of the strategy.

Step 2: solve the IRR. Find r such that Σ CFₜ /(1+r)ᵗ = 0. Bracket it: at 10.00% the NPV is +0.247, at 12.00% it is −2.397, so the root is just above 10%. Converging gives IRR = 10.178%, at which the NPV is zero to ten decimal places. Linear interpolation between the two brackets gives 10 + 2 × 0.247/(0.247 + 2.397) = 10.19%: close enough to sanity-check a solver's answer by hand, which is the point of computing the brackets.

Step 3: the multiples, which the IRR alone cannot tell you. Paid-in capital is 20 + 15 + 10 = $45.0M; distributions are 8 + 22 + 12 = $42.0M; residual NAV is $22.0M. So DPI = 42/45 = 0.93×, RVPI = 22/45 = 0.49×, TVPI = 64/45 = 1.42×.

Step 4: read them together. A 10.18% IRR with a 1.42× TVPI and a DPI still below 1.0× says three things. The fund has not yet returned the money it drew. A third of the reported value is an unrealised mark the GP set. And the IRR is flattered by early distributions relative to a long-dated NAV. An IRR is timing-sensitive and a NAV is an opinion; quoting either without the other is a half-truth. The full apparatus is handed over here and is split across two nodes. PW1.02 owns the J-curve, vintage and selection effects, and the whole fee, carry, hurdle and clawback waterfall. PW1.04 owns the public market equivalent, the several competing constructions of it and what each one answers, which is the measure you reach for when the question is whether this fund beat a listed index rather than whether it beat its own hurdle. What AA1.03 owns is the principle: the measure follows the control of the cash flows.


Worked example 8: Fixed-income attribution on a three-bucket book, tying to zero residual (US, $)

A US aggregate-style mandate is measured over one quarter (Δt = 0.25). Every input is stated here; the exercise is to produce the four effects and prove they sum to the active return.

The book. Three buckets, with the benchmark's and the portfolio's weights, starting yields, effective Treasury durations and spread durations:

BucketwByBTsy dur BSprd dur BwPyPTsy dur PSprd dur P
Short Treasury40%4.20%1.90.025%4.25%2.10.0
Long Treasury20%4.60%16.50.030%4.62%17.20.0
IG Credit40%5.35%6.86.845%5.55%6.57.4

The market over the quarter. A parallel fall of 25 bp. A twist on top of it: the short point +15 bp, the intermediate point −5 bp, the long point −20 bp, so the curve flattened. Investment-grade spreads tightened 18 bp at the index level; the portfolio's own credit holdings tightened 26 bp.

Solution. Step 1, build each bucket's return from the four components. Carry is y × 0.25; the shift effect is −D × (−0.0025); the twist effect is −D × that bucket's twist; the spread effect is −D_spread × Δs. In percentage points:

BucketCarryShiftTwistSpreadBucket return
Short TreasuryB+1.0500+0.4750−0.28500.0000+1.2400
P+1.0625+0.5250−0.31500.0000+1.2725
Long TreasuryB+1.1500+4.1250+3.30000.0000+8.5750
P+1.1550+4.3000+3.44000.0000+8.8950
IG CreditB+1.3375+1.7000+0.3400+1.2240+4.6015
P+1.3875+1.6250+0.3250+1.9240+5.2615

Step 2, aggregate. RB = 0.40(1.2400) + 0.20(8.5750) + 0.40(4.6015) = **4.0516%**. RP = 0.25(1.2725) + 0.30(8.8950) + 0.45(5.2615) = **5.3543%**. Active return is +1.3027 percentage points for the quarter.

Step 3, the four effects. Each is Σᵢ (w_P,i · r_P,i,c − w_B,i · r_B,i,c):

EffectContribution (pp)Of which allocationOf which selection
Yield and carry+0.0515+0.0244+0.0271
Parallel shift (duration)+0.4575+0.4262+0.0312
Curve reshaping (twist)+0.4175+0.3897+0.0277
Spread and selection+0.3762+0.0612+0.3150
Total+1.3027+0.9015+0.4011

The four effects sum to +1.3027, matching the active return to a residual of exactly zero, which is the check that the decomposition is a decomposition and not a set of plausible numbers.

Step 4, read it as a sentence about decisions. The portfolio ran a Treasury duration of 0.25(2.1) + 0.30(17.2) + 0.45(6.5) = **8.6100** years against the benchmark's 0.40(1.9) + 0.20(16.5) + 0.40(6.8) = **6.7800**, an overweight of 1.83 years, and spread duration of 3.3300 against 2.7200, an overweight of 0.61 years. Those two numbers explain the table. The duration overweight collected +0.4262 from the rally and the long-end concentration collected a further +0.3897 from the flattening, and both are allocation effects: bets on the market, correctly taken. The spread line is the mirror image, +0.3150 of its +0.3762 being selection: the manager's credit holdings tightened 26 bp against the index's 18 and carried more spread duration to earn it, which is bond picking rather than a market call. Carry contributed almost nothing at +0.0515, so nobody was paid for sitting still.

Read it. Two-thirds of the quarter's outperformance came from the market moving the way one desk bet it would, and a single quarter cannot distinguish that from luck. The parts of the table that survive as evidence about skill are the small, repeatable ones: +0.3150 of credit selection, and +0.0271 of carry from holding slightly higher-yielding paper within each bucket. Section 6c's risk attribution says the same thing from the other side, and the honest limit is stated there too: this table prices a duration bet exactly and cannot see the within-bucket spread-duration difference at all. Run it for twelve quarters and the selection line becomes a testable claim; run it for one and it is a description.

Practice set

Work each problem fully before reading its solution (write before you peek). A calculator is assumed; numeric answers within ±2% score as correct unless a reconciliation is demanded, in which case it must be exact.

P1 (guided). Chain-linking. A portfolio's four quarterly sub-period returns are +3%, −2%, +5%, +1%. Compute the time-weighted return for the year.

Solution. 1.03 × 0.98 × 1.05 × 1.01 = 1.0704687, so TWR = +7.0469%. Note it is not the sum (+7.0%); chain-linking compounds. External cash flows played no part in this calculation, which is what makes it time-weighted.

P2 (guided). Money-weighted on the same money. An investor puts in 100 at t=0, adds 50 at t=1, and liquidates for 170 at t=2. Find the per-period IRR and the two-period compounded MWR.

Solution. Solve −100 − 50/(1+r) + 170/(1+r)² = 0. At r = 0 the sum is +20 (positive); at r = 20% it is negative; converging gives r = 7.7592% per period, and `(1.077592)² − 1 = 16.1204% over the two periods. Bracketing before solving is the habit that catches a solver returning a spurious root.

P3 (guided). The same series, time-weighted. The portfolio in P2 was worth 115 immediately before the 50 was added at t=1, and 170 at t=2. Compute the TWR and explain the gap.

Solution. r₁ = 115/100 − 1 = 15.0000%; r₂ = 170/165 − 1 = 3.0303%; TWR = 1.15 × 1.030303 − 1 = **18.4848%**. The MWR was 16.1204%, so the gap is 2.36 points: the investor added money after the strong period and before the weak one, so more capital was at work during the worse stretch. Neither number is wrong: TWR judges the manager, MWR describes the investor.

P4. Modified Dietz. A portfolio starts at 100 and ends at 130; a single contribution of 20 arrives on day 73 of a 365-day year. Compute the Modified Dietz return.

Solution. Weight w = (365 − 73)/365 = 0.800000. Average invested capital = 100 + 0.8 × 20 = 116.00. Gain = 130 − 100 − 20 = 10.00. So R = 10/116 = **8.6207%**. Contrast the wrong answer that ignores the flow's timing: 10/100 = 10.00%, which credits the full contribution as if it had been there all year.

P5. Which measure? For each, name the required return measure and give a one-line reason: (a) a long-only equity separate account for a pension fund; (b) a closed-end infrastructure fund where the GP calls capital; (c) a report to a retail client who made three large deposits during the year.

Solution. (a) Time-weighted: the manager does not control the pension's contributions, so her return must be flow-immune. (b) Money-weighted (since-inception IRR): the GP controls the timing, so timing is part of the skill being measured; this is the GIPS closed-end case. (c) Both: TWR to report what the manager did and MWR to report what the client actually earned; showing only one hides the timing conversation that is the adviser's whole job.

P6. A three-sector BHB decomposition. Benchmark weights 50/30/20 with returns +8%, −2%, +5%; portfolio weights 40/40/20 with returns +9%, −1%, +3%. Compute RB, RP, the active return, and allocation, selection and interaction. Prove the reconciliation.

Solution. RB = 0.50(8) + 0.30(−2) + 0.20(5) = 4.00 − 0.60 + 1.00 = **4.40%**. RP = 0.40(9) + 0.40(−1) + 0.20(3) = 3.60 − 0.40 + 0.60 = **3.80%**. Active = −0.60%. Allocation (−0.10)(8) + (0.10)(−2) + 0 = −0.80 − 0.20 = **−1.00**. Selection 0.50(1) + 0.30(1) + 0.20(−2) = 0.50 + 0.30 − 0.40 = **+0.40**. Interaction (−0.10)(1) + (0.10)(1) + 0 = **0.00**. Sum −1.00 + 0.40 + 0.00 = **−0.60** = active return, exactly. The manager picked well and allocated badly: she moved 10 points out of the best sector into the worst.

P7. Brinson-Fachler on the same data. Recompute allocation using (wP − wB)(rB − RB) and show the total is unchanged.

Solution. Relative sector returns: 8 − 4.4 = +3.6, −2 − 4.4 = −6.4, 5 − 4.4 = +0.6. Effects: (−0.10)(3.6) = **−0.36**; (0.10)(−6.4) = **−0.64**; (0)(0.6) = **0.00**. Total −1.00: identical to BHB, because Σ(wP − wB) = 0. The story changed: BHB blamed the under-weight of sector 1 for −0.80 and the over-weight of sector 2 for −0.20; BF splits it −0.36 / −0.64, correctly identifying that piling into the sector that lagged the index by 6.4 points was the bigger error.

P8. Sharpe and Treynor. A fund returned 12.0% with a standard deviation of 18.0% and a beta of 1.20; the risk-free rate is 3.0%. Compute both ratios and say when each is the right one.

Solution. Sharpe = (12 − 3)/18 = **0.500**. Treynor = (12 − 3)/1.20 = **7.50%**. Sharpe is right when this fund is the investor's entire portfolio, because then total volatility is the relevant risk. Treynor is right when it is one sleeve of a diversified whole, because the idiosyncratic part is being diversified away and only systematic risk should be charged for.

P9. Jensen's alpha. Same fund; the benchmark returned 9.0%. Compute Jensen's alpha and interpret its sign.

Solution. Required return on the security market line = 3 + 1.20 × (9 − 3) = 3 + 7.2 = 10.20%. Alpha = 12.0 − 10.2 = **+1.80%**. The fund earned 1.8 points more than its systematic risk demanded: genuine risk-adjusted value added under the single-factor model, subject to every caveat M3.02 raised about CAPM's empirical record.

P10. Information ratio. Same fund, with a tracking error of 5.0%. Compute the IR and say what it measures that Sharpe does not.

Solution. IR = (12 − 9)/5 = **0.600**. Sharpe measures excess return over the risk-free rate per unit of total risk; IR measures excess return over the benchmark per unit of active risk. IR is the measure of a benchmark-relative mandate: it asks how efficiently the manager converts deviation-from-benchmark into out-performance-of-benchmark.

P11. Benchmark validity. A consultant proposes "the median manager in the large-cap value universe" as a benchmark. Which of the seven properties does it fail, and why?

Solution. It fails at least four. Specified in advance: the median is only knowable after the period. Unambiguous: you cannot list its constituents or weights. Investable: you cannot buy the median manager. Accountable / reflective of current opinion: no manager can hold a view on a construct she cannot see. It is also survivorship-biased: funds that closed are absent from this year's median, so the bar is set by survivors. Useful as context, invalid as a benchmark.

P12. Pricing a benchmark defect (India). A fund returned 14.6%; the price index returned 13.1% and the total return index 14.4%. Compute the apparent and true alpha, the share of apparent alpha that was dividends, and the phantom cumulative alpha the defect generates over five years.

Solution. Apparent = 14.6 − 13.1 = **+1.50 points**. True = 14.6 − 14.4 = **+0.20 points**. Dividend wedge = 1.30 points, so 1.30/1.50 = **86.7%** of the apparent skill was the index's dividends. Over five years: (1.013)⁵ − 1 = **6.67%** of cumulative phantom alpha. SEBI's January 2018 circular mandated TRI benchmarking for Indian mutual funds from 1 February 2018 for exactly this reason.

P13. Misfit decomposition. A portfolio returned 12.4%; the manager's normal (style) portfolio returned 11.0%; the investor's benchmark returned 9.6%. True active risk is 3.2% and misfit risk 4.1%. Split the active return, compute total active risk, and give both information ratios.

Solution. True active = 12.4 − 11.0 = **+1.40**; misfit = 11.0 − 9.6 = **+1.40**; total = **+2.80**, and the parts sum. Total active risk = √(3.2² + 4.1²) = √27.05 = **5.201%**. True-active IR = 1.40/3.2 = **0.4375**; headline IR = 2.80/5.201 = **0.5384**. Charging the manager with the misfit (a style mismatch the investor chose) flatters her by about ten points of information ratio.

P14. Net from gross. A composite reports a 14.00% gross return. The disclosed model fee is 1.25% per annum, deducted quarterly. Compute the net return.

Solution. Quarterly fee = 1.25/4 = 0.3125%, so the annual multiplier is (1 − 0.003125)⁴ = 0.98756. Net = 1.1400 × 0.98756 − 1 = **12.5817%**. The drag is 1.418 points, more than the headline fee, because the fee is levied on a base that grew during the year.

P15. Annualising, two ways. (a) A composite's five-year cumulative return is 46.9%; give the annualised figure. (b) A composite's quarterly standard deviation is 6.1% and its monthly standard deviation is 3.4%; annualise each. (c) A fund is up 9% in its first four months: what is its annual return?

Solution. (a) 1.469^(1/5) − 1 = **7.995%**. (b) Quarterly: 6.1 × √4 = **12.20%**. Monthly: 3.4 × √12 = **11.778%**. Note these are different statistics, not two routes to one number: GIPS specifies monthly returns for the three-year ex-post standard deviation for exactly that reason. (c) It does not have one. It has a 9% four-month return. Annualising a period shorter than a year is forbidden under GIPS and is a marketing claim, not a measurement.


Applied mini-project

The project is to audit a real manager end to end. Budget ~3 hours. You will take one publicly available fund, build the four-question audit of §1 against it, and write a one-page verdict. Everything you compute must reconcile; everything you cite must be traceable to a named primary source.

Step 1: choose and source (~25 min). Pick one India fund and one US fund (R6): for India, a large-cap equity mutual fund whose factsheet and scheme information document you can download from the AMC's own site; for the US, a fund or ETF whose annual report and prospectus you can pull from SEC EDGAR. Record for each: the exact benchmark name including the variant (PRI or TRI, net or gross of withholding tax), the expense ratio, the inception date, and the URL and pull date of every document.

Step 2: the benchmark audit (~35 min). Run the seven properties (§9) against each stated benchmark, one sentence per property. Then answer the killer question in writing: is the fund's reported return the same kind of return as the benchmark's? Total versus price, net versus gross of fees, net versus gross of dividend withholding tax, same currency, same period-end. Price any mismatch in basis points using Worked Example 6's method; if there is none, say what you checked: a defensible negative result is a finding.

Step 3: recompute the returns (~40 min). From published NAV or price history, build a quarterly (or monthly) return series for three years; chain-link it, confirm it ties to the fund's published cumulative return within rounding, and explain any difference (dividend treatment, expense timing, period-end convention). Then construct a hypothetical investor cash-flow series (a lump sum plus two contributions of your choosing) and compute the MWR alongside the TWR. State the gap and what it tells a client.

Step 4: the five measures (~30 min). Using your series and the benchmark's over the same dates, with a documented risk-free rate (India: 91-day T-bill or the RBI's published rate; US: FRED series DGS3MO or TB3MS), compute Sharpe, Treynor, Jensen's alpha, Information Ratio and M² for each fund. Show the beta computation from covariance and variance. State your annualisation convention and your ddof. Then write the §8 pattern reading: which measures agree, which disagree, and what that says about the kind of risk taken.

Step 5: attribution (~30 min). From the fund's published sector or holdings breakdown and the index provider's own sector weights and returns, run a Brinson-Fachler decomposition for the most recent period you can source both sides for. Reconcile allocation + selection + interaction to the active return exactly; if it does not reconcile, diagnose why (unclassified cash, weights not summing to one, a segment mapped differently on the two sides) rather than plugging a residual. Note where you had to approximate.

Step 6: the verdict (~20 min). One page, ≤500 words: what the fund returned, against what, from where, at what risk, and what you would want to see before allocating. Include one paragraph naming every place your numbers rest on an assumption rather than a source.

Scoring rubric. Self-score honestly. A criterion is a 2 only if it is complete, correct, dated and sourced.

#Criterion0 points1 point2 points
1Sourcing (both jurisdictions, primary documents, dated URLs)One jurisdiction, or no sourcesBoth, but undated or secondary sourcesBoth funds, primary documents, every pull dated and cited
2Benchmark variant check (PRI/TRI, fee basis, currency)Not doneDone for one fundDone for both, mismatch priced in basis points or absence documented
3Seven properties appliedNot appliedListed without evidenceAll seven, one evidenced sentence each, per fund
4TWR recomputation ties to published figuresNot attemptedAttempted, differences unexplainedTies within rounding, every difference diagnosed
5MWR computed and contrastedAbsentComputed onlyComputed, gap quantified, client implication stated
6All five risk-adjusted measuresFewer than fiveAll five, conventions unstatedAll five, beta derived from covariance shown, annualisation and ddof stated
7Pattern reading of the fiveAbsentRestates the numbersReads the disagreement and names the kind of risk taken
8Brinson-Fachler decomposition reconcilesNot attemptedAttempted, residual pluggedReconciles exactly, or the failure is correctly diagnosed and documented
9Verification disciplineNumbers unverifiedSome spot checksThe six reconciliations of §12 run and recorded
10Honesty of the verdictFalse precision, no caveatsPartial caveatsAssumptions named, sources cited, limits of the analysis stated

Pass: ≥16/20 with no criterion at 0. A crown node deserves a crown standard: if you plugged a residual anywhere, you have not passed, however good the prose.


Reading & resources

Core (do these).

  • CFA Institute, Global Investment Performance Standards (2020 edition) and the GIPS Standards Handbook: the primary text, free at gipsstandards.org. Read the composite-construction and calculation-methodology provisions and one sample GIPS Composite Report; leave the full standard for ES1.02. [Free] [Intermediate]
  • Brinson, Hood & Beebower (1986), "Determinants of Portfolio Performance," Financial Analysts Journal: the origin of the decomposition in §4, and worth reading for how modest its actual claim was compared to how it has been quoted ever since. [Free/Paid] [Intermediate]
  • Brinson & Fachler (1985), "Measuring Non-US Equity Portfolio Performance," Journal of Portfolio Management: the allocation convention of §5, and the earlier paper despite the later fame. [Paid] [Intermediate]
  • Bacon, Practical Portfolio Performance Measurement and Attribution: the practitioner's reference for everything here and a great deal beyond it: linking algorithms, fixed-income attribution, multi-currency, risk-adjusted measures. If you buy one book on this subject, this is it. [Paid] [Intermediate→Advanced]
  • SEBI, circular on benchmarking of scheme performance to Total Return Indices (January 2018): short, and the primary source for Worked Example 6. Read it on sebi.gov.in. [Free] [Beginner]

Going deeper.

  • Jensen (1968), "The Performance of Mutual Funds in the Period 1945–1964," Journal of Finance; Treynor (1965), Harvard Business Review; Modigliani & Modigliani (1997), Journal of Portfolio Management: the primary sources for three of the five measures, each short and each clearer than its textbook summary. [Free/Paid] [Intermediate→Advanced]
  • Bailey (1992), "Are Manager Universes Acceptable Performance Benchmarks?" Journal of Portfolio Management, and Bailey, Richards & Tierney on benchmark properties: the source of §9's seven tests and the case against peer-group medians. [Paid] [Intermediate]
  • Cariño (1999), "Combining Attribution Effects Over Time," Journal of Performance Measurement, and Menchero (2000) on optimised linking: the two standard solutions to §6's residual. [Paid] [Advanced]
  • US SEC Marketing Rule (Rule 206(4)-1, as amended): the American regulatory overlay on presenting performance, including net-of-fee requirements for advertisements. Skim now on sec.gov; ES1.02 maps it properly. [Free] [Intermediate]

Data and tools (free).

  • SEC EDGAR (sec.gov/edgar): US fund annual reports, prospectuses and N-CSR filings. [Free]
  • AMC scheme documents, AMFI and SEBI (amfiindia.com, sebi.gov.in): India fund NAV history, factsheets, and the disclosure rules that govern them; niftyindices.com for the PRI and TRI variants, from the index provider itself. [Free]
  • FRED (fred.stlouisfed.org): risk-free rate series, including DGS3MO and TB3MS. [Free]
  • Python: pandas, NumPy, SciPy, numpy_financial: the vectorised implementation; the quant-code region's Data & Machine Learning branch builds the pipeline properly. [Free]

Do this, not just read: download one fund factsheet and one index factsheet for the same month and try to make the two returns comparable. You will discover a variant mismatch, a period-end mismatch, or a fee-basis mismatch within twenty minutes. That twenty minutes teaches more about performance measurement than any chapter.


Teach it back & journal

Feynman prompt. Explain to an intelligent client who is angry that "the fund says it made 14.9% and my statement says 8.5%" why both numbers are honest. Use the actual mechanics: chain-linking versus an internal rate of return, and the ₹3 crore that arrived one quarter before the market fell 6%. Then, without changing your voice, explain why you would still not conclude the manager is good: because 14.9% against what, from where, and at what risk are three questions the number does not answer. If your listener can, unprompted, ask you "which index variant is that, and is it gross or net of fees?", you have taught the substance rather than the arithmetic.

Journal prompt. Take one performance table you have actually been shown (a fund factsheet, a PMS report, a colleague's backtest, an AI-generated attribution) and run the six reconciliations of §12 on it. Write down what you found: whether the effects summed to the active return exactly, whether the weights summed to one, whether the benchmark was the same kind of return as the portfolio, and whether there was a residual line and what it was called. Then write a paragraph on what this is really about. The industry's core measurement problem is that a plausible wrong number and a correct number look identical on the page. That is precisely the failure mode the AI region names, and it arrives here in its most dangerous form, because there is no source to open and check against. Name the single reconciliation that, made automatic, would most change the quality of the work you sign your name to. Then name what you will do this week to make it automatic rather than aspirational: a checklist taped to the monitor, an assertion in your code, a habit of asking "gross or net of what?" before anything else.


This module's flashcards and mastery quiz are wired into the app: see the node's Quiz and Reviews.

Advertisement

The gate

The module's flashcards and its quiz are in the app. The quiz is the gate: you need 90% to pass it, and the next module opens when you do.