Article

Economic Value Added

Alex Putkov
Developer Advocate Developer Advocate

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

12/31/2018

12/31/2017

12/31/2016

12/31/2015

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

12/31/2018

12/31/2017

12/31/2016

12/31/2015

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

12/31/2018

12/31/2017

12/31/2016

12/31/2015

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%

 

Complete source code for this article can be downloaded from Github

https://github.com/Refinitiv-API-Samples/Article.EikonAPI.Python.EconomicProfit