Skip to content
All library documents

Why Multi-Period Asset Contributions Differ from Portfolio Returns

Article Quant Q&A · Author: QFqs

Summary

The document examines why asset-level contributions across multiple periods may not sum to a portfolio’s cumulative return when contributions are calculated with fixed weights or by compounding each asset’s standalone contribution. Its central explanation is that asset weights change as prices move, so period contributions must use the weights prevailing in each period. For absolute return attribution, the contribution in a period is the asset’s weight multiplied by its return.

The answers distinguish arithmetic period returns from geometric growth rates and explain that geometric averages describe growth from start to end, rather than summable asset contributions. One suggested cumulative attribution method adjusts each period’s asset contribution by the portfolio’s growth before that period; the document gives a two-asset example where the adjusted contributions sum to the portfolio return. The discussion focuses on a portfolio with price movements and no holdings changes for the matching property, and does not fully cover transaction effects, benchmark attribution, or other attribution conventions.

Key ideas

  • Asset weights change over time as their values move, so fixed weights can misstate multi-period contributions.
  • Single-period absolute return contribution is calculated using each asset’s weight and return for that period.
  • Geometric average returns describe cumulative growth and should not be treated as summable asset contributions.
  • Cumulative attribution can scale each period’s contribution by the portfolio growth accumulated beforehand.
  • With unchanged holdings and price movements, updating weights can reconcile asset contributions with portfolio return.

Tags

Full text
# Multi-Period Contribution


# Multi-Period Contribution












I've read multiple research papers but can't find a good answer as to why multi-period contributions don't add up to the returns of a portfolio. I understand that arithmetic sums miss the compounding effect, but what other factors lead to the individual contributions to not equal the portfolio return?

Edit----

To make it clear, I want to know how to make contributions of assets align over time without using any normalizing process. I did both the geometric way of getting contributions as well as arthemetic. In both cases, there is some mismatch versus the actual portfolio return. I want to know what causes this.

## Answer by AKdemy (score 4)

https://quant.stackexchange.com/a/65764

Thanks for the example. It is exactly like my comment. Look at your weights after the first period. Are they really 80% and 20%?

Lets say you have £100 to invest.

- £80 is invested in product A. That turns into £81 after the first period and £79.38 ($81*(1-0.02)$) after the second period. Total return is $79.38/80 = -0.775 \% $

- £20 is invested in product B -> 20.1 -> 20.25075: 1.25375%

(after your first period, you have £101.1 and 81 as well as 20.1 respectively which is a "new" weight of 80.1187% and 19.8813% - which will be needed for (absolute) return contribution analysis)

- Individually you earned (weighted by start value) $-0.775\% *0.8 + 1.25375\% *0.2 = -0.36925\%$

- Total value is $79.38+20.25075 = 99.63075$ which results in a decline of $-0.36925\% $ from 100.

You cannot simple use the same weights, as that is no longer true after the first period (any period).

You can find some basics about rebalancing on Investopedia.

Edit 1

You cannot compute it like you attempt to. You simple assume weights are identical across periods. That just does not work. The geometric mean computes an average return spread across all periods. You do not need to weight that every period. You simply know your start weight (which is same as start value if multiplied with total portfolio cash) and you spread the average across all periods (two here, which is why you need to compute $Start_{value}*(1+geom)^2$ for every asset). There is no need to use weights - the geometric mean is the $n_{th}$ root of $n$ products of the values over $n$ periods. If you want portfolio total return at any period, you can use the logic in blue. It gives the weight at any period, and the sum of it divided by initial total portfolio is your return at any period.

Edit 2 (Absolute) return contribution analysis (not computed against a benchmark) identifies the contributions of portfolio components to the total return of the portfolio. It uses weights and returns of the portfolio in each period. $$R_{period}= \sum_{i=1}^{n} w_iR_i$$ where $w_i$ is the weight of the security in each period, computed as value of security divided by total value. In this example here:

You cannot do the geometric mean of the individual securities absolute return contributions, as these use different weights, whereas the geometric mean is simple the average of returns in each period from start to end (see formulas above). For the portfolio as a whole it works because you always have the same weight in this case (1).

I apologize for the excel sheets that are arguably not well done because I quickly did them during work breaks. I hope they still help.

## Answer by ds_col (score 2)

https://quant.stackexchange.com/a/65758

If you use geometric period returns (aka "continous", "exponential"), you can calculate an arithmetic average and this will give you the same result as if you would calculate this growth rate only from the start and end value of your time series (e.g. a Total Return Index).

If you use arithmetic period returns, this will not be the case. It is just the mathematics of artihmetic period returns and it just does not make sense to calculate 1/2*(-50% + 100%), if you go from 1000 to 500 to 1000.

In both cases, you do not want the result of your return over all periods to depend on the "path". If you start with 1000 and end with 1800, this will be a return of 80% (arithmetic) or 59% (geometric), if your "overall" time is 1. You can always translate the arithmetic into the geometric return by using exp(r_continous)-1=r_arithmetic.

If you annualise (i.e. T>1), you would have r_continous=1/T*ln(S_T/S_0) or r_arithmetic=(S_T/S_0)^(1/T)-1 . The point is, you should not care too much about the "average period return" when you have arithmetic perio returns as this can be misleading (this only "fits" for geometric returns.)

## Answer by Joeseph Y (score 0)

https://quant.stackexchange.com/a/70741

A short answer is you need to update the weight at each period.

For return contribution, you should able to match the portfolio level return if there is no change in "holdings" but just market price movement.

## Answer by kain198 (score 0)

https://quant.stackexchange.com/a/72188

The best answer I found in Morningstar "Total Portfolio Performance Attribution Methodology" , p.36

There is an explanation of the compounding effect, but I like the one from the R package "PerformanceAnalytics" docs on p. 217.

> From the portfolio contributions of individual assets, such as those of a particular asset class or manager, the multiperiod contribution is neither summable from nor the geometric compounding of single-period contributions. Because the weights of the individual assets change through time as transactions occur, the capital base for the asset changes. Instead, the asset’s multiperiod contribution is the sum of the asset’s dollar contributions from each period, as calculated from the wealth index of the total portfolio. Once contributions are expressed in cumulative terms, asset contributions then sum to the returns of the total portfolio for the period.

In other words, every one period contribution return should be corrected by previous portfolio Total return. In our case, we have two period example, so multiperiod contribution components have quite simple form.

- (arithmetic) Asset A Total Contribution: $C_{A,Cum} = C_{A,1}+C_{A,2}\bullet (1+R^P_{T1}) = 1.00\% + (1+1.10\%)\bullet (-1.60\%) = -0.617600\%$

- (arithmetic) Asset B Total Contribution: $C_{B,Cum} = C_{B,1}+C_{B,2}\bullet (1+R^P_{T1}) = 0.10\% + (1+1.10\%)\bullet 0.15\% = 0.2516500\%$

The Total Contribution is equal to the sum $-0.617600\% + 0.2516500\% = -0.3659500\%$ as was to be shown.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.