Altman Z-Score Backtest

It’s been a while since I’ve posted a new backtest, but I plan on posting quite a few in the coming weeks. For this backtest, I’m going to be examining the Altman Z-score. Edward I. Altman published the Z-score in 1968 to to predict the probability that a firm will go into bankrupt. The Altman Z-score is a widely used and easy to calculate formula to estimate a firm’s financial distress. The original formula was based on a study of a pair-matched sample of 66 firms, half of which filed for bankruptcy. It should also be noted that all these firms were manufacturers and that these balance sheet factors are not appropriate for use to estimate the financial distress of financial companies. Altman stated that a Z-score less than 1.81 indicates a company is financially distressed.

For this backtest, I calculated the Altman Z-score as follows:

Z = 1.2 * AltmanX1 + 1.4 * AltmanX2 + 3.3 * AltmanX3 + 0.6 * AltmanX4 + 1.0 * AltmanX5

AltmanX1 = working capital / total assets
AltmanX2 = retained earnings / total assets
AltmanX3 = earnings before interest and taxes / total assets
AltmanX4 = market value of equity / book value of total liabilities
AltmanX5 = sales / total assets

I used the data and backtesting tool provided by Portfolio123. The Portfolio123 backtesting eliminates the problem of survivorship bias by using point-in-time data and retaining data on stocks that have gone to zero. This backtest uses a similar filtered universe of stocks as my Mebane Faber Shareholder Yield backtest. The only major difference is that I changed the benchmark to the S&P equal weight benchmark with dividends (RSP). I’ve designed the filtering criteria for this backtest with a focus on enhancing data quality. The filters include the following criteria:

  1. No OTC stocks. Stocks not traded on the New York Stock Exchange, NASDAQ, or American Stock Exchange markets are excluded. The quality of fundamental stock data for OTC can be somewhat lower and less timely that that for stocks traded on major exchanges.
  2. No ADRs. Fundamental data for foreign American Depositary Receipt can include errors due to currency exchange, different accounting standards, and share count.
  3. Exclude the Financial Sector. The Altman Z-score does was not designed to be used for banks and other financial sector companies.
  4. Liquidity test. Instead of using the average daily total dollar amount traded, we revised this liquidity test based in part on Randy Harmelink comment. The minimum daily total amount traded over the past 42 trading days must be larger than $100,000.  This amount was selected so that a $1 million dollar portfolio could hold 100 positions and that each new $10,000 position would not exceed 10 percent of a day’s trading volume. The liquidity test also ensures that the backtest has reliable market price information for any of the stocks that are being tested.
  5. Market Cap > $50 million. This filter was revised back to $50 million based on reader feedback. Nano cap stocks are excluded to help improve data quality. This filter also ensures that positions in a modest sized portfolio never exceed one percent of shares outstanding or the available float for a company.
  6. Price > $1. True penny stocks are excluded due to various information issues and manipulation of these stocks.
  7. Altman Z-score Original != NA. We want to make sure we are only looking at companies that have valid data for the Altman Z-score.

After these filters are applied, we are left with approximately 2,400 to 3,100 stocks. These stocks are then ranked by the criteria being tested; in this case, we are testing the Altman Z-score. The lowest 20 percent of stocks ranked by Altman Z-score are placed in the first quintile and the next 20 percent in the second quintile and so forth until we have five portfolios of stocks. The portfolios are rebalanced every 12-months and compounded annually to more realistically replicate what an individual investor might be expected to do to avoid higher short-term capital gains tax and trading costs. The following 5 charts display the quintile returns for the Altman Z-score in red and the S&P 500 Equal Weight Index in blue.  The first quintile includes the companies that have Altman Z-scores less than 1 and the 5th quintile includes the companies that had the highest Altman Z-scores.

Altman Z-Score Backtest Returns (2000 – 2017)

Altman Z-Score Backtest 1st Quintile chart
Altman Z-Score Backtest 1st Quintile

The first quintile seems to match the performance of S&P 500 equal weight benchmark for most years, but started underperforming in the second half of 2015 until then the end of 2017.

Altman Z-Score Backtest 2nd Quintile chart
Altman Z-Score Backtest 2nd Quintile
Altman Z-Score Backtest 3rd Quintile results chart
Altman Z-Score Backtest 3rd Quintile
Altman Z-Score Backtest 4th Quintile results chart
Altman Z-Score Backtest 4th Quintile
Altman Z-Score Backtest 5th Quintile results chart
Altman Z-Score Backtest 5th Quintile

The top 20% of stocks as ranked by Altman Z-score surprisingly underperformed the benchmark in the 2000 to 2017 time period.

Summary of Results for the Altman Z-Score Backtest

Backtest of the Altman Z-score results
18-year backtest of the Altman Z-score
Average annual excess returns from 2000 to 2017 for the Altman Z-Score bar chart
Average annual excess returns from 2000 to 2017 for the Altman Z-Score

The first quintile did not clearly underperform the benchmark. That is surprising given that Altman Z-score was designed to detect companies that could face bankruptcy. While the average annual excess returns increased linearly from the 1st to 3rd quintiles, the performance of the 4th and 5th quintile drops off dramatically. While it might be expected that an indicator designed to detect financial distress might not be good at predicting outperformance, I’m surprised at how poorly this complex indicator performs.

I encourage you to try backtesting other valuation ratios. Just sign up for a free 30-day trial at Portfolio123 and report your findings in the comments section below.

One thought on “Altman Z-Score Backtest

  • March 19, 2018 at 9:35 am

    Very interesting results. Not what I would have expected. Thanks for the information George.

Leave a Reply

Your email address will not be published. Required fields are marked *