Intrinsic Value Calculation - Graftech

Published September 17, 2019

Industry Overview - Graphite Electrode Market

Graphite electrodes are used to create the electric arc which melts down scrap metal in the furnace. These electrodes get consumed as part of the steel making process, and account for about 5% of the steel cost. There is no substitute for graphite electrodes in the EAF steelmaking process. This makes the material a strategic resource rather than just a commodity.

Two types of steel making. Basic Oxygen Furnace, and Electric Arc Furnace. EAF steel is more expensive, but the foundries are cheaper to build than BOF steel foundries. It’s also more environmentally friendly, and is able to melt down scrap metal at high temps. Whereas BOF requires raw ore to produce steel.

The graphite electrode market is projected to grow at a healthy rate over the next five years. Primarily due to electric arc furnace (EAF) steel getting higher penetration, particularly in China and India. Over time, more steel production is switching from BOF to EAF, so even if overall steel demand falls, EAF demand will take up a larger share of total steel.

  • In terms of EAF steel penetration. US already at 67%, other regions around 40%, and China is only 9% EAF.
  • Chinese government targeting 20% EAF by 2020.
  • China also trying to increase capabilities of producing ultra high power (UHP) graphite electrodes used for EAF steel. However, there is questionable quality. Most of the increased capacity in China will go to feed domestic EAF projects.
  • There’s also a global trend towards more protectionism against Chinese steel.

The primary raw material to make graphite electrodes is petroleum needle coke. Needle coke is in high demand. There was a global shortage in 2018, which has somewhat subsided. This resulted in higher inventories of graphite electrodes being carried by steel producers since everyone was buying as much as they can. The inventories are being worked off.

  • Prices were driven high, and have maintained roughly the same levels since then.
  • Needle coke is also used for the production of synthetic graphite used in EV car batteries. EV car batteries use a mix of synthetic and natural graphite. There’s actually more graphite in a Lithium Ion car battery than there is Lithium.

Increased demand for EAF steel, no substitutes for graphite electrodes in the EAF steel making process, and limited production capacity of needle coke and graphite electrodes are all reasons which will drive demand for graphite electrodes.

References:

2020, EVs, and steel — a perfect storm in the needle coke sector?

Graphite Electrode Market for the Metal Industry is Projected to Grow at a Healthy Rate Over the Next Five Years to Reach US$ 15.3 Billion in 2024

Needle Coke Market Expected To Generate A CAGR of 5.5% By 2026

Graftech Investment Thesis

Graftech is a leading producer of graphite electrodes, which are essential to the production of electric arc furnace (EAF) steel.

  • Capabilities of 230,000 MT annually
  • Roughly equal to largest competitor
  • Total worldwide (ex China) capability is 800,000 MT
  • However China graphite electrodes are used for ladle electrodes for BOF. They do not have as much capability for UHP electrodes. Neither skill, nor high quality needle coke.

In 2010, Graftech purchased Seadrift co. The worlds #2 leading producer of needle coke.

  • This vertical integration provides Graftech with a competitive advantage. They get 70% of their needle coke in house from Seadfift. So it has protected margins by allowing them to keep costs low.

Graftech also has long term contracts in place locking in 675,000 metric tons at an average price of $9,800 / MT (2018 - 2023)

  • Relative to 2018 sales, total annualized contracts account would account for roughly 80%, 77%, 69% and 65% of 2019, 2020, 2021, and 2022 sales respectively. This means that if the entire steel market tanked, Graftech would expect to at least book those % in sales through 2022.

In Q2 of 2019, Mohnish Pabrai took a fairly large position somewhere between 9.91 to 11.73 per share. Current price as 9-13-2019, is 13.53.

Going from most to least conservative valuation method, the intrinsic value of Graftech is calculated as the following:

Liquidation Value:

  • The adjusted total assets are: 2,002,426
  • The liquidation value per share is: 6.89
  • The total long term debt is: 2,050,311
  • The liquidation value after debt is: -47,885
  • The liquidation value after debt per share is: -0.16

Asset reproduction value:

  • The asset reproduction value is: 4,848,888
  • The asset value after debt is is: 2,798,577
  • The asset value after debt per share is: 9.63
  • Based on this calculation, Graftech is trading at a 29% premium

Earnings power value:

  • The Earnings Power Value is: 6,801,063.37
  • The Earnings Power Value after Debt & Cash is: 4,800,632.37
  • The Earnings Power Value after Debt & Cash per share is: 16.52
  • Based on this calculation, Graftech is trading at a 22% discount

You can see the huge impact debt has on valuations. The $2bn of long-term debt has a tremendous erosion on Graftech’s shareholder returns.

Graftech is generating a TTM $784M in free cash flow. Since their IPO, they have returned 71% of FCF to shareholders, with 25% going to pay down debt, and the remaining 4% retained. For 2019, they estimate allocating 50% of FCF to pay down debt. Given these assumptions, a discounted cash flow analysis would give the following valuation:

Discounted cash flow:

  • Assumptions:
  • 784M FCF a year, no growth.
  • Allocated 384M to debt per year for 5 years to pay off debt
  • That leaves 400M a year in FCF for 5 years
  • Starting year 6, debt has been paid off, and 784 FCF per year for remaining 5 years.
  • Terminal value of 5x FCF
  • Discount rate: 9%
  • The DCF intrinsic value is: 5.244Bn
  • The DCF intrinsic value per share is: 18.05
  • Based on this calculation, Graftech is trading at a 25% discount

EAF’s earnings power value is nearly double it’s asset values. This means the company is generating more earnings than its assets warrant. EAF likely enjoys a competitive advantrage. Typically, when firms have a higher EPV to AV, this usually means they enjoy some form of barriers to entry, and have a superior management team.

All of these intrinsic value calculations assume zero growth. If the company did increase it’s sales or profit margins, then that would be extra gravy.

What about losses? What are some of the major risks which would potentially cause a significant loss of capital?

  • Graphite electrode prices could drop significantly - I think this is unlikely, since the primary cost is driven by petroleum needle coke. Needle coke demand, along with price continues to rise, even with crude oil at relatively low prices. Increased demand in needle coke due to EV batteries also provides a tail wind. But more importantly, EAF has locked in contracts with it’s customers at to sell graphite electrodes at these elevated prices going out to 2022.

  • Recession could dramatically lower demand for steel - Graftech is highly dependent on the steel industry. However, steel companies are already trading at historically low PE’s, so I think a lot of this negativity has been priced in already. Also, there is a global shift away from BOF and towards electric arc furnace steel. Which means even if overall steel production does not increase, the share of EAF steel should make gains. Again, Graftech is somewhat insulated here, due to existing contracts. Since graphite electrodes only make up 5% of steel production costs, it is unlikely that a customer will default on their order.


Detailed Analysis

Assets for Sale: Liquidation Value

Industry and Company Sustainability

Is the industry economically sustainable? If the industry has no future, then neither does the firm, and the income will drag down the value of those assets that cannot be transferred - particularly with intagibles and specialized equipment. If the industry is thriving, even a failing firm may sell transferable assets for decent prices.

Enter the amount of the total assets for the company. This will be the starting point from which we make any adjustments.

total_assets = 1505491 #In (000)
cash_cash_equivalents = 49880
receivables = 248286
inventories = 293717
ppe = 688842
goodwill = 171117
deferred_taxes_owed = 45825
long_term_debt = 2050311
shares_outstanding = 290537612
share_price = 13.53

Adjustments

  • Cash and Marketable Securities - No adjustments needed

  • Accounts receivables adjustment - Specialists can be used to collect/recover a % of receivables. Enter a % of how much we think can be recovered accounts receivable:

receivables_realized = .85
receivables_adjustment = receivables * (1 - receivables_realized)
print(f'New value of receivables: {receivables * receivables_realized:,.0f}')
print(f'Receivables Adjustment is: {receivables_adjustment:,.0f}')
New value of receivables: 211,043
Receivables Adjustment is: 37,243
  • Inventories - Depends on how transferrable it is. Commodities should be fully valued. Enter a % of how much we think can be realized in inventory sale:
inventories_realized = .9
inventories_adjustment = inventories * (1 - inventories_realized)
print(f'New value of inventories: {inventories * inventories_realized:,.0f}')
print(f'Inventories Adjustment is: {inventories_adjustment:,.0f}')
New value of inventories: 264,345
Inventories Adjustment is: 29,372
  • PPE - Generic buildings retain more book value than specialized structures. Land is typically at full market value. Enter a % of how much we can realize from PPE sales:
ppe_realized = 2
ppe_adjustment = ppe * (1 - ppe_realized)
print(f'New value of PPE: {ppe * ppe_realized:,.0f}')
print(f'PPE Adjustment is: {ppe_adjustment:,.0f}')
New value of PPE: 1,377,684
PPE Adjustment is: -688,842
  • Goodwill - In an asset sale, we ascribe no value to goodwill. It merely represents the excess over fair market value that the firm paid in making those acquisitions that may have gotten them in trouble! Enter the full value of goodwill to be impaired:
goodwill_impaired = 1.0 # percentage of goodwill to impaire in liquidation
goodwill_adjusted = goodwill * goodwill_impaired
print(f'Goodwill Adjustment is: {goodwill_adjusted:,.0f}')
Goodwill Adjustment is: 171,117
  • Deferred taxes - The refunds expected over time from the IRS - should be offset with deferred taxes owed. Enter the full value of deferred income tax liability:
deferred_taxes_adjustment = deferred_taxes_owed * -1 #Should be negative, since we are adding back in

Putting it all together:

We will make the following adjustments to get to a liquidation value:

total_adjustments = receivables_adjustment + inventories_adjustment + ppe_adjustment + goodwill_adjusted + deferred_taxes_adjustment
print(f'Total Adjustment is: {total_adjustments:,.0f}')
Total Adjustment is: -496,935
total_assets_adjusted = total_assets - total_adjustments
# Multiply by 1000 since all balance sheets numbers in 000
liquidation_value = (total_assets_adjusted * 1000) / shares_outstanding
liquidation_value_after_debt = total_assets_adjusted - long_term_debt
liquidation_after_debt_per_share = (liquidation_value_after_debt * 1000) / shares_outstanding
print(f'The total assets we started with are: {total_assets:,.0f}')
print(f'The adjustments made are: {total_adjustments:,.0f}')
print(f'The adjusted total assets are: {total_assets_adjusted:,.0f}')
print(f'The liquidation value per share is: {liquidation_value:,.2f}')

print(f'The liquidation value after debt is: {liquidation_value_after_debt:,.0f}')
print(f'The liquidation value after debt per share is: {liquidation_after_debt_per_share:,.2f}')


The total assets we started with are: 1,505,491
The adjustments made are: -496,935
The adjusted total assets are: 2,002,426
The liquidation value per share is: 6.89
The liquidation value after debt is: -47,885
The liquidation value after debt per share is: -0.16

Remember, we still need to account for liabilities. How much debt does the company carry? In the case of a liquidation, debt holders are first in line to recover capital. Need to review what the asset value is after we deduct debt.


Reproduction Value: How much to get into the Business?

Assuming the business is economically viable in a sustainable industry, what would it take for a competitor to get into this business?

The following adjustments to book value must be made to get an accurate reproduction value:

  • Accounts receivable
  • Inventory
  • PPE
  • Intangibles

Let’s take a look at the following adjustments for EAF:

Adjustments

  • Cash and Marketable Securities - No adjustments needed

  • Accounts receivables adjustment - A new firm starting is more likely to get stuck by customers who do not pay their bills. We need to add back allowance for doubtful accounts.

allowance_doubtful_accounts = 1129
  • Inventory - If company uses FIFO our attention should be drawn to an inventory that has been piling up if it equals 150 days worth of the cost of goods sold in the current year, whereas previously it had averaged only 100 days, then the additional 50 days may represent items that will never sell or will sell only at closeout prices. In this instance, we would lower the reproduction costs. On the other hand, if company uses LIFO for inventory, and if prices of the items it sells has been rising, then reproduction costs exceed the old recorded costs and should be marked up.

EAF uses FIFO accounting method for inventory. Inventories are stated at the lower of cost or market. Given it’s a commodities business, no major adjustments are required.

inventory_reproduction = 1
inventory_reproduction_adj = inventories * (inventory_reproduction - 1)
print(f'Inventory Adjustment is: {inventory_reproduction_adj:,.0f}')
Inventory Adjustment is: 0

PPE Adjustments

  • Land - Property as land does not depreciate. Depending on where the land is located, and when it was purchased, the land may be worth more than is indicated on the balance sheet.

EAF own the following properties:

  • Monterrey, Mexico - Graphite electrode manufacturing facility and sales office
  • St. Mary’s, Pennsylvania - Graphite electrode manufacturing facility
  • Port Lavaca, Tx - Needle coke facility
  • Salvador, Bahia, Brazil - Graphite electrode machine shop and sales office
  • Calais, France - Graphite electrode manufacturing facility and sales office
  • Pamplona, Spain - Graphite electrode manufacturing facility and sales office
land = 45947
land_realized = 1.5 # percentage of land realized
land_adjustment = land * (land_realized - 1)
print(f'Land Adjustment is: {land_adjustment:,.0f}')
Land Adjustment is: 22,974
  • Buildings - Disparity between book value and reproduction cost could be large, depending on depreciation.
buildings = 68680
buildings_realized = 1.0 # percentage of buildings realized
buildings_adjustment = buildings * (buildings_realized - 1)
print(f'Building Adjustment is: {buildings_adjustment:,.0f}')
Building Adjustment is: 0
  • Equipment - Easiest to value at reproduction costs. It is depreciated over its useful life, and if it lasts somewhat longer, we are ahead of the game. If state of the art tools are required, then it actually may be cheaper for a new entrant, since these technologies become cheaper and more productive over time.
equipment = 532084
equipment_realized = 1.0 # percentage of equipment realized
equipment_adjustment = equipment * (equipment_realized - 1)
print(f'Equipment Adjustment is: {equipment_adjustment:,.0f}')
Equipment Adjustment is: 0

Intangibles

  • Goodwill - Should be done on a case by case basis. Identify the source, and if we think the excess paid to book value for acquisition was worth it.
goodwill_realized = 1.0 # percentage of goodwill realized
goodwill_adjustment = goodwill * (goodwill_realized - 1)
print(f'Goodwill Adjustment is: {goodwill_adjustment:,.0f}')
Goodwill Adjustment is: 0
  • Workforce Reproduction - We need to reproduce the workforce as well. There is a cost associated with hiriing and training employees. Typically 10% of annual salary replacement costs for blue collar workers, and 20% for white collar.
blue_collar_workers = 945 # How many blue collar employees are there?
blue_collar_salary = 25 * 2080 # average dollars per hour * hours per year
blue_collar_replacement = (blue_collar_workers * blue_collar_salary * .1) / 1000

white_collar_workers = 442 # How many white collar employees are there
white_collar_salary = 68000 # Average salary
white_collar_replacement = (white_collar_workers * white_collar_salary * .2) / 1000

print(f'Blue Collar Replacement Costs: {blue_collar_replacement:,.0f}')
print(f'White Collar Replacement Costs: {white_collar_replacement:,.0f}')
Blue Collar Replacement Costs: 4,914
White Collar Replacement Costs: 6,011
  • Brand value - Determine whether or not the brand has any value. What would it take for us to reproduce the brand? This can done by taking the amount it has spent each year on sales and marketing, and discounting it by the weighted average cost of capital. If it is a large firm, many times we can just google online for the brand value. We also apply a brand relevancy factor, so that firms in industries where the brand is more relevant get a higher weighting than firms in commoditized industries.

Since graphite electrodes are a commodities business, I did not assign any value to the brand.

sga_costs = 52506 # Selling and administrative expenses from Income Statement
percent_marketing = .8 # Enter percentage of SGA used for marketing and sales
annual_marketing = sga_costs * percent_marketing
wacc = .09 # Weighted average cost of capital
brand_relevancy_factor = 0 # How relevant is the brand in this industry? Luxury 1 - Commodity 0
brand_adjustment = (annual_marketing / wacc) * brand_relevancy_factor

print(f'Adjustment for brand value is: {brand_adjustment:,.0f}')
Adjustment for brand value is: 0
  • Product portfolio - Under GAAP accounting, firms cannot capitalize R&D. One conservative approach is estimate the average product life cycle, then multiply that by annual R&D costs.

Again, as EAF is in the commodities business, I did not assign much value to the product portfolio. There is some technical expertise / value that goes into producing UHP graphite electrodes, so I assigned a conservative amount rather than zero.

product_life_cycle = 1 # Number of years
research_development = 2129
product_portfolio_adjustment = product_life_cycle * research_development

print(f'Adjustment for Product Portfolio is: {product_portfolio_adjustment:,.0f}')
Adjustment for Product Portfolio is: 2,129
  • Licenses franchises or contracts - The firm may hold licenses to operate in certain markets, or have take or pay contracts with clients. These should be considered in the overall valuation.

In this case, EAF has $5.2Bn in take or pay contracts extending out through 2022. With needle coke pricing where it is, I believe these contracts should be considered as an asset. I further adjusted the value of the contracts by deducting a 37 percent cost of sales from the contract amount.

total_sales_contracts = 5248000
cost_of_sales = .37 # percent cogs
value_of_contracts = total_sales_contracts * (1 - cost_of_sales)

print(f'Adjustment for contracts / licenses is: {value_of_contracts:,.0f}')
Adjustment for contracts / licenses is: 3,306,240

Putting it all together:

We will add up all the adjustments to get the asset reproduction value.

reproduction_adjustments = allowance_doubtful_accounts + inventory_reproduction_adj + land_adjustment + buildings_adjustment + equipment_adjustment +goodwill_adjustment + white_collar_replacement + blue_collar_replacement + brand_adjustment + product_portfolio_adjustment + value_of_contracts
asset_reproduction = total_assets + reproduction_adjustments
av_per_share = (asset_reproduction * 1000) / shares_outstanding
print(f'The total assets we started with are: {total_assets:,.0f}')
print(f'Inventory Adjustment is: {inventory_reproduction_adj:,.0f}')
print(f'Land Adjustment is: {land_adjustment:,.0f}')
print(f'Building Adjustment is: {buildings_adjustment:,.0f}')
print(f'Equipment Adjustment is: {equipment_adjustment:,.0f}')
print(f'Goodwill Adjustment is: {goodwill_adjustment:,.0f}')
print(f'Blue Collar Replacement Costs: {blue_collar_replacement:,.0f}')
print(f'White Collar Replacement Costs: {white_collar_replacement:,.0f}')
print(f'Adjustment for brand value is: {brand_adjustment:,.0f}')
print(f'Adjustment for Product Portfolio is: {product_portfolio_adjustment:,.0f}')
print(f'Adjustment for contracts / licenses is: {value_of_contracts:,.0f}')
print('------------------------')
print(f'Total adjustments made to reproduce assets are: {reproduction_adjustments:,.0f}')
print(f'The asset reproduction value is: {asset_reproduction:,.0f}')
print(f'The asset value per share is: {av_per_share:,.2f}')
The total assets we started with are: 1,505,491
Inventory Adjustment is: 0
Land Adjustment is: 22,974
Building Adjustment is: 0
Equipment Adjustment is: 0
Goodwill Adjustment is: 0
Blue Collar Replacement Costs: 4,914
White Collar Replacement Costs: 6,011
Adjustment for brand value is: 0
Adjustment for Product Portfolio is: 2,129
Adjustment for contracts / licenses is: 3,306,240
------------------------
Total adjustments made to reproduce assets are: 3,343,397
The asset reproduction value is: 4,848,888
The asset value per share is: 16.69

Now we need to subtract out any long term debt. Since claims to the asset value of the whole enterprise are split between debt and equity holders.

asset_value_after_debt = asset_reproduction - long_term_debt
av_after_debt_per_share = (asset_value_after_debt * 1000) / shares_outstanding
av_margin_of_safety = (av_after_debt_per_share - share_price) / share_price

print(f'The asset reproduction value is: {asset_reproduction:,.0f}')
print(f'The total long term debt is: {long_term_debt:,.0f}')
print(f'The asset value after debt is is: {asset_value_after_debt:,.0f}')
print(f'The asset value after debt per share is: {av_after_debt_per_share:,.2f}')
if av_margin_of_safety > 0:
    print(f'Undervalued! The AV Margin of safety is: {av_margin_of_safety:,.2f}')
if av_margin_of_safety < 0:
    print(f'Overvalued! The AV Margin of safety is: {av_margin_of_safety:,.2f}')
The asset reproduction value is: 4,848,888
The total long term debt is: 2,050,311
The asset value after debt is is: 2,798,577
The asset value after debt per share is: 9.63
Overvalued! The AV Margin of safety is: -0.29

Earnings Power Value: Assets plus Franchise

What is the properly adjusted value of the firms current earnings? With EPV, we care only about current earnings, and do not try to forecast any future earnings into the calculation. It is one step less conservative than looking at pure asset values, but not as unreliable as trying to forecast future growth in earnings.

In short: EPV = Adjusted Earnings * 1/R where R is the current cost of capital. Cash flow is assumed to be constant, so the growth rate is zero.

The goal is to arrive at an accurate estimate of the firms current distributable cash flow.

The following adjustments are made to earnings prior to calculating EPV:

  • Cyclicality
  • Accounting misrepresentations / One-time charges
  • Capex, depreciation & amortization

Let’s calculate the earnings power value of EAF:

operating_income = 1093000 #TTM in 000

Adjustments

  • Cyclicality - Adjust for current position in business cycle.

In 2018 graphite electrode prices spiked. This is why 2018 operating income is dramatically higher than previous years. The biggest question is whether or not we believe this is the new normal. Based on industry analysis, it sounds like these prices are here to stay. But more importantly, EAF has locked in contracts with it’s customers at these high prices going out to 2022. So it is reasonable to believe we can use the TTM operating profits as an accurate representation of earnings.

However, as a value investor, let’s be conservative and adjust down 20% given the industry’s cyclical nature and company’s historical operating income.

  • Accounting misrepresentations - Adjust for ‘one-time’ charges that are not connected to normal operations. This could include special writedowns, acquisitions, one time costs etc…

No adjustments needed for EAF.

operating_income_realized = .80 # Adjust for cyclicality
operating_income_additional_adjustments = 0 # Special adjustments, writedowns etc...
adjusted_operating_income = (operating_income + operating_income_additional_adjustments) * operating_income_realized
print(f'Adjusted Operating Income is: {adjusted_operating_income:,.0f}')
Adjusted Operating Income is: 874,400
  • Capex, depreciation & amortization - Maintenance capex is required to restore a firms existing assets. Remove capex that was spent for growing the business. Adjust for goodwill writedowns.

To calculate maintenance capex, we do the following:

  • Find PPE as a % of sales to determine how much PPE is required to support 1 unit of sales.
  • Calculate sales growth from one year to the next
  • Multiply PPE as % sales to growth to determine how much PPE was required for that growth.
  • Subtract growth capex from total capex to get maintenance capex

Since EAF revenues are influenced by fluctuations in graphite electrode prices, using revenue numbers would not accurately reflect sales growth relative to PPE. Instead, I’ve normalized sales based on annual metric tons sold, using a historical inflation adjusted average of $4500 per metric ton.

import numpy as np
import pandas as pd
# Enter each year we are analyzing
epv_years = ['TTM', '2018', '2017', '2016', '2015']

# Enter TTM, and 4 previous years of sales
epv_sales = [832.5, 774, 733, 846, 819]

# Enter in PPE for each year
epv_ppe = [514, 513, 509, 654, 821]

# Enter capex for each year
epv_capex = [68,35, 28, 85, 86]

epv_depreciation = [66, 66, 66, 83, 120]

# Enter in the Sales for the previous 5 years (not counting TTM)
# We want to capture the 5th year in order to calcualate change in sales
# Example: 2018, 2017, 2016, 2015, 2014
epv_sales_no_ttm = [774, 733, 846, 819, 894]

# No changes necessary below this line
#-------------------------------------

# Calculates PPE as % of sales
epv_ppe_to_sales = np.array(epv_ppe) / np.array(epv_sales)

# Calculates sales growth
epv_sales_growth = np.array(epv_sales) - np.array(epv_sales_no_ttm)

# if sales growth is negative, set to 0
epv_sales_growth[epv_sales_growth < 0] = 0 

# Calculates growth capex 
epv_growth_capex = epv_sales_growth * epv_ppe_to_sales

# Calculates maintenance capex
epv_maintenance_capex = epv_capex - epv_growth_capex

# Calculates average PPE as % of Sales
epv_average_ppe_to_sales = np.average(epv_ppe_to_sales)

# Calculates average Capex
epv_average_capex = np.average(epv_capex)

# Calculates average maintenance capex used to adjust EPV
epv_maint_capex_adjustment = np.average(epv_maintenance_capex)


# Displays our data 
capex_index = ['Sales', 'PPE', 'PPE as % of Sales', 'Sales Growth', 'Capex', 'Growth Capex', 'Maintenance Capex', 'Depreciation & Amort']

maintenance_capex = pd.DataFrame(index=capex_index, columns=epv_years)
maintenance_capex.iloc[0] = epv_sales
maintenance_capex.iloc[1] = epv_ppe
maintenance_capex.iloc[2] = epv_ppe_to_sales
maintenance_capex.iloc[3] = epv_sales_growth
maintenance_capex.iloc[4] = epv_capex
maintenance_capex.iloc[5] = epv_growth_capex
maintenance_capex.iloc[6] = epv_maintenance_capex
maintenance_capex.iloc[7] = epv_depreciation
maintenance_capex.style.format('{0:,.2f}')
TTM 2018 2017 2016 2015
Sales 832.50 774.00 733.00 846.00 819.00
PPE 514.00 513.00 509.00 654.00 821.00
PPE as % of Sales 0.62 0.66 0.69 0.77 1.00
Sales Growth 58.50 41.00 0.00 27.00 0.00
Capex 68.00 35.00 28.00 85.00 86.00
Growth Capex 36.12 27.17 0.00 20.87 0.00
Maintenance Capex 31.88 7.83 28.00 64.13 86.00
Depreciation & Amort 66.00 66.00 66.00 83.00 120.00
print(f'The average % PPE to Sales is: {epv_average_ppe_to_sales:,.2f}')
print(f'The average capex is: {epv_average_capex:,.2f}')
print(f'The average EPV maintenance capex adjustment is: {epv_maint_capex_adjustment:,.2f}')
The average % PPE to Sales is: 0.75
The average capex is: 60.40
The average EPV maintenance capex adjustment is: 43.57

When adjusting depreciation charges, we need to subtract out maintenance capex.

Maintenance capex is the amount of money that a company would need to invest to replace depreciated capital.

If a company is taking a lot more depreciation relative to maintenance capex, ie… what’s required to sustain capital, then the sustainable earnings are MORE than reported.

If company is under reporting depreciation, then the earnings is lower than reported.

In the case of EAF, it looks like sustainable earnings are more than reported. So we need to adjust earnings by adding back depreciation, but subtract out the maintenance capex.

Putting it all together:

Let’s add up all the adjustments, and calculate Earnings Power Value

adjusted_earnings = adjusted_operating_income + epv_depreciation[0] - epv_maint_capex_adjustment
tax_rate = .30
adjusted_earnings_after_tax = adjusted_earnings * (1-tax_rate)
print(f'The pre-adjusted earnings are: {operating_income:,.2f}')
print(f'The adjusted earnings are: {adjusted_earnings:,.2f}')
print(f'The adjusted earnings after tax are: {adjusted_earnings_after_tax:,.2f}')
The pre-adjusted earnings are: 1,093,000.00
The adjusted earnings are: 874,422.43
The adjusted earnings after tax are: 612,095.70
wacc = .09 # From Gurufocus
earnings_power = adjusted_earnings_after_tax / wacc
earnings_power_net_debt = earnings_power + cash_cash_equivalents - long_term_debt
epv_per_share = earnings_power_net_debt / (shares_outstanding / 1000)
epv_margin_of_safety = (epv_per_share - share_price) / share_price
print(f'The Earnings Power Value is: {earnings_power:,.2f}')
print(f'The Earnings Power Value after Debt & Cash is: {earnings_power_net_debt:,.2f}')
print(f'The Earnings Power Value after Debt & Cash per share is: {epv_per_share:,.2f}')
if epv_margin_of_safety > 0:
    print(f'Undervalued! The EPV Margin of safety is: {epv_margin_of_safety:,.2f}')
if epv_margin_of_safety < 0:
    print(f'Overvalued! The EPV Margin of safety is: {epv_margin_of_safety:,.2f}')
The Earnings Power Value is: 6,801,063.37
The Earnings Power Value after Debt & Cash is: 4,800,632.37
The Earnings Power Value after Debt & Cash per share is: 16.52
Undervalued! The EPV Margin of safety is: 0.22

How do asset values compare with earnings power?

AV higher than EPV

  • Industry in decline
  • Mismanagement of assets
  • Assets that should not be in that firm, industry is dying out.
  • Should be squeezing more profits

EPV higher than AV

  • Barriers to entry
  • Company generating more earnings than assets warrant
  • Superior management, can price well above cost.

AV equal to EPV

  • Efficient asset management
  • Operating in competitive entry
print(f'The asset value after debt per share is: {av_after_debt_per_share:,.2f}')
print(f'The earnings power value after debt per share is: {epv_per_share:,.2f}')
The asset value after debt per share is: 9.63
The earnings power value after debt per share is: 16.52

EAF’s earnings power value is nearly double it’s asset values. This means the company is generating more earnings than its assets warrant. EAF likely enjoys a competitive advantrage.

For EPV to hold up, barriers to entry must be sustainable at the current level for the indefinite future.

The difference between the EPV and AV is the franchise enjoyed by the company.