Pythonを使ってDCF法でめちゃくちゃざっくりと弊社の企業価値を算定してみた

こんにちは、entershareの大森です。

ここ半年くらいはエンジニアとして働いていましたが、大学生の時は商学部だったことをふと思い出しました。
なので今回はめちゃくちゃざっくりと弊社の企業価値をDCF法で計算してみようと思います。（昔授業でちらっとやった気がするやつをとりあえず使ってみてるだけです、、、）
Excelでもできることですが、エンジニアっぽくpythonを使ってやってみます。

あらかじめ言って置くと以下の計算は弊社の実体に即しているとは言えない部分も多くあり、ちゃんと算定できているとは言い難いと思うのでフィクションとしてご覧ください。
また計算方法に関しても簡易化しており、適当な部分も多くありますので、目をつぶってくださると幸いです。

ファイナンスっぽい言葉も割と出てきて混乱すると思いますが、やってることはめちゃくちゃ簡単なので皆さんもやってみてください。
それではやっていきましょう。

## 企業価値を求めるための基礎知識
企業価値を求める時には類似企業と比較したり、その会社のもつ資産に注目したりと色々な方法がありますが、今回はその会社の生み出すキャッシュフローに着目したDCF(Discounted Cash Flow)法を用います。

キャッシュフローとはその会社が毎年生み出す現金のことです。
今回はそれをDiscount、つまり割り引いて現在の価値に直します。

明日の1万円よりは、今日の1万円が価値があるため将来の利益は適正な利率で割り引かなければなりません。

その会社に資金を提供している人間に払う利子で割り引くのが一般的ですが、DCF法ではWACC(Weighted Average Cost of Capital、加重平均資本コスト)が使われます。
これは会社は負債と株式で資金調達をしますが、それぞれの金額の比率にも利子率(資本コスト)にも違いがあるので、それら(負債の資本コストと株式の資本コスト)を加重平均したものがWACCです。
今回は便宜上5%とします。



負債の資本コストは銀行の利子率とかで想像しやすいと思いますが、株式の資本コストと言われると想像しにくいかと思います。(実際計算式はありますが、確実に決まるものではありません)
株式の資本コストは投資家が投資に期待する収益率です。(期待収益率、要求収益率とも呼ばれます)
資本コストと期待収益率ではイコールで繋がらないかもしれませんが、会社から見ればコスト、投資家から見れば収益です。
もし株主の期待する収益率を達成できなければ、もっと他に良い投資先があると思われて株は売られ価格は下落することでしょう。(理論的には)

ちなみに下記の引用になっている部分は余談ですので、興味のある方のみお読みください。

> 株式の資本コストはCAPM(Capital Asset Pricing Model、資本資産価格モデル、無リスク金利+(マーケット全体の収益率×その株がマーケットと比べてどれだけ動くか(β)的な式)、詳しくは調べてください)を使って導かれるのが一般的です。

> ただPER(Price Earning Ratio、株価/1株当たり利益)の逆数は株式の資本コストの代替になるとも言われています。その理由は下記になります。
> まず株式が上場している場合、PERは株価(市場によって決まる)が利益の何倍になっているかを表しています。このPERはその株の値段を何年分の利益で回収できるのかを表しており、裏を返せば投資家がどれだけの収益率を期待しているかもわかるためです。(PER20倍なら5%のように)(下記の式参照)

> PER = 株価 / 一株当たり利益(EPS、Earning per Share) ...①
> 株価 = 一株当たり利益 / 株式の資本コスト(r) ...②
> ②を変形して...
> 株式の資本コスト = 一株当たり利益 / 株価 = 1 / PER ...②'
>①と②'の右辺を見比べると逆数になっている。




DCF法の計算式は以下です。
例えとしては、毎年卵を産む金のガチョウを保有したとして、それがどれくらいの価値があるのかを表すのがDCFによる企業価値の計算です。
今回は5年目まで一定の成長率で成長していくと仮定して計算します。

```
企業価値 = FCF1/(1+r) + FCF2/(1+r)^2 + FCF3/(1+r)^3 + FCF4/(1+r)^4 + FCF5/(1+r)^5 + TermValue/(1+r)^5

^n : n乗を表している 
FCFn : n年目のフリーキャッシュフロー
r : 利子率
TermValue : ターミナルバリュー(残存価値)
```

以上の式は5年目まではFCFを予測します。
そして5年目で会社を解散したと仮定して算出した企業の価値を、5年目までのキャッシュフローの和に足します。

解散価値の計算式は以下です。
FCFのかっこの中の1+gはFCFに(1+永久成長率)を掛けるということです。

```
TermValue : FCF(1+g) / r-g

FCF : フリーキャッシュフロー(通常は5年目の額を使う)
r : 利子率
g : 永久成長率(一般的には0%か1%を使う)
```

ここまでで必要な基礎知識は書いたと思うので、コードを見ていきましょう。

## 必要な情報を変数に入れる

まずは必要な情報を変数に入れていきます。
pythonには定数はありませんが、慣習的に定数っぽいものは大文字とアンダースコアで表現しています。
税率は40%、割引率は5%、5年目までの利益の成長率は170%とします(適当)。

FCFは通常以下の計算式で算出されますが、今回は適当に税引後の営業利益を計算します。
ぶっちゃけ弊社でどのように下記を計算すればいいのかわかりません。

```
FCF = 税引後営業利益 + 減価償却費等 + 設備投資 - 正味運転資本増価額
```

弊社のフルタイムのメンバーは6人なので`people_number`には6を入れます。
またこれも適当ですが、1人1人が月70万程度の売り上げをあげると仮定します(これも適当)。
そして利益は単純に利益から費用を差し引きして計算します。

```python
# 税率
TAX = 0.4
# 普通はWACCを用いるがここでは便宜上5%とする
DISCOUNT_RATE = 0.05
# 成長率
growth_percentage = 1.7
people_number = 6
price = 70
annual_sales = price * people_number * 12
annual_costs = price * 0.7 * people_number * 12
```

## 実際に計算していく

まずFCFを計算します。
単純に売り上げから費用を引いて、1-税率をかけて会社に残る分を計算しています。

```python
def free_cash_flow(sales, costs):
    return (sales - costs) * (1 - TAX)
```

次に企業価値にfor文で5年目までのFCFを足しています。
また2年目からは成長率170%で成長するように調整し、割引率も年に応じて上がっていきます。
そして5年目のFCFを`fifth_cash_flow`を計算し、それを元にターミナルバリューを計算してそれも`corporate_value`に足します。
そして`corporate_value`を返しています。

```python
def dcf():
    corporate_value = 0
    # 5年目までのキャッシュフローを計算
    for i in range(1, 6):
        corporate_value += free_cash_flow(annual_sales, annual_costs) * (growth_percentage ** (i - 1)) / ((1 + DISCOUNT_RATE) ** i)
    fifth_cash_flow = free_cash_flow(annual_sales, annual_costs) * (growth_percentage ** 4)
    # 永久成長率は1%か0%に設定されることが多い
    term_value = ((fifth_cash_flow * (1 + 0.01)) / (0.05 - 0.01)) / ((1 + DISCOUNT_RATE) ** 5)
    corporate_value += term_value
    return corporate_value
```

またその他の情報を表示するためにいくつか追加の関数を作りました。
この辺は適当に見ておいてください。

```python
# 最初の年で解散した時の価値
def first_year_value():
    first_fcf = free_cash_flow(annual_sales, annual_costs)
    return first_fcf * (1 + 0.01) / (0.05 - 0.01)

# 5年目の社員数
def fifth_people_number():
    return people_number * growth_percentage ** 4

# 5年目のキャッシュフロー
def fifth_cash_flow():
    return free_cash_flow(annual_sales, annual_costs) * (growth_percentage ** 4)

```

最後にprintして終わりです。

```python
print('1年目の人数:', people_number)
print('5年目の人数:', fifth_people_number())
print('1年目のFCF:', free_cash_flow(annual_sales, annual_costs))
print('5年目のFCF:', fifth_cash_flow())
print('1年目時点での企業価値', first_year_value())
print('5年目終了時点での企業価値:', dcf())
```

コードを実行すると以下のような結果となります。
FCFと企業価値に関しては万円単位で計算なので、弊社の5年目時点での企業価値は約16億4035万円となりました。(信憑性の無さ...)
おそらく成長率が高かったことと、割引率が結構低めだったのでこんな感じになったのかなと思います。(例えば割引率を10%に設定すると一気に13億くらいになります。)

<img width="423" alt="スクリーンショット 2019-04-23 2.57.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249679/4f64cd6e-7e26-9ebb-6d1a-92d4c2ea6aae.png">

コードをまとめて置くので、ぜひ試してみてください。

```python:dcf.py

# 税率
TAX = 0.4
# 普通はWACCを用いるがここでは便宜上5%とする
DISCOUNT_RATE = 0.05
# 成長率
growth_percentage = 1.7
people_number = 6
price = 70
annual_sales = price * people_number * 12
annual_costs = price * 0.7 * people_number * 12

def free_cash_flow(sales, costs):
    return (sales - costs) * (1 - TAX)

def dcf():
    corporate_value = 0
    for i in range(1, 6):
        corporate_value += free_cash_flow(annual_sales, annual_costs) * (growth_percentage ** (i - 1)) / ((1 + DISCOUNT_RATE) ** i)
    fifth_cash_flow = free_cash_flow(annual_sales, annual_costs) * (growth_percentage ** 4)
    # 永久成長率は1%か0%に設定されることが多い
    term_value = ((fifth_cash_flow * (1 + 0.01)) / (0.05 - 0.01)) / ((1 + DISCOUNT_RATE) ** 5)
    corporate_value += term_value
    return corporate_value

def first_year_value():
    first_fcf = free_cash_flow(annual_sales, annual_costs)
    return first_fcf * (1 + 0.01) / (0.05 - 0.01)

def fifth_people_number():
    return people_number * growth_percentage ** 4

def fifth_cash_flow():
    return free_cash_flow(annual_sales, annual_costs) * (growth_percentage ** 4)

print('1年目の人数:', people_number)
print('5年目の人数:', fifth_people_number())
print('1年目のFCF:', free_cash_flow(annual_sales, annual_costs))
print('5年目のFCF:', fifth_cash_flow())
print('1年目時点での企業価値', first_year_value())
print('5年目終了時点での企業価値:', dcf())
```