Home Up Opinion Feedback Contents Search About Us

Stock Level Attribution
Attribution Basics Sector Attribution Multiperiod Attribution Interaction Stock Level Attribution Multicurrency Attribution

 

 

Stock-level ("bottom-up") Performance Attribution

A stock-level attribution model is the perfect way to assess the value added from a bottom-up investment management process.

For example, consider an equities portfolio managed against the S&P 500 index.  Assuming (as the name suggests) that there are exactly 500 securities in the index, this benchmark provides 500 opportunities to take an active bet (by over- or under- weighting each security) on every day.  Beyond this, the portfolio manager may also choose to hold some non-benchmark securities in the portfolio (these would then take a default benchmark weight of zero).  These non-benchmark securities that the manager chooses to hold also represent active bets.  Supposing that the portfolio held 20 securities that were not in the benchmark, a stock-level attribution would need to calculate the active performance arising from 520 different positions on every day.  Altogether, these 520 active bets would explain the entire active performance of the portfolio.

A Simple Example

The spreadsheet SimpleStockAttribution.xls shows a simplified example of stock-level attribution using a "buy and hold" assumption.

The spreadsheet contains some basic data, as shown in the table below.

Stock Name

Portfolio

Weight

Benchmark

Weight

 

Return

BigStock
45%
60%
1.00%
LittleStock
45%
30%
2.00%
TinyStock
0%
10%
5.00%
UnlistedStock
5%
0%
20.00%
Cash
5%
0%
1.00%
Total
100%
100%
2.40%

The portfolio contains five securities.  Only three of these are in the benchmark.  The securities not shown as part of the benchmark are cash (5% of the portfolio), and "UnlistedStock" which is a stock that's not in the benchmark.

The returns shown in the rightmost column require a bit of explanation.  Under a "buy and hold" assumption, one makes no distinction between portfolio security returns and benchmark security returns.  In the real world, these tend to differ by small but significant amounts (due to issues such as transaction costs when the portfolio buys or sells securities).  For the sake of simplicity, we will use a "buy and "hold" assumption for this simple example.  Later, we will expand the theoretical framework so that we use differences between portfolio security returns and benchmark security returns in order to estimate the size of the impact of transaction costs.  In summary, for this simple example, please try to stay relaxed about differences between portfolio security returns and benchmark security returns.

The portfolio return, calculated as a weighted sum of the portfolio stock weights and the stock returns, is 2.40%.  The benchmark return, calculated as a weighted sum of the benchmark stock weights and the stock returns, is 1.70%.  Hence the active return to be explained by the attribution analysis is 70 basis points.

One can calculate the contribution to active return for each security using an equation that is rather similar to the one used for calculating the asset allocation effect in Sector Attribution.  The equation is:

[ Equation 1 ]

where:




When we apply this simple formula to the basic data shown above, we quickly obtain a set of attributes that makes intuitive sense.  Here we show the attribution results, along with the basic data, to aid comparison:

 

Portfolio Weight

Benchmark Weight

Portfolio Return

Stock Selection

BigStock
45%
60%
1.00%
0.105%
LittleStock
45%
30%
2.00%
0.045%
TinyStock
0%
10%
5.00%
-0.330%
UnlistedStock
5%
0%
20.00%
0.915%
Cash
5%
0%
1.00%
-0.035%
Total
100%
100%
2.40%
0.700%

It is easy to explain why every line of these results makes sense relative to the 1.70% total benchmark return:

  • BigStock was 15% underweight, and under-performed the benchmark by 70 basis points.  By underweighting and hence avoiding some of this underperformance, the BigStock bet added 10.5 basis points to the total return.
  • LittleStock was 15% overweight and just slightly outperformed benchmark (by 30 basis points).  This moderate overweight to a marginally outperforming stock added 4.5 basis points to the active return.
  • TinyStock was not held in the portfolio (i.e. its portfolio weight was zero).  It substantially outperformed benchmark.  The combined effect of these factors was that this stock cost 33 basis points to total return.
  • UnlistedStock is not in the benchmark.  By holding it at 5% of the portfolio, the portfolio was overweight 5% on this stock.  Since the stock gave an excellent return (20%), the value added was 92 basis points.
  • Cash was a small overweight of an asset that is not in the benchmark.  As cash performed just a little bit worse than the actual benchmark did, the small overweight to cash cost the portfolio 4 basis points of performance.

Realistic Example

This section presents five different attribution analyses for a single day.  The first example, Attribution1.xls shows the simple stock-level attribution model in which all the contribution to active performance is explained by stock selection.  This is a full-fledged analysis of actual market data using the simple method described so far.

In contrast with this analysis are four sector attribution analyses of exactly the same data:

  • Attribution2.xls does sector attribution based on an "Industrials vs. Resources" classification, and also optionally shows how the stock selection attribute can still be broken-out line-by-line in a sector attribution model.
  • Attribution3.xls  does sector attribution based on a "Value vs. Growth" classification.
  • Attribution4.xls does sector attribution based on an "Large Cap vs. Small Cap" classification, and  shows how the stock selection results can still be broken-out line-by-line in a sector attribution model.
  • Attribution5.xls shows sector attribution based on a standard industry sector scheme.  Even though it is not shown here, it would be possible to display the stock selection results for each security. ( See Drill-Down to Security-Level Data in Sector Attribution for information about obtaining security-level results that are perfectly consistent with the sector-level results.

Please note that "stock selection" means different things in sector attribution and stock-level attribution.  In sector attribution, the goal of stock selection is to pick the stocks that will have the highest return within each sector.  On the other hand, in a bottom-up attribution model, the goal of stock selection is to pick the stocks that will have the highest return in the overall benchmark.

A great example for comparing these differences is the stock Broken Hill.  In Attribution2.xls (the Resources vs. Industrials sector attribution), the resources sector (minus 0.53%) substantially underperformed the overall benchmark (1.02%), and the Industrials sector (1.35%).  Since Broken Hill is a resources stock, we measure its stock selection benefits relative to the resources sector index.  From this perspective, the overweight position in Broken Hill only cost about 1 basis point of performance.

However, looking at Attribution1.xls, we can see that the assessment of stock selection value added by Broken Hill is completely different.  Broken Hill underperformed the overall index by 200 basis points.  Since the stock was approximately 10% overweight, the stock selection value added for Broken Hill on this day is minus 22 basis points.  This is a terrible result!

This little example helps to show that stock selection has a substantially different meaning in these two different attribution models.  Both make sense, within the terms of the model they use.  But this reminds us that it is important to understand the model that you are using, and it is important to develop a sense of which model will be more appropriate for different portfolios.

Mathematics for the Full Model

In the previous example, we used the "buy and hold" assumption that the stock-level returns for portfolio and benchmark would always be identical.  This seems like a reasonable assumption, but in practice it is not strictly true: there can in fact be differences between the index return for stock XYZ and for a holding of stock XYZ in the portfolio.  The source of these differences is transaction costs.

The full details of the method for measuring transaction costs is provided below in the section Measuring Transaction Costs.  However, here is a small example to introduce the idea.

Suppose that stock XYZ closed yesterday at $1.00, and today it increases in price to $1.02.  This is a return of exactly 2%.  So any index containing stock XYZ should use 2% as the daily return.  But portfolio returns are calculated using market values and cashflows.  Providing that the portfolio valuations are done using the index prices, the portfolio returns will exactly match the index returns.  Except, that is, for cases where cashflows take place.  Suppose that a fund yesterday held 1,000 shares of XYZ, and today it bought 500 shares.  Yesterday's valuation (at $1.00) will be $1,000, and today's valuation (at $1.02) will be $1,530.  If the cashflow that paid for the shares was $510, the return on that holding would be exactly 2%.  The size of the cashflow is affected by direct transaction costs, such as brokerage.  It is also affected by indirect transaction costs, such as paying a higher price for the shares.  So, if the cashflow that paid for the shares was $490, the return would be 4%.  And if the cashflow that paid for the shares was $530, the return would be exactly zero.  If you would like to check these calculations, please examine the spreadsheet VerySimpleTransactionCosts.xls.

By taking account of these differences between index returns and holding returns, one can bring two improvements to the calculation process for stock-level attribution:

  1. The first improvement is negative in its nature.  If one didn't take account of differences between index returns and holding returns in a stock-level attribution, the calculation would produce a residual.  This residual might then be a source of other difficulties (for example, in reconciling the calculations, or in explaining the results).
  2. The second improvement is the positive benefit that one stands to gain by using the differences between index returns and holding returns to measure the impact of transaction costs on portfolio performance.  Since transaction costs are so important to professional investment managers, it seems crazy to discard information that could be useful in estimating the effect of transaction costs.

Without discussing the issue of transaction costs in more detail at this stage, we can now move on to define the formulas for a stock-level attribution method that includes transaction cost measurement.  The key to this model is that it distinguishes between the benchmark stock return and the portfolio stock return.  In cases where these returns happen to be the same, the transaction cost effect will be zero, and all of the value added will fall through to the stock selection effect.

In this model, the total value added for each stock in each period is explained by two equations:

[ Equation 2 ]

and

[ Equation 3 ]

where:





 

The transaction cost effect is also known as the "timing effect", or "intra-day timing effect", because it partly reflects the skill with which trades are executed in each measurement period.  Normally, if one is going to the trouble of attributing performance at the security level, one would also choose to do the calculations on daily intervals.

How the Full Model Measures Transaction Costs

The paper Incorporating Transaction Cost Measurement into Performance Attribution, by Damien Laker, appeared in the Journal of Performance Measurement, Summer 2001, pp. 13-24.  It is reproduced by permission of the Journal of Performance Measurement.

This paper was motivated mainly by a need to explain the small "timing" attribute which arises from transaction-based stock-level attribution models.  The paper shows how this attribute could plausibly be a measure of how much value is being lost (or created?) through the transactions that the portfolio carries out (i.e. buying and selling securities). 

To illustrate the benefits of this way to measure transaction costs as a source of active performance, we will work though the example in the paper  Incorporating Transaction Cost Measurement into Performance Attribution.  In case you wish to check the calculations in detail (Please do so -- checking the details is a very good way to learn how it works!), all of the data and calculations for this example are provided in the spreadsheet Transaction_cost_attribution.xls.

We will be looking at a portfolio containing 3 stocks (ABC, DEF, and XYZ) over a period of two days.  To make the example simpler, the portfolio and benchmark each contains only these three stocks.  (Just a word of warning: to keep this example simple, the portfolio contains only three stocks, and doesn't even contain any cash.  To maintain this assumption, when a sale of stock takes place, the proceeds flow out of the fund rather than into the fund's cash account.  This helps to keep the example simple, and has no bearing on the particular calculation method described here). 

The table below shows the index close prices for each stock for each day we are examining (Days 1 and 2), as well as Day 0, which will help us to calculate performance data on Day 1.  The index close prices look as follows:

ABC Example Table 1: Index Closing Prices

Stock

Day 0

Day 1

Day 2

ABC

$1.00

$1.05

$1.02

DEF

$1.00

$0.97

$0.95

XYZ

$1.00

$1.02

$1.03

Given this information (and in the absence of corporate actions such as dividends, splits, rights issues, etc., we can calculate the index returns for each stock as follows:

ABC Example Table 2:Index Returns

Stock

Day 1

Day 2

ABC

5.00%

-2.86%

DEF

-3.00%

-2.06%

XYZ

2.00%

0.98%

Total

1.33%

-1.32%

Actually, to get the total-level index returns, we also needed the daily index weights.  By Stipulation, each stock as a weight of 1/3, or in other words, 33.33% recurring at the end of Day 0.  It is then a simple task to use the stock-level returns to calculate daily index weights going forward.  For the sake of completeness, here are the start-of-day index weights on each day:

ABC Example Table 3: Index Weights

Stock

Day 1

Day 2

ABC

33.33%

34.54%

DEF

33.33%

31.91%

XYZ

33.33%

33.55%

Total

100.00%

100.00%

This completes the index calculations for the purpose of this exercise.  Now, let's have a look at how the portfolio was constructed.

The following table shows the basic accounting data, showing the number held at the end of each day, and the  number purchased or sold during each day.  By convention, a sale will have a negative sign, and a purchase will have a positive sign:

ABC Example Table 4: Portfolio Accounting Data (as Number Held)

Number Held At Close of Each Day

Purchases/Sales

Stock

Day 0

Day 1

Day 2

Day 1

Day 2

ABC

30

30

30

-

-

DEF

50

50

40

-

-10

XYZ

20

20

20

-

-

In dollars, then, the market values and cashflows for the fund are as follows:

ABC Example Table 5: Portfolio Accounting Data (as Dollars)

Market Value At Close of Each Day

Purchases/Sales

Stock

Day 0

Day 1

Day 2

Day 1

Day 2

ABC

$30.00

$31.50

$30.60

-

-

DEF

$50.00

$48.50

$38.00

-

($10)

XYZ

$20.00

$20.40

$20.60

-

-

 Total

$100.00

$100.00

$89.20

-

($10)

Using these market values and cashflows, one is able to calculate the portfolio returns:

ABC Example Table 6: Portfolio Returns

Stock

Day 1

Day 2

ABC

5.00%

-2.86%

DEF

-3.00%

-1.03%

XYZ

2.00%

0.98%

Total

0.40%

-1.20%

There are two considerations that combine to explain the difference between the portfolio returns shown Table 6 and the index returns shown in Table 2.  These considerations are:

  1. At the stock level, the return for DEF is different on day 2.  The reason for this is the sale of 10 shares in DEF that took place on day 2 .  In the absence of cashflows, stock-level returns will be the same in the portfolio and the benchmark.  However, when cashflows do take place, they have some effects on the portfolio stock return.  The transaction costs attribute measures these effects.
  2. At the total level, the main reason for differences between portfolio and benchmark returns is simply that the portfolio and benchmark hold very different weightings in many stocks.  For example, on Day 1, the index return was 1.33%, while the portfolio return was only 0.40%.  This difference will be explained (within the next few paragraphs) by stock-level attribution.

To do stock-level attribution, we will need to know the portfolio stock weights.  This weights seem to reflect a strong bias in favor of stock DEF, and a mild bias against stock XYZ, if you compare the numbers in the following Table 7 with the index weights that appeared in Table 3: 

ABC Example Table 7: Portfolio Weights

Stock

Day 1

Day 2

ABC

30.00%

31.37%

DEF

50.00%

48.31%

XYZ

20.00%

20.32%

Total

100.00%

100.00%

Now, for the actual attribution calculations.  On Day 1, the portfolio return was 0.40%, while the index return was 1.33%.  Therefore we will expect to see the attribution explain minus 93 basis points of active performance on Day 1.

On Day 2, the portfolio return was -1.20%, while the index return was -1.32%.  Hence we will expect to see the attribution explain positive 12 basis points of active performance on Day 2.

Starting with the stock selection attribute, we simply need to apply Equation 2 to the data above.  The results come out like this:

ABC Example Table 8: Stock Selection Results

 

Stock Selection

Stock

Day 1

Day 2

ABC

-0.12%

0.05%

DEF

-0.72%

-0.12%

XYZ

-0.09%

-0.30%

Total

-0.93%

-0.38%

Already we can see that the stock selection results on Day 1 sum to the expected value (minus 93 basis points).  The greatest loss of value by stock selection on Day 1 was in stock DEF.  We can gain some appreciation of this by working through Equation 2 for stock DEF on Day 1:



You should be able to confirm all the numbers in Table 8 by applying Equation 2 to each stock's data on each day.

The next step is to calculate the timing (transaction costs) attribute for each stock on each day, using Equation 3.  This will clearly be important for stock DEF on Day 2, since that is the stock where the transaction took place.  The calculation is:



As the spreadsheet example Transaction_cost_attribution.xls shows, there is a very sound "dollars and cents" explanation for saying that 50 basis points of performance was attributable to timing/transaction costs in stock DEF on Day 2.  The closing price for DEF was 95 cents.  The portfolio sold 10 shares.  Using the closing price of 95 cents as the yardstick, one would expect to realize $9.50 as the proceeds of selling 10 shares of DEF on Day 2.  However, due to lucky or skilful intra-day timing, combined with minimization of transaction costs. the portfolio realized $10.00 from the sale, net of transaction costs.  Hence there was a notional gain of 50 cents attributable to the transaction costs effect.  If one divides this 50 cent gain by the Day 2 opening portfolio value of $100.50, the result is 50 basis points (the exact figure is not 50 basis points exactly, but if you check in the spreadsheet, you will see that these two different methods for calculating the transaction costs effect reconcile as closely as any spreadsheet calculation can — to about one-billionth of a basis point!)  It is important to understand that this calculation is exact, and subject to the discipline of reconciliation.

The transaction cost effects for all the other stocks come out as exactly zero, which makes sense because stock DEF on Day 2 was the only case where a transaction took place.  Mathematically, you can see that in cases where transactions have not taken place, the transaction cost effect will necessarily be zero, because the portfolio return for the stock is exactly equal to the index return for the stock in those cases.

The final attribution results we obtain for each separate Day (1 and 2) are:

ABC Example Table 9: Complete Stock-Level Attribution Results

 

Stock Selection

Transaction Cost

Total Value Added

Stock

Day 1

Day 2

Day 1

Day 2

Day 1

Day 2

ABC

-0.12%

0.05%

0.00%

0.00%

-0.12%

0.05%

DEF

-0.72%

-0.12%

0.00%

0.50%

-0.72%

0.38%

XYZ

-0.09%