Other sections on this wiki have described how individual security-level returns are decomposed by source of risk. In this chapter, we show the ways in which FIA aggregates this data to provide summarised information about the relationship between risk and returns.
Aggregation of returns
The manner in which returns within attributed portfolios are decomposed is a complex issue. The main problem is that returns are typically decomposed arithmetically over market sector or risk, but geometrically over time. The result is that cross terms appear in the results, often referred to as interaction terms. These terms have no physical interpretation and are often reallocated across other sources of risk, distorting the results.
In our view, such terms have no place in an attribution analysis.1
FIA's current release implements geometric compounding and additive Carino compounding only. Planned future versions will implement other, arithmetic aggregation algorithms such as those due to Menchero and GRAP.
The approach taken by FIA is to adjust individual performance contributions so that they aggregate geometrically by time and by sector. This ensures that overall returns are path-independent.
The geometrization scheme used is a variant of that due to Bacon, 20082:
is the geometrically-adjusted performance contribution for performance contribution ;
is the unadjusted performance contribution;
is the overall performance of the portfolio at a given time.
Instead of the usual additive relationship between performance contributions and overall portfolio return , given by
this adjustment assumes the alternative relationship
which has the desired properties.
Note that this expression will fail if
which typically only occurs for very highly leveraged portfolios. If this happens, FIA displays a warning message and resets the smoothing algorithm to use additive Carino smoothing, which is then used for all subsequent reporting.
Arithmetic compounding of attribution returns, using the Carino smoothing algorithm, is available in the current release of FIA.
FIA has the option of generating following set of reports for each portfolio in the analysis:
- Aggregated returns by risk category
- Aggregated returns by date and risk category
- Aggregated returns by individual security and risk category
- Aggregated returns by security type and risk category
- Aggregated returns by yield curve and risk category
- Exposures at end of interval, summarised by maturity buckets
- Security-level static risk at end of interval (exposures, risk numbers)
The same reports are also calculated for the benchmark, if one is provided. In this case, the program also calculates a number of relative reports:
Relative risk reports
- Relative risk report, showing absolute and relative aggregated returns by risk category
- Relative and absolute exposures at end of interval, summarised by maturity buckets
The following table describes the different types of report available in FIA. Other types may be added in future.
<PF> and <BM> refer to the names of the portfolio and benchmark as provided in the weights and returns files. <REPORT_SECTORS> refers to the list of portfolio sectors provided in the ReportSectors option in the configuration file.
Files are named using the current portfolio and benchmark as a prefix, with the report type appended.
|Report type||Description||Portfolio name||Benchmark name||Relative name|
|SummaryRiskReport||Summary report showing returns from all risks aggregated over all dates and securities. Relative reports are generated if a benchmark is provided.||<PF>_SUMMARY_RISK||N/A||<PF>_SUMMARY_RISK|
|Stress report||Stress report showing effect of scenarios provided in the stress scenario file. The starting point of the stress report is always the last date of the attribution computation.
Relative stress reports are generated if a benchmark is provided.
|Exposures report||Bucketed exposure reports, using the buckets provided in the MaturityBuckets option in the configuration file.
The date of the exposure report is always the last date of the attribution calculation. Benchmark and relative exposure reports are generated if a benchmark is provided. In this case relative exposures are calculated, allowing the display of a 'tombstone' graph.
|Interactive risk report||Nested attribution report, showing all attribution returns progressively summarized at levels given in the ReportSectors option(s) in the configuration file.
The Excel version of this report includes sector-level grouping, allowing the user to drill-down interactively into the report.
The CSV version contains exactly the same information in the same format as the Excel version, but without any of the interactive capabilities.
If a benchmark is provided, the benchmark's contributions to return are shown on the same levels as the portfolio contributions, as well as the relative performance contributions.
|RawReturnsReport||Reports containing unweighted returns on a security-level basis||<PF>_RAW_RETURNS||<BM>_RAW_RETURNS||N/A|
|StaticRiskReport||Reports showing yield to maturity, modified duration, and convexity.
Reports with suffix STATIC_RISK show these quantities at last date in report interval. Reports with suffix STATIC_RISK_TIME show these quantities at all dates over the report interval.
|<PF>_STATIC_RISK, <PF>_STATIC_RISK_TIME||<BM>_STATIC_RISK, <BM>_STATIC_RISK_TIME||N/A|
|DateRiskReport||Reports showing portfolio and benchmark returns due to risk over time, both by time interval and accumulated over time.
Reports with suffix DATE_RISK show these quantities at each date in report interval. Reports with suffix CUMULATIVE_DATE_RISK show these quantities aggregated over time. This report allows easy generation of cumulative return graphs by risk type.
|<PF>_DATE_RISK, <PF>_CUMULATIVE_DATE_RISK||<BM>_DATE_RISK, <BM>_CUMULATIVE_DATE_RISK||N/A|
|GranularRiskReport||CSV report showing weights and risk returns at the security level in a format suitable for importing into an SQL database.||<PF>_RAW||<BM>_RAW||N/A|
FIA offers the user the option of generating reports in CSV and XLS format. To avoid generating large volumes of data, either format can be switched off by setting the CSVreport and XLSreport switches in the configuration file.
The user may find the XLS reports most useful when a preformatted report is to be generated, since these have been designed to be easy to read. The CSV reports may be preferred for batch processing, since these can easily be imported into other database and reporting systems.
FIA also offers the option of generating high-quality graphics reports, using the 'R' statistics enviroment in command-line mode. 'R' is freely available under the GNU General Public License (GPL) version 2 and runs under Windows, MacOS and a wide range of Unix environments. Please contact Flametree Technologies if you would like to know more about this feature.
The user supplies the following three files to FIA, consisting of a configuration file, a portfolio returns file fund1.csv, and a benchmark returns file index1.csv.
In this example, holdings and return data is supplied at two dates only. The portfolio holdings have been adjusted so that the modified duration of the portfolio is very close to that of the benchmark. However, the securities in the portfolio have a lower credit rating (and hence a higher yield) that the securities in the benchmark, and in addition one of the bonds in the portfolio showed a security-specific drop in yield over the month, which boosted its return quite substantially.
PortfolioFile = fund1.csv BenchmarkFile = index1.csv SecurityFile = sec_defs.csv YieldCurveFile = yc1.csv StressFile = stress.csv SovereignCurveDecomposition =stb CreditCurveAttribution = no RollDownAttribution = no DateFormat = %d-%b-%Y SecurityDateFormat = %d-%b-%y PortfolioDateFormat = %d-%b-%y YieldCurveDateFormat = %d-%b-%y CouponDecomposition = aggregated CSVreport = no XLSreport = yes AverageCurveLevel = trapezoidal CashAttribution = no InflationAttribution = no ConvexityAttribution = yes OptionalityAttribution =no FXAttribution=yes
Here, the user has specified that FIA is to calculate returns due to
- FX return
No CSV reports are to be generated.
The contents of the portfolio file, FUND1.CSV, are
The contents of the benchmark file, INDEX.CSV, are
Summary risk report
This report shows the portfolio's return from all sources of risk, aggregated by time and by security. The overall return is the actual return of the portfolio over the given interval.
Summary security report
This report shows the individual securities in the portfolio and the performance contributions arising from their exposures to the selected risks.
The totals at the right of each row show the overall performance contribution from each security, which is equal to the security's weight multiplied by the return of the security. Note that the numbers may be adjusted very slightly by the geometric aggregation adjustment algorithm.
The totals at the foot of each column show the overall performance contribution generated by each source of risk. These totals aggregate to the overall return of the portfolio, which is the same as that in the summary risk report.
Bucketed exposure report
This report shows the exposures of the portfolio by maturity bucket. The maturity buckets may be customized by using the MaturityBucket option in the configuration file.
Static risk report
This report shows the exposures and risks of individual securities in the portfolio and their associated risk numbers (yield to maturity, modified duration, convexity). None of the risk numbers were provided, so they have been calculated internally.
The totals at the foot of each column show the risk numbers for the entire portfolio.
Relative summary risk report
This report shows the aggregated risk contributions from the portfolio and the benchmark, and the active returns in the last column. The return due to parallel shifts is zero, as expected, because the modified duration of the portfolio and the benchmark are the same.
Relative bucketed exposure report
This report shows the exposures of the portfolio and benchmark by maturity bucket, and the relative exposures (over or under weight) in the last column. The maturity buckets may be customized by using the MaturityBucket option in the configuration file.
Reporting for subportfolios
If a portfolio contains one or more subportfolios, FIA generates a full set of reports for each.
Consider the following portfolio, which contains cash and an interest rate swap. For clarity, we have omitted the corresponding entries at the start of the interval.
- Subportfolio SWAP3 contains two securities, SWAP_FIXED and SWAP_FLOAT.
- Portfolio FUND3 contains holdings in CASH and in subportfolio SWAP3.
In this case, FIA generates a full set of reports for portfolio FUND3 and another full set of reports for portfolio SWAP3. If the switch RootLevelOnly is defined and set to True in the configuration file, then only reports for the top level portfolio (FUND3) are generated.
The holdings, risks and returns generated by subportfolios are displayed as if the subportfolio is a security in its own right. For instance, the weighted security attribution report for portfolio FUND3 is as shown:
In fact, the sythetic security SWAP3 had a much higher return (12.51%), as can be seen from the weighted security attribution report for this subportfolio:
If we examine the unweighted security risk file for the top level portfolio FUND3, the return of this subportfolio is the same, as expected:
1A flaw of both Brinson models is the inclusion of the interaction or other term. Interaction is not part of the investment process; you are unlikely to identify in any asset management firm individuals responsible for adding value through interaction. (Bacon, Carl; Practical portfolio performance measurement and attribution, second edition, Wiley, 2008)