【日経平均 vs S&P500】pythonで株価解析と時系列予測をしてみた

エンジニア兼個人投資家のたけです。

株価の推移やリターンについて解析したいと思う方も多いのではないでしょうか。

今回プログラミング言語 python を用いて、日経平均株価とS&P500の株価解析と時系列予想をしてみました。

pythonを用いることで誰でも簡単に株価の解析ができ、応用も効くので初心者には大変おすすめの方法です。

pythonのコードも載せていますので、ぜひ参考にしてください。

使用環境

  • windows 10
  • python 3.7.11
  • jupyter notebook

時系列予想で用いるprophet を動作させるために、 python3.7にしてあります。

ライブラリの読み込み

CODE
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas_datareader.data as web
import datetime
from scipy import stats
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')

日経平均とS&P500のデータの読み込み

今回は1980年3月末~2021年10月6日までのデータを比較します。

株価の取得はdatareader というライブラリを使用しています。

CODE
# 期間設定
start = datetime.datetime(1980,3,31)
end = datetime.datetime(2021,10,6)

# データ取得
df = web.DataReader(['^N225','^GSPC'],'yahoo',start,end)['Adj Close']   # Adj Close :終値

# 系列名変更
df.columns = ['N225','SP500']

株価時系列比較

1980年3月末を100と基準化して比較を行いました。

CODE
# 1980年3月末を100として指数化
df_index = df / df.iloc[0]*100

sns.set_style('whitegrid')
df_index.plot(figsize=(10,5))

実行結果

日経平均とS&P500では大きく株価に差が生じていることが分かります。

日経平均ではこの期間約40年で株価は約6倍になったのに対し、S&P500は約44倍と大きくリターンが違いました。

たけ
たけ

40年前にS&P500を100万円分持っていたら、今は4400万円になっていました。

インデックス投資において長期保有の大切さがよくわかります。

月次収益率の比較

CODE
# 日次データから月次データに変換(月末値)
df_index_m = df_index.resample('M').last()   # resample: 月ごと(M)に集計しなおす   last: 月末

# 収益率に変換
df_r_m = df_index_m.pct_change().dropna()

# 月次収益率をプロット
df_r_m.plot(figsize=(10,5))

実行結果

月次収益率を表示したグラフになりました。

このデータだけをみてもよくわからないので、データを解析していきます。

相関関係を解析

CODE
df_r_m.corr() # 相関関係

実行結果

N225SP500
N2251.0000000.510064
SP5000.5100641.000000

日経平均とS&P500の相関関係は0.51となりました。

相関関係は高くないもののプラスの関係となりました。

たけ
たけ

アメリカ市場の影響が日本市場の株価に影響を与えていると考えれば納得いくね。

年換算の平均リターンと標準偏差

CODE
# 年率換算
r_y_mean = (1+df_r_m.mean())**12 -1
r_y_sd = np.sqrt(12) * df_r_m.std()

pd.DataFrame({'Mean':r_y_mean,
              'Sd':r_y_sd,
              'Mean/Sd': r_y_mean / r_y_sd})

実行結果

meansdmean/sd
N2250.0551180.1948470.282880
SP5000.1068250.1493250.715387

S&P500の方が平均リターンが高く、標準偏差が低いことが分かりました。

また、リターン/リスク(mean/sd)もS&P500の方が高いことが分かります。

日経平均が勝っているところはなさそうですね。

たけ
たけ

S&P500の年間平均リターンが約10%とすごく高いね。

手数料を考慮するとリターンが少し下がるけど、それでも十分好成績でだね。

月次収益率のヒストグラム

HTML
sns.histplot(df_r_m, x='N225', stat='probability', kde=True, 
             bins=50, alpha=0.5, label='N225')
sns.histplot(df_r_m, x='SP500', stat='probability', kde=True, 
             color='orange', bins=50, alpha=0.5, label='SP500')

plt.legend()
plt.xlabel('Monthly Return')

実行結果

月次収益率のヒストグラムを見ても分かるように、S&P500の方がピークが高く、全体的にリターンが高いことが分かります。

日経平均はグラフが広がり、分散が高いことが分かります。

たけ
たけ

グラフはきれいなガウス分布でなく、左右非対称でリターンがマイナス側にグラフが広がっているね。

株価の暴騰は少なく、暴落は多いためでしょうか。

時系列予想

prophetを用いて株価の時系列予測をしてみます。

あくまで時系列予測ですので、大きく外れることも想定されますが、傾向を把握するうえで今後の参考にはなります。

日経平均

CODE
# 期間設定
start = datetime.datetime(1980,3,31)
end = datetime.datetime(2021,10,9)

# データ取得
df = web.DataReader('^N225','yahoo',start,end)
df.head()

df['ds']=df.index
df['y']=df['Adj Close']
df['y'].plot(figsize=(8,4))

実行結果

1980年からの日経平均株価の偏移を表示しました。

この日経平均株価データから今後5年間の株価を予想します。

CODE
from fbprophet import Prophet

# モデル作成
model = Prophet()
model.fit(df)

# 365日*5年分予測
year = 5
future = model.make_future_dataframe(periods=365*year)
forecast = model.predict(future)

# 実行結果のグラフ表示
fig1 = model.plot(forecast, figsize=(8,4))

実行結果

黒線が実際の日経平均株価。青線が予想値、薄く青い範囲が予想の範囲を表しています。

青線の予測では今後も株価は上がると予想されていますが、予想範囲が広く暴落する可能性も占められています。

たけ
たけ

これだけで投資判断はできませんが、予想範囲が広いことは考慮に入れたほうが良いかもね。

S&P500

コードは日経平均の時とほぼ同じなので、早速S&P500の時系列予測をしてみましょう。

CODE
# データ取得
df = web.DataReader('^GSPC','yahoo',start,end)
df.head()

df['ds']=df.index
df['y']=df['Adj Close']

from fbprophet import Prophet

# モデル作成
model = Prophet()
model.fit(df)

# 365日*5年分予測
year = 5
future = model.make_future_dataframe(periods=365*year)
forecast = model.predict(future)

# グラフ表示
fig2 = model.plot(forecast, figsize=(7,4))
plt.xlabel('date')
plt.ylabel('')

実行結果

日経平均と比べてもきれいな右肩上がりを予想しています。

予想範囲も狭く、安心して投資できそうな予想になっています。

たけ
たけ

実際には予想外の事件や災害等により、この予想とは異なる結果になることは十分に考えられます。

この結果を鵜吞みにするのではなく、あくまで投資は自己責任でお願いします

まとめ

日経平均とS&P500の株価指数を比較しました。

比較の結果、過去実績からS&P500の方がよい投資成績を出しており、今後の予想もS&P500が良いことが分かりました。

投資の一つの判断材料になれば嬉しいです。

また、今後も過去の株式データを解析したいと思いますので、解析してほしい銘柄等ございましたら、コメントしていただけると嬉しいです。

参考にこれまで本ブログでpythonを用いて株式データを分析した記事を紹介します。

なお、本ブログのコードは下記を参考にしました。

また、本ブログでは投資初心者向けにインデックス投資をご紹介しています。

本記事で紹介したS&P500もインデックスの一つであり、優良な投資先です。

下記の記事でインデックス投資についてや投資を始める手順を紹介していますので、ぜひ参考にしてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA