こんにちは!前回の記事では米国で上場している会社のセクターには11種類あってそれぞれ対応するETFが2社ある、というお話をしました!今回はPythonを使ってセクターそれぞれの相関関係を調べてみましょう。相関関係を追うと例えばあるセクターの平均株価が下がったときに別のセクターが上がったりすることがあるのか?など市場の理解を深める手助けになります。早速コードを見ていきますがいつも通り最下部にコードへのリンクを貼っていますので皆さま是非試してください。
yfinanceを使ってセクターごとのデータをダウンロード
では、Pythonのyfinance
ライブラリを使用して、セクターごとの過去5年間のデータをダウンロードする方法について説明します。yfinance
は、Yahoo Financeから金融データを簡単に取得できる非常に便利なツールです。
import yfinance as yf
import pandas as pd
etfs = {
"Information Technology": "XLK",
"Financials": "XLF",
"Communication Services": "XLC",
"Health Care": "XLV",
"Consumer Discretionary": "XLY",
"Consumer Staples": "XLP",
"Industrial": "XLI",
"Real Estate": "XLRE",
"Energy": "XLE",
"Utilities": "XLU",
"Materials": "XLB"
}
# 各ETFの過去5年間のデータをダウンロードして辞書に格納
data = {}
for name, symbol in etfs.items():
data[name] = yf.download(symbol, start="2014-01-01", end="2024-01-01")
ボラティリティの計算と視覚化
ボラティリティを計算するために、各セクターの日次リターンの標準偏差を求め、年率換算します(株式市場が年間約252日営業していると仮定)。
import numpy as np
import matplotlib.pyplot as plt
volatility = {name: np.log(df['Close'] / df['Close'].shift(1)).std() * np.sqrt(252) for name, df in data.items()}
plt.figure(figsize=(10, 6))
plt.bar(volatility.keys(), volatility.values())
plt.ylabel('Volatility')
plt.title('Volatility of the sectors')
plt.xticks(rotation=45)
plt.show()
このようにみるとエネルギーセクターはアップダウンが激しく、逆に一番安定しているのは一般消費財セクターということがわかります。エネルギーセクターは原油などの原材料の価格変動リスクにもろにさらされることもあって値動きが激しいのでしょうか?
取引量の視覚化
また今回は取引量の可視化も以下のコードを使って行いました。
# 各セクターの取引量の平均を計算
volume_avg = {name: df['Volume'].mean() for name, df in data.items()}
# 取引量の平均のバープロット
plt.figure(figsize=(10, 6))
plt.bar(volume_avg.keys(), volume_avg.values(), color='orange')
plt.ylabel('Average volume of Trades')
plt.title('Trading volume of the sectors')
plt.xticks(rotation=45)
plt.show()
相関関係の計算
相関関係のヒートマップを作成するためには、まず各セクターの日次リターンを計算し、それらの間の相関係数を計算します。そして、seabornライブラリを使用して、相関係数のヒートマップを描画します。相関係数は-1から1までの値を取り、1は完全な正の相関、-1は完全な負の相関を意味します。
# 各セクターの日次リターンを計算
returns = pd.DataFrame()
for name, df in data.items():
returns[name] = df['Close'].pct_change()
corr = returns.corr()
plt.figure(figsize=(10, 8))
sns.heatmap(corr, annot=True, cmap='coolwarm', center=0)
plt.title('Sector Correlation Heatmap')
plt.show()
基本的には全て株式、同じ資産クラスなので上がるときは一緒、落ちる時も一緒ということがなんとなく見えてきます。引き続き価格の相関関係を出すコードを見てましょう。
# 各セクターの終値を格納するDataFrameを初期化
prices = pd.DataFrame()
# 各セクターETFの終値データをDataFrameに追加
for name, df in data.items():
prices[name] = df['Close']
price_corr = prices.corr()
plt.figure(figsize=(10, 8))
sns.heatmap(price_corr, annot=True, cmap='coolwarm', center=0)
plt.title('Price Correlation Heatmap')
plt.show()
これは面白いことにエネルギーセクターがそのほかのものと比べて負の相関があることがわかります。先ほどの一般消費財と一番負の大きな相関を見せていますね。そのままの意味で行くとエネルギーセクターのETF価格が落ちる時は一般消費財の価格が上がり、その逆もまた然り、ということですね。(今回は配当金をリターンに入れれていないのでそこまで含めるとまた結果は変動するものと思われます。)
いずれにせよ、価格の相関関係を分析することにより、特定のセクターが市場の他の部分とどのように相互作用しているかを把握することができました。。高い相関関係が見られるセクターは、市場の特定のトレンドやイベントに対して類似した反応を示す可能性があることがわかりますね。このような分析は、ポートフォリオの多様化戦略を考える上で非常に重要であり、市場の様々な変動に対するリスクを管理するのに役立ちます。
今回もここまで読んでいただきありがとうございました。
colab.research.google.com