I was doing a routine review of my finances recently and wanted to know how my Superannuation was performing relative to other funds. I am a firm believer in the utility of benchmarking in the metallurgical world so why not bring this idea home and see how my fund is doing.
To benchmark, however, you need data. Luckily, the Australian Prudential Regulation Authority (APRA) do great work and publish Annual Fund-level Superannuation Statistics and importantly, the data isn’t locked up in a PDF but in a standard, wide-format xlsx file.
To load this data into R, I used the $readxl$ package, however, on a messier data set, I would have opted for $tidyxl$ which decomposes a workbook into a very primitive, tidy format.
A quick look at the file structure indicates that the data needed some basic tidying on the import step.
Some of the issues with this file from a data import perspective:
Headers start in row 5, not row 1
There are blank rows between the header and the data (rows 6-7)
Not all columns are uniquely named
Headers are optimised for readability, not programming (contain spaces, apostrophes, mixed cases and other unusual text artefacts)
To clean the column names, I used regular expressions to efficiently find and replace the undesirable characters and specify the ‘skip’ and ‘na’ arguments of the ‘read_xlsx’ function.
As always, I used the pipe operator from dplyr ($\%>\%$) to send the output of one function to the inputs of the next. This gives us a clean dataframe that looked like below:
Table 3, unfortunately, didn’t play nice and when we clean the column names, I got a collision. Dplyr dutifully throws an error stating that you can’t have two columns in a dataframe with the same name. To prevent this, I preempted the problem and prefixed the offending column (60) with its category (investment). This workaround breaks the pipeline but made my life easier.
The original table reports the Operating Expense Ratio rounded to 1 decimal place and lost a lot of detail, thankfully, however, the calculation is documented, and I could recreate it. Note, however, that Advice Expenses (column BV) were excluded from the default calculation. This difference skews the real operating costs as this is a large part of some funds expenses (see below). Advice fees have been included into the re-calculated operating expense ratios to account for the difference.
I now had two tables, one with the returns data and the other with the fee data. I used a SQL style inner join on the ABN to create a new dataset with both pieces of information.
There are also two new ratios, the operating performance ratio which is a measure of the performance per unit of cost. As you pay more, you should expect a better return, similar to a risk-return curve when evaluating stocks and portfolios. I now could start to explore the data-set.
Some interesting general trends emerged:
Eligible rollover funds (ERF) are expensive and have poor returns so it pays to consolidate your super.
Industry funds have lower fees and higher returns than retail funds
Corporate funds have comparable or lower fees than industry funds for similar returns (Except for the Goldman Sachs & JBWere Superannuation fund)
Economies of scale are at play with large funds typically having lower fees and higher returns than smaller funds
I zoomed in on the cluster of funds with Operating Expense Ratios between 0.1% and 3% with 5-year returns above the median. Could I even get into all of these funds?
Some new general trends emerged:
Most corporate funds are not publicly available (makes sense) and are less expensive then retail funds or industry funds
Some industry funds are non-public (Unisuper, Meat Industry Employees, Victorian Independent Schools etc)
Was the trend the same over 10 years or was this a recent phenomenon?
The trends were very similar, some movement in the top left but the overall positions were the same indicating systematic factors. I then looked at how the funds compare regarding returns per unit of operating cost. As before, I focused and labelled only the top 20% of funds.
Goldman Sachs was still up the top but Unisuper, Perpetual WealthFocus and the Public Sector funds were now at the top of the pack however Unisuper was and still is closed to the public and I am personally not a fan of small funds from a risk perspective. My preferred option was a large fund, with good performance per unit cost and returns. To codify that criteria, I focused on publicly available funds that are in the top 20% of funds by performance ratio and returns.
With these metrics and a five-year outlook, my fund was getting thoroughly out-competed. As a result, I started a process to consolidate my Superannuation and swap providers.
Obviously, this is subjective to my circumstance, and I am certainly not a financial adviser so don’t view this as advice, focus instead on the techniques and methods of data manipulation and analysis and see what other data sets you can find to benchmark against.