見出し画像

KACHI|企業価値評価Pythonツール実践ガイド

ザイマニが開発した「KACHI」とは、上場企業1社あたりの企業価値評価が約30分で完了するPythonツールです。本記事ではツールの具体的な使い方、つまり効率的な企業価値評価を実現する手順を解説します。

本ツールの全体像と具体的なアウトプットイメージがこちら▼

KACHI|企業価値評価Pythonツールの全体像
評価対象企業の売上やFCFを予測
エンタープライズDCF法で事業価値を算出&グラフ化
企業価値評価の結果をグラフ化
理論株価を算出&実際の株価の割安度を評価

つまり、重要な意思決定シーンで重宝する以下のような情報を効率的に抽出できるPythonツールです。

・評価対象企業の売上やFCFは今後どのように推移する可能性が高い?
・うちの会社の理論的な企業価値はいくら?競合他社と比べて高い?
・あの会社の株価は理論株価と比べてどれくらい割高?それとも割安?


以下、本ツールの概要です。

■評価材料
・上場企業各社の財務データ最低4年分(csv)
最新財務データセットエクセル(使用しなくてもOK)
・KACHI|企業価値評価Pythonツール(購入ページ)

【注意1】本ページは実践ガイドであり、KACHI(Pythonコード)は別途有料販売となります。購入ページはこちら。

【注意2】対象企業の財務データが少ない場合、エラーが出る場合がございます。最低でも4年分の財務データが存在する上場企業が対象となります。


■使用ツール・評価モデル
・Google Colaboratory(Python)
・Prophetによる時系列分析

引用|ファイナンス攻略講座【4章】将来FCF予測プロセス

■評価手順
 ① どの上場企業の価値を評価するか決める
 ② 評価に必要な財務データを手動で集める(有価証券報告書)
 ③ 以下からDLできるPythonコードで対象企業の評価を行う

冒頭で紹介した「30分」のうち、約20分程度を②に充てる必要があります。本来はプログラミングで機械的に収集したいところですが、これを実現するには都度プログラミングコードのチューニング(やや専門的)が必要であり、確認を怠れば誤って不正確な情報を収集してしまうリスクも存在します。

そのため多くのユーザーにとって「評価に必要な各社の財務データはEDINETから手動で収集(コピペ)する」という方法が、より正確に企業価値を評価する上での最適解だと考えています(プログラマの方などは自由にカスタマイズしてみて下さい)。


■想定ユーザー
・理論的な企業価値や株価を自分の手で評価したい経営陣、投資家
・効率的な企業価値評価を実現したいビジネスマン
ザイマニ財務分析ゼミのメンバー(レポート第6話〜第8話を読了済)

一般的に「企業価値評価」業務を専門家に依頼した場合、結果が出そろうまでに数週間〜数ヶ月の時間が必要ですが、本ツールを利用すれば1社あたり約30分で評価が完了します。専門家でなくても、専門家と同様の理論(DCF法)で理論的な企業価値や株価を効率的に算出したい方におすすめです。

また、以下の本文ではプログラミングの処理内容や評価手順を極力わかりやすく解説しています。一方で、企業価値の方程式やDCF法の特徴・評価の流れは深く解説していません。そちらに興味がある方はファイナンス攻略講座をご覧ください。


本ツールの概要は以上です。以降はPythonコードにおける各セクションの処理内容や、詳細な評価手順、ユーザーが注意して設定すべき変数一覧などをわかりやすく解説します。よろしくお願いします▼


❶ KACHI(Google Colab)を保存

KACHI購入後、商品リンクから今回使用するGoogle Colaboratory(以下Colab)を開きましょう。ご自身のGoogleDriveにコピーしてからご活用ください。コピー手順に困った場合はゼミレポート第6話にてご確認下さいませ。

以下の解説は上記Colab内容の補足となります。Pythonでのデータ分析に慣れている方はそのままColabを読み進めていただいてもOKです。

❷ KACHIの全容を解説

Zaimani_Python_05_KACHI_Valuation_Prophetの目次

今回使用するプログラミングコードは以下の5セクションに分類されます。

0|企業データセット読込
1|将来FCF算出
2|企業価値の算出
3|株主価値の算出・株価評価
4|成長率・割引率の探索

端的に言えばエンタープライズDCF法を活用し、以下の図の各価値を右から順番に算出するイメージです。

引用|ファイナンス攻略講座【6章】企業価値評価の定石

具体的には将来FCF→事業価値→企業価値→株主価値(理論株価)の順ですね。

最後のセクション4では応用として「もし事業の永久成長率が○%と仮定した場合、実際株価≒理論株価となる割引率(WACC)は何%?」を調査します。詳しくは後述しますね。

つづいて各セクションのコード内容を端的に解説します。不明点がありましたらザイマニ公式LINEより気軽にご連絡くださいませ。

❸ 各セクション解説

セクション0|企業データセット読込

Zaimani_Python_05_KACHI_Valuation_Prophet|セクション0

このセクションでは企業価値評価の準備を行います。上からひとつずつセルを実行(「▶︎」をクリック)して下さい。以下のコードまで実行すると、GoogleDrive上に新しいフォルダが作成されます。

# 企業データセットをアップロードするフォルダGoogleDrive上に作成する
import os #ファイルの作成日時を取得する機能
csv_upload_path = '/content/drive/MyDrive/Colab Notebooks/02_Python_Tool_Output/05_KACHI' #評価対象企業の財務データcsvをアップロードするフォルダのパス
os.makedirs( csv_upload_path ,exist_ok=True ) #フォルダが存在しなければフォルダを作成

ここに評価対象企業の財務データを格納したcsvファイルをアップロードしましょう。日本語のパスは「マイドライブ>Colab Notebooks>02_Python_Tool_Output/05_KACHI」ですね。アップロード後のイメージは以下の通りです▼

「05_KACHI」フォルダにcsvファイルがアップロードされたイメージ図

以下、テスト用の財務データを利用する手順と、ご自身で財務データを用意される手順を解説します。

■テスト用の財務データを利用する
ザイマニ管理人が試しに作成したニトリのデータセットです。まずはこちらをご活用ください。

00_Valuation_Company_Dataset - 9843_ニトリHD.csv

上記のリンクからcsvファイルを開き、ダウンロード。上述したGoogleDriveのフォルダにアップロードすれば完了です。簡単ですね。

■自分で財務データを作成する
もちろんニトリ以外の企業も評価したいですよね。そんな時は以下のスプレッドシートをご活用ください。財務データを入力するテンプレートです。

00_Valuation_Company_Dataset

「00_Valuation_Company_Dataset」スプレッドシート
「00_Valuation_Company_Dataset」スプレッドシート|入力例|ニトリ

以下、テンプレートの詳細です▼

・すべてEDINET上の有価証券報告書から入手可能な情報
・セルの背景色について。緑はBS、青はPL、黄色はCFから取得できる情報
・設備投資額のみ「設備投資等の概要」ページ冒頭で取得(単位に注意)
・BSの情報は最新年のみ収集すればOK(最新年以外は0を記入済)。
・過去のデータ数が多いほど予測精度が向上する可能性が高い
・データが存在しない行は削除する(例えば、EDINET上に2014年以降のデータしか存在しない場合、事業年度が2013年の行を行ごと削除)

あとは評価したい企業の財務データを手動で収集し、csvファイル化するだけ。ファイル>ダウンロード>カンマ区切り形式 (.csv)で作成できます。

収集した財務データをcsvファイルとしてダウンロード

つまり、本テンプレートに財務データを入力→csvとしてダウンロード→上述の「05_KACHI

」フォルダにアップロードすることで、あなたが気になる企業の評価が可能となります。ニトリの入力例シートを参考にしつつ、空白のシートを埋めていくのが効率的です。

また、ゼミの最新財務データセットをGoogleDrivenにアップロードしていない方はこの段階で一緒にアップロードしておきましょう。以下のような状態になれば完璧です▼

01_Zemi_Datasetフォルダにゼミの財務データセットエクセルをアップした状態

これで評価の準備はほぼ完了しました。セクション0の残りのセルを1つずつ実行して財務データを読み込み、セクション1へ進みましょう▼


セクション1|将来FCF算出

Zaimani_Python_05_KACHI_Valuation_Prophet|セクション1

このセクションのゴールは、将来FCFを時系列モデルで予測することです。以下のステップを踏んでいきます▼

① 詳細予測年数を設定する(デフォルト:5年)
② 想定される予測誤差を確認する
③ 実際に各項目の将来値をProphetで予測する
④ 必要に応じて各項目の実績値+予測値をグラフ化する

②について、ニトリの具体例を元に解説します。これは、過去の情報を元に、未来の情報を予測した場合、どの項目にどれぐらいの誤差が生じる可能性があるか?を事前に計測する工程です。

具体的な手順は以下の通り▼
・ニトリの2013年〜2022年の実績データを収集
2013年〜2021年までの財務データ推移を学習し2022年の値を予測する
・2022年の予測値と実績値を比較する

つまり、結果がわかっている値と、予測値を比較して、予測値がどれぐらい当たっているのか(誤差)を確認するイメージです。ニトリの例では以下のような結果となりました▼

売上高販管費は上手く予測できていますが、プラスマイナス両方の値を取りうる売上債権増加額などは誤差が大きいことがわかります。

つまり、誤差を最小化するには売上債権増加額を一息に予測するのではなく、各年の売上債権の額を収集→その推移を予測→予測値を元に増加額を計算する方が良さそうです。ただ、上記を実現する場合は企業毎に異なる売上債権の項目調整などが必要になるため現時点では実装していません。ご理解くださいませ。

さて、このセクションは想定される誤差を計測するだけではありません。ニトリの例で言えば2013年〜2022年の情報を元に予測した2023年以降の数字が算出されます▼

各項目の予測値が算出されます

また、各項目について実績値と予測値の推移も確認可能です。誤差が大きい項目・小さい項目がどのように推移しているか(Prophetが未来をどのように予測しているのか)ぜひご確認ください。

実績値とProphetによる予測値のグラフ

つづいてセクション2です。いよいよ企業価値を求めます▼

セクション2|企業価値の算出

Zaimani_Python_05_KACHI_Valuation_Prophet|セクション2

このセクションでは評価対象企業の「事業価値」及び「企業価値」をエンタープライズDCF法で算出し、グラフ化を行います▼

エンタープライズDCF法による事業価値の可視化
エンタープライズDCF法による企業価値・非事業価値・事業価値の可視化

余談ですが、事業価値のほとんどは継続価値によって形成され、その継続価値は詳細予測期間最終年(上記の例では2027年)の予測FCF、事業の永久成長率、割引率によって決定します。

中でも、評価者が意図的に(そして容易に)操作できる永久成長率と割引率の設定は評価結果に大きく影響することを頭に入れておいて下さい。注意して設定しましょうという意味です(詳しい設定方法などは後述)。

ここまででエンタープライズDCF法に基づいた企業価値の算出まで完了しました。ここまで来れば簡単です。まずは次のセクション3にて、評価対象企業の株主価値(及び理論株価)を算出します▼


セクション3|株主価値・株価評価

Zaimani_Python_05_KACHI_Valuation_Prophet|セクション3

このセクションの流れは以下の通りです。

・株主価値を算出(株主価値=企業価値ー債権者価値)
・評価対象企業の株価発行済株式数を設定→時価総額を算出
・理論的な株主価値と時価総額を比較=理論株価と実際の株価を比較

具体的なアウトプットイメージは以下の通り▼

エンタープライズDCF法による株主価値の算出及び時価総額との比較
実際の株価 VS 理論株価
株価の割安度

つまり、セクション3までを実行することで対象企業の実際の株価が理論株価と比べてどれくらい割高or割安のなのかが分かります。競合他社に対して同じアプローチを実践すれば、競合の理論株価と自社の理論株価を比較するなんてことも可能です。

とは言え、上記の割安性はあくまでセクション2で設定した「永久成長率」や「割引率」によって左右されます。これは担当者が恣意的に操作することで、評価の結論(割高or割安)を簡単にひっくり返すことができることを示唆しています。

そこで「この数字は担当者の数字遊びなのでは?」と詰められないために、最後のセクション4では実際の株価≒理論株価となる永久成長率と割引率のペアを探索し、実務上の判断でも使えるレベルに昇華します▼


セクション4|成長率・割引率の探索

Zaimani_Python_05_KACHI_Valuation_Prophet|セクション4

具体的な処理内容としては、永久成長率が仮に1.0%の場合、割引率が何%の時に、理論株価と実際の株価の差分が最も小さくなるのか?を探索するイメージです。

例えば、ニトリの場合では永久成長率を1.0%とした場合、割引率が6〜7%の時に理論株価≒実際の株価となりました(株価は、ザイマニ管理人が評価を実践した当時のニトリの株価(17,270円)を使用)。

実務ではこの数値(上記の例では6〜7%)と、想定される実際の割引率を比較して割安度を評価するのが適切でしょう。

例えば実際の企業価値評価の場面で「今回は、ニトリの永久成長率は1%かつ割引率は10%で評価することにしよう」と合意が取れた場合、ニトリの理論株価は上記の画像内の数字以上に安く算出されるため(少なくとも15,000円を下回る)、結果的に実際の株価はかなり割高である、と判断できます。

逆に言えば、実務上で「ニトリの永久成長率は1%で割引率は6〜7%」と判断された場合、17,270円は適切な株価(過度に割安でも割高でもない状態)と言えるでしょう。

要するに、評価を実践するタイミングで「永久成長率と割引率は○%で評価する」と合意が取れている場合はセクション2を優先、そうでない場合は、まずセクション4で理論株価≒実際株価となる永久成長率と割引率を確認するのが効率的ですね。巧く使い分けていただけると嬉しいです。

また、Ver.1.1では永久成長率と割引率について感応度分析ができる機能を追加しました。実際の株価を理論株価と比較した際に、どの組み合わせなら割高(割安)となるのか、その境界となる成長率と割引率の組み合わせが一目で分かります▼

最後に、KACHIを活用して企業価値表を実践する際に、あなた自身の手で注意して設定すべき変数一覧を紹介して締め括ります▼


❹ユーザー設定ポイント一覧

注意して設定すべき変数はセクション名の右に「★」が付与されています。以下の6ポイントです▼

Zaimani_Python_05_KACHI_Valuation_Prophetの目次

本来はコードの冒頭でまとめて定義しても良いのですが、どのセクションでどの変数が必要になるのか分かりにくくなるため、敢えて点在させています。もちろん、冒頭でまとめて定義するようカスタマイズしてもOKです。

以下、各ポイントの概要及び設定例を解説します▼

❹-1 財務データの単位調整

#データセットの単位を調整する
unit_adj = 1000000  #百万円表記の場合は1000000 を設定。千円表記の企業の場合は 1000 を設定。 円単位まで入力したデータセットを用意している場合は 1 を設定★★★
df_dataset.iloc[:, 1:] = df_dataset.iloc[:, 1:] * unit_adj #「現金及び預金」列以降を設定した値で倍
df_dataset

unit_adj」変数の数字を調整します。財務データをコピペしてcsvファイルを作成した際に、有価証券報告書が百万円表記であった場合は「1000000」を、千円表記のデータの場合は「1000」となります。特に迷うことはありませんね。

❹-2 証券番号と詳細予測期間年数

#評価対象企業の情報を手動で設定

policy_number = 9843 #評価対象企業の証券コード デフォルト値:9843 ニトリHD ★★★
forecast_year_term = 5 #FCFの詳細予測年数 デフォルト値:5 ★★★

policy_number」は証券コード4桁の数字です。評価したい企業の証券コードを入力しましょう。

forecast_year_term」は詳細予測期間です。以下の画像を参考に期間を設定しましょう。個人レベルでの投資先や就職先企業の選定時など、特にこだわりがない(企業内で合意を取る必要がない)場合、一般的に設定されることが多い「5年」がおすすめです。

引用|ファイナンス攻略講座【4章】将来FCF予測プロセス

❹-3 法人税の税率

#FCFを予測する

#税引後営業利益を計算
tax_rate = 0.3 #簡易性を優先し、税率を一律30%に設定 ★★★
df_fcf = df_actual_forecast_all.copy().rename(columns={'ds': '事業年度'})
df_fcf['税引後営業利益'] = df_fcf['営業利益'] * (1-tax_rate)

#FCFを計算
df_fcf_cal = df_fcf[['事業年度','税引後営業利益','減価償却費','運転資本増加額','設備投資額']].copy()
df_fcf_cal.loc[:, 'FCF'] = df_fcf_cal['税引後営業利益'] + df_fcf_cal['減価償却費'] - df_fcf_cal['運転資本増加額'] - df_fcf_cal['設備投資額']
df_fcf_cal

続いて税率です。ファイナンス攻略講座【3章】企業価値の方程式で解説した通り、FCFの算出には「税引後営業利益」が必要です。計算に必要な法人税率を「tax_rate」変数で定義しましょう。

日本国内の上場企業が対象の場合、30%で計算することが多いため0.3と設定するのがおすすめです。一方、海外上場企業を評価する場合は、その企業が所在する国の法人税率を調査して設定しましょう(基本的に20~30%の国が多い)。


❹-4 永久成長率と割引率

# 永久成長率と割引率を設定

growth_rate = 0.01 # 売上高などが、今後永久的に何%ずつ成長していくことを想定するかを設定 デフォルト値:1% ★★★
discount_rate = 0.06  # 上記のWACCの情報あるいは一般的な資本コスト(6~8%)を設定。デフォルト値:6% = 0.06 ★★★

#参考 WACCを構成する「株主資本コスト」に影響するTOPIXのCAGR(年平均成長率)
## 2012~2022|8.20% 過去10年
## 2017~2022|0.80% 過去5年
## 2019~2022|3.20% 過去3年

評価対象企業の事業が毎年永久的に何%成長すると仮定するか?を「growth_rate」に、そしてその事業の割引率(=資本の機会費用)を「discount_rate」に設定します。

一般的に永久成長率は評価対象企業の属する業界の長期成長率または国内の長期的なGDP成長率を元に設定します。0〜2%で設定されることが多いですね。デフォルト値は1%(0.01)としています。

一方で割引率。こちらは各社のWACCの値を使用することが多いです。ゼミのデータセットを読み込むことで、対象企業の直近3年間のWACCを確認できます。最新年あるいは3年間の平均値を設定するのが適切でしょう。

ゼミの最新財務データセットからWACCの値を確認

ただ、最新財務データセットのWACCは、過去3年分のTOPIX平均成長率を使用して算出しています。例えば2019〜2022年のTOPIX成長率は3.20%とかなり低く、一般的に6〜8%あたりが設定されることの多い割引率として適切かどうかは意見が分かれるポイントです。

つまり、最新の市場成長率を反映して評価をしたい場合はWACCの値をそのまま活用し、より長期間の市場成長率を加味して評価したい場合は、6〜8%を設定するのが得策です。もちろん、企業内で評価時の割引率が定まっている場合はそちらを設定しましょう。


❹-5 株価と発行済株式数

#時価総額を計算
#参考|日経新聞 https://www.nikkei.com/nkd/company/gaiyo/?scode=6098

stock_price = 17270   #株価 ★★★
outstanding_shares = 114443496 #発行済株式数 ★★★

market_capitalization = stock_price * outstanding_shares #時価総額
print('■時価総額', format(market_capitalization, ',.0f'))

評価したい時点の株価と発行済株式数を「stock_price」と「outstanding_shares」に入力するだけです。ここは簡単ですね。

ただ、株価については株式市場の一時的な変動で激しく値が上下し、正確に市場の評価が反映されていない場合もあります

上記のリスクも考慮する場合は、特定月の株価の平均値や中央値を使用するのがおすすめです。株価の割安性をより正確に評価できます。もちろん、簡易性を優先して最新の(今日の)株価で評価してもOKです。


❹-6 永久成長率

#特定の永久成長率を設定し、株価差分が小さい順に並び替える
growth_rate_target = 1.0 #★★★

display(df_optimal_combinations[df_optimal_combinations['永久成長率(%)'] == growth_rate_target].sort_values(by='株価差分(円)', ascending=True).reset_index(drop=True).head(10))
diff_min_ave = round(df_optimal_combinations[df_optimal_combinations['永久成長率(%)'] == growth_rate_target].sort_values(by='株価差分(円)', ascending=True).head(10)['割引率(%)'].mean(),2)

#結果を表示
print()
from IPython.display import display, HTML
diff_result_text = f'永久成長率を<span class="custom">{growth_rate_target}%</span>と仮定した場合、割引率がおよそ<span class="custom">{diff_min_ave}%</span>の時、実際株価≒理論株価となる'
display(HTML(f'<style> .custom {{font-size: 24px; color: blue;}} </style> <div>{diff_result_text}</div>'))

最後に、もう一度永久成長率です。「growth_rate_target」に想定される永久成長率を設定しましょう。❹-4で解説した通り、0〜2%で設定するのが適切です。

設定した永久成長率を前提条件として、理論株価≒実際の株価となる割引率を算出します。


以上、ユーザー設定が必要なポイント一覧でした。特に、❹-2の詳細予測期間と❹-4の永久成長率と割引率は評価の結論に大きく影響します。特に注意して設定しましょう。


KACHI実践ガイドまとめ

本記事ではエンタープライズDCF法により、事業価値・企業価値・株主価値及び理論株価を算出するPythonツールの使い方を解説しました。

今回は総合的な企業価値の評価を前提に解説しましたが、企業内における各事業についても同様に評価が可能です。事業別、セグメント別の詳しい情報にアクセスできる部署にお勤めの方は試してみてはいかがでしょうか?

以上、KACHI|企業価値評価Pythonツールの実践ガイドでした。よく分からない箇所やさらに詳しく解説してほしいコードなどあれば、いつでもザイマニ公式LINEのトーク画面から気軽にお声がけくださいませ。引き続き、ザイマニをよろしくお願いいたします。

▶︎ KACHI|企業価値評価Pythonツールの購入ページはこちら
▶︎ ザイマニのnote記事一覧はこちら


この記事が気に入ったらサポートをしてみませんか?