Introduction

Economic value added (EVA, also known as Economic profit) measures how much a firm's returns exceed those required by suppliers of capital. In other words, it tells one how much wealth the firm has created for company shareholders. EVA is the net profit less the capital charge for raising the company's capital. The idea is that value is created when the return on the firm's economic capital employed exceeds the cost of that capital. There are two ways to calculate EVA. The first one is

EVA = NOPAT - WACC * Total Capital

In the above formula NOPAT is the net operating profit after tax, WACC is weighted average cost of capital and Total Capital is the sum of debt and equity. The second formula for EVA is

EVA = EBIT * (1 - t) - $WACC

Here EBIT is earnings before interest and tax, t is the marginal tax rate and $WACC is the dollar cost of capital. 

In this article we're going to use the first formula to calculate EVA.

The Discounted Cash Flow (DCF) model states that the intrinsic value of a firm equals the present value of its future free cash flows. In other words, if we are lucky enough to know the future free cash flows, they can be discounted into a single present value. Economic profit is based on the same idea. The only difference is that, under economic profit, the intrinsic value of the firm is broken into two parts: invested capital, plus the present value of future economic profits. Here is the comparison: 

DCF
Intrinsic Value = Present Value of Future Free Cash Flows 

Economic Profit
Intrinsic Value = Invested Capital + Present Value of Future Economic Profits

EVA is a development of three simple ideas: cash is king; some expenses are in fact investments in disguise; and equity capital is expensive.

Let’s look at these ideas and their implications a little closer.

  1. Cash flows is the best indicator of performance. However, the accounting distortions can skew this indicator. For this reason, in EVA model accrual-based operating profit (EBIT) is translated into cash-bashed net operating profit after taxes (NOPAT). 
  2. Some expenses are really investments and should be capitalized as balance sheet items (equity or debt). 
  3. Equity capital is expensive or at the very least not free. Therefore, in EVA model a capital charge for invested capital is deducted from NOPAT to calculate Economic profit.

And now let’s see how these ideas can be implemented. First let's get some basic company info.

In [3]:

company_info_df, err = ek.get_data(stock_ric,['TR.CommonName',
                                              'TR.HeadquartersCountry',
                                              'TR.ExchangeName',
                                              'TR.TRBCIndustryGroup',
                                              'TR.TRBCSector',
                                              'TR.CompanyReportCurrency'])
company_info_df = company_info_df.set_index(['Instrument'])
curr = company_info_df.loc[stock_ric,'Currency Code']
display(company_info_df.T)

Out [3]:

Instrument IBM.N
Company Common Name International Business Machines Corp
Country of Headquarters United States of America
Exchange Name NEW YORK STOCK EXCHANGE, INC.
TRBC Industry Group Name Software & IT Services
Currency Code USD

Net Operating Profit after Taxes

The idea behind NOPAT is to get a cash-based measure of operating performance. Net operating profit after tax measures the operating profit made for all investors, both shareholders and debt holders. There’s no exact analog of NOPAT on the income statement. Moreover, since GAAP does not mandate any one particular presentation of the income statement, calculating NOPAT may require paying careful attention to the line items. Some critics of EVA model argue that economic profit requires anywhere between 50 and 150 adjustments. However, most users of EVA model agree that the approximation found after less than a dozen adjustments is good enough, and that beyond a handful of adjustments you are only fine-tuning the NOPAT number. From an investor's perspective, a multitude of adjustments is not necessary. In using economic profit, the investor's priority is consistency and comparability. In other words, calculating economic profit with very high precision is less important than ensuring the method of calculation is consistent from year to year and from peer to peer.

The adjustments typically made for the purpose of calculating NOPAT may include removing the effects of goodwill and other non-cash items, treating R&D expenditure as an investment rather than a current expenditure and treating operating lease rentals as interest. In the example below we add supplemental rental expense to the operating income for the purpose of calculating NOPAT.

In [4]:

nopat_df, err = ek.get_data(stock_ric, ['TR.OperatingIncome.ped',
                                        'TR.OperatingIncome',
                                        'TR.RentalExpenseSupplemental',
                                        'TR.ProvisionForIncomeTaxes'],
                           {'Scale':'6', 'Period':'FY0:FY-3', 'Frq':'FY'})
nopat_df.drop('Instrument', axis=1, inplace=True)
nopat_df = nopat_df.set_index(['Period End Date'])
nopat_df['Provision for Income Taxes'] = -nopat_df['Provision for Income Taxes']
nopat_df['Net Operating Profit After Tax'] = nopat_df.sum(axis=1)
display(nopat_df.T.style.format('{:,.0f}'))

Out [4]:

Period End Date 2018-12-31 2017-12-31 2016-12-31 2015-12-31
Operating Income 11,342 11,400 12,330 15,944
Rental Expense, Supplemental 1,944 1,821 1,508 1,474
Provision for Income Taxes -582 -167 -449 -2,581
Net Operating Profit After Tax 12,704 13,054 13,389 14,837

Total adjusted capital

Calculating invested capital is an important step in finding economic profit because a key idea underlying this metric is charging the company for its use of capital. In order for the company to generate a positive economic profit, it must cover the cost of using the invested capital. 

Total Adjusted Capital is calculated as sum of Total Debt and Equity adjusted for Goodwill Amortization, Present Value of Operating Lease Obligations and any other relevant adjustment depending upon the business. In the example below we calculate Total Adjusted Capital by summing up Total Debt, Minority Interest, Preferred Stock, Total Equity, Goodwill Amortization and Present Value of Operating Leases. The latter is calculated by discounting the value of operating lease payments in years 1 through year 6 and beyond using the company's cost of debt.

In [5]:

tot_adj_cap_df, err = ek.get_data(stock_ric, ['TR.TotalDebt.ped',
                                              'TR.TotalDebt',
                                              'TR.MinorityInterestBSStmt',
                                              'TR.RedeemablePreferredTtl',
                                              'TR.PreferredStockNonRedeemableNet',
                                              'TR.TotalEquity',
                                              'TR.AccumulatedGoodwillAmortSuppl',
                                              'TR.OperatingLeasePymtsDueinYear1',
                                              'TR.OperatingLeasePymtsDueinYear2',
                                              'TR.OperatingLeasePymtsDueinYear3',
                                              'TR.OperatingLeasePymtsDueinYear4',
                                              'TR.OperatingLeasePymtsDueinYear5',
                                              'TR.OperatingLeasePymtsDueinYear6AndBeyond',],
                                  {'Scale':'6', 'Period':'FY0:FY-3', 'Frq':'FY'})
tot_adj_cap_df.drop('Instrument', axis=1, inplace=True)
tot_adj_cap_df = tot_adj_cap_df.set_index(['Period End Date'])
cost_of_debt = ek.get_data(stock_ric,'TR.WACCCostofDebt')[0].iloc[0,1]
tmp_df = tot_adj_cap_df[['Operating Lease Payments Due in Year 1',
                'Operating Lease Payments Due in Year 2',
                'Operating Lease Payments Due in Year 3',
                'Operating Lease Payments Due in Year 4',
                'Operating Lease Payments Due in Year 5',
                'Oper Lease Pmnts Due in Years 6 and Beyond']]
tmp_df.insert(0,'Operating Lease Payments Due in Year 0',0)
tot_adj_cap_df['Present Value of Operating Leases'] = tmp_df.apply(lambda x: np.npv(cost_of_debt, x), axis=1)
tot_adj_cap_df.drop(columns = tmp_df.columns, errors='ignore', inplace=True)
tot_adj_cap_df['Total Adjusted Capital'] = tot_adj_cap_df.sum(axis=1)
display(tot_adj_cap_df.T.style.format('{:,.0f}'))

Out [5]:

Period End Date 2018-12-31 2017-12-31 2016-12-31 2015-12-31
Total Debt 45,812 46,824 42,168 39,889
Minority Interest 134 131 146 162
Redeemable Preferred Stock, Total nan nan nan nan
Preferred Stock - Non Redeemable, Net nan nan nan nan
Total Equity 16,795 17,594 18,246 14,262
Accumulated Goodwill Amortization Suppl. nan nan nan nan
Present Value of Operating Leases 515 543 485 459
Total Adjusted Capital 63,256 65,092 61,045 54,772

EVA

The last step in calculating EVA requires subtracting capital charge from NOPAT. Capital charge is calculated by multiplying invested capital by WACC (weighted average cost of capital). WACC is not a trivial calculation. It requires estimating the cost of debt and the cost of equity. Luckily WACC is calculated by Refinitiv StarMine analytics and can be directly retrieved from Eikon, so we're now ready to calculate EVA. In addition to calculating EVA in dollar terms in the example below we're also calculating EVA as a percentage of Total Adjusted Capital.

In [6]:

eva_df, err = ek.get_data(stock_ric,['TR.WACC.date','TR.WACC'],{'SDate':0, 'EDate':-3, 'Frq':'FY'})
eva_df['Weighted Average Cost of Capital'] = eva_df['Weighted Average Cost of Capital, (%)'] / 100
eva_df.drop(['Instrument','Weighted Average Cost of Capital, (%)'], axis=1, inplace=True)
eva_df['Date'] = eva_df['Date'].str.slice(0,10)
eva_df = eva_df.set_index(['Date'])
eva_df['NOPAT'] = nopat_df['Net Operating Profit After Tax']
eva_df['Total Adjusted Capital'] = tot_adj_cap_df['Total Adjusted Capital']
eva_df['Cost of Capital'] = eva_df['Total Adjusted Capital'] * eva_df['Weighted Average Cost of Capital']
eva_df['NOPAT Return on Adjusted Capital'] = eva_df['NOPAT'] / eva_df['Total Adjusted Capital']
eva_df['Economic Value Added ($)'] = eva_df['NOPAT'] - eva_df['Cost of Capital']
eva_df['Economic Value Added (%)'] = (eva_df['NOPAT Return on Adjusted Capital'] - 
                                     eva_df['Weighted Average Cost of Capital'])
format_mapper = {'NOPAT':'{:,.0f}','Total Adjusted Capital':'{:,.0f}','Cost of Capital':'{:,.0f}',
                 'Economic Value Added ($)':'{:,.0f}','Weighted Average Cost of Capital':'{:.2%}',
                 'NOPAT Return on Adjusted Capital':'{:.2%}','Economic Value Added (%)':'{:.2%}'}
display(eva_df.T.apply(lambda s: s.map(format_mapper.get(s.name).format), axis=1))

Out [6]:

Date 2018-12-31 2017-12-31 2016-12-31 2015-12-31
Weighted Average Cost of Capital 7.92% 5.99% 6.44% 5.13%
NOPAT 12,704 13,054 13,389 14,837
Total Adjusted Capital 63,256 65,092 61,045 54,772
Cost of Capital 5,010 3,900 3,934 2,810
NOPAT Return on Adjusted Capital 20.08% 20.05% 21.93% 27.09%
Economic Value Added ($) 7,694 9,154 9,455 12,027
Economic Value Added (%) 12.16% 14.06% 15.49% 21.96%