DCF法のために
DCF法の理解がかなり進んだので、Pythonで自動化しつつ活用したいと考えています。
割引率(WACC)の計算には、様々な要素が必要ですが、まずは、Betaを算出するPythonコードをChat GPTに作成してもらいました。
Betaの基準の指数をどうするのかという問題がありますが、Yahoo FinanceがSP500に対するベータであるようなので、SP500に合わせています。
株式投資の場合は、他の指数が良いこともあるかもしれません。
コード
米アップル社(AAPL)のベータを算出しています。
import yfinance as yf import pandas as pd import numpy as np from sklearn.linear_model import LinearRegression # 株価データの取得 apple_data = yf.download('AAPL', start='2020-01-01', end='2023-01-01')['Adj Close'] sp500_data = yf.download('^GSPC', start='2020-01-01', end='2023-01-01')['Adj Close'] # リターンの計算 apple_returns = apple_data.pct_change().dropna() sp500_returns = sp500_data.pct_change().dropna() # 線形回帰の実行 model = LinearRegression().fit(sp500_returns.values.reshape(-1, 1), apple_returns.values) beta = model.coef_[0] print(f"Apple's beta against the S&P 500: {beta}")
補足
pct_change()メソッド: このメソッドは、Pandas SeriesまたはDataFrameに対して使用されます。それは連続する2つの要素間のパーセンテージ変化を計算します。この場合、apple_dataの連続する日々の調整済み終値間のパーセンテージ変化(リターン)を計算します。
dropna()メソッド: pct_change()メソッドを使用すると、最初の要素の前に何もないため、最初のリターン値はNaN(Not a Number)になります。dropna()メソッドは、NaN値を削除するために使用され、この場合、最初のNaN値を削除します。
この2つのメソッドを組み合わせることで、apple_data.pct_change().dropna()はAppleの株価の連続する日々のリターンを計算し、最初のNaN値を削除します。この結果は、リターンの時系列データであり、以降の分析と可視化に使用されます。
補足2
sp500_returns.values.reshape(-1, 1)とapple_returns.valuesの処理を説明します。
sp500_returns.values.reshape(-1, 1) sp500_returns.values: sp500_returnsはPandas Seriesで、この属性によってNumPy配列が返されます。この配列にはS&P 500のリターンが含まれます。
reshape(-1, 1): このメソッドは、配列の形状を変更します。引数(-1, 1)は、最初の次元が可変であり(-1によって示される)、2番目の次元が1であることを意味します。この特定のケースでは、配列を列ベクトル(単一の列を持つ2D配列)に変換します。
線形回帰モデルの入力として、特徴量が2D配列である必要があります。reshape(-1, 1)によって、これを満たす形状に変換します。
apple_returns.values apple_returns.values: apple_returnsはPandas Seriesで、この属性によってNumPy配列が返されます。この配列にはAppleのリターンが含まれます。 このNumPy配列は既に1D配列であるため、形状の変更は必要ありません。ターゲット変数(この場合はAppleのリターン)として使用するため、1D配列である必要があります。
このプロセスにより、機械学習モデルに適切な形状の入力とターゲット変数が提供されます。
可視化コード
import matplotlib.pyplot as plt # AppleとS&P 500のリターンをプロット plt.figure(figsize=(12,6)) plt.subplot(2, 1, 1) plt.plot(apple_returns, label='Apple Returns') plt.plot(sp500_returns, label='S&P 500 Returns') plt.xlabel('Date') plt.ylabel('Returns') plt.legend() # リターン間の散布図と線形回帰のプロット plt.subplot(2, 1, 2) plt.scatter(sp500_returns, apple_returns, color='blue') plt.plot(sp500_returns, model.predict(sp500_returns.values.reshape(-1, 1)), color='red') plt.xlabel('S&P 500 Returns') plt.ylabel('Apple Returns') plt.title(f"Apple's Beta against S&P 500: {beta}") plt.tight_layout() plt.show()
そもそも
Betaの値自体はYahoo Financeにあります。
Yahoo Financeの中の表記は見つけられてないのですが、間接的な情報から一応、SP500に対するものであるようです。