Reporting

Introduction

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.

Geometric compounding

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:

where

is the geometrically-adjusted performance contribution for 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

Arithmetic compounding of attribution returns, using the Carino smoothing algorithm, is available in the current release of FIA.

Reports

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

Risk reports

• 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

Report formats

Format types

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.

<PF>_SUMMARY_STRESS <BM>_SUMMARY_STRESS <PF>_vs<BM>_SUMMARY_STRESS
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.

<PF>_BUCKETED_EXPOSURES <BM>_BUCKETED_EXPOSURES <PF>_vs<BM>_BUCKETED_EXPOSURES
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.

<PF>_<REPORT_SECTORS>_DRILLDOWN N/A <PF>_vs_<BM>_<REPORT_SECTORS>_DRILLDOWN
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

Format switches

Individual types of report can be enabled by using the appropriate switch in the configuration file, as described in the Reporting options section on the Configuration file page.

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.

Sample reports

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.

Configuration file

PortfolioFile = fund1.csv
BenchmarkFile = index1.csv
SecurityFile = sec_defs.csv
YieldCurveFile = yc1.csv
StressFile = stress.csv
SovereignCurveDecomposition =stb
DateFormat = %d-%b-%Y
SecurityDateFormat = %d-%b-%y
PortfolioDateFormat = %d-%b-%y
YieldCurveDateFormat = %d-%b-%y
CouponDecomposition = aggregated
CSVreport = no
XLSreport = yes
AverageCurveLevel = trapezoidal


Here, the user has specified that FIA is to calculate returns due to

• Time
• Shift
• Twist
• Curvature
• Convexity
• Residual
• FX return

No CSV reports are to be generated.

Portfolio file

The contents of the portfolio file, FUND1.CSV, are

 2-Aug-04 FUND1 HUTC_65_151106 0 0 0 2-Aug-04 FUND1 ABN_55_150908 0 0 2-Aug-04 FUND1 IADB_575_150611 0 0 0 31-Aug-04 FUND1 HUTC_65_151106 0.32552 0.01174 0.01174 31-Aug-04 FUND1 ABN_55_150908 0.30713 0.01071 0.01071 31-Aug-04 FUND1 IADB_575_150611 0.36735 0.01324 0.01324

Benchmark file

The contents of the benchmark file, INDEX.CSV, are

 2-Aug-04 INDEX1 CGL_9_150904 0 0 0 2-Aug-04 INDEX1 CGL_75_150705 0 0 0 2-Aug-04 INDEX1 CGL_10_150206 0 0 0 2-Aug-04 INDEX1 CGL_675_151106 0 0 0 2-Aug-04 INDEX1 CGL_10_151007 0 0 0 2-Aug-04 INDEX1 CGL_875_150808 0 0 0 2-Aug-04 INDEX1 CGL_75_150909 0 0 0 2-Aug-04 INDEX1 CGL_575_150611 0 0 0 2-Aug-04 INDEX1 CGL_65_150513 0 0 0 2-Aug-04 INDEX1 CGL_625_150415 0 0 0 2-Aug-04 INDEX1 CGL_6_150217 0 0 0 31-Aug-04 INDEX1 CGL_9_150904 0.0985615 0.00412617 0.00412617 31-Aug-04 INDEX1 CGL_75_150705 0.108013 0.00418888 0.00418888 31-Aug-04 INDEX1 CGL_10_150206 0.024423 0.00523053 0.00523053 31-Aug-04 INDEX1 CGL_675_151106 0.122239 0.00624886 0.00624886 31-Aug-04 INDEX1 CGL_10_151007 0.0647215 0.0083575 0.0083575 31-Aug-04 INDEX1 CGL_875_150808 0.112762 0.00978457 0.00978457 31-Aug-04 INDEX1 CGL_75_150909 0.121659 0.0113603 0.0113603 31-Aug-04 INDEX1 CGL_575_150611 0.112375 0.0147222 0.0147222 31-Aug-04 INDEX1 CGL_65_150513 0.0981553 0.0173608 0.0173608 31-Aug-04 INDEX1 CGL_625_150415 0.101128 0.0195144 0.0195144 31-Aug-04 INDEX1 CGL_6_150217 0.035963 0.0220845 0.0220845

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.

 31-Aug-04 FUND3 CASH 1 0 0 31-Aug-04 SWAP3 SWAP_FIXED 1.1 0.0265 0.0265 31-Aug-04 SWAP3 SWAP_FLOAT -0.9 0.0046 0.0046 31-Aug-04 FUND3 SWAP3 1 1 1
• 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)

2Ibid.