【コピペで動く!】日本株、米国株で個別銘柄ベータ値(β値)を簡単に調べる方法 Python 米国株 Webサービス&コード 【Google Colabで違いをみつけろ!】

スポンサーリンク
投資

日本株や米国株の個別銘柄ベータ値(β値)をWebサービスや、Pythonによる計算で求めることができます。ベータ値(β値) とは株の個別銘柄が市場全体の動きに対してどの程度敏感に反応して変動するかを示す数値で、現代ポートフォリオ理論では非常に重要にされている指標の一つです。

 例えば、ある銘柄が指数と全く同じ動きをする場合はベータ値(β値) が1という事になります。
ベータ値(β値) が2の銘柄は市場全体が1%上昇・下落するとその銘柄は2%上昇・下落し、逆にベータ値(β値) が0.5だと、市場全体が1% 上昇・下落 するとその銘柄は0.5% 上昇・下落 するというよう事になります。

実際のPythonの計算では5年の月次の時系列データの60点を利用するローリングモデルでベータ値(β値) を計算します。

本記事は2020年2月11日にnoteに記載したものを再度追記、コードの修正を行ったものになります。


日本株、米国株でベータを簡単に調べる方法 [Python 米国株 pyfolio コードあり]|TF
ーーーーーーーーーーー2021/09/03 追記ーーーーーーーーーーー 追記やPythonの一部仕様変更などでうまく動いていなかった部分を新しいサイトでは修正しました。 今後適宜修正や改修を行おうとは思いますが、すべてを改修できるわけではないことはご承知おきください。 日本株、米国株で個別銘柄ベータ値(...

本記事の目的

最近いろんな方面で、ベータを簡単に知りたいのですが、、という質問や、疑問を目にしたので、簡単に調べる方法を備忘録的に載せておきます

Webベースで調べる方法、Pythonのようなプログラムを用いて調べる方法などいくつかありますので一つずつご紹介していきます。

Webサービスで調査:日本株

一番簡便なのは以下の日本経済新聞社のランキングだと思います。
https://www.nikkei.com/markets/ranking/page/?bd=betahigh&Gcode=00&hm=1

β(ベータ)値高位ランキング :ランキング :マーケット :日経電子版
日経電子版のβ(ベータ)値高位ランキングコーナー。β(ベータ)値高位ランキングにランクインした銘柄をご覧いただけます。上場市場や業種ごとに順位をチェックできます。ランクインしている企業の最新ニュースや詳細な株価・財務データを提供するオンライン版の「日経会社情報」もご覧ください。チャートや銘柄管理ツールなどの便利な機能も...

細かいことにはなりますが、3年間で計算しているとありますが、日足なのか月足なのかの記載はありません。また、当然だと思いますが、日経平均株価へのベータだけであり、対TOPIXなどは無いようです。

また、残念ながらYahoo Japan! Financeにはベータランキングそのものが無いようです。

株式ランキング(値上がり率) - Yahoo!ファイナンス
株式投資に役立つ、国内上場銘柄を対象としたランキング。「値上がり」「値下がり」「出来高」など約40種類のランキング情報をデイリー、週次、月次や市場別で掲載。ストップ高や高値更新銘柄も。Yahoo!ファイナンスでは株価速報、チャート、ランキング、ポートフォリオ、ニュース、掲示板など投資判断に役立つ情報を掲載しています。

楽天証券のスーパースクリーナー

私が良く使っている方法は 楽天証券スーパースクリーナ です。

楽天証券に総合口座に口座のお持ちの方はログインしていただき、
国内株式>国内株式トップ内にあるスーパースクリーナを選択します。

すると上記のような画面が出てきます。下の方を見ていただくとわかるのですが、このデータはトムソンロイターが提供しています。

データ端末のロールスロイス:ブルームバーグではないですが、ロイターのデフォルトのデータなら大抵の場合、品質的に問題はないのではないでしょうか。

追記:現在は名前が変わってREFINITIVです。

実際の表示方法

実際にこの表にベータを表示する方法ですが、詳細検索項目の枠をクリックします。

すると新規に選択ウィンドウが開きますので、その中で ベータ(対日経平均)を今回は選択します。

パラメータ的な話をすると、過去2年間での相関ということのようです。マウスを3秒ぐらい置いておくとホバーウィンドウで確認できます。

過去2年の値動きとありますが、日足か月足かは記載がありません。ただ、ベータ自体は3種類、対日経平均、対TOPIX、対東証業種指数を選べます。

ちなみに 1570 日経レバ連動型ETF は1.98となり、約2倍という事で商品コンセプトと一致しているのが見て取れます。

あとはクリックすることで降順、昇順、好きなように並べ替えたり、特定の銘柄の値を参照できます。

米国株

米国株も同じようなサイトで確認できるものがありますが、上記のように一覧で出せたり、ETFでも出せるのはなかなか無いように感じています。

実際US Yahoo! Financeも個別株を個別に出すことはできるますが、

Apple Inc. (AAPL) Stock Price, News, Quote & History - Yahoo Finance
Find the latest Apple Inc. (AAPL) stock quote, history, news and other vital information to help you with your stock trading and investing.

ETFの場合、出ないようです。

SPDR Portfolio S&P 500 High Dividend ETF (SPYD) Stock Price, News, Quote & History - Yahoo Finance
Find the latest SPDR Portfolio S&P 500 High Dividend ETF (SPYD) stock quote, history, news and other vital information to help you with your stock trading and i...

また、リサーチ情報サービスの https://www.zacks.com/ でも

Zacks Investment Research: Stock Research, Analysis, & Recommendations
Zacks is the leading investment research firm focusing on stock research, analysis and recommendations. Gain free stock research access to stock picks, stock ...

個別株の場合は個別銘柄ベータ値(β値)は出るようですが、

Apple - AAPL - Stock Price Today - Zacks
View Apple Inc AAPL investment & stock information. Get the latest Apple Inc AAPL detailed stock quotes, stock data, Real-Time ECN, charts, stats and more.

ETFの場合は無いようです。

ほかにもWebサービスを探すとあるのかもしれませんが、なかなか難しいようなので、ここはPythonで自分で計算してみることにしましょう。

Pythonでのベータの計算

基本的には以下のコードを利用しながら行います。

簡単シンプル、写すだけ! 20行で資産運用モデル作成 [Pythonで 米国株の株価を取得し、グラフ・チャートを表示]

今回の検証ではデータ取得期間は2010/01/01から2021/09/02までとします。
市場平均としてSPY : SPDR S&P 500 ETF を利用します。
今回ベータを求める銘柄は 
AAPL : アップル
MSFT : マイクロソフト
TSLA : テスラ
SPYD : SPDR Portfolio S&P 500 High Dividend ETF

ベータ値(β値)はUS Yahoo! Financeにそろえ、5年間の月次での相関
とします。

データの取得

データを取得するコードは以下の通りです。

!pip install yfinance --upgrade --no-cache-dir

import datetime
import yfinance as yf
import pandas as pd
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
start_D = datetime.date(2010,1,1)
end_D = datetime.date.today()
codelist = ["SPY","AAPL","MSFT","SPYD","TSLA"]

data2 = yf.download(codelist, start=start_D, end=end_D)["Adj Close"]
display(data2.head(2).append(data2.tail(2)))

df_pct=data2.resample("M").last().pct_change()
display(df_pct.head(2).append(df_pct.tail(2)))
2021/09/03時点

まず、株価自体を求めます。
.resample(“M”).last() を使って、月末時点の終値に変換し、それを%変化率へ変換しています。

対数正規分布でのモデルを必要とする方はご自身で計算してみてください。
ここでは簡便のために単純にパーセントでの変化率で検証します。

ベータ値(β値)の計算

ベータ値(β値)の計算方法は以下になります。

β = 共分散(マーケット・個別)/分散(マーケット)

今回は時系列データで5年の月次で計算しますので、移動平均的な考え方で60個のデータの相関で評価することとします。数式をコードに置きなおすと以下の通りです。

df_beta=pd.DataFrame()
df_beta["AAPL_b"]=df_pct.rolling(60).cov().unstack()["SPY"]["AAPL"]/df_pct.rolling(60).var().unstack()["SPY"]
df_beta["MSFT_b"]=df_pct.rolling(60).cov().unstack()["SPY"]["MSFT"]/df_pct.rolling(60).var().unstack()["SPY"]
df_beta["SPYD_b"]=df_pct.rolling(60).cov().unstack()["SPY"]["SPYD"]/df_pct.rolling(60).var().unstack()["SPY"]
df_beta["TSLA_b"]=df_pct.rolling(60).cov().unstack()["SPY"]["TSLA"]/df_pct.rolling(60).var().unstack()["SPY"]

display(df_beta.tail(2))
2021/09/03時点

データの確認

実際に間違っていないかUS Yahoo! Financeで確認します。
アップルは1.2と計算されていました。

AAPL

問題ないようです。
マイクロソフトはどうでしょうか。計算では0.78なっています。

MSFT

これも問題ないようです。
SPYDはどうでしょうか。計算では1.13となっています。

SPYD

残念ながら出てきません。自分で計算しないといけないようです。
最後のテスラはどうでしょうか。計算では1.94とほぼ2倍程度動くようです。

TSLA

これもほぼ同じでいいですかね、、

正しく計算できたようです。

また、以下のような書き込みのTwitterにあったりしました。

実際に一期ずらしたデータで確認すると以下のようになります。

ベータとマーケットリスクといった観点から面白事が分かるかもしれません。

いろいろ皆さん調べてみてください。

---

以前はこのような記事でしたが、pyfolioのバージョンアップが行われなくなったためにpandasのバージョンアップに対応できなくなり、エラーが起きるようになってしまったようです。

今は一部の機能を除き、動かくなってしまっているようですが、その当時のまま、残しておきます。

以前記事に書いた米国株のパフォーマンス・成績をPythonで早く、綺麗に調べる [Python 米国株 pyfolio コードあり]を利用します。

米国株のパフォーマンス・成績をPythonで早く、綺麗に調べる [Python 米国株 pyfolio コードあり]|TF
米国株のパフォーマンス・成績をPythonで簡単に調べることのできるモジュール pyfolio をご紹介したいと思います pyfolio というものですが、まずは、どのようなことができるのか先に画像を見てもらったほうが早いと思います。 高値更新からのドローダウンを出してみてたり、月ごと、年毎の成績を出したり、期...

今回もGoogle ColaboratoryのPythonコードをご紹介したいと思います。
最初は以前の記事で扱ったのと同じような記述になります。

20行で資産運用モデル作成 [Python 米国株 個別銘柄 ETF]
という記事で紹介していますので、初めての方は読んでみてください。

20行で資産運用モデル作成 [Python 米国株の株価を取得し、グラフ・チャートを表示]|TF
ーーーーーーーーーーー2021/07/27 追記ーーーーーーーーーーー Pythonの一部仕様変更などでうまく動いていなかった部分を新しいサイトでは修正しました。 今後適宜修正や改修を行おうとは思いますが、すべてを改修できるわけではないことはご承知おきください。 2021/07/27時点では動いていることは確認し...

コード自体は以下のようになります。

!pip install fix_yahoo_finance
!pip install pyfolio

import datetime
import fix_yahoo_finance as yf
import matplotlib.pyplot as plt
import pyfolio

start_D="2015-12-31"
end_D = datetime.date.today()
codelist = ["^GSPC","SPYD"]
data2 = yf.download(codelist, start=start_D, end=end_D)["Adj Close"]

df_pct=100*data2.pct_change()
pdPF_out=df_pct
pyfolio.create_returns_tear_sheet(0.01*pdPF_out.iloc[:,0], benchmark_rets=0.01*pdPF_out.iloc[:,1])

注意:2021/09/03 このままでは動きません。

今回の例では2015年末からS&P500とSPYDのデータで相関を調べています。
結果は

とななりベータは0.76となりました。それ以外にも比較であったり、月ごとの騰落、年・月でのリターンの分布など確認することができます。

ーーー

Python関係の記事をご紹介します。

コメント