こんな悩みにお答えします。
1. Aidemy
・・・AIエンジニアとしてのスキルを身に付けたい。その延長で就職、転職できたら嬉しい方におすすめ。
2.侍エンジニア塾
・・・基礎力と即戦力を身に付けられる、満足度No.1スクール
3. TechAcademy
・・・副業に向けてスキルアップしたい。フリーランスなどを目指している方向け。
4. AIジョブカレッジ
・・・コスパ良く、質の高い講座を受けたい方におすすめ。
本記事の信頼性
現在はデータサイエンティストとして大企業で活動しています。
1.
一般的には、金利と株価は逆相関の関係にあると言われています。
確かに、上図では金利が下がるとNASDAQの株価は上がり、金利が上がるとNASDAQの株価は下がっているように見受けられます。
しかし、すべての時間、すべての株式について成り立つのでしょうか?
今回は株価と金利の関係をデータを基に見ていきます。
2.
- 金利が上がる↑と株価は下がる↓
今回は、上記の関係性を株価と金利の相関係数を算出することにより確認していきます。
ピアソンの相関係数は
$$r=\frac{s_{xy}}{s_{x}s_{y}}$$
$$=\frac{\sum_{i=1}^{n}{(x_i-\overline{x})(y_i-\overline{y})}}{\sqrt{\sum_{j=1}^{n}{(x_j-\overline{x})^2}}\sqrt{\sum_{k=1}^{n}{(y_k-\overline{y})^2}}}$$
ピアソンの相関係数は-1~1の範囲に収まります。
- 1:正の相関(xが増加すればyも増加)
- -1:負の相関(xが増加すればyは減少)
- 0:無相関
となります。
データには外れ値やノイズも含まれているため、ここでは0.7以上で正の相関、-0.7以下で負の相関があると考えることとします。
また、相関関係と因果関係は別物なので混同しないように気を付けましょう!株価と金利の関係は因果関係では?と思われるかもしれませんが、株価の変動は金利以外の要素にも影響されるため、相関関係と言われているのかな、と思います。
3.
ここから、実際に株式と金利データを取得して関係性を確認していきます。
a. 対象データ
今回は、以下のデータを対象に検証を行います。
対象 | コード | 株価/金利 |
金利 | ||
株価(主要指数) | ||
株価(主要指数) | ||
株価(主要指数) | ||
株価(セクター) | ||
株価(セクター) | ||
株価(セクター) | ||
株価(セクター) | ||
株価(セクター) | ||
株価(セクター) | ||
株価(セクター) | ||
株価(セクター) | ||
株価(セクター) | ||
株価(セクター) |
金利データとしては、を利用します。
株式としては、3種の主要指標(S&P500、NASDAQ、ダウ平均)とセクター別の株価を対象とします。
b. 対象期間
対象期間は、2016年1月1日~2022年5月20日とします。
5、6年分のデータを検証すればおおよその傾向は分かるでしょう。一方で、米国株が好調の時期であるため金利が上がっても株価が下がっていない可能性が懸念されます。
c. データ取得
まずはpandas-datareaderを用いてそれぞれのデータを取得します。
>>【Python】初心者必見の株価取得方法~ライブラリ利用~
>>【株式投資】Pythonでスクリーニングする方法
import pandas_datareader.data as web
#期間:2016/1/1~2022/5/20
st = '2016/01/01'
ed = '2022/05/20'
#前項で述べた14種のデータをリスト化
stock = ['^TNX','^GSPC','^IXIC','^DJI',
'^GSPE','^SP500-20','^SP500-30','^SP500-40',
'^SP500-50','^SP500-15','^SP500-25','^SP500-35',
'^SP500-45','^SP500-55']
#調整済みの終値を取得対象とする
data = web.DataReader(stock, 'yahoo',start=st,end=ed)["Adj Close"]
相関関係を算出するために、取得した金利と株価データを整形します。
#欠損値を直前のデータで補完
data = data.fillna(method='ffill')
pandas-datareaderの情報は必ずしも正確ではない場合があり、欠損値が含まれていることもあります。
ピアソンの相関係数の式から分かるように、欠損値があった場合には正しく算出することができなくなります。
したがって、欠損値部分については直前のデータで補完することで対応しています。
pandasのデータフレームを用いることで、相関係数を簡単に求めることができます。
print(data.corr())
#実行結果
Symbols ^TNX ^GSPC ^IXIC ^DJI ... ^SP500-25 ^SP500-35 ^SP500-45 ^SP500-55
Symbols ...
^TNX 1.000000 -0.318989 -0.414227 -0.221968 ... -0.394260 -0.349500 -0.419116 -0.373421
^GSPC -0.318989 1.000000 0.988026 0.980342 ... 0.987584 0.988402 0.990151 0.893752
^IXIC -0.414227 0.988026 1.000000 0.957830 ... 0.994600 0.978798 0.995038 0.860832
^DJI -0.221968 0.980342 0.957830 1.000000 ... 0.963034 0.966437 0.956048 0.893652
^GSPE 0.853554 -0.296352 -0.410216 -0.257346 ... -0.392414 -0.338277 -0.400972 -0.326713
^SP500-20 -0.143751 0.965165 0.932525 0.974270 ... 0.934077 0.931024 0.923813 0.848099
^SP500-30 -0.399567 0.944694 0.921569 0.896936 ... 0.921832 0.945292 0.940703 0.922202
^SP500-40 -0.005384 0.925554 0.872665 0.947673 ... 0.873912 0.886903 0.869384 0.802191
^SP500-50 -0.484290 0.886563 0.901140 0.806378 ... 0.886943 0.859394 0.888789 0.737888
^SP500-15 -0.190781 0.967905 0.944400 0.947811 ... 0.940608 0.940717 0.939162 0.825852
^SP500-25 -0.394260 0.987584 0.994600 0.963034 ... 1.000000 0.976177 0.991520 0.868467
^SP500-35 -0.349500 0.988402 0.978798 0.966437 ... 0.976177 1.000000 0.986532 0.907309
^SP500-45 -0.419116 0.990151 0.995038 0.956048 ... 0.991520 0.986532 1.000000 0.883806
^SP500-55 -0.373421 0.893752 0.860832 0.893652 ... 0.868467 0.907309 0.883806 1.000000
データフレームのカラムごとに相関係数を算出します。よって対角線が同じ数列同士の相関係数となり、すべて1となっています。
それぞれの株価と金利の相関をまとめると以下のとおりです。
株価データ | |
まず、主要3指標を確認すると、すべてマイナスであることから金利が上昇すると株価は下落する傾向にあると分かります。しかし、最も低いNASDAQでも-0.4程度であり明確に負の相関があるとは言えません。また、バリュー株を多く含むダウは金利の動きにはほとんど影響されていないことが確認できます。
セクター別で見ると、ハイテク株を多く含む情報技術セクターや電気通信サービスセクターは-0.4~-0.5であり低い値にはなっていますが負の相関は確認できず意外な結果となりました。その他のセクターを見てもいずれも-0.4~-0.3程度に留まっています。
一方で、エネルギーセクターの相関係数は0.85と唯一正の相関があると言えるでしょう。また、金融セクターはほぼ0となっており相関はないことが分かります。
・対象期間(2016~2022年)においては必ずしも金利と株価に負の相関があるわけではない
・情報技術セクターや電気通信サービスセクターは負の相関に近い
・エネルギーセクターは正の相関がある
・金融セクターには相関がない
最後に時系列データとして株価と金利を可視化することで、相関関係を見ていきます。
import matplotlib.pyplot as plt
for selected_stock in stock[1:]:
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
#2軸グラフの本体設定
ax1.plot(data["^TNX"],color="#f0b2a2", label="金利:^TNX")
ax2.plot(data[selected_stock], label="株価:"+str(selected_stock))
handler1, label1 = ax1.get_legend_handles_labels()
handler2, label2 = ax2.get_legend_handles_labels()
#凡例をまとめて出力する
ax1.legend(handler1 + handler2, label1 + label2, loc=2, borderaxespad=0.)
plt.show()
まずは、NASDAQです。
2019年や2020年、2022年では、株価は金利と逆の動きをしていることが分かります。ただ、直近10年は総じて米国株に投資妙味があったため、金利に多少動きがあったとて株価に大きな影響は与えていません。ピアソンの相関係数からNASDAQと金利に相関関係が見られなかったのはこのことが原因になっていると考えられます。
続いてエネルギーセクターです。
NASDAQと比較し、株価と金利はかなり類似した動きをしていることが見て取れます。このことから金利の変動に合わせてエネルギーセクターに投資することは有効な戦略であると分かります。しかし、コロナショックからの回復を考えると、NASDAQの高騰と比較すると非常に緩やかであることが分かります。つまり、あくまで分散投資を行っておくことが大切ということです。
その他の可視化結果は以下のリンクよりご確認ください。
4. 金利データを株価予測に活かすためには
今回の検証から、金利データを株価予測に活かすことを考える。方法としては以下が一例として挙げられる。
- セクター別の株価予測を行う
- ノイズを含みづらく、予測が容易になる可能性がある(S&P500よりもエネルギーセクターの株価予測の方が容易など)
- 金利の変化率が大きい日(FOMCの開催日)をトレンドの転換点とする
- 金利が大きく変化したポイント(コロナショックなど)では株価も急変しやすい。したがって、金利の変化率が大きい日は株価トレンドの転換点と考えることができる
また、今回は日次データを利用して検証を行いましたが、月次データとして相関を見るなど行うことで一時的な変化を吸収することができ、より正確な株価と金利の関係性を見ることができるかもしれません。
そして、今回の対象期間は米国株が好調であり、買っていれば利益を得ることができた相場でした。したがって、本来であれば50年などの長期スパンで検証を行う必要があったと思われます。
今回は、
しました。Pythonを用いることで、簡単に株価と金利の関係性を確認することができました。ただ、検証を行った2016年以降ではあまり相関は見て取れず、唯一エネルギーセクターの株価には正の相関が見られる結果となりました。
次回は、株価と金利の関係を見ていくことで、株価予測に活かすことも考えていきたいと思います。
>>【Python】Prophetを用いて株価を予測する方法(初心者向け)
・【株式投資】Pythonでスクリーニングする方法
・【Python】【株式投資】TA-Libによるテクニカル指標算出方法(移動平均、ボリンジャーバンド、MACD、RSI)
・【初心者向け】20分でできる!Pythonで銘柄スクリーニング結果をスマホへ通知する方法
・【Python】銘柄スクリーニング結果を定期的に通知する方法(無料)【30分でできる!】
本ブログでは、株式やプログラミングに関する記事を投稿しています。
プログラミング(Python)を学びたい方におすすめの書籍やプログラミングスクール、おすすめの学習方法などをご紹介しておりますのでぜひご覧ください。
は、プログラミングスクールという方法がおすすめです。
私の一押しは『TechAcademy』です。
質問することですぐに分からないところをクリアにできますし、進捗をサポートしてくれるため確実に成長することができます。
無料相談を実施しているため、まずは話を聞いてあなたのスタイルに合っているかどうか確認してみるのが良いと思います。
コメント